2、电机驱动与编码器信号调试:PWM波形生成与频率测量、H桥驱动电路故障排查、编码器ABZ信号与差分信号调试
这一章,咱们聊聊电机驱动里最让人头疼的几个环节。PWM、H桥、编码器,这三个东西要是配合不好,电机要么不动,要么乱动,要么干脆冒烟。我这些年调试过的板子,少说也有上百块了,踩过的坑真不少。今天就把这些经验掰开了揉碎了讲给你听。
2.1 PWM波形生成与频率测量
PWM,说白了就是给电机喂电的一种方式。你想想看,电机要转多快,不是靠电压大小,而是靠通电的占空比。这个道理很简单,但实际做起来,坑都在细节里。
2.1.1 PWM频率怎么选?
我个人习惯,直流有刷电机用10kHz到20kHz。为什么是这个范围?低于10kHz,电机运转时会发出人耳可闻的啸叫声,听着就烦。高于20kHz,MOS管的开关损耗会明显上升,发热严重。
我遇到过一个小项目,工程师把PWM频率设到了50kHz,结果电机没转几分钟,驱动芯片烫得能煎鸡蛋。后来降到16kHz,问题就解决了。
| 电机类型 | 推荐PWM频率 | 注意事项 |
|---|---|---|
| 直流有刷电机 | 10kHz - 20kHz | 避免人耳可闻噪声 |
| 步进电机 | 20kHz - 40kHz | 细分数越高,频率可适当降低 |
| 无刷直流电机 | 16kHz - 50kHz | 取决于霍尔传感器的响应速度 |
2.1.2 用示波器看PWM波形
调试PWM,示波器是必备工具。我一般会看三个东西:
- 频率是否准确:用示波器的频率测量功能,看看实际频率和设定值差多少。误差超过5%就要查原因了。
- 占空比是否线性:从0%到100%扫一遍,看看实际占空比和理论值是不是一一对应。有些MCU的定时器会有非线性区。
- 上升沿和下降沿:边沿太缓,说明驱动能力不足,或者负载电容太大。
核心要点:PWM波形的质量,直接决定了电机的运行平稳性。一个干净的PWM波形,上升沿和下降沿应该在100ns以内。
2.1.3 频率测量的小技巧
测量PWM频率,我建议用示波器的自动测量功能,而不是手动数格子。手动数格子误差太大,尤其是高频信号。
如果你没有示波器,也可以用MCU的输入捕获功能来测。我曾经在一个项目里,用STM32的定时器输入捕获模式,精度能做到0.1Hz。代码大概是这样:
// 使用定时器输入捕获测量PWM频率
// 假设使用TIM2的通道1
void TIM2_IRQHandler(void) {
if(TIM_GetITStatus(TIM2, TIM_IT_CC1) != RESET) {
uint32_t capture = TIM_GetCapture1(TIM2);
static uint32_t last_capture = 0;
uint32_t period = capture - last_capture;
last_capture = capture;
// 频率 = 定时器时钟频率 / period
frequency = 72000000 / period;
TIM_ClearITPendingBit(TIM2, TIM_IT_CC1);
}
}
提示:测量频率时,记得考虑定时器的溢出问题。如果PWM频率很低,周期可能超过定时器的最大计数值,这时候需要软件处理溢出中断。
2.2 H桥驱动电路故障排查
H桥,是直流电机驱动的核心。四个MOS管组成一个H形电路,控制电机正反转和刹车。这个电路看着简单,但出问题的时候,排查起来真能让人抓狂。
2.2.1 常见故障现象
我总结了一下,H桥的故障大概分这么几类:
- 电机不转:最常见的问题。先查供电,再查控制信号,最后查MOS管。
- 电机只朝一个方向转:多半是某个MOS管击穿了,或者驱动信号没过来。
- 电机抖动:PWM频率太低,或者死区时间设置不对。
- 驱动芯片过热:要么是负载太大,要么是开关频率太高,要么是死区时间太短导致上下管直通。
2.2.2 死区时间——这个坑我踩过
死区时间,就是上下两个MOS管同时关断的那段时间。为什么要这个时间?因为MOS管从导通到关断需要时间,如果上管还没完全关断,下管就导通了,那就直通了——电流直接从电源流到地,瞬间烧管子。
我曾经在一个项目里,为了追求效率,把死区时间设得太短。结果板子一上电,MOS管就冒烟了。后来查了半天,才发现是死区时间只有200ns,而MOS管的关断延迟是300ns。嗯,这里要注意:死区时间一定要大于MOS管的关断延迟时间。
警告:死区时间不是越长越好。太长了,电机会有死区效应,运行不平稳。一般建议设置在500ns到2us之间,具体要看MOS管的datasheet。
2.2.3 排查步骤
遇到H桥故障,我一般按这个顺序排查:
- 先看供电:用万用表测电机电源电压,看看是不是在正常范围内。
- 再看控制信号:用示波器看PWM信号有没有送到驱动芯片的输入端。
- 然后看驱动输出:测MOS管的栅极电压,看看驱动芯片有没有正常工作。
- 最后看MOS管:断电后,用万用表的二极管档测MOS管的DS极,看看有没有击穿。
这个顺序,说白了就是从源头到负载,一级一级往下查。不要一上来就怀疑MOS管坏了,很多时候问题出在控制信号上。
2.3 编码器ABZ信号与差分信号调试
编码器,是电机的眼睛。没有编码器反馈,你根本不知道电机转到了什么位置。ABZ信号是增量式编码器的标准输出,而差分信号则是为了提高抗干扰能力。
2.3.1 ABZ信号的基本原理
A相和B相,相位差90度。通过判断A和B的相位关系,可以知道电机是正转还是反转。Z相,每转一圈输出一个脉冲,用来做零点校准。
我刚开始做编码器调试时,总觉得这个原理很简单。直到有一次,电机正转时计数器反而在减小,查了半天才发现是A相和B相接反了。你想想看,这种低级错误,浪费了我整整一个下午。
2.3.2 差分信号——为什么要用?
在工业现场,电机和控制器之间可能隔着几米甚至几十米的线。普通的单端信号,很容易受到电磁干扰。差分信号就不一样了,它用两根线传一路信号,一根传正相,一根传反相。接收端把两个信号相减,干扰信号就被抵消了。
说白了,差分信号就是花两根线的钱,买一份抗干扰的保险。我个人习惯,只要电机和控制器之间的距离超过1米,就一定要用差分编码器。
| 信号类型 | 传输距离 | 抗干扰能力 | 典型接口 |
|---|---|---|---|
| 单端信号 | < 1米 | 一般 | 5V TTL |
| 差分信号 | < 100米 | 强 | RS-422 / 26LS31 |
2.3.3 调试编码器信号的要点
调试编码器,示波器是必须的。我一般会看这几个东西:
- 信号幅度:编码器输出的高电平,应该和接收端的输入阈值匹配。比如5V的TTL信号,高电平至少要2.4V。
- 信号边沿:边沿太缓,说明传输线太长或者驱动能力不够。这时候要考虑加缓冲器。
- A相和B相的相位差:应该是90度,误差不能太大。如果相位差偏离太多,说明编码器安装有问题,或者信号传输有延迟。
- Z相脉冲:每转一圈应该只有一个脉冲。如果出现多个脉冲,说明编码器有机械问题。
核心要点:编码器信号的质量,直接决定了位置控制的精度。一个干净的编码器信号,边沿时间应该在50ns以内,抖动不超过10ns。
2.3.4 差分信号的接线
差分信号的接线,看起来简单,但很多人会接错。记住一个原则:A+和A-是一对,B+和B-是一对,Z+和Z-是一对。不要搞混了。
我曾经遇到一个项目,现场工程师把A+接到了B-上,结果编码器读数完全乱套了。后来我让他用万用表量一下线序,才发现问题。嗯,这里要注意:接线之前,一定要先确认编码器的引脚定义。
2.4 本章小结
这一章的内容,说白了就是三个字:看波形。PWM波形、H桥驱动波形、编码器信号波形,这三个波形看明白了,电机驱动的问题就解决了一大半。
我个人觉得,调试电机驱动,最重要的不是理论知识有多深,而是动手能力。多拿示波器看波形,多用手摸芯片温度,多听电机运转的声音——这些经验,是书本上学不到的。
好了,这一章就到这里。下一章,咱们聊聊更深入的内容。