使用L298N电机驱动的简单指南

一、常见L298N可以干嘛的简单介绍

制作一个智能循迹或者避障小车往往需要到驱动,而对于小白来说我们常用到的驱动往往为l298n和tb6612,这里就介绍常用l298n驱动的使用方法,仅供新手小白快速学习上手使用l298n驱动。

二、L298N模块的使用

如图所示(该图来自淘宝商家图片)

1、输出A接电机的正负极,输出B同理,如若正负极接反会使电机反转。如果为4轮小车,可以左边两个轮子串联在一起,当作一个轮子。右边同理。

2、板载5v使能的跳线帽要接上,一般在商家买回来的l298n模块都是接上了的

3、12v供电接电源的正极!供电GND(可以暂时简单理解为负极或者接地)接电源的负极!切记勿接错,接错l298n模块很容易烧毁的!

4、5v供电,可输出5v的电压,如果降压模块有限,可以使用它来给单片机供电,可以接到单片的 5v供电中,但切记一定要在单片机的GND上接回到l298n的GND上,也就是说如果你用l298n 的5v给单片机供电,在上图的(供电GND)中就要接两条线,一条是电源负极,一条是单片机 GND。

5、逻辑输入,这里有4个接线排针,从左到右为IN1 IN2 IN3 IN4,左边两个对应左边输出A,有边两个对应右边输出B,接到单片机的IO口上,如果IN1设置为高电平,IN2设置为低电平左边的电机正转,反之若IN1为低电平,IN2为高电平则反转。同理可知,IN3为高电平,IN4为低电平为右边电机正转,反之,IN3低,IN4高为反转。设置IN为高低电平可通过单片机代码设置IO口的高低来实现,如若是测试电机是否坏,可直接短接3.3v电源与GND,电机会转。

6、通道A使能和通道B使能,这里可以把跳线帽拔了(购买时是插着的)接到单片机代码配置的pwm通道上,用来输出pwm波。如果还没学到可以去学一下pwm波的输出,这里就不多讲了。pwm可以用来控制电机的运行速度。跳线帽拔了接一条线就行,比如左边跳线帽拔了接下面代码配置的PA0就行。右边同理。

7、最后是小博主的最后一点提醒,这个模块对新手很容易烧坏!如果是新手小白,在接电前一定要注意接线是否接对,特别是GND那里。(希望看到这篇文章的你不会烧(手动狗头))

三、stm32f103c8t6代码部分

电机初始化io口部分,不要一味地复制粘贴喔,首先还是要理解代码意思的。

void Motor_Init(void)
{
	GPIO_InitTypeDef GPIO_InitStructure;//定义一个结构体变量GPIO_InitStructure
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);//使能时钟
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15;//确定哪一个io口
	GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;//设置为推挽输出模式
	GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;//io口速度为50hz
	GPIO_Init(GPIOB,&GPIO_InitStructure);//GPIOB.12初始化函数
	
}

pwm部分


//PWM输出初始化
//arr:自动重装值   899   //可在函数声明写入口参数
//psc:时钟预分频数  0
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);// APB1,TIM2
 	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA , ENABLE);  //使能GPIO外设时钟使能
	                                                                     	
   //设置该引脚为复用输出功能,输出TIM2 CH1的PWM脉冲波形
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1; //TIM_CH1  TIM_CH2
	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; //设置在下一个更新事件装入活动的自动重装载寄存器周期的值	 80K
	TIM_TimeBaseStructure.TIM_Prescaler =psc; //设置用来作为TIMx时钟频率除数的预分频值  不分频
	TIM_TimeBaseStructure.TIM_ClockDivision = 0; //设置时钟分割:TDTS = Tck_tim
	TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  //TIM向上计数模式
	TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure); //根据TIM_TimeBaseInitStruct中指定的参数初始化TIMx的时间基数单位

	TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2; //选择定时器模式:TIM脉冲宽度调制模式2
	TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //比较输出使能
	TIM_OCInitStructure.TIM_Pulse = 0; //设置待装入捕获比较寄存器的脉冲值
	TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //输出极性:TIM输出比较极性高
	
	TIM_OC1Init(TIM2, &TIM_OCInitStructure);  //根据TIM_OCInitStruct中指定的参数初始化外设TIMx
	TIM_OC2Init(TIM2, &TIM_OCInitStructure); 

    TIM_CtrlPWMOutputs(TIM2,ENABLE);	//MOE 主输出使能	

	TIM_OC1PreloadConfig(TIM2, TIM_OCPreload_Enable);  //CH1预装载使能	 
	TIM_OC2PreloadConfig(TIM2, TIM_OCPreload_Enable);  //CH2预装载使能	 
	
	TIM_ARRPreloadConfig(TIM2, ENABLE); //使能TIMx在ARR上的预装载寄存器
	
	TIM_Cmd(TIM2, ENABLE);  //使能TIM2
}

最后差不多了,关注博主,以简单粗暴的方式分享学习,欢迎批评改正,如有侵权联系删除。

物联沃分享整理
物联沃-IOTWORD物联网 » 使用L298N电机驱动的简单指南

发表评论