直流有刷电机大概是每个搞嵌入式或者硬件的人绕不开的一课。不管你是做小车、做云台、做电动推杆还是搞个自动门,只要涉及到"让一个东西正转反转、还得能调速",最后大概率都会落到H桥加PWM这套组合拳上。但说实话,我见过太多人在这上面翻车——有人烧了驱动芯片,有人电机一启动单片机就复位,有人PWM给下去电机纹丝不动,还有人正反转切换的瞬间直接冒烟。这些问题看起来五花八门,根子上其实就那么几个:H桥的导通逻辑没吃透、驱动芯片的自举电容没整明白、死区时间没留够、电源和地没处理好。
这篇东西我打算把直流有刷电机的H桥控制从头到尾捋一遍,从最基础的原理图讲起,到DR70x这类集成驱动芯片的详细用法,再到PWM调速的实操细节和踩坑记录。不管你是刚入门的新手,还是已经用过L298N但想升级到更靠谱方案的老手,应该都能从里面找到点有用的东西。我会尽量把"为什么这么做"讲清楚,而不是只丢一堆电路图让你自己悟。
1. 先搞明白H桥到底在干什么
1.1 从"一个开关控制正反转"说起
很多人第一次接触H桥的时候,脑子里想的可能是"不就是四个开关嘛"。对,确实是四个开关,但这四个开关怎么摆、什么时候开哪个、为什么不能同时开某两个,这里面是有讲究的。
想象一下你手里有个直流电机,两根线,一根接正极一根接负极,电机就转。现在你想让它反着转,最笨的办法是把两根线对调。但实际应用中你不可能手动去对调线,所以需要一套电路来"电子化"地完成这个对调动作。H桥就是干这个的——它由四个开关管组成,形状像字母"H",电机横在中间那条横杠上,四个开关管分别在四个竖杠的位置。
具体来说,左上和右下同时导通,电流从左到右流过电机,电机正转;右上和左下同时导通,电流从右到左流过电机,电机反转。这就是H桥最核心的逻辑。听起来简单,但问题来了:如果你不小心让左上和左下同时导通了,会发生什么?电源正极直接通过这两个管子短路到地,瞬间大电流,管子直接炸。这就是所谓的"直通"(shoot-through),是H桥最致命的错误。
所以H桥控制的第一原则就是:任何时候都不能让同一侧的上管和下管同时导通。这个原则衍生出了一堆东西,比如死区时间、互锁逻辑、专用驱动芯片等等,后面会逐一展开。
1.2 四种工作状态与两种调制方式
H桥的工作状态其实可以分成四种:正转、反转、刹车(brake)和滑行(coast)。正转和反转刚才说了,刹车是指电机两端被短接(比如左上和右上同时导通,或者左下和右下同时导通),这时候电机相当于一个发电机,反电动势会产生反向电流,形成制动效果。滑行是指四个管子全部关断,电机两端悬空,靠惯性慢慢停下来。
这两种停止方式在实际项目中区别很大。刹车停得快,但电流大,对电源和管子都有冲击;滑行停得慢,但温和。你做小车的时候如果想让车快速停住,用刹车;如果只是正常减速,用滑行就够了。
再来说调制方式。PWM调速有两种基本模式:单极性调制和双极性调制。单极性是指在一个PWM周期内,电机两端的电压要么是正要么是零(或者要么是负要么是零),电流纹波小,效率高,但低速时线性度差一些。双极性是指电机两端电压在正负之间交替变化,低速时控制更平滑,但电流纹波大,损耗也大。
大多数应用场景下,单极性调制就够用了。具体实现方式是:正转时,左下管常通,左上管给PWM,右上和右下全关;反转时,右下管常通,右上管给PWM,左上和左下全关。这样电机在PWM的"开"阶段得到全电压,"关"阶段通过下管的续流二极管续流,电流连续,转矩平稳。
注意:单极性调制下,续流路径是通过下管的体二极管或者专门并联的肖特基二极管。如果你用的MOS管体二极管反向恢复特性不好,建议并联一个肖特基,能明显降低发热。
1.3 为什么分立MOS管H桥容易炸
很多人一开始会想着用四个MOS管自己搭H桥,觉得这样便宜、灵活。我一开始也是这么想的,直到炸了十几个管子之后才明白,分立H桥的坑远比想象中多。
首先是栅极驱动的问题。MOS管是电压驱动没错,但栅极有电容,你给它PWM信号的时候,实际上是在给这个电容充放电。如果驱动电流不够,MOS管就会工作在线性区,也就是半开半关的状态,这时候管子的等效电阻很大,电流流过就会产生大量热量,几秒钟就能把管子烧了。所以你需要专门的栅极驱动电路,要么用三极管推挽,要么用专用的半桥驱动芯片。
其次是死区时间。就算你逻辑上保证了上下管不同时导通,但MOS管的关断是需要时间的。如果上管还没完全关断,下管就导通了,瞬间直通。死区时间就是在这个切换的间隙插入一段"两个管子都关断"的时间,通常几百纳秒到几微秒。这个时间太短了没用,太长了会导致电机电流断续,影响低速性能。
还有就是高边驱动的问题。H桥的上管是接在电源正极上的,它的源极电位会随着开关状态浮动。你要驱动它,栅极电压必须比源极高出10V左右(对于标准MOS管),这就需要一个自举电路或者隔离电源。自举电容的选择、自举二极管的选型,又是一堆坑。
所以我的建议很明确:除非你有特殊需求(比如超高电压、超大电流、或者成本极度敏感),否则直接用集成H桥驱动芯片。下面要讲的DR70x就是这类芯片里比较有代表性的一个。
2. DR70x驱动芯片的引脚与内部逻辑
2.1 DR70x系列到底有哪些型号,怎么选
DR70x不是一个单一型号,而是一个系列。常见的包括DR7022、DR7023、DR7033、DR7044等等,不同型号在耐压、电流能力、封装形式上有所区别。选型的时候主要看三个参数:工作电压范围、持续输出电流、峰值输出电流。
工作电压范围决定了你能驱动什么电机。比如DR7022一般支持2.5V到12V左右,适合驱动小型的空心杯电机或者玩具电机;DR7033可能支持到24V甚至更高,能驱动稍微大一点的直流有刷电机。持续输出电流决定了电机正常工作时的电流不能超过多少,峰值电流决定了电机启动或者堵转时能扛住多大的冲击。
这里有个经验:电机的堵转电流通常是额定电流的5到10倍。如果你选的驱动芯片峰值电流不够,电机一堵转芯片就保护了,甚至烧了。所以选型的时候不要只看额定电流,一定要留足余量。我一般会选峰值电流至少是电机堵转电流1.5倍的型号。
另外还要看封装。DR70x系列有SOP8、ESOP8、QFN等不同封装,散热能力不一样。如果你驱动的是几百毫安的小电机,SOP8就够了;如果电流上到1A以上,建议选带散热焊盘的封装,PCB上做好散热铜箔。
2.2 引脚功能逐个拆解
以常见的DR70x SOP8封装为例,引脚大致可以分成几组:电源引脚(VCC、GND)、逻辑输入引脚(IN1、IN2或者IN、EN)、输出引脚(OUT1、OUT2)、以及一些辅助引脚(如自举电容连接端、电流检测端等)。不同型号的引脚定义可能有差异,但核心逻辑是相通的。
VCC和GND是芯片的供电引脚。注意这里的VCC是逻辑电源还是功率电源,不同芯片定义不一样。有些芯片逻辑电源和功率电源是分开的,比如VM接电机电源,VCC接3.3V或5V逻辑电源。分开的好处是逻辑部分不受电机电源波动的影响,更稳定。如果芯片只有一个电源引脚,那就要注意电源的滤波和去耦,否则电机一启动芯片就可能复位。
IN1和IN2是逻辑控制输入。这两个引脚的电平组合决定了H桥的输出状态。常见的真值表是这样的:
| IN1 | IN2 | OUT1 | OUT2 | 电机状态 |
|---|---|---|---|---|
| 0 | 0 | 高阻 | 高阻 | 滑行 |
| 0 | 1 | 低 | 高 | 反转 |
| 1 | 0 | 高 | 低 | 正转 |
| 1 | 1 | 低 | 低 | 刹车 |
有些芯片还会有一个EN引脚(使能),EN为低时整个芯片关断,输出高阻。这个引脚可以用来做PWM调速——把EN接PWM信号,IN1和IN2设定方向,就能实现调速。但要注意EN的开关频率不能太高,否则芯片内部逻辑可能跟不上。
OUT1和OUT2是输出引脚,直接接电机。这两个引脚内部就是H桥的四个开关管。注意输出引脚上通常需要并联续流二极管,虽然很多芯片内部已经集成了,但外置肖特基二极管能进一步降低发热。
2.3 自举电容:最容易被忽略的关键元件
如果DR70x是NMOS H桥结构(大多数集成H桥都是),那么高边驱动就需要自举电容。这个电容接在芯片的BST引脚和OUT引脚之间,作用是给高边MOS管的栅极提供一个浮动的电源。
工作原理是这样的:当低边MOS管导通时,OUT引脚被拉到地,自举电容通过自举二极管从VCC充电,电容两端电压接近VCC。当需要导通高边MOS管时,自举电容的电压被"抬"到OUT引脚电位之上,给高边栅极提供足够的驱动电压。
自举电容的容值选择很关键。太小了,高边MOS管还没完全导通电荷就用完了;太大了,充电时间不够,高频PWM下可能充不满。一般推荐100nF到1μF之间,具体看芯片手册。材质建议用X7R或X5R的陶瓷电容,不要用Y5V,温度特性太差。
自举二极管也要选快恢复的,反向恢复时间要短,否则在高频开关时会产生额外的损耗和噪声。常见的1N4148可以用在低频场合,高频建议用BAV99或者专用的自举二极管。
提示:如果你发现高边MOS管发热严重、或者电机高速时突然停转,八成是自举电容的问题。先用示波器看BST引脚和OUT引脚之间的电压,正常应该在VCC附近波动,如果电压明显偏低或者不稳定,就要检查电容和二极管。
3. 从原理图到PCB:H桥电路的落地细节
3.1 电源去耦与滤波:电机一启动单片机就复位怎么破
这个问题我遇到过太多次了。现象很典型:电机不转的时候一切正常,电机一启动单片机就复位,或者显示屏闪烁,或者传感器读数乱跳。根本原因是电机启动瞬间电流突变,在电源线上产生了很大的电压跌落和尖峰噪声,通过共用电源耦合到了控制电路。
解决办法分三层:电源隔离、去耦、滤波。
第一层是电源隔离。如果条件允许,电机电源和逻辑电源最好分开供电,比如电机用12V电池,逻辑用一颗LDO从12V降到5V或者3.3V。但注意LDO的输入范围要够,而且电机启动时的电压跌落不能低于LDO的最低输入电压,否则LDO输出也会掉。
第二层是去耦。在驱动芯片的VCC引脚旁边放一个100nF的陶瓷电容,越近越好,最好和芯片在同一个PCB面。再并一个10μF到100μF的钽电容或者电解电容,提供瞬态电流。电机电源输入端也要放一个大电容,通常100μF到1000μF,吸收电机启动和制动时的电流冲击。
第三层是滤波。在电源线上串联一个磁珠或者小电感,能有效抑制高频噪声。但注意电感的额定电流要够,否则会饱和。另外可以在电机两端并联一个RC吸收电路(比如100Ω加100nF),减少电机换向时产生的火花和噪声。
我自己的做法是:电机电源入口放一个220μF的电解电容并联一个100nF陶瓷电容,驱动芯片VCC放100nF加10μF,逻辑电源和电机电源之间用一个磁珠隔开。这套组合下来,基本上不会再出现电机一启动就复位的问题。
3.2 死区时间:为什么你的H桥会直通
死区时间这个问题,用集成驱动芯片的时候通常不用太操心,因为芯片内部已经处理好了。但如果你是自己搭分立H桥,或者用的是一些比较老的驱动芯片(比如L298N),死区时间就必须自己保证。
L298N就是一个典型的例子。它内部是双H桥,但逻辑输入没有互锁,如果你在正转切换到反转的时候没有先让电机停一下,直接翻转IN1和IN2,就会有一瞬间两个上管或者两个下管同时导通,直通电流瞬间飙升。我见过有人用L298N驱动电机,正反转切换的时候芯片直接冒烟,就是这个原因。
正确的做法是:在改变方向之前,先把两个输入都拉低(滑行)或者都拉高(刹车),保持至少几毫秒,然后再设置新的方向。这个时间不用太长,但一定要有。如果你用单片机控制,可以在代码里加一个延时,或者用状态机来管理。
对于自己搭的分立H桥,死区时间通常设置在200ns到1μs之间。太小了起不到保护作用,太大了会导致电机电流断续,低速时抖动明显。具体值要看MOS管的开关速度和电机的电感量。一般来说,MOS管栅极电荷越小、开关越快,死区时间可以越短。
3.3 电流检测与过流保护
电机堵转是另一个常见问题。电机被卡住的时候,电流会飙升到额定电流的好几倍,如果不加保护,驱动芯片或者电机本身都可能烧毁。所以一个靠谱的H桥电路应该有电流检测和过流保护。
最简单的电流检测方式是在电机回路里串联一个采样电阻(shunt resistor),测量电阻两端的电压。采样电阻的阻值要小,通常几十毫欧到几百毫欧,否则功耗太大。比如1A电流下,100mΩ电阻的功耗是0.1W,还能接受;如果是10A,功耗就是10W,显然不行。
采样电阻的位置有两种:高边采样和低边采样。高边采样是把电阻放在电源正极和H桥之间,需要差分放大器来测量;低边采样是把电阻放在H桥和地之间,测量简单但会引入地电位偏移。大多数集成驱动芯片用的是高边采样,内部集成了放大器和比较器。
DR70x系列有些型号支持电流检测输出,可以通过一个引脚输出与电机电流成比例的电压,接到单片机的ADC上。这样你就能实时监测电流,在软件里做过流保护。如果没有这个功能,也可以在电源线上串联一个采样电阻,自己搭一个比较器电路,超过阈值就拉低EN引脚关断输出。
注意:过流保护的阈值不要设得太低,否则电机正常启动时的冲击电流就会触发保护。一般建议阈值设在电机堵转电流的1.2到1.5倍。
4. PWM调速的实操细节与代码实现
4.1 PWM频率选多少合适
PWM频率的选择是一个权衡。频率太低,电机会听到明显的啸叫声,而且电流纹波大,转矩脉动明显;频率太高,驱动芯片的开关损耗增加,发热严重,而且自举电容可能来不及充电。
对于直流有刷电机,常用的PWM频率范围是1kHz到20kHz。1kHz以下会有明显的音频噪声,人耳能听到"嗡嗡"声;20kHz以上超出人耳听觉范围,但开关损耗会明显增加。我一般选8kHz到16kHz之间,既能避开听觉敏感频段,又不会让驱动芯片太热。
如果你用的是DR70x这类集成芯片,手册里通常会给出推荐的PWM频率范围,照着来就行。如果自己搭分立H桥,还要考虑MOS管的开关速度。栅极电荷大的MOS管,开关时间长,PWM频率就不能太高,否则管子会长时间工作在线性区,发热严重。
另外,PWM频率和电机电感也有关系。电机电感越大,电流纹波越小,PWM频率可以适当降低。小型的空心杯电机电感很小,PWM频率建议高一些,比如16kHz以上,否则电流断续严重,低速性能很差。
4.2 调速曲线:为什么50%占空比不是半速
很多人第一次做PWM调速的时候会发现,给50%的占空比,电机转速并不是额定转速的一半,而是明显偏高。这是因为电机的转速和电压不是线性关系,而是受到反电动势、摩擦力、负载等多种因素影响。
电机的稳态转速公式大致是:n = (V - I*R) / (K * Φ),其中V是电枢电压,I是电流,R是电枢电阻,K是电机常数,Φ是磁通。PWM调速改变的是平均电压V,但电流I也会随负载变化,所以转速和占空比的关系是非线性的。
如果你需要精确的速度控制,光靠开环PWM是不够的,需要加编码器做闭环控制。但大多数应用场景下,开环PWM已经够用了,只要知道低速时占空比需要给得比预期高一些就行。
还有一个实际问题:死区电压。电机有一个启动电压,低于这个电压电机不转。比如一个额定12V的电机,可能给到2V以下就不转了。所以你的PWM占空比从0开始增加的时候,会有一段"空白区",电机没反应。做调速的时候要注意这个,可以在代码里加一个最小占空比偏移。
4.3 基于单片机的PWM调速代码框架
下面给一个基于STM32或者类似单片机的PWM调速代码框架。这里假设你用两个GPIO控制方向,一个定时器通道输出PWM控制EN引脚或者直接控制IN引脚。
// 定义电机方向 typedef enum { MOTOR_STOP = 0, MOTOR_FORWARD, MOTOR_REVERSE, MOTOR_BRAKE } MotorState; // 电机控制结构体 typedef struct { MotorState state; uint16_t speed; // 0-1000 对应 0-100% 占空比 } MotorHandle; // 设置电机方向和速度 void Motor_Set(MotorHandle *motor, MotorState state, uint16_t speed) { // 限制速度范围 if (speed > 1000) speed = 1000; // 先停止,防止直通 HAL_GPIO_WritePin(IN1_PORT, IN1_PIN, GPIO_PIN_RESET); HAL_GPIO_WritePin(IN2_PORT, IN2_PIN, GPIO_PIN_RESET); __HAL_TIM_SET_COMPARE(&htim, TIM_CHANNEL_1, 0); // 根据状态设置 switch (state) { case MOTOR_FORWARD: HAL_GPIO_WritePin(IN1_PORT, IN1_PIN, GPIO_PIN_SET); HAL_GPIO_WritePin(IN2_PORT, IN2_PIN, GPIO_PIN_RESET); break; case MOTOR_REVERSE: HAL_GPIO_WritePin(IN1_PORT, IN1_PIN, GPIO_PIN_RESET); HAL_GPIO_WritePin(IN2_PORT, IN2_PIN, GPIO_PIN_SET); break; case MOTOR_BRAKE: HAL_GPIO_WritePin(IN1_PORT, IN1_PIN, GPIO_PIN_SET); HAL_GPIO_WritePin(IN2_PORT, IN2_PIN, GPIO_PIN_SET); break; case MOTOR_STOP: default: // 已经拉低,滑行 break; } // 设置PWM占空比 uint32_t compare = (htim.Init.Period * speed) / 1000; __HAL_TIM_SET_COMPARE(&htim, TIM_CHANNEL_1, compare); motor->state = state; motor->speed = speed; }这段代码的关键点是:在改变方向之前,先把所有输出拉低,再设置新方向。虽然DR70x内部有互锁,但养成这个习惯没坏处,尤其是当你换用其他芯片的时候。
另外,PWM的占空比计算要注意定时器的周期值。如果定时器是向上计数的,比较值等于周期值时是100%占空比,等于0时是0%。有些定时器有互补输出和死区插入功能,可以硬件生成死区,那就更省心了。
4.4 软启动:让电机慢慢加速
直接给电机全电压启动,电流冲击很大,对电源和驱动芯片都是考验。软启动就是让PWM占空比从0慢慢增加到目标值,比如每10ms增加1%,这样电机启动电流就平缓很多。
软启动的时间取决于电机的惯量和负载。小型电机可能100ms就够了,大型电机可能需要1秒甚至更长。你可以根据实际应用调整。软启动不仅能保护电路,还能让机械结构受力更平缓,减少冲击和噪声。
实现软启动很简单,就是在设置目标速度之后,用一个定时器或者循环,逐步增加占空比,直到达到目标值。注意在加速过程中如果收到停止或者反向命令,要立即中断软启动,先执行停止逻辑。
5. 那些年我踩过的H桥坑
5.1 电机反转瞬间芯片烧毁:原因与修复
有一次我做一个小车项目,用的是一颗国产的H桥驱动芯片,参数看起来都够。正转、调速都正常,但每次从正转直接切到反转,芯片就烧。一开始以为是芯片质量问题,换了好几家都一样。
后来用示波器抓了一下电机两端的电压波形,发现反转瞬间有一个巨大的反向尖峰,电压超过了芯片的耐压值。原因是电机在正转的时候有惯性,突然反转相当于给电机加了一个反向电压,电机产生的反电动势和电源电压叠加,瞬间电压可能是电源电压的两倍甚至更高。
解决办法有两个:一是加TVS二极管或者压敏电阻,钳位电机两端的电压;二是在软件里加方向切换延时,先让电机滑行或者刹车到停止,再切换方向。我两个都做了,之后再也没有烧过芯片。
TVS二极管的选择要注意钳位电压要低于芯片的耐压值,但高于电源电压。比如12V系统,芯片耐压20V,TVS钳位电压可以选15V到18V之间。功率要够,至少能吸收电机反电动势的能量。
5.2 PWM调速时电机啸叫:频率与电感的匹配
另一个常见问题是电机在PWM调速时发出刺耳的啸叫。这通常是PWM频率落在了人耳敏感范围内(2kHz到5kHz),或者是PWM频率和电机的机械共振频率重合了。
解决办法很简单:把PWM频率调到16kHz以上,超出人耳听觉范围。但要注意,频率提高之后驱动芯片的开关损耗会增加,如果芯片发热明显,可能需要加散热片或者降低频率到8kHz左右,同时接受轻微的噪声。
还有一种情况是电机本身的电感太小,PWM频率再高电流也是断续的,这时候电机会有"滋滋"声。这种只能通过增加电感来解决,比如在电机回路里串联一个电感,或者在电机两端并联电容。但串联电感会影响电机的动态响应,要权衡。
5.3 低速时电机抖动:死区电压与PWM分辨率
低速抖动是开环PWM调速的固有问题。原因有两个:一是前面说的死区电压,占空比太低时电机根本得不到足够的电压;二是PWM分辨率不够,占空比的最小变化步长太大,导致速度调节不连续。
解决死区电压的办法是在代码里加一个最小占空比偏移,比如占空比从5%开始才算有效。解决分辨率问题的办法是提高PWM频率或者提高定时器的计数精度。比如用16位定时器,PWM分辨率可以做到很高,低速时也能平滑调节。
如果对低速性能要求很高,那就只能上闭环控制了。加一个编码器或者霍尔传感器,用PID算法调节PWM占空比,低速时也能很稳。但这又是另一个话题了,这里不展开。
5.4 驱动芯片发热严重:从波形找原因
驱动芯片发热严重,通常有几个原因:开关损耗大、导通损耗大、或者散热设计不好。
开关损耗大是因为PWM频率太高,或者栅极驱动电流不够,导致MOS管在开关过程中停留在高阻区的时间太长。用示波器看输出波形,如果上升沿和下降沿很缓,那就是驱动能力不够,需要换驱动芯片或者加栅极驱动电路。
导通损耗大是因为MOS管的导通电阻太大,或者电流超过了额定值。检查电机的实际工作电流,如果接近或者超过芯片的持续电流能力,那就需要换更大电流的芯片,或者降低电机的负载。
散热设计不好是最容易解决的。检查PCB上的散热焊盘有没有做好,过孔够不够,铜箔面积大不大。如果芯片底部有散热焊盘,一定要焊接到PCB的铜箔上,并且多打过孔到背面的大面积铜箔。必要的时候加一个小散热片。
6. 从DR70x到更复杂的电机控制方案
6.1 什么时候该换用更高级的驱动方案
DR70x这类集成H桥芯片适合中小功率、成本敏感的应用。但如果你的项目需要驱动更大的电机,或者需要更精确的控制,那就需要考虑更高级的方案了。
比如栅极驱动加分立MOS管的方案,适合大电流、高电压的场合。你可以选择专用的半桥驱动芯片(比如IR2104、EG2133等),配合大功率MOS管,驱动几十安培的电机都没问题。但设计难度也相应增加,需要处理自举、死区、过流保护等一系列问题。
再比如专用电机驱动模块,比如基于FOC(磁场定向控制)的驱动方案,虽然主要用于无刷电机,但有些也支持有刷电机。这类方案集成度高,控制精度好,但成本也高,适合对性能要求高的场合。
选择哪种方案,核心看三个指标:电流、电压、控制精度。电流几百毫安以内、电压12V以内、开环控制就够的,DR70x这类芯片是最优解。电流几安培、电压24V以上、需要闭环控制的,就要考虑更高级的方案了。
6.2 仿真验证:用ANSYS做直流有刷电机仿真
在实际搭电路之前,用仿真工具验证一下控制逻辑和电路参数,能省不少时间和物料。ANSYS的Simplorer或者Maxwell可以做直流有刷电机的仿真,包括电磁场分析和控制回路仿真。
仿真的好处是你可以快速试不同的PWM频率、不同的死区时间、不同的电源电压,看看电流波形和转矩波形怎么样,而不用真的去焊板子。特别是对于大功率电机,仿真能帮你提前发现潜在的问题,避免烧管子。
当然,仿真不能完全替代实测,因为仿真模型和实际电机总有差异。但作为一个辅助工具,仿真能帮你快速缩小参数范围,减少试错成本。我一般会在仿真里确定PWM频率和死区时间的大致范围,然后在实测中微调。
6.3 从有刷到无刷:控制思路的延续与变化
如果你已经搞定了直流有刷电机的H桥控制,想进一步玩无刷电机,其实很多思路是相通的。无刷电机的三相逆变桥本质上就是三个半桥,控制逻辑比有刷H桥复杂,但核心概念——PWM调速、死区时间、自举驱动、过流保护——都是一样的。
区别在于无刷电机需要换相,也就是根据转子位置依次导通不同的半桥。最简单的六步换相法,就是按照一定的顺序切换六个开关状态,让电机转起来。更高级的FOC控制则需要实时检测转子位置和电流,用坐标变换和PID调节来实现平滑控制。
如果你已经理解了H桥的死区、自举、续流这些概念,学无刷控制会快很多。反过来,如果你连H桥都没搞明白,直接上无刷,大概率会一头雾水。所以我的建议是:先把有刷H桥吃透,再往无刷进阶。
7. 一些实用的调试技巧和工具
7.1 示波器怎么用才能看到关键波形
调试H桥电路,示波器是必不可少的。但很多人买了示波器却不知道怎么用,或者只看输出电压,不看电流。其实调试H桥,最关键的波形有三个:电机两端电压、电机电流、驱动芯片的输入PWM信号。
看电机两端电压,能判断H桥的开关是否正常、死区时间是否合适、有没有异常尖峰。看电机电流,能判断是否过流、续流是否正常、电流纹波大不大。看输入PWM信号,能确认单片机的输出是否正确、频率和占空比是否符合预期。
测电流需要电流探头或者采样电阻加差分探头。如果没有电流探头,可以在电机回路里串联一个小电阻,用普通探头测电阻两端电压,再换算成电流。注意普通探头的地是接大地的,如果测高边电流,探头地不能直接接电路,需要用差分探头或者隔离探头。
提示:测电机两端电压的时候,建议用差分探头,因为电机两端都是浮地的,普通探头的地接上去可能会短路。如果没有差分探头,可以分别测OUT1和OUT2对地的电压,然后在示波器里做数学运算相减。
7.2 电子负载和可调电源的配合使用
调试电机驱动的时候,可调电源和电子负载是很好的帮手。可调电源可以限制最大电流,防止电路故障时烧毁更多东西。电子负载可以模拟不同的负载条件,测试驱动电路在不同负载下的表现。
我一般会把可调电源的电流限制设在电机额定电流的1.5倍左右,这样即使电路有短路,也不会造成太大损失。然后逐步增加负载,观察电流和温度的变化。如果发现某个负载下芯片温度急剧上升,那就要检查是驱动能力不够还是散热有问题。
电子负载还可以用来测试电机的堵转保护。把电子负载设成恒流模式,逐渐增加电流,看驱动芯片的过流保护是否在预期值触发。如果没有保护或者触发值不对,就要调整采样电阻或者保护阈值。
7.3 热成像仪:快速定位发热点
热成像仪不是必需品,但有了它调试效率会高很多。电路一上电,哪里发热一目了然。我见过很多次,芯片表面温度看起来不高,但热成像仪一照,发现是PCB上的某个过孔或者走线在发热,说明电流密度太大了。
用热成像仪的时候要注意,很多元件的表面发射率不一样,读数会有偏差。比如金属表面的发射率很低,热成像仪测出来的温度会偏低。可以在元件表面贴一点黑色胶带,提高发射率,测出来的温度更准。
对于H桥驱动芯片,重点看芯片本体、续流二极管、采样电阻、电源滤波电容这几个地方。如果芯片温度超过80度,就要考虑加强散热或者降低负载了。续流二极管发热严重,说明续流电流大,可能需要换更大电流的二极管或者并联肖特基。
7.4 常见故障速查表
| 现象 | 可能原因 | 排查方法 |
|---|---|---|
| 电机不转 | 电源未接通、EN未使能、PWM占空比为0 | 测电源电压、测EN引脚电平、测PWM信号 |
| 电机只往一个方向转 | 方向控制引脚接错、芯片逻辑与预期不符 | 查真值表、测IN1和IN2电平 |
| 电机转速不可调 | PWM信号未接入、EN引脚常高 | 测PWM引脚波形、确认EN连接 |
| 芯片发热严重 | 开关损耗大、导通损耗大、散热不良 | 测输出波形、测工作电流、检查散热 |
| 电机启动时单片机复位 | 电源耦合、去耦不足 | 加去耦电容、分离电源、加磁珠 |
| 正反转切换时烧芯片 | 直通、反电动势尖峰 | 加死区、加TVS、软件延时 |
| 低速抖动 | 死区电压、PWM分辨率低 | 加最小占空比、提高PWM分辨率 |
| 电机啸叫 | PWM频率在人耳敏感范围 | 调整PWM频率到16kHz以上 |
这张表是我自己调试的时候总结的,基本上覆盖了80%的常见问题。遇到问题的时候按表排查,能省不少时间。
8. 写在最后的一些个人体会
做电机驱动这些年,我最大的感受是:理论很重要,但动手更重要。H桥的原理图看起来很简单,四个开关管而已,但实际调试的时候会遇到各种各样的问题,电源噪声、死区、自举、散热、EMI,每一个都可能让你卡好几天。
我的建议是,刚开始的时候不要追求一步到位。先用集成驱动芯片把电机转起来,理解PWM调速和方向控制的基本逻辑。然后逐步深入,研究死区时间、自举电路、电流检测这些细节。最后再尝试自己搭分立H桥,或者上更复杂的无刷控制。
另外,多测波形,少猜。很多问题光靠想是想不明白的,示波器一测就清楚了。我见过太多人凭感觉调电路,调了半天没进展,一测波形发现是PWM信号根本没输出。工具用好了,效率能提高好几倍。
最后说一句,电机驱动这个领域,坑是踩不完的,但每踩一个坑,你就对这个东西理解更深一层。希望这篇东西能帮你少踩几个坑,或者至少在你踩坑的时候知道往哪个方向找原因。