ARTICLE DETAIL

资讯详情

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

从零手搓FOC驱动板:STM32硬件选型与PCB设计实战

从零手搓FOC驱动板:STM32硬件选型与PCB设计实战 1. 为什么我要从零手搓一块FOC驱动板FOC也就是磁场定向控制这几年在嵌入式圈子里几乎成了“进阶必修课”。你随便打开一个技术社区搜“STM32 矢量控制”“无刷电机 驱动板”能看到大量讨论。但真正自己从零画一块能跑起来的FOC驱动板和拿现成开发板跑个Demo完全是两码事。前者你要面对的是MOS管选型、栅极驱动、电流采样、电源架构、PCB布局、EMC一堆实打实的硬件问题后者你只需要插上线、烧个固件、看电机转起来就行。我这次做的项目目标很明确设计一块能驱动24V无刷电机、支持双电阻电流采样、带CAN和UART通信接口、基于STM32主控的FOC驱动板。整个板子从原理图到PCB到打样焊接调试全部自己走一遍。为什么非要自己走一遍因为只有你自己画过板子才知道为什么栅极驱动电阻不能随便选、为什么电流采样运放的布局差几毫米波形就烂掉、为什么自举电容的容值会影响高占空比下的驱动能力。这些东西看别人的教程永远只能学个皮毛。这篇文章我会把整个硬件选型和电路设计的过程拆开讲包括每一个关键器件的选型逻辑、每一块电路的设计考量、PCB布局的具体思路以及我在调试过程中踩过的坑。适合有一定STM32基础、想从“跑Demo”进阶到“自己设计硬件”的嵌入式工程师也适合正在做电机控制相关毕业设计的学生。不管你是刚接触硬件设计的新手还是已经画过几块板子想系统梳理FOC驱动板设计思路的老手应该都能从里面找到有用的东西。2. 整体方案设计与核心器件选型2.1 系统架构怎么定先画框图再动手很多人一上来就开始画原理图结果画到一半发现电源架构不对、接口不够用、采样方案和主控引脚冲突。我的习惯是先在纸上或者用画图工具把系统框图理清楚确定几个核心问题输入电源范围是多少、电机功率多大、需要几路电流采样、通信接口要哪些、主控选哪个系列。这块板子的系统架构我最终定为24V直流输入经过Buck降压到12V给栅极驱动供电再经过LDO降到3.3V给STM32和运放供电。功率级采用三相全桥拓扑6颗N沟道MOS管搭配专用栅极驱动芯片。电流采样用双电阻方案采下桥臂的两个相电流配合STM32的ADC注入通道做同步采样。主控选STM32G431原因后面细说。通信方面留了CAN和UART方便接上位机或者组多轴系统。这个架构不是拍脑袋定的。24V输入是因为大多数中小功率无刷电机的额定电压就在这个范围比如云台电机、小型伺服电机、航模电机等。双电阻采样而不是三电阻是因为双电阻方案只需要两个采样电阻和两路运放成本和布板面积都更优而且对于FOC来说知道两相电流就能算出第三相完全够用。STM32G431是ST专门为电机控制推的系列内置了运放、比较器、高分辨率定时器对FOC非常友好。2.2 主控芯片为什么选STM32G431而不是F103很多人做STM32项目第一反应是F103C8T6便宜、资料多、江科大教程也是基于它。但FOC驱动板对主控的要求和普通项目不一样几个硬指标定时器要支持互补PWM输出和死区插入、ADC要够快且支持注入通道、最好有内置运放省外围电路、主频要够高。F103C8T6只有72MHz主频定时器TIM1支持互补PWM但死区精度一般ADC采样率1MHz没有内置运放。而STM32G431主频170MHzTIM1是高分辨率定时器死区精度可以达到皮秒级ADC采样率4MHz以上内置了3个运放和4个比较器。这意味着我可以用内置运放做电流采样信号调理省掉外部运放芯片布板面积和成本都下来了。具体对比一下参数STM32F103C8T6STM32G431CBU6主频72MHz170MHz定时器死区精度约13.9ns约5.9nsADC采样率1MSPS4MSPS内置运放无3个内置比较器无4个电机控制外设一般专用价格约10元约15元多花5块钱换来的是更简单的电路、更好的控制性能、更少的调试时间。这笔账怎么算都划算。当然如果你手头只有F103也不是不能做只是外围电路会复杂一些需要外挂运放和更仔细地调死区时间。2.3 功率级MOS管选型耐压、导通电阻、栅极电荷的三角平衡MOS管选型是功率级设计的核心。我需要考虑的参数有漏源耐压VDS、导通电阻RDS(on)、栅极电荷Qg、封装热阻、电流能力。这几个参数之间是互相制约的耐压越高通常RDS(on)越大Qg也越大。输入是24V考虑电机反电动势和开关尖峰VDS至少留2倍余量所以选40V或60V耐压。我最终选了60V耐压的MOS留足余量。RDS(on)直接决定导通损耗对于几安培的相电流RDS(on)在10毫欧以下比较理想。Qg影响开关损耗和栅极驱动的驱动能力需求Qg越小开关越快但太快的开关会带来EMI问题。我最终选的是某国产N沟道MOS60V耐压RDS(on)约5毫欧Qg约15nCPDFN5x6封装。选国产的原因很简单便宜、供货稳定、性能足够。进口品牌同规格的价格要贵3到5倍对于DIY项目来说没必要。这里有个经验选MOS不要只看RDS(on)最小值要看最大值。数据手册里通常给的是典型值和最大值做设计要用最大值算损耗。另外注意RDS(on)随温度升高会增大通常125度时的RDS(on)是25度时的1.5到2倍算热的时候要按高温值算。2.4 栅极驱动芯片选型半桥驱动还是三相驱动栅极驱动芯片分几种单路低边驱动、半桥驱动、三相驱动。三相驱动芯片集成度最高一颗芯片驱动六个MOS但价格贵、灵活性差。半桥驱动芯片每颗驱动一个桥臂用三颗灵活性和成本平衡得比较好。我选的是某半桥栅极驱动芯片支持自举供电驱动电流1A左右内置死区保护。选它的理由驱动电流够用、自举二极管集成、死区时间可调、价格便宜。驱动电流怎么算MOS的Qg是15nC我希望开关时间在100ns左右那么驱动电流I Qg / t 15nC / 100ns 0.15A。1A的驱动能力绰绰有余还能加快开关速度。自举电容的选型也有讲究。自举电容太小高占空比时电荷不够驱动电压会掉太大则充电时间长低频时可能来不及充电。经验公式是Cboot至少是Qg的10倍以上我选了100nF的陶瓷电容配合自举二极管用1N4148或专用自举二极管。2.5 电流采样方案双电阻还是三电阻电流采样是FOC控制精度的关键。常见方案有单电阻、双电阻、三电阻。单电阻成本最低但算法复杂需要在特定PWM状态下采样对定时器要求高。三电阻精度最高但需要三个运放和三个采样电阻成本和面积都大。双电阻是折中方案采两相电流第三相通过基尔霍夫电流定律算出。我选双电阻方案采样电阻放在下桥臂MOS的源极和地之间。阻值选多少考虑最大相电流5A希望采样电压在0.5V左右那么R 0.5V / 5A 0.1欧姆。但0.1欧姆的电阻在5A时功耗是2.5W太大了。所以选小一点比如0.01欧姆5A时压降0.05V功耗0.25W。但0.05V的信号太小需要运放放大。STM32G431内置运放可以配置成差分放大增益可调正好用上。采样电阻的封装也很关键。0.01欧姆的电阻用0805封装的话额定功率通常只有0.125W不够。要用2512封装或者合金电阻额定功率1W以上。我选的是2512封装的合金采样电阻0.01欧姆1W温漂50ppm。3. 关键电路设计与参数计算3.1 Buck降压电路从24V到12V的电源设计栅极驱动芯片需要12V左右的供电电压而输入是24V所以需要一级Buck降压。为什么不用LDO因为24V降到12V压差12V如果驱动电流100mALDO上的功耗就是1.2W发热严重。Buck的效率可以做到90%以上功耗只有0.12W左右。Buck芯片我选的是某国产同步Buck输入范围4.5V到28V输出电流2A开关频率500kHz。外围器件输入电容10uF陶瓷加100uF电解输出电容22uF陶瓷加100uF电解电感选22uH。电感值怎么算Buck电感计算公式L (Vin - Vout) × Vout / (Vin × fsw × ΔIL)。Vin24VVout12Vfsw500kHzΔIL取输出电流的30%即0.3A代入得L (24-12)×12 / (24×500000×0.3) 12×12 / (24×500000×0.3) 144 / 3600000 40uH。实际选22uH是因为纹波电流会大一些但还在可接受范围而且22uH是常用值便宜好买。反馈电阻怎么算Buck芯片的反馈基准电压通常是0.8V或0.6V我用的这款是0.8V。输出电压Vout Vref × (1 R1/R2)。要输出12VR1/R2 (12/0.8) - 1 14。选R21kR114k。实际用13.7k或14k都可以输出在11.9V到12.1V之间栅极驱动完全能接受。3.2 3.3V LDO供电给STM32和运放的干净电源12V再降到3.3V给STM32和运放供电这里用LDO而不是Buck因为压差只有8.7V电流也就100mA左右功耗0.87W加个小散热焊盘就能搞定。更重要的是LDO的输出噪声比Buck小得多对运放和ADC的精度有好处。LDO选的是某低压差LDO输出电流500mA压差300mV静态电流50uA。输入输出各放10uF陶瓷电容再加一个0.1uF的高频去耦电容。注意LDO的输入电容和输出电容要按数据手册推荐值选有些LDO对输出电容的ESR有要求选错了会振荡。3.3 三相全桥功率级MOS管布局与散热三相全桥由三个半桥组成每个半桥有上下两颗MOS。原理图连接很简单上管漏极接24V上管源极接下管漏极下管源极接采样电阻再到地。栅极分别接驱动芯片的HO和LO输出。这里有个关键点MOS管的源极和漏极之间要加续流二极管吗不需要MOS管内部体二极管就是续流二极管。但体二极管的反向恢复特性比较差在高频开关时会产生损耗和EMI。如果对效率要求高可以并联肖特基二极管但会增加成本和布板面积。对于DIY项目体二极管够用了。散热怎么考虑MOS的导通损耗P I² × RDS(on)。假设相电流有效值3ARDS(on)高温时10毫欧那么P 9 × 0.01 0.09W。开关损耗Psw 0.5 × VDS × ID × (tr tf) × fsw。VDS24VID3Atrtf约100nsfsw20kHzPsw 0.5 × 24 × 3 × 100e-9 × 20000 0.072W。总损耗约0.16WPDFN5x6封装的熱阻约50度每瓦温升8度完全不需要额外散热片。PCB上铺铜散热就够了。3.4 电流采样运放电路STM32内置运放的配置STM32G431内置运放可以配置成PGA模式差分输入增益可调。采样电阻上的电压信号先经过RC低通滤波再进运放。RC滤波的截止频率怎么定PWM开关频率20kHz电流信号的有用频率通常低于1kHz所以截止频率设在10kHz左右。R取1kC取10nF截止频率f 1/(2πRC) 1/(2×3.14×1000×10e-9) 15.9kHz。可以接受。运放增益设多少采样电阻0.01欧姆最大电流5A信号幅度0.05V。STM32的ADC参考电压3.3V希望最大电流时信号接近3.3V但不超过增益设为50倍输出2.5V。留一点余量防止过冲。STM32G431的运放增益可以通过内部电阻网络配置支持2、4、8、16、32、64倍等选64倍的话输出3.2V有点接近满量程选32倍输出1.6V精度损失一些。我最终选32倍配合软件校准。运放的偏置怎么处理双电阻采样时下桥臂MOS导通时采样电阻上有电流关断时电流为零。但运放是单电源供电输入共模范围要包含地。STM32G431的运放输入共模范围是0到VDD-1.5V左右采样电阻上的电压在0到0.05V之间没问题。但要注意运放的输出不能低于0V所以负电流时运放会饱和。FOC控制中电流是双向的所以需要加偏置电压。我在运放的同相输入端加了一个1.65V的偏置由两个等值电阻分压3.3V得到这样电流为零时运放输出1.65V正负电流都能采样。3.5 自举电路与栅极驱动电阻的计算自举电路是半桥驱动的关键。上管是N沟道MOS源极接在开关节点上栅极电压需要比源极高10V左右才能导通。自举电容就是用来提供这个高于电源的电压。当上管关断、下管导通时开关节点被拉到地自举电容通过自举二极管从12V电源充电。当上管导通时开关节点电压升高自举电容上的电压跟着升高给上管栅极提供驱动电压。自举电容选100nF自举二极管选快恢复二极管反向恢复时间要短否则在高频开关时损耗大。我用的是一颗40V耐压的快恢复二极管反向恢复时间50ns。栅极驱动电阻分开通电阻和关断电阻。开通电阻影响开通速度关断电阻影响关断速度。开通太快会导致EMI问题关断太快会导致电压尖峰。我开通电阻用10欧姆关断电阻用5欧姆关断时通过一个二极管并联实现开通关断不同电阻。具体电路是驱动芯片输出经过开通电阻到栅极同时并联一个二极管和关断电阻的串联支路二极管方向是驱动芯片输出到栅极。这样开通时电流走开通电阻关断时电流走二极管和关断电阻。4. PCB布局与EMC设计实战4.1 叠层与分区功率地和信号地怎么分PCB布局的第一步是确定叠层。我用的四层板顶层信号和功率第二层地平面第三层电源平面底层信号和功率。四层板比两层板贵一些但对于有功率和信号混合的板子四层板能提供完整的地平面大大降低EMI和信号完整性问题。分区方面功率部分和信号部分要分开。功率部分包括MOS管、采样电阻、栅极驱动、Buck电路。信号部分包括STM32、晶振、运放、通信接口。两个区域之间用地平面隔开但最终都连到同一个地平面。注意不是把地切成两块而是通过布局让功率电流的回路面积最小不要流过信号区域。具体布局思路24V输入和Buck电路放在板子一侧MOS管和电机接口放在另一侧STM32和信号电路放在中间偏下的位置。这样功率电流从输入到电机接口的路径最短不会绕到信号区域。4.2 功率回路的布局让电流走最短的路功率回路的布局核心原则是让高频开关电流的回路面积最小。三相全桥的电流回路是24V输入电容正极 - 上管漏极 - 上管源极 - 下管漏极 - 下管源极 - 采样电阻 - 地 - 输入电容负极。这个回路面积越小辐射的EMI越少电压尖峰也越小。我的布局是输入电容紧挨着MOS管放置三个半桥的MOS管排成一排采样电阻紧挨着下管源极。输入电容用多个陶瓷电容并联放在MOS管旁边电解电容可以稍远一些。注意输入电容的接地端要直接连到地平面不要通过细线连接。电机接口的三根线从MOS管中间节点引出尽量短且粗。如果电机线比较长可以在接口处加RC吸收电路或者TVS管抑制反电动势尖峰。4.3 电流采样走线差分对与开尔文连接电流采样走线是FOC驱动板最敏感的走线之一。采样电阻上的电压只有几十毫伏很容易被噪声淹没。走线要点从采样电阻两端引出两根线走差分对尽量靠近等长不要穿过功率区域。如果采样电阻是四端子的开尔文连接封装那就更好了直接焊在采样点上。运放的输入引脚要尽量靠近采样电阻走线长度控制在几厘米以内。运放的反馈电阻和电容要紧挨着运放引脚放置不要留长走线。运放的输出走线到STM32的ADC引脚也要短且远离功率走线。4.4 晶振与去耦电容的放置细节STM32的晶振要尽量靠近芯片引脚走线短且对称晶振下面不要走其他信号线。负载电容紧挨着晶振放置接地端直接连到地平面。晶振区域可以用地平面包围减少干扰。去耦电容是很多人容易忽视的地方。每个电源引脚都要放一个0.1uF的陶瓷电容尽量靠近引脚放置。STM32的VDD引脚有多个每个都要放。电容的接地端要通过过孔直接连到地平面不要用长走线。大容量的储能电容比如10uF可以放在芯片附近但不用太近。4.5 EMI过认证的思路从源头抑制虽然DIY项目不一定需要过认证但了解EMI设计思路对提高板子稳定性有好处。EMI主要来源是开关节点的高dv/dt和di/dt。抑制方法减小开关速度增大栅极电阻、加RC吸收电路、优化布局减小回路面积、加共模电感等。我在开关节点上加了RC吸收电路R取10欧姆C取1nF串联后接在开关节点和地之间。这个RC吸收电路可以吸收开关尖峰降低EMI。注意RC吸收电路的电阻和电容要选高频特性好的电阻用无感电阻电容用NP0陶瓷电容。5. 调试过程与常见问题排查5.1 上电前的检查清单板子打样回来焊接之前先目视检查PCB有没有明显缺陷。焊接时先焊电源部分焊完用万用表测各路电源对地有没有短路。确认没有短路再上电上电时用可调电源限流比如限流100mA观察电流是否正常。如果电流过大立即断电检查。上电后先测各路电压24V输入、12V栅极驱动、3.3V数字电源。电压正常后再焊STM32和运放烧录程序测试。不要一次性把所有器件都焊上去分步焊接分步测试出问题容易定位。5.2 栅极驱动波形异常怎么查栅极驱动波形异常是常见问题。用示波器测栅极电压正常应该是干净的方波上升沿和下降沿陡峭没有振铃。如果波形有振铃可能是栅极电阻太小或者走线太长。如果上升沿太慢可能是驱动电流不够或者栅极电容太大。如果高占空比时上管驱动电压下降可能是自举电容太小或者自举二极管反向恢复太慢。我遇到过一次上管驱动电压在高占空比时掉到8V左右导致MOS管发热严重。查了半天发现是自举电容选了10nF太小了。换成100nF后问题解决。这个坑很典型自举电容的容值一定要按Qg的10倍以上选。5.3 电流采样噪声大怎么处理电流采样噪声大表现为ADC读数跳动、FOC控制时电机有异响。排查思路先用示波器看运放输出波形如果波形上有很多毛刺说明噪声来自硬件。检查采样电阻的走线是否太长、运放的电源去耦是否到位、RC滤波是否有效。如果硬件没问题再看软件采样时机是否在PWM中点避开开关噪声。我遇到过一次电流采样噪声大最后发现是运放的电源引脚去耦电容离得太远加了一个0.1uF电容紧挨着运放电源引脚后噪声明显减小。这个经验说明去耦电容的位置比容值更重要。5.4 常见问题速查表现象可能原因排查方法解决方法上电电流大电源短路万用表测对地电阻检查焊接排除短路栅极波形振铃栅极电阻太小示波器看波形增大栅极电阻高占空比驱动电压下降自举电容太小测上管栅极电压增大自举电容电流采样噪声大去耦电容太远示波器看运放输出靠近引脚加去耦电容MOS发热严重开关损耗大测栅极波形和漏源波形调整栅极电阻检查死区电机启动困难电流采样偏置不对测零电流时运放输出调整偏置电压ADC读数跳动采样时机不对对比不同时刻采样在PWM中点采样5.5 调试心得与避坑经验调试FOC驱动板我的经验是先开环再闭环。开环测试时给固定的PWM占空比看电机能不能转、电流是否正常。开环没问题再上闭环。闭环调试时先调电流环再调速度环最后调位置环。每调一个环都要用示波器或者上位机看波形不要盲目调参数。还有一个经验采样电阻的温漂会影响电流精度。我用的采样电阻温漂50ppm温度变化50度时阻值变化0.25%对应电流误差0.25%可以接受。如果对精度要求高选温漂25ppm甚至10ppm的电阻但价格会贵不少。最后说一个很多人容易忽略的点PCB打样时注意板厚和铜厚。功率板建议用2盎司铜厚载流能力更强损耗更小。板厚1.6mm是标准值如果需要更好的散热可以用1.0mm甚至更薄但机械强度会下降。我这次用的是1.6mm板厚、2盎司铜厚打样价格比普通工艺贵一些但功率部分的性能提升明显。整个项目从选型到画板到调试前前后后花了大概三周时间。中间踩了不少坑比如自举电容选小了、运放去耦没做好、采样电阻封装选错了。但正是这些坑让我对FOC驱动板的硬件设计有了更深的理解。如果你也在做类似的项目我的建议是不要怕犯错但每次犯错都要找到根本原因记录下来下次就不会再犯了。硬件设计和软件不一样软件改一行代码重新编译就行硬件改一个器件要重新打板等一周。所以画板之前多花时间检查原理图和布局比打样回来再改要划算得多。
返回列表