L298N驱动俩路电机按键控制正反转

这篇具有很好参考价值的文章主要介绍了L298N驱动俩路电机按键控制正反转。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一个L298N是带有俩路驱动电路的,就是可以驱动俩个电机同时去转动,在硬件部分因为以前弄小车的时候已经组装好了,一路驱动去控制俩个电机,俩路驱动就是控制四个电机,做的是四轮四驱的小车,嫌麻烦就没有去拆改装了。

L298N驱动俩路电机按键控制正反转

博主主页里面有介绍过L298N的使用了,为了避免一些小伙伴不明白还是重新介绍一下,方便大家的使用。

一、L298N的结构介绍示意图如下

L298N驱动俩路电机按键控制正反转

1.12v电压输入,GND供地端,5v我自己认为是输出一个5v的接口但上一节的时候不是很明白就没有去作过多的描述,现在可以确定了可以输出一个5v供电。

L298N驱动俩路电机按键控制正反转

当vcc端接入一个7~12v的电压时,正5v不需要接电压,GND接单片机的GND,可以输出一个5v电压给单片机使用。

2.使能端,L298N有俩个使能端口,分别是ENA和ENB,用一个跳线帽接在板载5v上面,逻辑输入数字信号0,1就可以在相应得输出端输出信号,因为在只有数字信号0,1所以并不能实现电机的调速,只能实现电机的左右转。调速就把跳线帽拔下来,用一个PWM信号脉冲波接着使能端,也就是ENA或ENB,这样就能通过控制PWM的占空比来实现电机的调速。

3逻辑输入端口,IN1-IN4四个输入口,对应着相应的输出端口,给0,1就能控制电机的正反转

4.输出口,接电机的正反极,不分正负极随便接都行。

二、L298N的使用说明:

直流电机的驱动:

L298N能输出俩路控制俩个电机转动,使能端ENA和ENB高电平有效。

如图所示真值表:

L298N驱动俩路电机按键控制正反转

  我们需要对电机进行调速,需要设置IN1,IN2确定电机的转动方向,然后拔掉跳线帽接上PWM信号。调整占空比就可以实现电机的调速,注意当使能端信号为0时电机处于停止状态,当使能端为1,逻辑输入全部为0或1的时候电机制动,会阻止电机转动,只有逻辑输入为01或10的时候电机才会正常转动。
 

 三、基于STM32的部分代码

1.PWM初始化,因为是要驱动俩路电机,所以初始化当中要使能俩路通道,不懂得小伙伴可以去主页看一下有讲。在实验中我们初始化了四路通道,任选其中俩路都是可以的。

定时器2初始化

// 通用定时器2中断初始化
// 这里时钟选择APB1的2倍,而APB1为36M
// arr自动重装值
// psc时钟分频数
void TIM2_Int_Init(u16 arr,u16 psc)
{
  TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;

	RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE); // 时钟使能

	TIM_TimeBaseStructure.TIM_Period = arr; //  自动重装值
	TIM_TimeBaseStructure.TIM_Prescaler =psc; // 时钟分频数
	TIM_TimeBaseStructure.TIM_ClockDivision = 0; // 设置时钟分割:TDTS = Tck_tim
	TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  // 向上计数
	TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure); //时候基数单位 

	TIM_Cmd(TIM2, ENABLE);  //使能
							 
}

PWM初始化 

void TIM2_PWM_Init(u16 arr,u16 psc)
{
	 GPIO_InitTypeDef GPIO_InitStructure;                
	 TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;       
	 TIM_OCInitTypeDef  TIM_OCInitStructure;               //定义结构体
	
	 RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);  //使能定时器3时钟
     RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB  | RCC_APB2Periph_AFIO| 
     RCC_APB2Periph_GPIOA, ENABLE); //使能GPIO外设和AFIO复用功能模块时钟

     GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE);
	 GPIO_PinRemapConfig(GPIO_PartialRemap1_TIM2 , ENABLE); //Timer2部分重映射


     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;
	 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;  //复用推挽输出
	 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	 GPIO_Init(GPIOB, &GPIO_InitStructure);//初始化GPIO

     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_15; //TIMx_CHx
     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;  //复用推挽输出
     GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
     GPIO_Init(GPIOA, &GPIO_InitStructure);
	
 
    TIM_TimeBaseStructure.TIM_Period = arr;//下一个更新事件载入活动的自动重装载寄存器周期值
    
     TIM_TimeBaseStructure.TIM_Prescaler = psc; // 预分频值,不分频
     
     TIM_TimeBaseStructure.TIM_ClockDivision = 0;  //设置时钟分割
     TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //向上计数模式
 
     TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);// 初始化时钟基数单位
   
 
	 TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2;   //脉宽调制模式2
 	 TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;       // 输出极性为高    
     TIM_OCInitStructure.TIM_OutputState=	TIM_OutputState_Enable;   //比较输出使能
     TIM_OCInitStructure.TIM_Pulse = 0; //设置待装入捕获比较寄存器的脉冲值

    //根据TIM_OCInitStruct中指定的参数初始化外设TIMx
     TIM_OC1Init(TIM2, &TIM_OCInitStructure);  
     TIM_OC2Init(TIM2, &TIM_OCInitStructure);  //
     TIM_OC3Init(TIM2, &TIM_OCInitStructure);  //
     TIM_OC4Init(TIM2, &TIM_OCInitStructure);  //
    
 
     //使能预装载寄存器
     TIM_OC1PreloadConfig(TIM2, TIM_OCPreload_Enable);
     TIM_OC2PreloadConfig(TIM2, TIM_OCPreload_Enable);
     TIM_OC3PreloadConfig(TIM2, TIM_OCPreload_Enable);
     TIM_OC4PreloadConfig(TIM2, TIM_OCPreload_Enable);
	
	 TIM_ARRPreloadConfig(TIM2, ENABLE);      //使能自动装载允许位
 
	 TIM_Cmd(TIM2, ENABLE);   //使能定时器
 
}

2.电机初始化,采用的是直流减速电机不带编码器。

void motro_Init(void)
{
 
 GPIO_InitTypeDef  GPIO_InitStructure;
 	
 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOF, ENABLE);	 //使能GPIOF端口
	
 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4| GPIO_Pin_5| GPIO_Pin_6| GPIO_Pin_7;//端口设置			 
 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; 		 //推挽输出
 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;		 //设置速度
 GPIO_Init(GPIOF, &GPIO_InitStructure);					 //初始化GPIOF
 GPIO_SetBits(GPIOF,GPIO_Pin_4| GPIO_Pin_5| GPIO_Pin_6| GPIO_Pin_7);						 //输出高电平
}
 

3.按键初始化

void KEY_Init(void) //IO初始化
{ 
 	GPIO_InitTypeDef GPIO_InitStructure;
 
 	//使能 PORTA,PORTE时钟
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOE,ENABLE);

	GPIO_InitStructure.GPIO_Pin  = GPIO_Pin_4|GPIO_Pin_3;//KEY0-KEY1
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //上拉
 	GPIO_Init(GPIOE, &GPIO_InitStructure);//初始化io

	GPIO_InitStructure.GPIO_Pin  = GPIO_Pin_0;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD; //下拉
	GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化io

}

3.1.按键扫描函数

u8 KEY_Scan(u8 mode)
{	 
	static u8 key_up=1;//按键松开标志
	if(mode)key_up=1;  //支持连按	  
	if(key_up&&(KEY0==0||KEY1==0||WK_UP==1))
	{
		delay_ms(10);//去抖动
		key_up=0;
		if(KEY0==0)return KEY0_PRES;
		else if(KEY1==0)return KEY1_PRES;
		else if(WK_UP==1)return WKUP_PRES;
	}else if(KEY0==1&&KEY1==1&&WK_UP==0)key_up=1; 	    
 	return 0;// 无按键按下
}

4.主函数

 int main(void)
{ 
  u8 key; 
	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置系统优先级分组2
  delay_init();  //延时函数初始化
	uart_init(115200);//初始串口波特率为115200
  KEY_Init();  //按键初始化
	motro_Init();//电机初始化
	TIM2_PWM_Init(899,0);	//PWM初始化  
   while(1) //ʵÏֱȽÏÖµ´Ó0-300µÝÔö£¬µ½300ºó´Ó300-0µÝ¼õ£¬Ñ­»·
	{
 	 	key=KEY_Scan(0);		//得到键值
	   	if(key)
		{						   
			switch(key)
			{				 
				case KEY0_PRES:	//控制电机翻转
				  F4=0;
				  F5=0;
				  F6=1;  
				  F7=1;
					break;
				case KEY1_PRES:	//
				  F4=1;
				  F5=1;
				  F6=0;  
				  F7=0;
					break;
			}
		}else delay_ms(10); 	 
        //设置占空比
		TIM_SetCompare1(TIM2,350);
        TIM_SetCompare2(TIM2,350);       
        TIM_SetCompare3(TIM2,350);         
        TIM_SetCompare4(TIM2,350);  
	}
}

四、实验效果:

PWM控制小车前后转

拍的不是很好,将就着看吧哈哈,需要完整工程文件的点赞加收藏评论区留邮箱,创作不易。文章来源地址https://www.toymoban.com/news/detail-435233.html

到了这里,关于L298N驱动俩路电机按键控制正反转的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • l298n电机驱动模块驱动直流电机(佛科院——深夜学习)

    目录 一、为什么不能直接用单片机IO口驱动电机,要用电机驱动模块? 二、使用步骤: 1.L298n各引脚作用: 2.推荐的供电方式: 3.推荐的控制方式: 由于单片机内部结构原因,其等效内阻极大, 导致输出电流极小,尽管I0口输出高电平为5V,但输出功率极小,无法满足直接电机

    2023年04月23日
    浏览(38)
  • L298N电机驱动板的使用说明

    目录 一、为什么要用L298N驱动板来驱动电机 二、L298N引脚功能图 三、供电方式 1、接入5V电源 2、接入7~12V电源 3、接入大于12V电源 四、L298N的驱动方式 你可能有这个疑惑,电机是4-6V供电的,单片机的输出也是5V输出,为什么不直接用单片机来供电驱动电机呢?这是因为单片机

    2024年02月02日
    浏览(26)
  • L298N双路电机驱动模块使用指南

    哦吼,这个模块上手很快!!! L298N,是一款接受高电压的电机驱动器,直流电机和步进电机都可以驱动。一片驱动芯片可同时控制两个直流减速电机做不同动作,在6V到46V的电压范围内,提供2安培的电流,并且具有过热自断和反馈检测功能,可对电机进行直接控制,通过主

    2024年02月07日
    浏览(34)
  • L298N 直流电机驱动模块与 Arduino

    原文地址 L298N 电机驱动器可以控制两个直流电机的速度和旋转方向。 此外,它还可以控制双极步进电机,例如NEMA 17。如果您想了解更多信息,请查看本教程。 L298N电机驱动器和Arduino控制步进电机:Control Stepper Motor with L298N Motor Driver Arduino (lastminuteengineers.com) 只有当我们可以

    2024年02月02日
    浏览(37)
  • ESP32设备驱动-直流电机与L298N电机驱动器

    在本文中,我们将介绍如何使用ESP32通过L298N电机驱动器驱动直流电机。 L298N 电机驱动器模块非常易于与微控制器一起使用,而且相对便宜。 它被广泛用于控制机器人,因为我们可以一次连接多达四个电机,但如果我们还想控制速度和方向,那么它允许连接两个电机。 因此,

    2024年02月13日
    浏览(37)
  • 最全H桥电机驱动模块L298N原理及应用

    通常,H 桥是一个相当简单的电路,包含四个开关元件,负载位于中心,采用类似 H 的配置。 开关元件 (Q1…Q4) 通常是双极或 FET 晶体管,在某些高压应用中为 IGBT。也存在集成解决方案,但开关元件是否与其控制电路集成与本讨论的大部分内容无关。二极管 (D1…D4) 称为钳位

    2024年02月08日
    浏览(26)
  • STM32之L298N控制130电机+PWM调速

    左右两边的OUT0~OUT4接130电机两端; 中间蓝色端口接电源, 注意:两个电源口和一个接地口都要接上!!!!!!!! 偏左一些的排针用杜邦线接上io口,如果需要PWM控速的话,ENA和ENB的跳线帽需要拔掉, 然后用两根杜邦线分别连到一个io口,给高电平使能,如果是低电平则

    2024年02月04日
    浏览(32)
  • 《树莓派项目实战》第十五节 使用L298N驱动板模块驱动双极42步进电机

    目录 15.1 双极步进电机引脚介绍 15.2 连接到树莓派 15.3 编写代码驱动步进电机  在本节,我们将学习如何使用L298N驱动板驱动一个

    2024年02月13日
    浏览(34)
  • 一文搞懂如何使用STM32驱动直流电机(普通PWM输出和L298N、高级定时器输出带死区双通道互补PWM和IR2110S及自举电路、H桥电路和电机正反转)

    笔者从开始接触嵌入式单片机开始,就和驱动电机相伴而走。从最开始的直接买L298N驱动模块直接驱动直流电机,到现在自己设计PCB电路板驱动直流电机,可以说是和电机驱动共同成长了。现在笔者将这一过程的收获记录下来,希望对大家有所帮助。 不用详细了解L298N芯片和

    2024年02月02日
    浏览(36)
  • 直流减速编码电机的使用(STM32f103c8t6)L298N电机驱动模块

    直接减速电机就是在直流电机上加上霍尔编码器,霍尔编码器可用于电机转动的测速,A、B相会产生相位相差90°的方波信号。stm32可以使用硬件资源或者软件模拟来捕获编码器信号。这里我介绍的是stm32自带的编码器模式来使用直流减速电机。 以下是直流减速电机的商品图 ​

    2024年02月13日
    浏览(52)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包