ARTICLE DETAIL

资讯详情

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

FOC硬件设计实战:从功率级到PCB布局的避坑指南

FOC硬件设计实战:从功率级到PCB布局的避坑指南 FOCField-Oriented Control磁场定向控制这几年在嵌入式圈子里热度一直没降过。但凡你接触过无刷电机、云台、平衡车、电调、机械臂关节基本都绕不开它。很多人上手FOC的路径是这样的先找个开源工程把代码烧进去电机转起来了心里一阵激动然后想自己画块板子结果一上电MOS管冒烟、电流采样跳变、电机抖动甚至堵转。问题出在哪绝大多数时候不是算法写错了而是硬件电路这一环没吃透。我做了几年电机驱动相关的硬件和固件踩过的坑不算少。这篇文章想干一件事把FOC从理论到板级的整条链路拆开讲清楚。不是那种“先讲Park变换再讲SVPWM”的教科书式流水账而是站在一个真正要画板子、要调波形、要处理发热和噪声的工程师角度把每个环节为什么这么设计、参数怎么算、PCB怎么摆、实测会遇到什么一条条说透。适合已经了解FOC基本概念、准备自己动手做驱动硬件的朋友也适合代码写得不错但硬件总是翻车的同学。整篇内容会围绕功率级、栅极驱动、电流采样、位置检测、PCB布局这几块核心展开中间穿插大量实测经验和参数计算。你如果正打算用STM32F103RCT6这类主控配一颗MOS管搭三相全桥那这篇基本可以当设计手册来对着看。1. 先想清楚FOC硬件到底在解决什么问题1.1 从算法需求反推硬件指标很多人画板子是从“找个参考原理图抄一抄”开始的这本身没错但抄之前得知道每个元件为什么在那儿。FOC算法的本质是把三相电流解耦成励磁分量Id和转矩分量Iq然后分别做PI控制。要让这个解耦成立硬件必须提供几个前提条件。第一你得能实时、准确地测到三相电流。FOC的电流环带宽通常在1kHz到5kHz意味着电流采样必须和PWM同步且在开关噪声最小的时刻采样。这就直接决定了采样电阻的放置位置、运放的带宽和共模抑制比要求。第二你得知道转子当前的角度。有感的用霍尔或编码器无感的靠反电动势或高频注入估算。角度精度直接决定转矩脉动大小一般要求电角度误差控制在几个电角度以内。第三你得能把算法算出来的占空比精确地变成三相电压加到电机上。这要求功率级的死区时间足够小、开关沿足够干净、母线电压稳定。把这三点翻译成硬件指标大概是这样的算法需求对应硬件指标典型取值电流环带宽 2kHz采样运放总延迟 50us电流精度 1%采样电阻精度运放失调电阻1%运放Vos1mV角度精度 5°电角度编码器分辨率/无感估算12位以上死区影响小死区时间200ns~500ns母线稳定母线电容按纹波电流算这张表是我自己项目里常用的经验值不是绝对标准但能帮你快速判断自己的设计有没有跑偏。1.2 功率级、驱动级、控制级的分层一块FOC驱动板逻辑上分三层。最底下是功率级就是三相全桥那六颗MOS管负责把直流变成三相交流。中间是驱动级栅极驱动芯片或者分立推挽电路负责把MCU的3.3V逻辑信号变成能快速开关MOS管的12V左右驱动信号。最上面是控制级MCU、电流采样运放、位置接口、通信接口。分层的好处是排查问题的时候能快速定位。电机不转先看控制级有没有输出PWM有PWM但MOS不开关看驱动级MOS开关了但电流不对看功率级和采样。我见过太多人一上来就怀疑算法结果查了半天发现是栅极电阻焊错了。提示画板之前先把这三层的信号流向在纸上画一遍标出每层的电源域和地回流路径。这一步花十分钟能省后面几天的调试时间。1.3 母线电压和电流等级的确定母线电压怎么定看电机额定电压和反电动势常数。比如一个KV值1000的电机24V供电时理论空载转速24000rpm。如果你只需要它跑到10000rpm那24V绰绰有余。但要注意反电动势在高速时可能超过母线电压导致无法继续加速这时候要么升压要么弱磁。电流等级看电机的持续电流和峰值电流。MOS管选型要按峰值电流留余量一般取峰值电流的1.5到2倍作为MOS的额定电流。采样电阻的功率也要按峰值电流算别只看有效值。举个例子一个额定10A、峰值30A的电机MOS管选40A以上的采样电阻如果取1mΩ峰值压降30mV功率0.9W得用2512封装甚至更大。这些数字在选型阶段就要算清楚不然后面改板很痛苦。2. 三相全桥功率级MOS管不是随便挑的2.1 MOS管选型的几个硬指标选MOS管大家第一眼看的是耐压和导通电阻Rds(on)。耐压一般取母线电压的1.5到2倍24V母线选40V或60V的管子。Rds(on)越小导通损耗越低但代价是栅极电荷Qg变大开关损耗增加。这里有个平衡点。我一般会重点看这几个参数Rds(on)决定导通损耗P_cond I² × Rds(on) × 占空比Qg总栅极电荷决定驱动损耗和开关速度Qg越大驱动电流要求越高Coss输出电容影响开关损耗和死区期间的续流Coss大的管子开关损耗高Vgs(th)导通阈值逻辑电平MOS管Vgs(th)2V可以直接用3.3V驱动但一般还是用专用驱动芯片SOA安全工作区这个最容易被忽略后面单独讲以常见的NCEP40T系列或者IRF3205为例IRF3205的Rds(on)约8mΩQg约100nC在24V、10A的应用里导通损耗约0.8W需要加散热片。如果换成Rds(on) 2mΩ的管子导通损耗降到0.2W但Qg可能到200nC驱动损耗翻倍。所以不是Rds(on)越小越好要看你的开关频率。2.2 开关损耗的计算与频率取舍开关损耗P_sw ≈ 0.5 × Vds × Id × (tr tf) × fsw。假设母线24V电流10A上升时间100ns下降时间100ns开关频率20kHz那么P_sw 0.5 × 24 × 10 × 200e-9 × 20000 0.48W。六颗管子加起来接近3W这个热量不小。如果开关频率提到40kHz开关损耗直接翻倍到6W。所以FOC的PWM频率一般选16kHz到20kHz既能避开人耳听觉范围20kHz以上听不到啸叫又不至于开关损耗太大。有些应用为了降低噪声会选25kHz但要注意散热。死区时间也会影响损耗。死区期间电流通过体二极管续流体二极管压降大、反向恢复慢损耗比MOS导通大得多。所以死区时间要尽量小但太小又会导致上下管直通。一般取200ns到500ns具体看驱动芯片和MOS的开关速度。2.3 体二极管和死区期间的电流路径MOS管内部有个寄生体二极管从源极指向漏极。在三相全桥里当上管关断、下管还没开通的死区期间电机的感性电流需要一条续流路径这时候体二极管就派上用场了。但体二极管的问题在于压降大约0.7V到1V反向恢复电荷Qrr大恢复时会产生尖峰和振荡。如果死区时间太长体二极管导通时间增加损耗和EMI都会变差。解决办法有两个一是选Qrr小的MOS管比如一些带快恢复体二极管的型号二是在体二极管两端并联肖特基二极管但这会增加成本和布板面积。实际项目里如果开关频率不高、电流不大靠MOS体二极管也能凑合但大电流场合一定要重视。注意死区时间不是越小越好。我试过把死区设到100ns结果因为驱动芯片的传输延迟不一致上下管出现了直通瞬间炸管。后来老老实实回到300ns配合死区补偿算法波形反而更干净。2.4 母线电容的选型与纹波电流母线电容的作用是吸收PWM开关产生的纹波电流稳定母线电压。选型主要看两个参数容值和纹波电流承受能力。容值估算C ≥ I × D × (1-D) / (fsw × ΔV)。假设I10AD0.5fsw20kHz允许纹波ΔV0.5V那么C ≥ 10 × 0.25 / (20000 × 0.5) 250uF。实际会取2到3倍余量用470uF到1000uF。纹波电流方面电解电容的纹波电流额定值要大于实际纹波电流有效值。实际纹波电流约等于相电流的0.3到0.5倍。10A相电流对应3到5A纹波电流普通电解电容可能扛不住需要并联多个或者用低ESR的固态电容。我一般会在母线上放一个大电解电容470uF到1000uF加几个小陶瓷电容10uF和100nF大电容管低频纹波小电容管高频噪声。布局的时候陶瓷电容要尽量靠近MOS管的漏极。3. 栅极驱动让MOS管听话的关键一环3.1 为什么不能直接用MCU的IO驱动MOSMCU的IO输出3.3V电流能力一般20mA左右。MOS管的栅极是个电容开通时需要瞬间大电流给栅极充电。如果驱动电流不够MOS管会工作在放大区Rds(on)急剧增大发热严重甚至烧毁。而且三相全桥的上管是浮地的源极电位随开关在0和母线电压之间跳变栅极驱动需要相对于源极的电压这就必须用自举电路或者隔离电源。所以专用栅极驱动芯片是必须的比如IR2103、EG2133、DRV8301这些。3.2 自举电路的工作原理与参数计算自举电路的核心是一个自举电容和一个自举二极管。当上管关断、下管开通时下管的源极接近地电位自举电容通过自举二极管从VCC充电充到约VCC减去二极管压降。当需要开通上管时驱动芯片把自举电容的电压加到上管栅极和源极之间实现浮地驱动。自举电容的容值计算C_boot ≥ Qg_total / ΔV_boot。假设MOS的Qg100nC允许自举电压跌落ΔV_boot0.5V那么C_boot ≥ 100nC / 0.5V 200nF。实际取1uF左右留足余量。自举二极管要选快恢复的反向恢复时间trr要小否则在高频开关时会有额外损耗。耐压要大于母线电压。常见型号有1N4148小电流场合或者ES1J。提示自举电容一定要用陶瓷电容或者钽电容不要用电解电容因为电解电容的ESR大高频充放电时压降明显。我见过用10uF电解做自举的上管驱动电压只有8VMOS管发热严重。3.3 栅极电阻的作用与取值栅极电阻Rg控制MOS管的开关速度。Rg越大开关越慢开关损耗增加但EMI和振荡减小。Rg越小开关越快损耗小但容易产生振铃和过冲。取值一般从几欧姆到几十欧姆。我通常先用10Ω起步然后用示波器看栅极波形和漏源波形。如果漏源电压有过冲加大Rg如果开关损耗太大发热严重减小Rg。开通和关断可以用不同的电阻关断电阻一般比开通电阻小因为关断时希望快速拉低栅极电压减少关断损耗。有些驱动芯片支持分开设置用两个电阻加一个二极管实现。3.4 米勒效应与误导通米勒效应是MOS管开关过程中的一个经典问题。当上管开通时漏极电压快速下降通过米勒电容Cgd耦合到栅极可能把栅极电压抬升到阈值以上导致本该关断的下管误导通上下管直通炸管。解决办法有几个一是增大关断栅极电阻降低栅极电压被抬升的幅度二是给栅极加负压关断但这需要负压电源三是选Cgd小的MOS管四是在栅极和源极之间加一个下拉电阻一般10kΩ左右。实际调试时用示波器同时看上下管的栅极波形如果发现关断的管子栅极有尖峰就要警惕了。我一般会在栅极和源极之间放一个10kΩ下拉电阻再加一个TVS管钳位双保险。4. 电流采样FOC的眼睛4.1 三种采样拓扑的对比FOC电流采样有三种常见方案单电阻、双电阻、三电阻。方案原理优点缺点单电阻母线负极串一个电阻成本低只需一个运放采样时刻受限算法复杂双电阻下桥臂两个管子源极各串一个成本适中算法简单只能测两相第三相靠计算三电阻三个下桥臂各串一个三相都能测最灵活成本高布板面积大单电阻方案在低成本电调里很常见但对采样时刻要求极高必须在PWM的特定时刻采样否则测不到真实相电流。双电阻方案是折中适合大多数中小功率应用。三电阻方案最稳适合高性能场合。我一般推荐双电阻方案因为它在成本和性能之间平衡得最好。用两个采样电阻加一个双运放就能实现完整的电流环。4.2 采样电阻的取值与功耗采样电阻的取值要兼顾信噪比和功耗。阻值太小压降小信噪比差阻值太大功耗大发热严重。一般取10mΩ到100mΩ。假设峰值电流30A取10mΩ峰值压降0.3V功率9W这太大了。所以大电流场合要取更小的阻值比如1mΩ峰值压降30mV功率0.9W。但30mV的信号运放要放大到3.3V的一半1.65V增益约55倍。这时候运放的失调电压和噪声就很重要了。要选低失调、低噪声的运放比如INA240、INA181这些专用电流采样芯片。采样电阻的封装也要注意。2512封装的电阻功率一般1W到2W如果功耗接近额定值温漂会很大导致采样精度下降。我一般会让实际功耗不超过额定值的50%。4.3 运放电路的设计要点电流采样运放一般用差分放大电路。四个电阻要严格匹配否则共模抑制比会变差。建议用0.1%精度的电阻或者直接用集成差分放大器。运放的带宽要足够。电流环带宽2kHz运放带宽至少100kHz以上。压摆率也要够否则电流突变时运放输出跟不上。运放的输出要加RC滤波截止频率一般取开关频率的1/10到1/5。比如20kHz开关频率滤波截止频率取2kHz到4kHz。但滤波会引入相位延迟影响电流环稳定性所以要在滤波和带宽之间权衡。注意运放的供电要干净。我遇到过运放供电被PWM噪声污染导致电流采样波形上叠加了开关噪声FOC直接失控。后来在运放供电脚加了LC滤波问题解决。4.4 采样时刻与PWM同步电流采样必须在PWM周期的特定时刻进行通常是下管开通、电流流过采样电阻的时候。如果采样时刻不对测到的可能是开关噪声或者续流电流。一般用MCU的ADC触发功能在PWM计数器到达特定值时自动触发采样。比如中央对齐模式下计数器在谷底时触发ADC这时候下管导通采样电阻上有电流。采样窗口要足够宽至少几百纳秒让运放输出稳定。如果PWM占空比接近100%下管导通时间很短采样窗口不够这时候需要用单电阻方案的特殊处理或者限制最大占空比。5. 转子位置检测有感和无感的取舍5.1 霍尔传感器的接口电路霍尔传感器输出的是数字信号一般需要上拉电阻和RC滤波。霍尔传感器的供电要干净最好单独用LDO供电避免被电机噪声干扰。霍尔安装位置很关键三个霍尔应该间隔120度电角度安装。如果安装有偏差会导致换相时刻不准转矩脉动增大。有些电机自带霍尔安装精度有保证自己装的话要用示波器看三个霍尔信号的相位关系确保间隔均匀。霍尔接口一般加光耦隔离或者RC滤波防止电机侧的高压尖峰串进来烧MCU。我一般会在霍尔信号线上串100Ω电阻再对地加1nF电容组成低通滤波。5.2 编码器的信号处理编码器分辨率高适合需要精确位置控制的应用。增量式编码器输出A、B、Z三路信号A、B相差90度Z是零位信号。编码器信号频率可能很高比如1000线编码器电机3000rpm时A相频率50kHz。这时候RC滤波的截止频率要高于50kHz否则信号会失真。一般用100Ω加100pF截止频率约16MHz足够。编码器信号也要注意电平匹配。有些编码器是5V输出MCU是3.3V输入需要电平转换。可以用电阻分压或者专用电平转换芯片。5.3 无感FOC的反电动势观测无感FOC靠反电动势估算转子位置。反电动势和转速成正比低速时反电动势很小信噪比差所以无感FOC低速性能一般。高速时反电动势大估算准确。反电动势观测需要采样相电压。相电压是PWM波形需要滤波或者用ADC在特定时刻采样。一般用电阻分压加RC滤波把相电压降到ADC量程内。无感FOC的启动是个难点。低速时反电动势测不到需要用开环启动或者高频注入。开环启动就是按固定频率和电压强拖电机等转速起来后再切换到闭环。高频注入是在电机上叠加高频信号通过检测响应来估算位置适合低速和零速。5.4 初始位置检测的几种方法电机上电时转子位置未知。有感电机靠霍尔或编码器直接读位置。无感电机需要初始位置检测。常见方法有脉冲注入法给电机施加短时脉冲根据电流响应判断转子位置高频注入法叠加高频信号检测凸极效应还有直接开环启动不管初始位置强拖起来再说。脉冲注入法简单但会产生转矩脉动和噪声。高频注入法精度高但算法复杂对电机凸极率有要求。实际项目里如果电机凸极明显比如内嵌式永磁电机高频注入效果好如果是表贴式电机凸极不明显高频注入效果差只能用脉冲注入或者开环启动。6. PCB布局决定成败的最后一公里6.1 功率回路的最小化功率回路是指电流从母线电容出发经过MOS管、电机、再回到母线电容的路径。这个回路的面积越大寄生电感越大开关时的电压尖峰越高。布局时母线电容要尽量靠近MOS管三相桥的六个管子要紧凑排列。理想情况下功率回路的面积应该尽可能小。我一般会把母线电容放在MOS管旁边用宽铜皮连接减少寄生电感。电流采样电阻要放在下管的源极和地之间走线要短而粗避免引入额外电感。采样信号从电阻两端引出走差分线到运放。6.2 地平面的分割与单点接地地平面处理是PCB布局的难点。功率地和信号地要分开最后在一点连接。功率地上有大电流和开关噪声如果信号地被污染运放和MCU都会受影响。我一般会分三个地功率地、模拟地、数字地。功率地承载电机电流模拟地给运放和ADC参考数字地给MCU和通信接口。三个地在电源入口处单点连接。分割地平面的时候要注意不要让信号线跨越地平面的分割缝否则回流路径被切断会产生EMI问题。如果必须跨越要在跨缝处放一个缝合电容。6.3 驱动信号的走线要求驱动信号从MCU到驱动芯片再到MOS栅极走线要短、要直。驱动信号是高频开关信号走线长了容易受干扰也容易辐射。自举电容要靠近驱动芯片的自举引脚走线要短。自举二极管也要靠近减少寄生电感。栅极电阻要靠近MOS管的栅极不要放在驱动芯片那边。因为栅极电阻的作用是控制MOS栅极的充放电速度放在栅极旁边效果最好。6.4 散热与铜皮面积MOS管的散热靠铜皮和散热片。铜皮面积越大散热越好。一般会在MOS管下面铺大面积铜皮并通过过孔连接到背面铜皮增加散热面积。如果功耗大要加散热片。散热片和MOS管之间要涂导热硅脂减少热阻。散热片要接地或者接母线减少EMI。温度对MOS管的Rds(on)影响很大温度升高Rds(on)增大损耗增加形成正反馈。所以散热设计要留足余量不要让MOS管工作在极限温度。7. 实测调试从冒烟到稳定运行7.1 上电前的静态检查板子焊好之后不要直接上电。先用万用表测各路电源对地电阻确认没有短路。然后单独给控制级供电测MCU和运放供电是否正常。再给驱动级供电测驱动芯片输出是否正常。最后给功率级供电但先不接电机用示波器看三相输出。给一个固定的PWM占空比看输出波形是否正常。如果波形不对先查驱动和MOS不要接电机。7.2 开环测试与波形观察第一次接电机先用开环模式。给一个固定的电压和频率让电机慢慢转起来。用示波器看相电流波形应该是正弦波。如果波形畸变严重查电流采样和运放电路。开环测试时电流不要给太大先从小电流开始观察电机是否平稳。如果电机抖动或者有异响可能是换相时刻不对或者霍尔安装有偏差。7.3 闭环调试的步骤开环正常后切换到闭环。先调电流环再调速度环最后调位置环。电流环的PI参数从小往大调直到电流响应快速且无超调。调试时用示波器看电流波形和速度波形。如果电流环振荡减小比例增益或者增大积分时间。如果响应太慢增大比例增益或者减小积分时间。无感FOC的闭环调试更麻烦要先调好反电动势观测器确保角度估算准确。可以用示波器对比估算角度和实际角度有感电机可以对比霍尔信号如果偏差大调整观测器参数。7.4 常见故障与排查思路故障现象可能原因排查方法上电炸管上下管直通查死区时间、驱动信号电机抖动角度估算错误查霍尔/编码器、观测器电流采样跳变运放受干扰查运放供电、滤波MOS发热严重开关损耗大查栅极电阻、开关频率低速无力反电动势小用高频注入或开环启动这张表是我自己总结的实际排查时还要结合示波器和万用表一步步缩小范围。8. 几个容易被忽略的细节8.1 无电解电容设计的可能性传统设计用大电解电容做母线电容但电解电容寿命短、体积大。有些应用开始尝试无电解电容设计用小陶瓷电容代替。但这要求控制算法能容忍更大的母线电压纹波对电流环和速度环的鲁棒性要求更高。无电解电容设计在低成本、小体积应用里有优势但目前还不是主流。如果要做母线电容用多个陶瓷电容并联总容值可能只有几微法需要算法配合。8.2 电流速度双环的耦合问题FOC通常是电流环在内、速度环在外。两个环的带宽要拉开一般速度环带宽是电流环的1/5到1/10。如果两个环带宽接近会互相干扰导致振荡。调试时先调电流环确认电流响应快且稳再调速度环。速度环的PI参数也要从小往大调观察速度响应。8.3 死区补偿的必要性死区时间会导致输出电压偏差特别是在低速小电流时偏差比例很大导致电流波形畸变和转矩脉动。死区补偿就是根据电流方向在PWM占空比上叠加一个补偿量。补偿量的大小等于死区时间除以PWM周期。比如死区300nsPWM周期50us补偿量0.6%。这个补偿量不大但低速时效果明显。死区补偿的难点在于电流过零点的判断。电流过零时方向不确定补偿容易出错。一般用电流极性检测或者平均电流法来判断。8.4 母线电压采样的滤波母线电压采样用于电压前馈和过压保护。采样电路一般用电阻分压加RC滤波。滤波截止频率要低于开关频率但也不能太低否则动态响应慢。我一般用10kΩ加100nF截止频率约160Hz。这个频率能滤掉开关噪声又不会太影响动态响应。分压电阻要用高精度电阻温度系数要小。9. 写在最后的一些个人体会做FOC硬件这几年最大的感受是算法可以慢慢调但硬件设计错了后面怎么调都是事倍功半。我见过太多人代码写得漂亮但板子一上电就冒烟最后只能推倒重来。如果让我给新手一个建议那就是第一块板子不要追求小体积和高性能先把功能跑通。功率回路留足余量采样电路用最稳妥的方案PCB布局多留测试点。等第一块板子稳定运行了再考虑优化。还有一点示波器是调试FOC最重要的工具。电流波形、栅极波形、相电压波形这些都要亲眼看。不要只靠串口打印数据很多问题在时域波形上一目了然。最后分享一个我常用的调试技巧在电流采样运放的输出端加一个测试点用示波器看实时电流波形。这个波形能反映很多问题比如采样时刻对不对、运放有没有振荡、死区补偿够不够。把这个波形调干净了FOC基本就稳了。
返回列表