1. 从一堆热搜词里,我看到了直流有刷电机控制的真实门槛
直流有刷电机、H桥、PWM调速、DR70x驱动芯片,这几个词放在一起,基本就是一条完整的电机控制链路。热搜里还夹着“h桥驱动电路原理图”“mos管驱动芯片一览表”“半桥驱动芯片”“三极管h桥”这些更细的检索词,说明大量人卡在同一个地方:知道要用H桥,但不知道怎么把原理图、芯片选型、PWM频率、死区时间、电流路径这几件事串起来。
我自己第一次搭有刷电机驱动的时候,用的是四个分立MOS管搭的H桥,结果上电不到三秒,下桥臂直接炸了。原因很简单,我忽略了死区时间,上下管直通,电源对地短路。后来换成集成H桥驱动芯片,比如DR70x系列,才发现这类芯片把死区、过流保护、电荷泵都做进去了,外围电路能省掉一大半。但省掉不等于不用懂,恰恰相反,你得知道芯片内部在干什么,才能把外围参数配对。
这篇内容适合谁看?如果你正在做小车、云台、电动工具、风扇调速、空心杯电机驱动,或者单纯想搞懂H桥为什么能正反转、PWM为什么能调速,那这篇就是写给你的。我会从H桥的底层原理讲起,把DR70x这类驱动芯片的内部逻辑拆开,再给出一套可复现的PWM调速方案,包括原理图关键节点、参数计算、实测波形和踩坑记录。不堆公式,但该算的地方一定算给你看。
2. H桥到底在干什么:四个开关管如何让电机正反转
2.1 从“电流方向决定转向”说起
直流有刷电机的转向只由一件事决定:电流从哪个端子流入。你把正负极对调,电机就反转。H桥的本质就是一个电子换向开关,用四个开关管组成一个“H”形,电机接在中间那条横杠上。左边两个管子叫左半桥,右边两个叫右半桥,上下分别是高边和低边。
正转的时候,左上和右下导通,电流从左到右穿过电机。反转的时候,右上和左下导通,电流从右到左。刹车的时候,要么下桥臂全开,要么上桥臂全开,把电机两端短接,电机反电动势产生的电流在低阻回路里消耗掉,形成制动。停止就是四个管子全关,电机两端悬空,靠惯性滑行。
这里有个关键点:同一侧的上管和下管绝对不能同时导通。一旦同时导通,电源正极直接通过两个管子到地,这就是“直通”,瞬间电流能到几十甚至上百安培,管子必炸。所以任何H桥控制逻辑里,换向之前必须先关断,再开通,中间留一段死区时间。
2.2 分立MOS管H桥的四种工作状态
用四个N沟道MOS管搭H桥是最常见的分立方案,但N管做高边需要栅极电压高于电源电压,所以得加自举电路或者电荷泵。很多人图省事,高边用P管,低边用N管,这样高边栅极拉低就能导通,驱动简单。但P管导通电阻大、价格贵、开关速度慢,大电流场景不划算。
分立方案的四种状态可以列成表:
| 状态 | Q1左上 | Q2右上 | Q3左下 | Q4右下 | 电机两端 | 说明 |
|---|---|---|---|---|---|---|
| 正转 | 导通 | 关断 | 关断 | 导通 | 左正右负 | 电流从左到右 |
| 反转 | 关断 | 导通 | 导通 | 关断 | 左负右正 | 电流从右到左 |
| 刹车 | 关断 | 关断 | 导通 | 导通 | 短接 | 低边续流制动 |
| 滑行 | 关断 | 关断 | 关断 | 关断 | 悬空 | 自由停车 |
实际用的时候,正转和反转之间切换,必须先进入刹车或滑行状态,等死区时间过去再开通另一组。死区时间一般取200ns到1us,具体看MOS管的开关速度和栅极驱动能力。我实测过,用IRF3205这类管子,栅极电阻10欧姆,死区设500ns比较稳。
2.3 为什么PWM能调速:平均电压的概念
PWM调速不是改变电压幅值,而是改变电压在一个周期内的导通时间比例。假设电源12V,PWM频率20kHz,占空比50%,电机两端的平均电压就是6V。电机绕组有电感,电流不会突变,所以实际电流是三角波,平均值对应占空比。
这里有个容易混淆的点:PWM频率不能太低,否则电机在低频下会听到啸叫,电流纹波也大。但频率太高,MOS管开关损耗增加,驱动芯片发热。一般有刷电机PWM频率取10kHz到25kHz,空心杯电机可以到30kHz以上,因为人耳听觉上限20kHz,超过之后听不到啸叫。
占空比和转速的关系不是完全线性的。电机有反电动势,转速越高反电动势越大,实际电流越小。空载时,占空比和转速近似线性;带载时,负载越重,同样占空比下转速越低。所以做闭环控制的话,得加编码器或者测反电动势。
3. DR70x驱动芯片内部拆解:为什么它能把外围电路砍一半
3.1 DR70x是什么:集成H桥的功率驱动芯片
DR70x系列是一类集成H桥的电机驱动芯片,常见封装有SOP8、ESOP8、TO252等。它内部集成了四个功率MOS管、栅极驱动、电荷泵、死区控制、过流保护和温度保护。你只需要给它电源、地、PWM输入、方向输入,电机就能转。相比分立方案,外围元件从二十多个降到五六个,PCB面积能缩小一半以上。
以DR70x典型型号为例,工作电压范围一般在7V到30V,持续电流3A到5A,峰值电流能到8A以上。导通电阻在100毫欧到200毫欧之间,具体看型号。内部电荷泵用来给高边N管提供栅极驱动电压,省掉了外部自举电容和二极管。死区时间内部固定,一般在300ns左右,不需要外部配置。
3.2 引脚功能与典型应用电路
DR70x的引脚通常包括:VCC电源、GND地、OUT1和OUT2接电机、IN1和IN2逻辑输入、以及可能的使能脚或电流检测脚。有些型号把IN1和IN2做成PWM和方向两个输入,有些做成两个独立PWM输入,支持互补或独立模式。
典型应用电路很简单:VCC并一个100uF电解电容和一个0.1uF陶瓷电容到地,电机接OUT1和OUT2,IN1接MCU的PWM输出,IN2接普通GPIO控制方向。如果芯片有使能脚,接高电平使能。电流检测脚如果需要限流,接一个采样电阻到地,电阻值根据芯片内部比较器阈值计算。
这里有个细节:VCC的电解电容不能省,而且尽量靠近芯片引脚。电机启动瞬间电流很大,电源线电感会导致电压跌落,电容就是用来提供瞬态电流的。我试过省掉这个电容,结果电机一启动芯片就复位,波形上能看到明显的电压尖峰。
3.3 内部死区与防直通逻辑
DR70x内部有硬件死区,当IN1和IN2同时为高或同时为低时,输出会进入刹车或滑行状态,具体看芯片逻辑表。有些芯片在输入同时为高时,四个管子全关,电机滑行;同时为低时,下桥臂全开,电机刹车。这个逻辑表一定要看数据手册,不同型号可能不一样。
死区时间内部固定,意味着你不需要在MCU里额外加死区。但如果你用两个独立PWM输入,而且两个PWM有重叠,芯片内部逻辑会优先处理,不会直通。不过我还是建议在MCU层面也做互锁,万一芯片逻辑被干扰,软件互锁是最后一道防线。
3.4 过流保护与热保护的实际表现
DR70x的过流保护一般通过检测低边MOS管上的压降来实现。当电流超过阈值,芯片会关断输出,有些型号会进入打嗝模式,隔一段时间重试。热保护是当结温超过150度左右时关断,降到130度左右恢复。
实测中,过流保护响应时间在几微秒级别。如果你用电机堵转测试,能看到输出电流被限制在设定值附近,不会无限上升。但要注意,过流保护不是万能的,如果电源电压很高,短路瞬间的di/dt可能在保护动作之前就损坏管子。所以电源输入端加TVS和保险丝还是有必要的。
4. 从原理图到PCB:H桥驱动电路的布局与选型要点
4.1 电源去耦与续流回路设计
H桥驱动电路的PCB布局,最关键的是续流回路。电机是感性负载,MOS管关断时,电机绕组会产生反电动势,电流需要通过续流二极管流回电源。DR70x内部MOS管体二极管就是续流路径,但体二极管压降大、恢复慢,所以有些设计会在外部并联肖特基二极管。
布局上,电源电容、芯片VCC引脚、地引脚组成的回路面积要尽可能小。电机输出线如果很长,建议双绞或者加磁环,减少辐射。我踩过的坑是电机线太长,PWM频率20kHz,结果辐射干扰了旁边的ADC采样,后来在电机两端并了一个0.1uF电容和10欧姆电阻串联的RC吸收,问题解决。
4.2 采样电阻与电流检测计算
如果需要电流检测,采样电阻放在低边和地之间。假设芯片内部比较器阈值是100mV,你想要限流2A,采样电阻就是100mV除以2A等于50毫欧。功耗是2A平方乘以50毫欧等于0.2W,选0805封装够用,但余量不大,建议选1206。
采样电阻的走线要开尔文连接,也就是从电阻焊盘内侧引出检测线,避免走线电阻影响精度。地线要单点接地,采样电阻的地和芯片的地分开走,最后在电源地处汇合。
4.3 栅极电阻与开关速度的取舍
DR70x内部集成了栅极驱动,不需要外部栅极电阻。但如果你用分立方案,栅极电阻决定了开关速度。电阻越小,开关越快,开关损耗越小,但EMI越大,栅极振荡风险越高。一般取10欧姆到47欧姆之间,具体用示波器看栅极波形,有振荡就加大电阻。
开关速度还影响死区时间。开关越慢,需要的死区越大。所以栅极电阻和死区时间是联动调整的。我一般先用22欧姆起步,测上下管栅极波形,确保没有交叠,再根据温升决定是否减小电阻。
4.4 电机端RC吸收与EMI抑制
有刷电机换向时电刷会产生火花,这是宽带EMI的主要来源。除了电机两端并RC吸收,还可以在电机引线上套磁环。RC吸收的参数一般是0.1uF加10欧姆到100欧姆,电阻功率选1W以上,因为换向瞬间能量不小。
如果做产品,EMI测试过不了,先查电机线辐射。我遇到过30MHz到100MHz频段超标,最后在电机两端加RC吸收,同时电机线缩短并双绞,顺利通过。注意RC吸收电阻会发热,布局时不要靠近热敏元件。
5. PWM调速实操:频率、占空比与闭环控制
5.1 PWM频率选择:听不到啸叫与开关损耗的平衡
PWM频率的选择,核心是避开人耳听觉范围。20kHz以上人耳听不到,但开关损耗随频率线性增加。对于DR70x这类集成芯片,内部MOS管开关速度固定,20kHz下开关损耗已经比较明显,芯片会温热。如果电流不大,可以取16kHz到20kHz;如果电流接近芯片上限,建议取10kHz到15kHz,牺牲一点静音换温度。
空心杯电机因为转子轻、电感小,电流纹波大,PWM频率建议取25kHz以上,否则低速时抖动明显。我实测过空心杯电机在8kHz PWM下,低速时能听到明显抖动和啸叫,换成25kHz后平滑很多。
5.2 占空比分辨率与调速线性度
占空比分辨率取决于MCU的PWM位数。8位分辨率是256级,10位是1024级,12位是4096级。对于普通调速,8位够用,但低速时每一级跳变明显。如果要做精细调速,建议10位以上。
调速线性度方面,空载时占空比和转速基本线性,但死区占空比以下电机不转。这个死区占空比取决于电机启动扭矩和静摩擦,一般在5%到15%之间。做闭环时,这个死区需要补偿,否则低速控制精度差。
5.3 正反转切换的软启动与死区处理
正反转切换不能直接翻转方向引脚,否则电机会经历一个反向制动再反向加速的过程,电流冲击很大。正确做法是先降占空比到零,等电机停稳或者延时一段时间,再切换方向,然后重新加速。
如果必须快速换向,可以在换向时插入刹车阶段,让电机能量快速消耗。刹车时间取决于电机电感,一般几十毫秒。我试过用DR70x做快速换向,先刹车50ms再反向,电流冲击从10A降到4A,芯片温度明显下降。
5.4 闭环调速:编码器与反电动势反馈
开环调速受负载影响大,负载一变转速就变。闭环需要反馈,常用的是编码器和反电动势检测。编码器精度高但成本高,反电动势检测成本低但低速不准。
反电动势检测的原理是:电机转动时会产生与转速成正比的电压,在PWM关断期间测量电机两端电压,减去二极管压降,就能估算转速。这个方法在占空比20%到80%之间比较准,低速和高速误差大。如果做风扇调速,反电动势够用;如果做位置控制,必须用编码器。
6. 常见问题与排查技巧实录
6.1 电机不转或只抖动
先查电源。用万用表测VCC和GND之间电压,如果电压被拉低,说明电源功率不够或者有短路。再查输入信号,IN1和IN2是否有PWM和方向电平。如果输入正常,测OUT1和OUT2之间电压,正转时应该有接近VCC的电压。
如果电机只抖动不转,可能是PWM频率太低,电机在低频下无法连续转动。或者占空比太低,低于启动死区。还有一种可能是死区时间不够,上下管直通导致芯片保护。用示波器看OUT1和OUT2波形,如果有窄脉冲或者异常尖峰,基本就是直通。
6.2 芯片发热严重甚至烧毁
芯片发热分两种情况:开关损耗和导通损耗。开关损耗跟PWM频率和负载电流有关,频率越高、电流越大,发热越严重。导通损耗跟导通电阻和电流有关,DR70x导通电阻100毫欧,2A电流下功耗0.4W,SOP8封装热阻约100度每瓦,温升40度,加上环境温度,芯片会到80度以上。
如果芯片烫手但没烧,先降PWM频率,再加大PCB铜箔散热面积。如果烧毁,查是否有直通、过流、反电动势倒灌。反电动势倒灌发生在电机快速减速时,能量回馈到电源,如果电源电容不够,电压会升高,超过芯片耐压就烧。解决办法是加TVS或者制动电阻。
6.3 PWM调速时电机啸叫
啸叫来源有两个:PWM频率在人耳范围内,或者电机机械共振。先确认PWM频率,如果低于20kHz,提高到20kHz以上。如果已经是20kHz以上还有啸叫,可能是电机共振,尝试改变PWM频率,避开共振点。
还有一种啸叫是电源纹波引起的。电源电容不够,PWM开关时电源电压波动,电机电流跟着波动,产生噪音。加大电源电容,或者在电机两端并电容,能改善。
6.4 正反转切换时芯片保护
正反转切换时电流冲击大,容易触发过流保护。解决办法是加软启动,换向前先降占空比,换向后逐步升占空比。如果芯片支持刹车,换向前先刹车一段时间,消耗电机能量。
另外,换向时电源电压会被拉低,如果电源响应慢,芯片可能欠压复位。加大电源电容,或者用响应快的电源,能缓解。
6.5 常见问题速查表
| 现象 | 可能原因 | 排查方法 | 解决措施 |
|---|---|---|---|
| 电机不转 | 电源不足、输入信号缺失 | 测VCC、测IN1/IN2 | 换电源、检查MCU输出 |
| 电机抖动 | PWM频率低、占空比低 | 测PWM频率和占空比 | 提高频率、提高占空比 |
| 芯片发热 | 开关损耗、导通损耗 | 测电流、测温度 | 降频、加散热、换芯片 |
| 芯片烧毁 | 直通、过压、过流 | 查波形、查电源 | 加死区、加TVS、加保险丝 |
| 电机啸叫 | PWM频率低、共振 | 改变PWM频率 | 提到20kHz以上、避开共振 |
| 换向保护 | 电流冲击大 | 测换向电流 | 软启动、加刹车 |
7. 分立H桥与集成芯片的选型对比
7.1 什么时候用分立MOS管
分立方案适合大电流、高电压、特殊封装的场景。比如电动工具,电流几十安培,集成芯片做不到,只能用分立MOS管并联。分立方案灵活,可以选低导通电阻的管子,散热也好做。但外围电路复杂,死区、自举、保护都要自己搭,调试周期长。
7.2 什么时候用DR70x这类集成芯片
集成芯片适合中小功率场景,电流5A以下,电压30V以下。优点是外围简单、保护齐全、体积小。缺点是导通电阻固定,散热受限,电流做不大。如果你做小车、风扇、云台,集成芯片是首选。如果做工业控制、大功率电机,分立方案更合适。
7.3 半桥驱动芯片与H桥的搭配
半桥驱动芯片比如IR2104、EG2104,内部有自举和死区,但只驱动一个半桥。两个半桥芯片加四个MOS管,就能搭出H桥。这种方案比全集成灵活,比全分立简单。适合电流5A到20A的场景。选半桥芯片时注意自举电容容量和耐压,以及死区时间是否可调。
7.4 三极管H桥的适用边界
三极管H桥现在很少用了,因为三极管导通压降大、驱动电流大、开关速度慢。但在低压小电流场景,比如1.5V驱动小电机,三极管H桥成本低,电路简单。不过效率低,发热大,只适合玩具级别。如果要做正经产品,还是MOS管或者集成芯片。
8. 实测波形与调试记录
8.1 正转与反转的OUT1/OUT2波形
用示波器测DR70x的OUT1和OUT2,正转时OUT1是PWM波形,OUT2是低电平。反转时OUT1低电平,OUT2是PWM波形。刹车时两个都是低电平。滑行时两个都是高阻,波形是电机反电动势。
实测中,PWM上升沿和下降沿有轻微过冲,这是PCB走线电感引起的。在OUT1和OUT2对地加100pF电容,过冲明显减小。但电容不能太大,否则增加开关损耗。
8.2 电机电流波形与纹波分析
用电流探头测电机电流,PWM导通时电流上升,关断时电流下降,形成三角波。纹波大小跟电机电感有关,电感越大纹波越小。空心杯电机电感小,纹波大,电流峰值可能是平均值的两倍。
如果纹波太大,电机发热增加,效率降低。可以在电机两端并电感,但会增加体积和成本。一般纹波控制在平均电流的30%以内比较合适。
8.3 死区时间与直通风险的实测
用双通道示波器同时测上下管栅极波形,看是否有交叠。DR70x内部死区固定,实测约300ns,上下管栅极没有交叠。如果自己搭分立方案,死区时间要实测确认,不能只看理论值。
直通风险最大的时刻是换向瞬间。用示波器触发换向信号,看电源电流波形,如果有尖峰,说明有直通。解决办法是加大死区,或者换开关更快的管子。
8.4 温升测试与散热改进
用热成像仪测DR70x表面温度,2A电流、20kHz PWM、持续运行10分钟,表面温度约75度。环境温度25度,温升50度。如果加散热片,温升能降到30度。如果PCB铜箔面积大,比如2平方厘米,温升也能降10度。
如果温度超过100度,芯片会触发热保护。所以设计时留余量,电流不要用到芯片上限,或者加散热片。
9. 从原理图到代码:一个可复现的PWM调速方案
9.1 硬件连接清单
- DR70x驱动芯片一块
- 直流有刷电机一个,额定电压12V,额定电流1A
- MCU开发板一块,支持PWM输出
- 电源12V,电流能力3A以上
- 电解电容100uF,陶瓷电容0.1uF
- 采样电阻50毫欧,1206封装
- 连接线若干
9.2 MCU端PWM配置
以STM32为例,配置TIM1的CH1为PWM输出,频率20kHz,分辨率10位。系统时钟72MHz,预分频器设为0,自动重装载值设为3599,占空比寄存器设为1800对应50%。方向引脚用GPIO输出,高电平正转,低电平反转。
// STM32 PWM初始化示例 void PWM_Init(void) { // 使能时钟 RCC->APB2ENR |= RCC_APB2ENR_TIM1EN; RCC->APB2ENR |= RCC_APB2ENR_IOPAEN; // PA8配置为复用推挽输出 GPIOA->CRH &= ~GPIO_CRH_CNF8; GPIOA->CRH |= GPIO_CRH_CNF8_1; GPIOA->CRH |= GPIO_CRH_MODE8; // TIM1配置 TIM1->PSC = 0; TIM1->ARR = 3599; // 72MHz / 3600 = 20kHz TIM1->CCR1 = 1800; // 50%占空比 TIM1->CCMR1 |= TIM_CCMR1_OC1M_1 | TIM_CCMR1_OC1M_2; TIM1->CCMR1 |= TIM_CCMR1_OC1PE; TIM1->CCER |= TIM_CCER_CC1E; TIM1->BDTR |= TIM_BDTR_MOE; TIM1->CR1 |= TIM_CR1_CEN; }9.3 方向控制与软启动逻辑
方向控制用GPIO,换向前先降占空比到零,延时100ms,切换方向,再逐步升占空比。软启动用循环递增占空比,每10ms增加1%,直到目标值。
void Motor_Start(uint8_t dir, uint16_t target_duty) { // 先停止 TIM1->CCR1 = 0; delay_ms(100); // 设置方向 if (dir == 1) { GPIOA->BSRR = GPIO_BSRR_BS9; // 正转 } else { GPIOA->BSRR = GPIO_BSRR_BR9; // 反转 } // 软启动 for (uint16_t i = 0; i <= target_duty; i += 10) { TIM1->CCR1 = i; delay_ms(10); } }9.4 电流检测与限流保护
采样电阻上的电压经过RC滤波后接入MCU的ADC,ADC采样后计算电流。如果电流超过设定值,降低占空比或者关断输出。
#define SAMPLE_RES 0.05f #define MAX_CURRENT 2.0f void Current_Check(void) { uint16_t adc_val = ADC_Read(); float voltage = adc_val * 3.3f / 4096.0f; float current = voltage / SAMPLE_RES; if (current > MAX_CURRENT) { TIM1->CCR1 = 0; // 关断输出 // 或者降低占空比 } }9.5 实测结果与调速曲线
实测空载时,占空比10%电机启动,50%转速约3000rpm,100%转速约6000rpm。带载后,同样占空比转速下降约20%。线性度在20%到80%之间较好,低于20%和高于80%非线性明显。
温升方面,1A电流持续运行30分钟,芯片表面温度稳定在65度,环境温度25度,温升40度。如果加散热片,温升能降到25度。
10. 几个容易忽略的细节与个人经验
第一个细节是电源电容的ESR。电解电容ESR大,高频滤波效果差,所以并联0.1uF陶瓷电容。但陶瓷电容有压电效应,机械振动会产生电压噪声,所以不要用陶瓷电容做电机驱动的唯一滤波。
第二个细节是电机线的极性。有刷电机反接不会烧,但H桥输出反接会烧芯片。所以接线时确认OUT1和OUT2不要对调,除非你确认芯片支持反接保护。
第三个细节是PWM输入的上下拉。MCU复位时GPIO是高阻,如果DR70x输入没有上下拉,电机可能乱转。所以在IN1和IN2上加10k下拉电阻,确保MCU复位时电机停止。
第四个细节是刹车和滑行的区别。刹车时电机两端短接,能量消耗在电机绕组和MOS管上,电机会快速停止但芯片会热。滑行时电机两端悬空,能量消耗在机械摩擦上,停止慢但芯片不热。根据应用选择。
第五个细节是过流保护的恢复。DR70x过流后进入打嗝模式,如果电机堵转不解除,芯片会反复尝试,温度会上升。所以堵转测试不要长时间做,或者加温度监控。
我个人在实际操作中的体会是,H桥驱动电路看着简单,但每个细节都能让你翻车。分立方案调试周期长,但能学到东西;集成方案上手快,但要知道内部逻辑。DR70x这类芯片把很多保护做进去了,但外围的电源、布局、散热还是得自己把控。PWM调速不难,难的是在各种负载和环境下稳定运行。多测波形,多摸温度,多留余量,基本就不会出大问题。