2、电机驱动基础:直流电机工作原理、步进电机与伺服电机区别、H桥驱动电路详解、PWM调速原理
各位同学,咱们今天聊聊电机驱动。说实话,在自动售货机这个行当里,电机就是货道的「手」和「脚」。你逻辑写得再漂亮,电机不动,货就出不来。我这些年调试过的售货机主板少说也有上千块,电机驱动这块踩过的坑,今天一次性给你们讲透。
2.1 直流电机工作原理
直流电机,说白了就是最朴素的电机。给它通上电,它就转。怎么转的?
你想象一下:一个线圈放在磁场里,通上电流,线圈就会受力转动。这就是安培力的基本原理。线圈转半圈后,换向器会把电流方向反过来,让线圈继续朝同一个方向转。就这么简单。
核心公式:
转速 n = (U - I×R) / (K×Φ)
其中 U 是电压,I 是电流,R 是电枢电阻,K 是电机常数,Φ 是磁通量。
说白了:电压越高,转速越快;负载越大(电流大),转速越慢。
我在项目中遇到过一个问题:某款售货机出货时,电机转着转着突然卡住。查了半天,发现是电压降得太厉害。电源线太细,电机启动瞬间电流大,把电压拉低了。嗯,这里要注意——直流电机启动电流是额定电流的 5-7 倍,设计电源时一定要留余量。
2.2 步进电机与伺服电机区别
很多新手会问:售货机里到底用步进还是伺服?我直接说结论:绝大多数售货机货道用的是直流减速电机,不是步进也不是伺服。但作为工程师,这两种电机你必须懂,因为高端机型、特殊货道会用到。
| 对比项 | 步进电机 | 伺服电机 |
|---|---|---|
| 控制方式 | 开环控制(无反馈) | 闭环控制(有编码器反馈) |
| 精度 | 较高(取决于步距角) | 很高(可达±1个脉冲) |
| 低速性能 | 容易共振 | 平稳 |
| 高速性能 | 力矩下降快 | 力矩平稳 |
| 成本 | 低 | 高 |
| 典型应用 | 3D打印机、小型机械臂 | 数控机床、工业机器人 |
为什么会这样?步进电机是靠「一步一步」走,没有反馈,你给它发 100 个脉冲,它就转 100 步。但如果负载太大,它可能「丢步」——你发了 100 个脉冲,它只转了 80 步,你还不知道。
伺服电机就不一样了。它屁股后面有个编码器,实时告诉控制器「我现在转到哪了」。控制器一算:咦,还差 20 步?再补上。这就是闭环控制的好处。
我的建议:
如果你做售货机货道,老老实实用直流减速电机加限位开关。成本低、控制简单、可靠性高。别为了「高大上」非要用步进或伺服,那是给自己找麻烦。
2.3 H桥驱动电路详解
直流电机怎么正反转?用 H 桥。名字很形象,四个开关管组成一个「H」形状,电机在中间横杠上。
// H桥四种工作状态
// Q1、Q2、Q3、Q4 分别代表四个开关管
// 正转:Q1和Q4导通
// 电流路径:VCC → Q1 → 电机 → Q4 → GND
// 反转:Q2和Q3导通
// 电流路径:VCC → Q2 → 电机 → Q3 → GND
// 刹车:Q1和Q3导通(或Q2和Q4导通)
// 电机两端短路,产生反向电动势制动
// 滑行:所有开关管断开
// 电机自由旋转,靠惯性
你想想看,如果 Q1 和 Q2 同时导通会发生什么?VCC 直接到 GND,短路!这就是「直通」现象。我刚开始做驱动板时,就犯过这个错。程序里一个延时没处理好,两个管子同时开了,啪的一声,MOS管冒烟了。
避坑指南:
我曾经因为 H 桥死区时间设置太短,导致上下管轻微导通,MOS管发热严重。后来加了 1μs 的死区时间,问题解决。
死区时间:切换方向时,先关断所有管子,等一会儿再打开另一组。这个「一会儿」就是死区时间。
实际项目中,我很少用分立元件搭 H 桥。太麻烦,而且可靠性不好。常用的集成 H 桥芯片有:
- L298N:经典双 H 桥,驱动能力强,但压降大、发热厉害
- TB6612FNG:东芝出品,体积小、效率高,适合小电机
- DRV8833:TI 的,带电流限制,保护功能齐全
- A4950: Allegro 的,耐压高,适合 24V 系统
我个人习惯用 DRV8833,因为它内置了过流保护、过热保护,而且死区时间自动处理好了。省心。
2.4 PWM调速原理
直流电机怎么调速?调电压。但怎么调电压方便?用 PWM。
PWM 的全称是 Pulse Width Modulation,脉冲宽度调制。说白了,就是把电源开关开关开关,通过调整「开」的时间比例来控制平均电压。
关键概念:
占空比 = 高电平时间 / 周期时间 × 100%
平均电压 = 电源电压 × 占空比
比如 12V 电源,50% 占空比,平均电压就是 6V。
你可能会问:开关开关的,电机不会一抖一抖吗?不会。因为电机有电感,电流是连续的。PWM 频率足够高时(通常 1kHz 以上),电机感受到的就是一个平滑的平均电压。
// 以STM32为例,PWM初始化代码片段
void Motor_PWM_Init(void)
{
TIM_HandleTypeDef htim2;
TIM_OC_InitTypeDef sConfigOC = {0};
htim2.Instance = TIM2;
htim2.Init.Prescaler = 71; // 72MHz / (71+1) = 1MHz
htim2.Init.Period = 999; // 1MHz / (999+1) = 1kHz
htim2.Init.CounterMode = TIM_COUNTERMODE_UP;
HAL_TIM_PWM_Init(&htim2);
sConfigOC.OCMode = TIM_OCMODE_PWM1;
sConfigOC.Pulse = 500; // 50% 占空比
sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
HAL_TIM_PWM_ConfigChannel(&htim2, &sConfigOC, TIM_CHANNEL_1);
HAL_TIM_PWM_Start(&htim2, TIM_CHANNEL_1);
}
这里有个坑:PWM 频率不是越高越好。频率太高,MOS管的开关损耗会变大,发热严重。频率太低,电机可能会发出「滋滋」的噪音。我一般选 1kHz 到 20kHz 之间。20kHz 以上人耳听不见,但驱动芯片的开关损耗会明显增加。
经验之谈:
我曾经调试一款售货机,电机低速运行时抖得厉害。后来发现是 PWM 频率太低,只有 100Hz。电机在每个 PWM 周期里「启动-停止-启动-停止」,能不抖吗?把频率提到 2kHz,问题解决。
另外,低速时占空比太小(比如小于 10%),电机可能根本转不起来。因为启动需要克服静摩擦力。我的做法是:先给一个高占空比(比如 80%)启动,持续 50ms,然后再降到目标速度。
好了,电机驱动基础就讲到这里。下一章咱们聊货道控制的核心——限位开关检测与防堵转算法。那个更有意思,到时候见。