wordpress改中文,网站排名优化培训,国内金融行业网站开发,wordpress 查询页面今天开始着手做智能小车的项目了 在智能小车或机器人项目中#xff0c;我们经常会听到一个词叫 “H 桥电机驱动”#xff0c;尤其是常见的 L298N 模块#xff0c;就是基于“双 H 桥”原理设计的。那么#xff0c;“H 桥”到底是什么#xff1f;为什么要用“双 H 桥”来驱动…今天开始着手做智能小车的项目了 在智能小车或机器人项目中我们经常会听到一个词叫 “H 桥电机驱动”尤其是常见的 L298N 模块就是基于“双 H 桥”原理设计的。那么“H 桥”到底是什么为什么要用“双 H 桥”来驱动电机。今天我们就来深入讲解一种应用极为广泛的电机驱动模块——L298N了解它的工作原理、引脚功能、接线方式及实际应用。
一、什么是 L298N
L298N 是一款 双 H 桥电机驱动芯片内部集成了两个全桥驱动器能同时控制两个直流电机或一个步进电机。由于其稳定性好、价格低、接线方便成为 Arduino、STM32、51 单片机等平台中最常见的电机驱动解决方案之一。 二.模块引脚与结构详解
L298N 模块通常包括如下接口
1. 电源接口 引脚 功能描述 VCC 给电机供电5~35V GND 地线逻辑地与电源地共用 5V 给控制逻辑供电或供外部单片机使用视跳帽而定 注意VCC 是电机电源输入不是控制电压 2. 控制引脚 引脚 功能 IN1/IN2 控制电机 A 正反转 IN3/IN4 控制电机 B 正反转 ENA 使能电机 A同时用于 PWM 调速 ENB 使能电机 B同时用于 PWM 调速
3. 输出接口 引脚 功能说明 OUT1/OUT2 电机 A 输出 OUT3/OUT4 电机 B 输出 三, H 桥原理简要回顾
H 桥是一种电路结构用于改变电流方向以实现直流电机的正转、反转、刹车、停止等控制。
一个 H 桥控制一个电机的两个方向两组 H 桥可控制两个电机因此称为“双 H 桥”。 IN1 IN2 电机状态 高 低 正转 低 高 反转 高 高 刹车 低 低 停止断电 ENA 和 ENB 输入 PWM 信号可以调节电机转速。 四接线实例L298N STM32F103 一、硬件连接说明以 STM32F103 为例 L298N 引脚 功能 STM32 引脚 说明 IN1 电机A控制 PA0 GPIO 输出 IN2 电机A控制 PA1 GPIO 输出 ENA 电机A调速 PA2 (TIM2_CH3) PWM 输出 IN3 电机B控制 PA3 GPIO 输出 IN4 电机B控制 PA4 GPIO 输出 ENB 电机B调速 PA5 (TIM2_CH1) PWM 输出 GND 地 GND 必须共地 二、GPIO 初始化代码 void L298N_GPIO_Init(void){ RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.GPIO_Pin GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_3 | GPIO_Pin_4; GPIO_InitStructure.GPIO_Mode GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed GPIO_Speed_50MHz; GPIO_Init(GPIOA, GPIO_InitStructure);} 三、PWM 初始化使用 TIM2 void PWM_Init(void){ RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.GPIO_Pin GPIO_Pin_2 | GPIO_Pin_5; // PA2 - CH3, PA5 - CH1 GPIO_InitStructure.GPIO_Mode GPIO_Mode_AF_PP; GPIO_InitStructure.GPIO_Speed GPIO_Speed_50MHz; GPIO_Init(GPIOA, GPIO_InitStructure); TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; TIM_OCInitTypeDef TIM_OCInitStructure;// 设置计数频率为 1MHzPWM频率为1KHz TIM_TimeBaseStructure.TIM_Period 1000 - 1; // ARR TIM_TimeBaseStructure.TIM_Prescaler 72 - 1; // PSC (72MHz/721MHz) TIM_TimeBaseStructure.TIM_ClockDivision TIM_CKD_DIV1; TIM_TimeBaseStructure.TIM_CounterMode TIM_CounterMode_Up; TIM_TimeBaseInit(TIM2, TIM_TimeBaseStructure); TIM_OCInitStructure.TIM_OCMode TIM_OCMode_PWM1; TIM_OCInitStructure.TIM_OutputState TIM_OutputState_Enable; TIM_OCInitStructure.TIM_OCPolarity TIM_OCPolarity_High;// CH1 - PA5 - ENB TIM_OC1Init(TIM2, TIM_OCInitStructure); TIM_OC1PreloadConfig(TIM2, TIM_OCPreload_Enable);// CH3 - PA2 - ENA TIM_OC3Init(TIM2, TIM_OCInitStructure); TIM_OC3PreloadConfig(TIM2, TIM_OCPreload_Enable); TIM_Cmd(TIM2, ENABLE);} 四、电机控制函数 // 电机A方向控制void MotorA_Dir(uint8_t dir){if (dir) { GPIO_SetBits(GPIOA, GPIO_Pin_0); GPIO_ResetBits(GPIOA, GPIO_Pin_1); }else { GPIO_ResetBits(GPIOA, GPIO_Pin_0); GPIO_SetBits(GPIOA, GPIO_Pin_1); }}// 电机B方向控制void MotorB_Dir(uint8_t dir){if (dir) { GPIO_SetBits(GPIOA, GPIO_Pin_3); GPIO_ResetBits(GPIOA, GPIO_Pin_4); }else { GPIO_ResetBits(GPIOA, GPIO_Pin_3); GPIO_SetBits(GPIOA, GPIO_Pin_4); }}// 电机A设置速度0~1000void MotorA_SetSpeed(uint16_t speed){ TIM_SetCompare3(TIM2, speed); // TIM2_CH3 - ENA}// 电机B设置速度0~1000void MotorB_SetSpeed(uint16_t speed){ TIM_SetCompare1(TIM2, speed); // TIM2_CH1 - ENB} 五、主函数调用示例 int main(void){ L298N_GPIO_Init(); PWM_Init(); while (1) { // 电机A正转速度800 MotorA_Dir(1); MotorA_SetSpeed(800); // 电机B反转速度500 MotorB_Dir(0); MotorB_SetSpeed(500); Delay_ms(2000); // 停止 MotorA_SetSpeed(0); MotorB_SetSpeed(0); Delay_ms(1000); }} 五、总结
L298N 电机驱动模块是嵌入式开发中最经典的驱动方案之一尤其适用于智能小车、遥控车、迷你机械臂等项目。虽然存在一定局限但其稳定性、易用性和教学价值依旧使它成为初学者和高校课程中的首选模块。
如果你正在使用 STM32、Arduino、51 单片机等平台进行小车开发掌握 L298N 模块的使用将为你打下坚实的控制基础。