ARTICLE DETAIL

资讯详情

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

无刷电机驱动电路设计:三相全桥拓扑与死区时间优化

无刷电机驱动电路设计:三相全桥拓扑与死区时间优化 1. 无刷电机驱动电路的整体设计思路1.1 为什么选三相全桥拓扑搞无刷电机驱动第一步永远是拓扑选型。三相全桥Three-Phase Full Bridge是目前最主流的选择原因很直接无刷电机的定子绕组通常是三相星形连接要让它转起来就得按特定顺序给三相绕组通电而且电流方向要能正反切换。全桥拓扑恰好能做到这一点——每相一个半桥上桥臂和下桥臂各一颗MOSFET总共6颗管子通过PWM控制它们的开关组合就能在绕组里产生任意方向的电流。有人会问为什么不用半桥或者H桥半桥只能单向驱动H桥适合直流有刷电机对于三相无刷电机来说三相全桥是唯一能同时满足换向和调速需求的标准方案。你去看任何一款量产的无刷电机控制器从电动工具到无人机电调从风扇驱动到伺服系统核心功率级几乎都是这个结构。6颗MOSFET的排列方式决定了电流路径。以A相为例上管导通时电流从母线正极经A相绕组流向中性点下管导通时电流从绕组流回母线负极。三相按120度电角度依次导通就形成了旋转磁场拖着转子跑。这个过程的时序控制就是后面要讲的换向逻辑和死区时间。1.2 功率级与控制级的边界划分很多新手容易把功率级和控制级混在一起设计结果调试时问题一大堆。我的习惯是先把边界划清楚功率级负责电流的通断和能量转换控制级负责逻辑运算和信号生成。两者之间通过栅极驱动芯片隔开这样控制级不会被功率级的开关噪声干扰功率级的故障也不会直接烧掉MCU。具体来说控制级通常是一颗MCU比如STM32F103RCT6这颗片子做FOC驱动非常常见负责生成6路PWM信号、采集电流和位置反馈、执行换向算法。功率级则是6颗MOSFET加上栅极驱动电路、自举电路、电流采样电阻和母线电容。栅极驱动芯片如IR2104、DRV8301等是两者之间的桥梁它把MCU的3.3V逻辑电平转换成MOSFET需要的10-15V栅极驱动电压同时提供死区插入和过流保护功能。注意控制级和功率级必须共地但共地点要选在母线电容的负极附近不能随便找个地方连。否则大电流开关时地弹会直接把MCU复位。1.3 关键参数的前期估算动手画原理图之前先把几个关键参数算清楚不然后面选管子、选驱动芯片都是拍脑袋。母线电压取决于电机额定电压和应用场景。航模电调常见11.1V3S锂电到22.2V6S电动工具多在18V-36V工业伺服可能到48V甚至更高。母线电压决定了MOSFET的耐压等级一般选1.5-2倍裕量。比如24V母线选40V或60V的管子比较稳妥。相电流峰值这个决定了MOSFET的电流等级和导通电阻要求。假设电机额定功率200W母线24V效率85%那么母线电流约9.8A。但相电流峰值可能更高尤其在低速大扭矩时。保守估计相电流峰值取母线电流的1.5-2倍约15-20A。MOSFET的连续漏极电流要大于这个值同时考虑散热条件降额使用。开关频率PWM频率影响开关损耗和电流纹波。频率太低电流纹波大电机噪音明显频率太高开关损耗增加驱动芯片和MOSFET发热严重。常见范围是8kHz-20kHz电动工具多用16kHz左右航模电调可能到24kHz以上。我一般先选16kHz调试时再根据发热和噪音调整。死区时间这是本文的重点之一后面会详细展开。初步估算时先看MOSFET的开关时间参数。比如某款MOSFET的导通延迟上升时间约50ns关断延迟下降时间约80ns那么死区时间至少要大于130ns实际取200-500ns比较安全。2. 6颗MOSFET的选型与布局要点2.1 MOSFET关键参数解读选MOSFET不能只看电流和电压几个动态参数直接决定驱动电路能不能正常工作。导通电阻Rds(on)越小越好但代价是芯片面积大、栅极电荷大、成本高。对于20A级别的应用Rds(on)在5-10毫欧比较合适。注意这个参数随温度升高会增大标称值通常是25度时的实际工作结温100度时可能翻倍。计算导通损耗时要用热态值。栅极电荷Qg这个参数决定了驱动芯片需要提供多少电流才能快速开关。Qg越大开关速度越慢开关损耗越大。对于高频应用选Qg小的管子。但Qg小的管子通常Rds(on)偏大需要折中。输入电容Ciss和Qg相关影响驱动电路的负载。Ciss大的管子需要驱动芯片有足够的峰值电流能力。米勒电容Crss这个参数很关键它会导致开关过程中的米勒平台影响开关速度和死区时间。Crss小的管子开关更快但容易产生振铃。热阻系数Rth(j-c)结到壳的热阻决定了散热设计的难度。这个值越小热量越容易传导出去。配合散热片和风冷可以把结温控制在安全范围内。下面是一个选型对比表以常见的几款MOSFET为例型号耐压Rds(on)10VQgCissCrss封装IRF320555V8mΩ146nC3247pF211pFTO-220IRF140440V4mΩ200nC7360pF470pFTO-220AOD418440V6mΩ32nC1800pF100pFTO-252NCE600560V5mΩ45nC2800pF150pFTO-252从表里可以看出IRF1404的Rds(on)最小但Qg和Ciss最大驱动起来最费劲。AOD4184的Qg只有32nC驱动容易但Rds(on)稍大。实际选型要看你的驱动芯片能力和散热条件。2.2 三相全桥的PCB布局原则布局不好再好的管子也白搭。我踩过的坑包括开关振铃导致管子击穿、地弹导致MCU复位、电流采样不准导致换向失败。这些问题根源都在布局。功率回路最小化母线电容、上下桥臂MOSFET、电流采样电阻构成的回路面积要尽可能小。这个回路里电流变化率很高回路电感会产生电压尖峰。我的做法是把母线电容紧贴MOSFET放置用宽铜皮连接必要时在电容两端再并一个小的高频陶瓷电容。栅极驱动回路独立栅极驱动芯片到MOSFET栅极的走线要短而粗回路面积小。栅极电阻紧贴MOSFET放置不能放在驱动芯片那边。否则走线电感会和栅极电容形成振荡。相线输出三相输出线从上下桥臂中间引出走线要宽能承受相电流。三根线尽量平行走减少差模干扰。电流采样如果采用单电阻采样采样电阻要放在母线负极和地之间走线要开尔文连接即电压检测点紧贴电阻焊盘不能从大电流路径上取。散热6颗MOSFET的漏极通常连在一起接到母线正极或负极可以利用铜皮散热。如果功率较大需要加散热片注意绝缘。实操心得我习惯在PCB上给每颗MOSFET的栅极和源极之间预留一个10k的下拉电阻位置调试时如果发现管子误导通可以焊上这个电阻。量产时如果确认不需要可以不贴。2.3 自举电路的设计细节三相全桥的上桥臂MOSFET需要浮地驱动最常用的方案是自举电容。原理很简单下桥臂导通时自举电容通过自举二极管从驱动电源充电上桥臂导通时自举电容上的电压作为上桥臂驱动芯片的电源参考点是上桥臂的源极即相线输出。自举电容的容量计算假设上桥臂MOSFET的Qg为100nC驱动芯片静态电流1mAPWM频率16kHz最大占空比95%。那么每个周期自举电容需要提供的电荷约为Qg加上驱动芯片的静态电荷。静态电荷1mA×(1/16kHz)×0.95≈59nC。总电荷约159nC。自举电容电压降允许0.5V则CQ/V159nC/0.5V≈318nF。实际取1uF比较稳妥留足裕量。自举二极管要选快恢复二极管反向恢复时间短耐压大于母线电压。常见型号如1N4148耐压100V电流小适合小功率或ES1J耐压600V电流1A。注意自举电容不能太大否则充电时间常数大低频时可能充不满。也不能太小否则高频时电压跌落严重。1uF是个比较通用的值。3. 死区时间的设置与优化3.1 死区时间为什么必须存在死区时间Dead Time是上下桥臂MOSFET都关断的一段时间。为什么需要它因为MOSFET不是理想开关关断需要时间。如果上桥臂还没完全关断下桥臂就导通了母线正极和负极之间就通过上下桥臂形成了直通短路瞬间电流可能达到几百安培管子直接炸掉。这个直通电流有多大假设母线电压24V回路总电阻包括MOSFET的Rds(on)、走线电阻、电容ESR约50毫欧那么直通电流24V/50mΩ480A。即使时间很短产生的热量也足以损坏管子。所以死区时间是保护功率级的关键。但死区时间也不是越大越好。死区期间电流通过MOSFET的体二极管续流体二极管的正向压降比MOSFET导通电阻产生的压降大得多损耗增加。而且体二极管的反向恢复特性差会产生额外的开关损耗和EMI。所以死区时间要在保证安全的前提下尽可能小。3.2 死区时间的计算方法死区时间的最小值取决于MOSFET的关断时间。关断时间包括关断延迟时间和下降时间。以IRF3205为例关断延迟时间td(off)约40ns下降时间tf约50ns总关断时间约90ns。考虑驱动芯片的传输延迟和温度影响再留50%裕量死区时间至少135ns。但实际还要考虑驱动电阻的影响。栅极驱动电阻越大关断越慢。假设驱动电阻10欧姆栅极电荷146nC驱动电压12V那么关断时间常数10Ω×Ciss。Ciss3247pF时间常数约32ns关断到90%需要2.3倍时间常数约74ns。加上延迟总关断时间可能超过150ns。所以死区时间的计算公式可以简化为死区时间 ≥ (td(off) tf) × 安全系数安全系数取1.5-2。对于IRF3205死区时间取200-300ns比较合适。如果使用集成驱动芯片如IR2104它内部有固定的死区时间典型值520ns。这个值对于大多数应用是安全的但会带来额外的体二极管损耗。如果追求效率可以选死区时间更短的驱动芯片或者用MCU的互补PWM输出加可编程死区。3.3 死区时间对电机性能的影响死区时间设置不当电机会表现出明显的症状。死区太大低速时转矩脉动明显电机发热增加效率下降。因为死区期间电流被迫走体二极管压降大损耗大。而且死区会导致输出电压失真产生低次谐波引起转矩波动。死区太小上下桥臂直通风险增加尤其在高温、高压、高开关速度下。直通不一定马上炸管但会逐渐损伤MOSFET降低可靠性。死区不对称如果上下桥臂的死区时间不一致会导致输出电压直流偏置电机可能产生直流电流分量引起额外损耗和噪音。我实测过一款电机死区从200ns增加到500ns空载电流从0.3A增加到0.5A效率下降约3%。所以死区时间要精细调整。3.4 死区时间的动态调整策略固定死区时间简单但不够优化。更好的做法是根据工作条件动态调整。根据电流调整轻载时电流小关断时间短死区可以小一些重载时电流大关断时间长死区需要大一些。有些高级驱动芯片支持这种自适应死区控制。根据温度调整高温下MOSFET的开关时间变长死区需要增加。可以在MCU里根据温度传感器读数查表调整死区。根据母线电压调整母线电压高时关断时的电压尖峰大死区需要增加。实现方法在MCU的PWM配置里死区时间通常是一个寄存器值。可以写一个函数根据当前电流、温度、电压计算死区值实时更新寄存器。实操心得调试死区时间时我习惯先用示波器看上下桥臂的栅极电压波形确认没有重叠。然后看相线输出的电压波形观察体二极管续流的时间。如果续流时间太长说明死区太大如果几乎没有续流平台说明死区刚好。最后用电流探头看母线电流确认没有直通尖峰。4. 驱动电路的调试与问题排查4.1 上电前的静态检查焊完板子不要急着上电先做静态检查。短路检查用万用表测母线正极和负极之间的电阻应该大于几十千欧。如果接近零说明有短路可能是MOSFET击穿或焊接短路。栅极检查测每颗MOSFET的栅极和源极之间的电阻应该接近无穷大除了下拉电阻。如果电阻很小说明栅极击穿或焊锡短路。自举电路检查测自举电容两端的电阻应该接近无穷大。测自举二极管的正反向电阻应该单向导通。驱动芯片检查给驱动芯片单独供电测输出端电压。输入PWM信号测输出是否跟随。注意要先断开MOSFET避免驱动芯片故障导致管子直通。4.2 上电调试步骤静态检查通过后可以上电调试。我习惯用可调电源限流值设小一点比如0.5A防止意外。第一步只给控制级上电。确认MCU正常工作PWM输出正常。用示波器看6路PWM信号确认频率、占空比、死区时间都正确。第二步给驱动级上电不给母线电压。确认驱动芯片输出正常栅极电压在10-15V之间。注意上桥臂的栅极电压是浮地的示波器要用差分探头或者隔离探头。第三步给母线电压但电机不接。用示波器看相线输出。如果PWM占空比固定相线应该输出对应的电压。注意观察有没有振铃、尖峰。第四步接电机低速运行。先给很低的占空比让电机慢慢转。观察电流波形确认换向正常。如果电机抖动或者不转检查换向顺序。第五步逐步增加负载和转速。观察MOSFET和驱动芯片的温度确认在安全范围内。4.3 常见问题速查表现象可能原因排查方法解决方法上电就炸管上下桥臂直通测栅极波形有无重叠增加死区时间检查驱动芯片电机抖动不转换向顺序错误检查霍尔信号和PWM对应关系调整换向表低速转矩小死区太大测相线电压波形减小死区时间高速发热严重开关损耗大测栅极波形上升下降时间减小栅极电阻换Qg小的管子电流采样不准采样电阻布局差测采样电压波形开尔文连接加RC滤波MCU频繁复位地弹干扰测MCU电源和地优化共地点加去耦电容自举电容电压不足自举电容太小或二极管慢测自举电容电压增大电容换快恢复二极管相线电压振铃回路电感大测相线电压波形减小功率回路面积加RC吸收4.4 独家避坑技巧技巧一用电流探头看直通。没有电流探头怎么办可以在母线负极串一个小电阻比如10毫欧用示波器测电阻两端电压。正常工作时是PWM波形如果有直通会看到窄的尖峰。技巧二栅极电阻先大后小。调试时先用10欧姆的栅极电阻确认没有振铃后再逐步减小到4.7欧姆或2.2欧姆。栅极电阻太小容易振荡太大开关损耗高。技巧三自举电容并联小电容。自举电容用1uF电解或钽电容再并联一个100nF陶瓷电容可以改善高频响应。技巧四MOSFET并联要谨慎。如果单颗管子电流不够可以并联。但并联时要注意均流栅极电阻要独立源极走线要对称。否则可能一颗管子先导通承担大部分电流然后过热损坏。技巧五散热片要绝缘。如果6颗MOSFET共用一个散热片而散热片又接地那么漏极和散热片之间需要绝缘垫片。否则漏极短路。绝缘垫片会增加热阻要选导热好的。技巧六PWM频率不要盲目提高。有人觉得频率越高越安静但开关损耗和驱动损耗会急剧增加。16kHz已经超出人耳听觉范围再高意义不大除非有特殊需求。技巧七死区时间用示波器实测。不要只看驱动芯片手册的标称值实际电路中的死区时间可能因为走线延迟而不同。用示波器同时测上下桥臂的栅极电压看交叉点。技巧八电机线要短。电机线太长会引入电感导致相线电压振铃。如果电机线必须长可以在控制器输出端加共模电感和RC吸收。技巧九先低压调试。第一次调试用低母线电压比如12V确认没问题再升到24V或更高。低压下即使直通能量也小不容易炸管。技巧十记录波形。调试时把关键波形截图保存包括栅极电压、相线电压、母线电流、自举电容电压。出问题时对比正常波形快速定位。5. 从驱动电路到FOC控制的衔接5.1 驱动电路对FOC算法的影响FOC磁场定向控制对驱动电路的要求比方波换向高得多。方波换向只需要6步每步60度对死区时间不敏感。FOC需要连续调节三相电压的幅值和相位死区时间会导致输出电压误差影响电流环的精度。具体来说死区时间会导致实际输出电压比指令电压小一个固定值这个误差与电流方向有关。在电流过零点附近误差会导致波形畸变产生转矩脉动。所以FOC应用需要更精细的死区补偿。死区补偿的方法根据相电流的方向在PWM占空比上叠加一个补偿量。如果电流为正补偿量使占空比增加如果电流为负补偿量使占空比减小。补偿量的大小等于死区时间除以PWM周期。5.2 STM32F103RCT6的PWM配置要点STM32F103RCT6的高级定时器TIM1可以生成6路互补PWM非常适合三相全桥驱动。配置要点时钟配置TIM1挂载在APB2总线上时钟频率72MHz。预分频器设为0自动重装载寄存器设为(72MHz/16kHz)-14499得到16kHz的PWM频率。死区配置TIM1的BDTR寄存器有死区发生器可以设置死区时间。死区时间DTG[7:0]×tDTS其中tDTS是定时器时钟周期。72MHz下tDTS13.89ns。如果死区时间要200nsDTG值约14。互补输出配置通道1、2、3配置为PWM模式1通道1N、2N、3N配置为互补输出。使能CCxE和CCxNE位。刹车功能配置刹车输入过流时自动关闭PWM输出保护功率级。中心对齐模式FOC通常用中心对齐PWM可以减少谐波。配置CMS位为01或11。代码示例基于HAL库TIM_HandleTypeDef htim1; TIM_OC_InitTypeDef sConfigOC; TIM_BreakDeadTimeConfigTypeDef sBreakDeadTimeConfig; htim1.Instance TIM1; htim1.Init.Prescaler 0; htim1.Init.CounterMode TIM_COUNTERMODE_CENTERALIGNED1; htim1.Init.Period 4499; htim1.Init.ClockDivision TIM_CLOCKDIVISION_DIV1; htim1.Init.RepetitionCounter 0; htim1.Init.AutoReloadPreload TIM_AUTORELOAD_PRELOAD_ENABLE; HAL_TIM_PWM_Init(htim1); sConfigOC.OCMode TIM_OCMODE_PWM1; sConfigOC.Pulse 0; sConfigOC.OCPolarity TIM_OCPOLARITY_HIGH; sConfigOC.OCNPolarity TIM_OCNPOLARITY_HIGH; sConfigOC.OCFastMode TIM_OCFAST_DISABLE; sConfigOC.OCIdleState TIM_OCIDLESTATE_RESET; sConfigOC.OCNIdleState TIM_OCNIDLESTATE_RESET; HAL_TIM_PWM_ConfigChannel(htim1, sConfigOC, TIM_CHANNEL_1); HAL_TIM_PWM_ConfigChannel(htim1, sConfigOC, TIM_CHANNEL_2); HAL_TIM_PWM_ConfigChannel(htim1, sConfigOC, TIM_CHANNEL_3); sBreakDeadTimeConfig.OffStateRunMode TIM_OSSR_DISABLE; sBreakDeadTimeConfig.OffStateIDLEMode TIM_OSSI_DISABLE; sBreakDeadTimeConfig.LockLevel TIM_LOCKLEVEL_OFF; sBreakDeadTimeConfig.DeadTime 14; sBreakDeadTimeConfig.BreakState TIM_BREAK_ENABLE; sBreakDeadTimeConfig.BreakPolarity TIM_BREAKPOLARITY_HIGH; sBreakDeadTimeConfig.AutomaticOutput TIM_AUTOMATICOUTPUT_ENABLE; HAL_TIMEx_ConfigBreakDeadTime(htim1, sBreakDeadTimeConfig); HAL_TIM_PWM_Start(htim1, TIM_CHANNEL_1); HAL_TIMEx_PWMN_Start(htim1, TIM_CHANNEL_1); HAL_TIM_PWM_Start(htim1, TIM_CHANNEL_2); HAL_TIMEx_PWMN_Start(htim1, TIM_CHANNEL_2); HAL_TIM_PWM_Start(htim1, TIM_CHANNEL_3); HAL_TIMEx_PWMN_Start(htim1, TIM_CHANNEL_3);5.3 电流采样与死区补偿的配合FOC需要采样三相电流。常用方案是双电阻采样或单电阻采样。双电阻采样在下桥臂的两个管子源极串采样电阻单电阻采样在母线负极串一个电阻。采样时刻很关键。中心对齐PWM下采样通常在PWM周期中点进行此时下桥臂导通采样电阻上有电流。但死区时间会影响采样时刻的电流值需要补偿。具体做法在死区期间电流走体二极管采样电阻上没有电流。所以采样要避开死区时间。如果死区时间200nsPWM周期62.5us那么采样窗口要设在死区之后。实操心得我调试FOC时先用开环运行给定固定的电压矢量观察电流波形。如果电流波形有畸变先检查死区补偿。补偿量可以从0开始逐步增加直到电流波形正弦度最好。6. 热设计与可靠性验证6.1 MOSFET的损耗计算MOSFET的损耗分导通损耗和开关损耗。导通损耗P_cond I_rms² × Rds(on) × D其中I_rms是相电流有效值D是占空比。对于三相全桥每颗管子导通时间约1/3周期所以D≈0.33。假设I_rms10ARds(on)8mΩP_cond100×0.008×0.330.264W。开关损耗P_sw 0.5 × Vds × Id × (tr tf) × f_sw其中tr和tf是上升和下降时间。假设Vds24VId10Atr50nstf50nsf_sw16kHzP_sw0.5×24×10×100e-9×160000.192W。总损耗约0.456W。6颗管子总损耗约2.7W。这个热量需要散出去。6.2 散热方案选择小功率应用100W可以用PCB铜皮散热注意铜皮面积要大最好双面铺铜用过孔连接。中功率100W-500W需要加散热片用导热硅脂或导热垫。大功率500W需要风冷或水冷。散热片的热阻计算假设环境温度40度允许结温125度总热阻 (125-40)/2.7 31.5度/W。MOSFET的结到壳热阻约1.5度/W壳到散热片热阻约0.5度/W散热片到环境热阻需要小于29.5度/W。选一个常见的铝散热片热阻约10度/W足够。6.3 可靠性测试项目高温老化在最高工作温度下连续运行24小时观察参数漂移。低温启动在-20度下启动确认驱动电路正常工作。电压波动母线电压在±20%范围内波动确认不死机、不炸管。负载突变突然加载和卸载确认电流环稳定。堵转测试电机堵转确认过流保护及时动作。振动测试模拟运输和使用中的振动确认焊点可靠。注意堵转测试很危险一定要先确认过流保护有效。我一般先用小电流测试保护阈值再逐步增加。6.4 量产一致性考虑实验室调通的电路量产时可能因为元器件公差、PCB批次差异而出现问题。几个关键点MOSFET的一致性同一批次的管子参数接近不同批次可能差异较大。建议固定供应商和批次。驱动芯片的一致性死区时间、传输延迟可能有差异。选品牌芯片不要用杂牌。PCB的一致性走线阻抗、散热条件要一致。拼板时注意边缘板和中板的热分布不同。电机的差异不同电机的电感、电阻不同换向参数需要适配。最好在产线上做参数自学习。7. 个人调试体会与扩展思路死区时间这个事说大不大说小不小。我刚开始搞无刷驱动的时候觉得死区时间随便设个500ns就行了结果低速时电机发热严重效率低得可怜。后来用示波器仔细看波形发现体二极管续流时间太长把死区降到200ns效率立刻上来了。但降到100ns时高温下偶尔出现直通管子炸了两颗。最后定在250ns配合温度补偿才稳定下来。MOSFET的布局也是血泪教训。早期版本把母线电容放在板子边缘离MOSFET很远结果开关时电压尖峰超过耐压值管子击穿。后来把电容移到管子旁边尖峰立刻降下来。还有一次栅极驱动芯片放在板子另一面走线长了栅极波形振荡管子发热严重。重新布局后问题消失。FOC和方波换向对驱动电路的要求确实不一样。方波换向时死区时间大一点无所谓反正每60度才换一次。FOC连续调节死区误差直接影响电流环。我现在的做法是方波应用死区设300nsFOC应用死区设150ns加补偿。这个内容后续还可以这样扩展一是加入无感FOC的启动算法从驱动电路的角度看反电动势检测二是研究不同PWM调制方式SPWM、SVPWM对死区补偿的影响三是用氮化镓器件替换MOSFET看死区时间能降到多少。这些方向都有实际价值等有时间再折腾。
返回列表