目录
1.电机为什么需要驱动板呢?为什么不能用控制器直接控制电机呢?
L298N是常用来驱动小型直流有刷电机(两个)和步进电机(一个)的电机驱动板,其电路原理就是两个H桥电路,控制原理是使用PWM来实现对直流电机的调速,因此需要先补充一下对PWM的知识,可以跳转到以下链接。
1.电机为什么需要驱动板呢?为什么不能用控制器直接控制电机呢?
原因是控制器本身提供的电压不足以让电机运动,因此需要外接一个驱动板来驱动电机运动。
用STM32作为控制器,L298N作为驱动器来驱动小马达(直流有刷电机)的原理图如下:
2.H桥电路介绍
对于需要驱动直流电机这种电流较大负载的控制电路,H桥是最经典的,因其电路形状像字母“H”,故称其为“H桥”。H桥一般由四个MOS管(Q1、Q2、Q3、Q4)作为独立控制的开关元器件组成,不同的开关状态对应的电机状态如下表所示:
电机状态 | 开关状态 |
正转 | Q1、Q4开,Q2、Q3关 |
反转 | Q1、Q4关,Q2、Q3开 |
停止 | Q1、Q3关,Q2、Q4开 |
通常对H桥的控制最常用的是脉冲宽度调制(PWM)。
3.L298N原理介绍
L298N内部电路图如下图所示:
不难看出,其内部电路是由两个H桥组成。ENA和ENB为使能信号,In1和In2为一组逻辑信号,控制OUT1和OUT2这一组输出信号;In3和In4为一组逻辑信号,控制OUT3和OUT4这一组输出信号。通过控制逻辑信号来实现对输出信号的控制,比如电机速度和正反转。
(1)输出A和输出B用来接两个直流有刷电机,对于逻辑输入,应当接在控制板上。In1和In2控制输出A,In3和In4控制输出B。通道使能的跳线帽默认插在上面,保持不动。如果拔掉,认为不使能。
(2)对于板载5V使能处的跳线帽,若插在上面,则5V供电可以用来给控制板供电;如果拔掉,才能用来对驱动板实现5V供电。
(3)供电问题:输入电源为7~12V时,5V供电处可以接控制板,用来给控制板供电,也可以不接;输入电源为大于12V时,需要拔掉电源旁的跳线帽(板载5V使能),5V供电处需要接入5V的电压。
4.实物接线图
通过对L298N原理分析,不难得出逻辑信号接控制板,输出信号接电机。注意:控制板和驱动板要实现共地,目的是使电压有参考电平。
使用两节3.7V电池来供电,电池正极接在+12V供电,负极接GND。使用的控制板是正点原子的探索者,主控芯片是STM32F407ZGT6。因为使用一个马达,故只需要一组控制信号控制一路输出即可。因此,In1和In2接在控制板的PA0和PA6引脚,OUT1接马达的两根线。因为,控制板自带供电,所以不需要控制板提供5V供电,所以只需要将控制板和驱动板的GND连接在一起,给其一个参考电平。
控制问题:
电机状态 | IN1 | IN2 | |
正转 | 1 | 0 | |
反转 | 0 | 1 | |
停止 | 等待 | 0 | 0 |
刹车 | 1 | 1 |
5.CUBEMX配置
(1)使能外部高速时钟
(2)完成时钟树配置
(3)设置PWM(也可以在TIM2中开启两个通道)
(4)生成代码(GENERATE CODE)
6.代码
int main(void)
{
/* USER CODE BEGIN 1 */
/* USER CODE END 1 */
/* MCU Configuration--------------------------------------------------------*/
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
HAL_Init();
/* USER CODE BEGIN Init */
/* USER CODE END Init */
/* Configure the system clock */
SystemClock_Config();
/* USER CODE BEGIN SysInit */
/* USER CODE END SysInit */
/* Initialize all configured peripherals */
MX_GPIO_Init();
MX_TIM2_Init();
MX_TIM3_Init();
/* USER CODE BEGIN 2 */
HAL_TIM_PWM_Start(&htim2,TIM_CHANNEL_1);
HAL_TIM_PWM_Start(&htim3,TIM_CHANNEL_1);
/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
__HAL_TIM_SET_COMPARE(&htim2,TIM_CHANNEL_1,5000);
HAL_Delay(2000);
__HAL_TIM_SET_COMPARE(&htim2,TIM_CHANNEL_1,0);
HAL_Delay(1000);//慢速正转2秒,等待1秒
__HAL_TIM_SET_COMPARE(&htim3,TIM_CHANNEL_1,20000);
HAL_Delay(2000);
__HAL_TIM_SET_COMPARE(&htim3,TIM_CHANNEL_1,0);
HAL_Delay(1000);//快速反转2秒,等待1秒
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
}
/* USER CODE END 3 */
}
7. 演示视频
STM32控制L298N驱动小马达