ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

H桥驱动快衰减与慢衰减模式实测对比:DRV8701与STM32实战

H桥驱动快衰减与慢衰减模式实测对比:DRV8701与STM32实战 1. 项目缘起为什么我要死磕H桥的衰减模式搞直流电机驱动的朋友大概率都经历过这个场景板子焊好了代码跑通了PWM一给电机转起来了心里美滋滋。但跑不了几分钟就发现——MOS管烫得能煎鸡蛋电机低速时抖得像筛糠电流波形用示波器一看惨不忍睹。更诡异的是同样的硬件换一种衰减模式温升直接降了二十多度低速平稳性肉眼可见地变好。这就是我今天要聊的核心话题H桥驱动中的快衰减与慢衰减模式。别看这两个词听起来像是教科书里的概念实际调车、调云台、做机器人关节的时候选错了模式轻则效率低、发热大重则MOS管炸管、电机飞车。我这次拿DRV8701这颗TI的H桥栅极驱动器搭了一套测试平台配合STM32F103输出PWM系统地对比了两种衰减模式在直流有刷电机上的表现攒了一批实测数据也踩了不少坑。这篇文章适合谁看如果你正在做直流电机调速、H桥驱动电路设计或者用STM32、CCU6这类外设输出PWM控制电机那这篇内容应该能帮你省下不少试错时间。我会从H桥的基本原理讲起把快衰减和慢衰减的电流路径拆开揉碎再上实测波形和数据最后给出不同场景下的选型建议。全程说人话不堆公式但关键的计算过程和配置细节一个不落。提示本文涉及的测试平台为24V/5A有刷直流电机、DRV8701评估板、STM32F103C8T6最小系统板、1000:1电流探头、四通道示波器。所有数据均为实测非仿真。2. H桥驱动电路原理快速回顾2.1 H桥的四种基本状态H桥说白了就是四个开关管围成一个“H”形电机横在中间。四个管子分别叫高边左Q1、低边左Q2、高边右Q3、低边右Q4。通过不同的开关组合电机两端可以接到正电压、负电压、或者短接在一起。正转Q1和Q4导通电流从电源正极→Q1→电机→Q4→地。反转Q3和Q2导通电流方向相反。刹车短接制动Q2和Q4同时导通或者Q1和Q3同时导通电机两端被短接反电动势产生的电流在低边管子内部循环产生制动力矩。滑行高阻态四个管子全关电机两端悬空电流只能通过体二极管续流。实际做PWM调速的时候我们不会让管子一直导通而是让高边管子以一定频率开关。这就引出了一个问题关断期间电机电感里的电流往哪走答案就是衰减模式要解决的问题。2.2 为什么关断期间电流路径如此关键电机绕组本质是个大电感电感电流不能突变。当高边管子关断时绕组里储存的能量必须找到释放路径。这个路径的选择直接决定了电流衰减的速度、续流损耗的大小、以及电机端电压的波形。快衰减的意思是关断期间让电流通过电源和地快速泄放能量回馈到电源母线。慢衰减则是让电流在低边管子内部循环能量主要在绕组电阻和管子导通电阻上消耗掉。这两种模式没有绝对的优劣关键看你的应用更在意什么——是电流响应速度还是效率与发热。下面我把两种模式的电流路径画出来文字描述再结合DRV8701的配置讲实操。2.3 DRV8701的衰减模式配置逻辑DRV8701是TI的一款单H桥栅极驱动器支持PWM控制内部集成了电荷泵和电流检测放大器。它的衰减模式通过两个引脚配置MODE和DECAY。具体真值表如下MODE引脚DECAY引脚衰减模式说明00慢衰减关断期间低边导通电流内部循环01快衰减关断期间所有管子关断电流回馈母线10混合衰减先快衰减一段时间再切慢衰减11慢衰减同第一行我这次测试主要用前两种模式混合衰减留到后面提一句。配置的时候注意MODE和DECAY引脚不能悬空必须给明确电平否则驱动器内部逻辑会乱可能出现上下管直通的风险。注意DRV8701的PWM输入是直接控制高边管子的低边管子由内部逻辑根据衰减模式自动控制。所以你在STM32端只需要输出一路PWM给DRV8701的PWM引脚即可不需要自己生成互补PWM。3. 快衰减与慢衰减的电流路径深度拆解3.1 慢衰减模式电流在低边循环慢衰减模式下当PWM高电平期间Q1和Q4导通电流从电源流向电机。当PWM变为低电平Q1关断但Q4保持导通同时Q2被内部逻辑导通。此时电机两端通过Q2和Q4短接电感电流继续沿着原来的方向流动路径是电机→Q4→地→Q2→电机。这个路径里电流不经过电源只在低边两个管子或者低边管子加体二极管里循环。因为管子导通电阻很小DRV8701外接的MOS管Rds(on)大概几毫欧所以回路总电阻很小电流衰减得很慢。电流纹波小电机运转平稳但缺点是能量全部消耗在电阻上效率低而且低边管子会持续发热。实测中我发现慢衰减模式下电机低速时的电流波形非常平滑几乎看不到明显的纹波。但MOS管温度上升很快尤其是低边管子因为续流电流一直走它。3.2 快衰减模式电流回馈母线快衰减模式下PWM低电平期间Q1和Q4都关断Q2和Q3也关断。电机电感电流被迫通过体二极管续流电机→Q3的体二极管→电源正极→电源负极→Q2的体二极管→电机。这个路径把能量回馈到电源母线电流下降速度取决于母线电压和反电动势的差值。因为母线电压通常比反电动势高不少所以电流衰减非常快。好处是能量回收了一部分效率高管子发热小。坏处是电流纹波大低速时电机会有明显的抖动而且回馈到母线的电流可能引起母线电压泵升如果电源吸收能力差可能触发过压保护。实测中快衰减模式下电机端电压波形会出现明显的尖峰电流下降沿很陡。用示波器看电流纹波大概是慢衰减模式的三到四倍。3.3 两种模式的电流波形对比为了直观对比我把两种模式下的关键波形特征整理成表格特征慢衰减快衰减续流路径低边管子内部循环体二极管回馈母线电流纹波小大电流衰减速度慢快能量去向电阻消耗回馈电源MOS管发热低边管发热明显整体发热小低速平稳性好差动态响应慢快母线电压影响小可能泵升这张表是后面所有选型建议的基础建议先理解透。4. 实测平台搭建与参数配置4.1 硬件清单与接线要点我用的硬件如下电机24V有刷直流电机额定电流2A堵转电流5A电感量约1.2mH。驱动器DRV8701评估板外接MOS管为CSD18540Rds(on)约3.5mΩ。主控STM32F103C8T6TIM1_CH1输出PWM频率20kHz。电源24V/10A开关电源并联1000μF电解电容。测量TCP0030A电流探头MSO54示波器。接线的时候有几个坑要注意DRV8701的VM引脚必须就近放一个0.1μF陶瓷电容和一个10μF钽电容否则PWM开关瞬间的电压尖峰可能超过芯片耐压。电机两端要并一个104陶瓷电容和一个小阻值RC吸收抑制换向火花。电流探头要夹在电机线上注意方向否则波形反相。4.2 STM32端PWM配置细节STM32F103的TIM1_CH1配置为PWM模式1预分频器设为0自动重装载值设为3599这样PWM频率就是72MHz/(35991)20kHz。占空比通过比较寄存器CCR1调节范围0到3599。代码关键部分如下// TIM1 PWM初始化 void TIM1_PWM_Init(u16 arr, u16 psc) { GPIO_InitTypeDef GPIO_InitStructure; TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; TIM_OCInitTypeDef TIM_OCInitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1 | RCC_APB2Periph_GPIOA, ENABLE); GPIO_InitStructure.GPIO_Pin GPIO_Pin_8; GPIO_InitStructure.GPIO_Mode GPIO_Mode_AF_PP; GPIO_InitStructure.GPIO_Speed GPIO_Speed_50MHz; GPIO_Init(GPIOA, GPIO_InitStructure); TIM_TimeBaseStructure.TIM_Period arr; TIM_TimeBaseStructure.TIM_Prescaler psc; TIM_TimeBaseStructure.TIM_ClockDivision 0; TIM_TimeBaseStructure.TIM_CounterMode TIM_CounterMode_Up; TIM_TimeBaseInit(TIM1, TIM_TimeBaseStructure); TIM_OCInitStructure.TIM_OCMode TIM_OCMode_PWM1; TIM_OCInitStructure.TIM_OutputState TIM_OutputState_Enable; TIM_OCInitStructure.TIM_Pulse 0; TIM_OCInitStructure.TIM_OCPolarity TIM_OCPolarity_High; TIM_OC1Init(TIM1, TIM_OCInitStructure); TIM_CtrlPWMOutputs(TIM1, ENABLE); TIM_OC1PreloadConfig(TIM1, TIM_OCPreload_Enable); TIM_ARRPreloadConfig(TIM1, ENABLE); TIM_Cmd(TIM1, ENABLE); }配置的时候注意TIM1是高级定时器必须调用TIM_CtrlPWMOutputs使能输出否则引脚没波形。另外死区时间这里不需要设置因为DRV8701内部有防直通逻辑我们只给一路PWM。4.3 DRV8701衰减模式切换方法DRV8701的MODE和DECAY引脚我直接接到STM32的PB0和PB1通过GPIO控制。初始化的时候把这两个引脚配成推挽输出然后根据测试需求切换电平。// 配置MODE和DECAY引脚 void DRV8701_Mode_Init(void) { GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); GPIO_InitStructure.GPIO_Pin GPIO_Pin_0 | GPIO_Pin_1; GPIO_InitStructure.GPIO_Mode GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed GPIO_Speed_50MHz; GPIO_Init(GPIOB, GPIO_InitStructure); } // 设置慢衰减 void Set_Slow_Decay(void) { GPIO_ResetBits(GPIOB, GPIO_Pin_0); // MODE0 GPIO_ResetBits(GPIOB, GPIO_Pin_1); // DECAY0 } // 设置快衰减 void Set_Fast_Decay(void) { GPIO_ResetBits(GPIOB, GPIO_Pin_0); // MODE0 GPIO_SetBits(GPIOB, GPIO_Pin_1); // DECAY1 }切换模式的时候最好先把PWM占空比降到零等电机停稳再切否则瞬间的电流冲击可能让驱动器进入保护状态。5. 实测数据与波形分析5.1 电流纹波对比我在24V母线、50%占空比、20kHz PWM条件下分别测了两种模式的电流波形。慢衰减模式下电流纹波峰峰值约120mA快衰减模式下纹波峰峰值约450mA。这个差距在低速时更明显10%占空比时慢衰减纹波约80mA快衰减能到600mA以上。纹波大的直接后果就是电机转矩脉动大低速时能听到明显的嗡嗡声用手摸电机轴能感觉到抖动。如果你做的是云台或者机械臂关节这种抖动是致命的。5.2 MOS管温升对比温升测试条件环境温度25℃电机连续运行30分钟占空比50%负载为额定转矩的50%。用热电偶贴在MOS管表面测量。模式高边管温度低边管温度驱动器芯片温度慢衰减48℃72℃55℃快衰减42℃45℃44℃慢衰减模式下低边管温度明显偏高因为续流电流一直走低边管子。快衰减模式下四个管子温度比较均衡整体温升低不少。如果你用的是小封装MOS管或者散热条件差慢衰减模式可能撑不住。5.3 动态响应对比我让电机从10%占空比阶跃到80%用示波器抓电流上升时间。快衰减模式下电流从10%上升到90%用了约1.2ms慢衰减模式下用了约3.5ms。快衰减的动态响应明显更快适合需要快速加减速的场景比如轮速控制或者位置伺服。但快衰减的代价是电流超调更大阶跃瞬间电流尖峰能到稳态值的1.8倍而慢衰减只有1.2倍。这个尖峰对电源和MOS管都是考验母线电容不够的话电压会被拉低。5.4 母线电压泵升现象快衰减模式下回馈到母线的电流会导致母线电压升高。我特意把母线电容减小到100μF用示波器看母线电压波形。在50%占空比、电机转速3000rpm时母线电压从24V泵升到28.5V超过了电源的过压保护阈值电源直接进入保护状态输出关断。后来我把母线电容加回1000μF泵升电压降到25.8V在安全范围内。所以用快衰减模式母线电容一定要给足经验值是每安培额定电流配200μF以上。6. 不同应用场景下的选型建议6.1 低速高平稳性场景选慢衰减如果你做的是云台、机械臂关节、或者需要极低转速平稳运行的设备慢衰减是首选。电流纹波小转矩脉动低电机运行安静。但要注意低边管子的散热必要时加散热片或者换更低Rds(on)的管子。我试过在慢衰减模式下把PWM频率降到10kHz纹波进一步减小但电机噪音反而变大了因为频率进入了人耳敏感范围。所以频率还是保持在20kHz以上比较好。6.2 高速高动态场景选快衰减轮式机器人、竞速模型、需要快速启停的场合快衰减更合适。动态响应快能量回馈效率高管子发热小。但必须做好母线电容储能和过压保护否则容易炸电源。另外快衰减模式下电机低速时抖动明显如果你的应用需要从零速平滑启动可以考虑混合衰减模式先快衰减快速建立电流再切慢衰减维持平稳。6.3 混合衰减的折中方案DRV8701支持混合衰减通过MODE1、DECAY0配置。内部逻辑会在PWM关断初期先快衰减一段时间具体时长由内部定时器决定然后自动切换到慢衰减。这样兼顾了动态响应和低速平稳性算是折中方案。实测下来混合衰减的电流纹波介于快慢之间温升也比纯慢衰减低。如果你拿不准选哪种可以先从混合衰减入手再根据实际表现调整。7. 常见问题与排查技巧实录7.1 PWM接MOS管发热严重怎么办这是新手最常遇到的问题。先检查PWM频率是不是太低低于1kHz的话MOS管开关损耗会很大。建议至少10kHz20kHz以上更好。然后检查栅极驱动电阻DRV8701默认输出电流能力有限如果外接MOS管栅极电荷Qg太大开关速度会变慢开关损耗急剧增加。选Qg小于20nC的管子比较稳妥。还有一个隐蔽的坑如果PWM占空比接近100%或者0%高边管子长时间导通或关断低边管子的续流时间过长也会发热。这种情况下可以考虑在软件里限制占空比范围比如5%到95%。7.2 电机低速抖动厉害怎么调先确认衰减模式。快衰减模式下低速抖动是正常的切到慢衰减或者混合衰减试试。如果还是抖检查PWM分辨率够不够。STM32F103的TIM1是16位定时器20kHz频率下分辨率有3600级低速时占空比调节精度约0.03%应该够用。如果用的是8位定时器低速时占空比跳变太大就会抖。另外电源内阻也有影响。我用过一个便宜开关电源内阻大电机低速时电流脉动导致电压波动反馈到PWM控制环里就抖。换了个低内阻电源就好了。7.3 快衰减模式下电源保护怎么解决前面说了母线电容要给足。另外可以在电源输出端并一个瞬态电压抑制二极管TVS钳位电压选比母线电压高2到3V的。如果电源本身有过压保护可以把保护阈值调高一点或者加一个泄放电路用功率电阻和MOS管组成有源泄放检测到母线电压超过阈值就导通电阻泄放能量。我自己的做法是母线电容1000μF起步再加一个33V的TVS目前没再出现过压保护。7.4 常见问题速查表现象可能原因解决方法MOS管发热严重PWM频率低、栅极电荷大、占空比极端提高频率、换低Qg管子、限制占空比电机低速抖动快衰减模式、PWM分辨率低、电源内阻大切慢衰减、换高分辨率定时器、换电源电源过压保护快衰减回馈能量、母线电容不足加大母线电容、加TVS、加泄放电路电机不转PWM没输出、DRV8701使能脚没拉高、模式配置错误查波形、查使能、查MODE/DECAY电平电流波形异常电流探头方向反、采样电阻虚焊、地环路干扰调探头方向、补焊、单点接地8. 实操心得与避坑经验调了这么多天有几个心得是文档里不会写的。第一DRV8701的DECAY引脚在切换模式时最好等电机电流降到零再切否则内部逻辑可能误判导致瞬间上下管直通。我一开始没注意炸了两颗管子才长记性。第二慢衰减模式下低边管子的体二极管其实也在参与续流如果体二极管反向恢复时间太长开关瞬间会有尖峰电流。选MOS管的时候体二极管反向恢复电荷Qrr越小越好最好选快恢复体二极管的型号。第三PWM频率不是越高越好。我试过50kHz开关损耗明显增加管子温度反而比20kHz时高。20kHz是个比较平衡的点既避开音频噪声开关损耗也可接受。第四如果你用STM32F103的TIM1输出PWM记得把刹车功能关掉否则一旦触发刹车输入PWM输出直接关断电机就失控了。刹车输入引脚默认是使能的不用的话要配置成普通IO或者禁用刹车功能。最后再分享一个小技巧调试的时候可以在电机线上串一个0.01Ω的采样电阻用差分探头看电流波形比用电流探头方便成本也低。采样电阻的功耗要算一下2A电流下0.01Ω就是0.04W用0805封装就够了。这个内容后续还可以这样扩展把混合衰减的占空比和切换时间做成可配置的根据电机转速和负载动态调整应该能进一步提升效率和平稳性。我接下来打算试试用STM32的DAC输出模拟电压给DRV8701的VREF引脚实现电流闭环控制到时候有数据再分享。
返回列表