心血来潮更新一下博客,手机里有好多博客草稿没发,过段时间我会整理一下,然后全部发上来的。 本篇我们来介绍一下电机驱动模块之L298N。
首先L298N 是一种双H桥电机驱动芯片,其中每个H桥可以提供2A的电流,功率部分的供电电压范围是2.5-48v,逻辑部分5v供电,接受5vTTL电平。一般情况下,功率部分的电压应大于6V否则芯片可能不能正常工作。 对于这款L298N模块的应用的话,在智能小车上使用的比较的多,毕竟便宜嘛!
如果你是打算利用L298N模块进行智能小车实验的话,我这边有几点心得给你们分享,首先IN1,IN2,IN3,IN4的电平变化还是有一点讲究的,高低电平能够实验不同的电机正反转,也就是实现了小车的前进后退,当然你还可以实现左转弯右转弯。这只是简单的通过高低电平来实现的。
还有一种稍微复杂一点点,就是利用PWM脉冲宽度调制来实现前进后退转弯的,这一种的优点就是能够很方便的控制你小车的速度,不至于咻的一下溜走了,方便掌控。 那废话不多说,直接开始L298N模块的相关编程吧。
老样子,我们如果要进行相关的电机驱动编程,一些步骤还是少不了的。 1:进行L298N的GPIO初始化配置 2:根据实际使用需要来进行高低电平的变化 3:进行定时器的设置即PWM调制(想使用PWM脉冲宽度调制的可以参考) 现在我以我曾经做过的智能小车的L298N电机驱动代码举例子 采用简单的高低电平的方法进行电机模块的驱动
采用PWM脉冲宽度调制的方法
void TIM4_PWM_Motor(unsigned int arr,unsigned int psc) { GPIO_InitTypeDef GPIO_InitStuct; TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStuct; TIM_OCInitTypeDef TIM_OCInitStuct; RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB, ENABLE); GPIO_InitStuct.GPIO_Pin=GPIO_Pin_7; //左电机控制 GPIO_InitStuct.GPIO_Mode=GPIO_Mode_Out_PP; GPIO_InitStuct.GPIO_Speed=GPIO_Speed_50MHz; GPIO_Init(GPIOB, &GPIO_InitStuct); GPIO_InitStuct.GPIO_Pin=GPIO_Pin_8; //左电机PWM GPIO_InitStuct.GPIO_Mode=GPIO_Mode_AF_PP; GPIO_InitStuct.GPIO_Speed=GPIO_Speed_50MHz; GPIO_Init(GPIOB, &GPIO_InitStuct); GPIO_InitStuct.GPIO_Pin=GPIO_Pin_9; //右电机PWM GPIO_InitStuct.GPIO_Mode=GPIO_Mode_AF_PP; GPIO_InitStuct.GPIO_Speed=GPIO_Speed_50MHz; GPIO_Init(GPIOB, &GPIO_InitStuct); GPIO_InitStuct.GPIO_Pin=GPIO_Pin_4; //右电机方向控制 GPIO_InitStuct.GPIO_Mode=GPIO_Mode_Out_PP; GPIO_InitStuct.GPIO_Speed=GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStuct); TIM_TimeBaseInitStuct.TIM_ClockDivision=0; TIM_TimeBaseInitStuct.TIM_CounterMode=TIM_CounterMode_Up; TIM_TimeBaseInitStuct.TIM_Period=arr; TIM_TimeBaseInitStuct.TIM_Prescaler=psc; TIM_TimeBaseInit(TIM4, &TIM_TimeBaseInitStuct); TIM_OCInitStuct.TIM_OCMode = TIM_OCMode_PWM2; TIM_OCInitStuct.TIM_OutputState = TIM_OutputState_Enable; TIM_OCInitStuct.TIM_Pulse = 0; TIM_OCInitStuct.TIM_OCPolarity = TIM_OCPolarity_High; TIM_OC3Init(TIM4, &TIM_OCInitStuct); TIM_OC4Init(TIM4, &TIM_OCInitStuct); TIM_CtrlPWMOutputs(TIM4,ENABLE); TIM_OC3PreloadConfig(TIM4, TIM_OCPreload_Enable); TIM_OC4PreloadConfig(TIM4, TIM_OCPreload_Enable); TIM_Cmd(TIM4, ENABLE); }