电机驱动基础
电机驱动基础
- 一,电机的精确控制
- 二,PWM基础
- 1,占空比(Duty Cycle):
- 2,PWM频率:
- 3,STM32中PWM实现
- 4,PWM参数选择技巧
- 三,电机驱动系统
- 1,电机驱动系统的组成
- 2,驱动芯片的必要性
- 四,开环控制和闭环控制
- 1,开环控制 - 简单但不精确
- 2,闭环控制 - 复杂但精确
一,电机的精确控制
电机控制技术让我们能够将数字世界的"想法"转化为物理世界的"行动"。
观察一下你身边的智能设备(扫地机器人、无人机、3D打印机等),想想它们是如何实现精确运动控制的?
扫地机器人:使用编码器电机控制移动,通过轮速差实现转向,激光雷达配合电机实现精确导航和路径规划。
无人机:四个无刷电机分别控制,通过调节不同电机的转速实现前后左右和旋转运动,电机响应速度直接影响飞行稳定性。
3D打印机:X、Y、Z轴使用步进电机实现精确定位,挤出机使用直流电机控制材料供给,每一层的精度都依赖电机的准确控制。
核心作用:电机控制技术是这些设备的"肌肉系统",将数字指令转化为精确的物理运动,是实现智能化的关键技术基础。
二,PWM基础
PWM(脉冲宽度调制)是一种通过改变脉冲宽度来控制平均功率的技术。在电机控制中,PWM是实现速度调节的核心方法。
1,占空比(Duty Cycle):
高电平时间占整个周期的百分比
0% 占空比 = 电机停止
50% 占空比 = 电机半速运行
100% 占空比 = 电机全速运行
2,PWM频率:
PWM信号的重复频率
太低(<100Hz):电机会产生明显的振动和噪音
适中(1-20kHz):平衡控制精度和开关损耗
太高(>50kHz):开关损耗增大,效率降低
3,STM32中PWM实现
// 1. 定时器PWM初始化(在CubeMX中配置后自动生成)
void MX_TIM1_Init(void) {htim1.Instance = TIM1;htim1.Init.Prescaler = 72-1; // 72MHz/72 = 1MHzhtim1.Init.CounterMode = TIM_COUNTERMODE_UP;htim1.Init.Period = 1000-1; // 1MHz/1000 = 1kHz PWMhtim1.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;HAL_TIM_PWM_Init(&htim1);
}// 2. 启动PWM输出
void Motor_PWM_Start(void) {HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1);
}// 3. A4950电机驱动控制函数(-100到+100对应反转到正转)
int8_t Motor_SetSpeed(Motor_t* motor, int8_t speed) {// 参数和速度范围检查if (motor == NULL || speed < -100 || speed > 100) {return -1; // 参数错误}// A4950控制逻辑:if (speed == 0) {// 停止:DIR=0, PWM=0HAL_GPIO_WritePin(motor->hw.dir_port, motor->hw.dir_pin, GPIO_PIN_RESET);__HAL_TIM_SET_COMPARE(motor->hw.htim, motor->hw.channel, 0);} else if (speed > 0) {// 正转:DIR=0, PWM=速度值HAL_GPIO_WritePin(motor->hw.dir_port, motor->hw.dir_pin, GPIO_PIN_RESET);__HAL_TIM_SET_COMPARE(motor->hw.htim, motor->hw.channel, speed);} else {// 反转:DIR=1, PWM=100+负数值HAL_GPIO_WritePin(motor->hw.dir_port, motor->hw.dir_pin, GPIO_PIN_SET);__HAL_TIM_SET_COMPARE(motor->hw.htim, motor->hw.channel, 100 + speed);}return 0; // 成功
}
4,PWM参数选择技巧
频率选择:电机PWM频率通常选择1-20kHz,既避免听觉噪音,又保证控制精度
分辨率选择:1000级分辨率(0-999)通常足够,提供0.1%的控制精度
死区时间:对于H桥驱动,需要设置死区时间防止上下管同时导通
为什么PWM能够控制电机速度?如果PWM频率太低会发生什么? 试想一下,如果用手动开关来快速开关电机电源,会是什么效果?
PWM控制电机速度的原理:
PWM通过快速开关电源,电机感受到的是平均电压。占空比越大,平均电压越高,电机转速越快。这就像调节水龙头,虽然水压固定,但通过控制开关时间比例来调节平均流量。
PWM频率太低的后果:
• 电机会产生明显的振动和噪音(能听到"嗡嗡"声)
• 转速不稳定,出现明显的脉动
• 电机发热增加,效率降低
• 控制精度下降
手动开关的效果:
如果用手动开关,由于人手速度有限(最快几Hz),电机会出现明显的启停,无法形成连续转动,就像老式电风扇档位切换时的顿挫感。
三,电机驱动系统
1,电机驱动系统的组成
MCU(微控制器)- 大脑
负责决策和控制逻辑,生成PWM信号,处理传感器反馈。 就像人的大脑,决定要做什么动作。
驱动芯片 - 肌肉
将MCU的弱电信号放大为强电信号,为电机提供足够的电流。 就像人的肌肉,将神经信号转化为实际的力量。
电机 - 执行器
将电能转化为机械能,产生旋转运动。 就像人的手脚,执行具体的动作。
2,驱动芯片的必要性
MCU的输出能力:电压3.3V,电流几十毫安
电机的需求:电压6-12V,电流几百毫安到几安培
这就像用小水管的水压去推动大水轮 - 力量不够!
驱动芯片就是"水泵",将小水流变成大水流。
常见驱动芯片对比:
芯片型号 | 最大电流 | 工作电压 | 特点 |
---|---|---|---|
TB6612FNG | 1.2A | 2.7-5.5V | 小型项目首选,效率高 |
L298N | 2A | 5-35V | 经典选择,应用广泛 |
DRV8833 | 1.5A | 2.7-10.8V | 集成度高,体积小 |
// A4950ELJTR-T引脚连接(双电机驱动)
STM32引脚 -> A4950引脚 -> 功能说明
PE11(PWM) -> PWM1 -> 电机1的PWM速度控制
PE9 -> DIR1 -> 电机1方向控制
PE14(PWM) -> PWM2 -> 电机2的PWM速度控制
PE13 -> DIR2 -> 电机2方向控制
3.3V -> VCC -> 逻辑电源
GND -> GND -> 公共地
7.4V -> VM -> 电机电源A4950引脚连接
// A4950控制逻辑(快慢衰减模式)
DIR=0, PWM=速度值 -> 正转(慢衰减)
DIR=1, PWM=100+负值 -> 反转(快衰减)
DIR=0, PWM=0 -> 停止
如果直接用MCU的GPIO引脚连接电机会发生什么? 为什么A4950只需要一个方向控制引脚(DIR)而不是两个
直接用GPIO连接电机的后果:
• 电流不足:STM32的GPIO最大输出电流只有25mA,而电机需要几百毫安甚至几安培
• 电压不匹配:GPIO输出3.3V,电机通常需要6-12V
• 损坏MCU:电机的反电动势可能损坏GPIO引脚
• 无法反转:GPIO只能输出单向电压,无法实现电机反转
A4950的单引脚控制优势:
A4950采用先进的快慢衰减控制模式:
• DIR=0:慢衰减模式,适合正转和停止,运行平稳
• DIR=1:快衰减模式,适合反转,制动效果好
这比传统的双引脚H桥控制更简单,同时避免了直通风险,提高了可靠性。
四,开环控制和闭环控制
1,开环控制 - 简单但不精确
优点:结构简单,成本低,响应快
缺点:精度差,易受干扰,无法自我纠正
适用场景:精度要求不高的场合,如风扇调速
// 开环控制:直接设置PWM值
void OpenLoop_Control(void) {// 设置电机速度为50%Motor_SetSpeed(500); // 0-1000对应0%-100%// 问题:不知道电机实际转速是多少// 负载变化时,实际转速会变化// 电池电压下降时,转速也会下降
}
2,闭环控制 - 复杂但精确
优点:精度高,抗干扰能力强,能自我纠正
缺点:结构复杂,成本高,需要传感器
适用场景:精度要求高的场合,如机器人定位
// 闭环控制:根据反馈调节PWM值
void ClosedLoop_Control(void) {int16_t target_speed = 1000; // 目标转速:1000 RPMint16_t actual_speed = Encoder_GetSpeed(); // 读取实际转速int16_t error = target_speed - actual_speed; // 计算误差// 根据误差调节PWM(简单比例控制)static uint16_t pwm_value = 500;if (error > 0) {pwm_value += 10; // 实际转速低,增加PWM} else if (error < 0) {pwm_value -= 10; // 实际转速高,减少PWM}// 限制PWM范围if (pwm_value > 1000) pwm_value = 1000;if (pwm_value < 0) pwm_value = 0;Motor_SetSpeed(pwm_value);
}
踩油门踏板是开环控制还是闭环控制? 定速巡航功能是开环控制还是闭环控制?为什么?
踩油门踏板:开环控制
• 司机踩油门只是给发动机一个"期望输出"
• 不知道车辆实际速度是多少
• 上坡时需要司机主观判断加大油门
• 没有自动反馈调节机制
定速巡航:闭环控制
• 设定值:司机设定目标速度(如120km/h)
• 传感器:车速传感器实时检测当前速度
• 控制器:ECU比较目标速度和实际速度
• 执行器:自动调节油门开度
• 反馈:持续监控速度变化并调
这就是为什么定速巡航能在上坡下坡时自动保持恒定车速的原因!