ARTICLE DETAIL

资讯详情

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

FOC无感控制从零拆解:坐标变换、SVPWM与观测器实战

FOC无感控制从零拆解:坐标变换、SVPWM与观测器实战 1. 从零拆解FOC无感控制为什么值得系统化啃下来电机控制这个圈子有个很明显的分水岭做过有刷电机驱动的人很多能把无刷电机转起来的人也不少但真正能把FOC无感控制从头到尾讲清楚、调稳定、跑出性能的人比例一下子就掉下来了。原因不复杂——FOC本身不是某一个单点技术它是坐标变换、电流采样、PWM调制、转子位置观测、环路整定这一整套东西咬合在一起的结果。任何一个环节理解不到位电机要么转不起来要么转起来啸叫、抖动、效率低甚至烧管子。这个专栏想做的事情就是把FOC无感控制这条链路完整地拆开从理论到代码、从波形到参数一块一块讲透。核心关键词绕不开这几个FOC、无感控制、电机控制、坐标变换、SVPWM。它们不是并列关系而是层层递进的关系——坐标变换是数学基础SVPWM是执行手段无感控制是最终要攻克的难点而FOC是贯穿始终的框架。适合谁来读如果你已经能让BLDC转起来但一到无感FOC就卡在启动、卡在观测器、卡在电流环震荡这个专栏就是给你写的。如果你刚开始接触STM32电机控制手上有开发板但不知道从哪下手也可以跟着走因为我会把每一步的“为什么”讲清楚而不是只丢一段代码让你抄。如果你已经在做产品级驱动想回头把理论补扎实同样有收获因为很多工程上的坑根子都在理论理解的偏差上。我自己的经历比较典型最早用方波六步换相把电机转起来觉得电机控制不过如此后来上FOC发现电流环一加就啸叫转速一高就失步无感启动更是十次有八次失败。踩了足够多的坑之后才明白FOC无感控制不是“把算法抄过来就行”而是要对每个环节的物理意义有直觉。这个专栏就是把这些直觉性的东西用可复现的方式讲出来。2. FOC无感控制的整体架构与核心思路拆解2.1 为什么是FOC而不是方波驱动先回答一个最根本的问题为什么要把方波六步换相换成FOC方波驱动的逻辑很简单每隔60度电角度换一次相任意时刻只有两相导通电流是方波。它的优点是实现简单、对位置精度要求低缺点是转矩脉动大、噪音大、低速性能差、效率上不去。你拿方波驱动去跑一个云台或者风扇可能感觉不出来但你要做的是需要平稳低速、低噪音、高动态响应的场合方波就不够用了。FOC的核心思想是把三相电流通过坐标变换从静止的三相坐标系A-B-C转到随转子旋转的两相坐标系d-q。转过去之后原本交流变化的电流变成了直流量d轴电流控制磁场q轴电流控制转矩。两个直流量分别用PI调节器控制就避免了交流量跟踪的相位滞后问题。这就是FOC比方波驱动性能好的根本原因——它把交流控制问题转化成了直流控制问题。注意很多人以为FOC就是“正弦波驱动”这个理解不完整。正弦波驱动只是FOC的结果之一FOC真正的价值在于解耦控制——把转矩和磁场分开控制这才是它动态性能好的原因。2.2 无感控制到底难在哪有传感器FOC转子上装了编码器或者霍尔位置直接读出来剩下的就是电流环和速度环的事。无感FOC把位置传感器拿掉了转子位置只能靠算法从电压电流里“猜”出来。这个“猜”就是观测器。无感控制的难点集中在三个地方第一是零速和低速。反电动势和转速成正比转速越低反电动势越小信噪比越差。零速时反电动势为零纯靠反电动势的观测器完全失效。所以无感FOC必须有一套独立的启动策略常见的有三段式启动预定位、强拖、切换闭环、高频注入法、I/F启动等。第二是观测器的收敛性和鲁棒性。滑模观测器、龙伯格观测器、扩展卡尔曼滤波各有各的适用场景。滑模观测器实现简单、鲁棒性好但抖振问题需要处理龙伯格观测器依赖精确的电机参数扩展卡尔曼滤波性能好但计算量大。选哪个取决于你的MCU算力、电机参数一致性、成本要求。第三是切换过程。从开环强拖切换到闭环观测这个瞬间如果角度估计不准电机会失步甚至反转。切换策略的设计往往是无感FOC能不能跑起来的关键。2.3 整体方案选型从MCU到算法栈一套典型的无感FOC系统硬件上需要三相逆变桥、电流采样电路单电阻或三电阻、母线电压采样、MCU。软件上需要PWM模块、ADC采样与电流重构、坐标变换、SVPWM、电流环、速度环、观测器、启动策略。MCU选型上STM32系列是绕不开的选择。F0系列可以跑简单的FOCG4系列带硬件三角函数加速和CORDIC专门为电机控制优化F4系列算力充足适合跑复杂的观测器。如果追求性价比国产的峰岹、灵动等也有专门的电机控制芯片。选型的核心依据是你需要跑什么观测器、PWM频率多高、电流环带宽要求多少。PWM频率的选择有个经验公式PWM频率至少是电流环带宽的10倍以上。如果电流环带宽设计在1kHzPWM频率至少10kHz实际工程中常用16kHz到20kHz既避开音频噪声又给电流环留足带宽。死区时间根据MOS管和驱动芯片的开关特性来定一般几百纳秒到1微秒。3. 核心细节解析坐标变换、SVPWM与电流采样3.1 Clarke变换与Park变换的物理意义坐标变换是FOC的数学地基但很多人只是照着公式写代码并不理解每一步在干什么。我用最直白的方式讲一遍。Clarke变换是把三相静止坐标系A、B、C互差120度变成两相静止坐标系α、β互差90度。因为三相电流满足iaibic0所以实际上只有两个独立变量Clarke变换就是把这个约束用起来把三个变量压缩成两个。变换后α轴和A轴重合β轴超前α轴90度。Park变换是把两相静止坐标系α、β变成两相旋转坐标系d、q。旋转的角度就是转子电角度θ。变换之后d轴对准转子磁场方向q轴超前d轴90度。原本在α-β坐标系里正弦变化的电流在d-q坐标系里变成了直流量。这里有个关键点Park变换需要转子角度θ。有传感器时θ直接读无感时θ来自观测器。所以观测器的精度直接决定了Park变换的精度进而决定了电流环的控制效果。这就是为什么无感FOC里观测器是核心。反Park变换和反Clarke变换是逆过程把d-q坐标系下的电压指令变回三相占空比交给SVPWM去执行。实操心得调试时可以把θ人为固定成某个值然后给一个固定的d轴电压观察电流是否稳定。如果电流在震荡说明坐标变换或者采样有问题先别急着上观测器。3.2 SVPWM与SPWM的区别及实现要点SVPWM和SPWM的区别热词里经常被搜。简单说SPWM是拿正弦波和三角载波比较生成PWMSVPWM是把逆变器的8种开关状态组合成一个电压空间矢量通过相邻两个矢量的作用时间合成目标电压矢量。SVPWM的优势在于直流母线电压利用率比SPWM高约15%。SPWM线性调制区最大输出相电压幅值是Vdc/2SVPWM可以到Vdc/√3。同样的母线电压SVPWM能输出更大的电压等效于提高了电机的高速性能。SVPWM的实现步骤判断目标电压矢量落在哪个扇区6个扇区计算相邻两个基本矢量的作用时间再计算三相占空比。扇区判断可以用电压矢量的α、β分量通过简单比较得到作用时间计算涉及√3的乘法。实际写代码时有个简化技巧不用显式计算扇区直接用α、β分量算出三个中间变量通过符号判断就能得到扇区号和占空比。这样代码量小、执行快适合在中断里跑。注意SVPWM的死区补偿很重要。死区会导致输出电压和指令电压有偏差低速时这个偏差占比大会造成电流波形畸变和转矩脉动。死区补偿的方法是根据电流方向给占空比加一个修正量具体补偿量需要根据死区时间和开关周期计算。3.3 电流采样单电阻、三电阻怎么选电流采样是FOC的“眼睛”采不准后面全白搭。常见方案有三种三电阻采样、单电阻采样、电流传感器采样。三电阻采样是在三相下桥臂各放一个采样电阻在每个PWM周期内当某相下桥臂导通时采该相电流。优点是采样时刻灵活、重构简单缺点是需要三个运放和三个ADC通道成本高。单电阻采样是在母线负极放一个电阻通过在不同开关状态下采样母线电流重构出三相电流。优点是成本低缺点是采样时刻受限在扇区边界和低调制比时存在采样盲区需要特殊的PWM移相策略。单电阻方案对PWM和ADC的时序配合要求很高调试难度大。采样方案成本精度实现难度适用场景三电阻高高低高性能驱动、伺服单电阻低中高成本敏感的批量产品电流传感器最高最高低大功率、高精度场合我个人的建议如果是学习和原型验证优先用三电阻把FOC的其他环节先跑通如果是做产品再根据成本要求决定是否切单电阻。单电阻的调试坑很多没有足够的示波器和耐心很容易卡住。4. 无感观测器与启动策略的实操解析4.1 滑模观测器的原理与调参滑模观测器是无感FOC里最常用的方案之一热词里“无感foc滑膜观测器”搜索量很高。它的核心思想是构造一个电流观测器让观测电流和实际电流的误差在滑模面上滑动通过开关函数提取反电动势再从反电动势算出转子角度。具体实现在α-β坐标系下电压方程可以写成观测电流的微分方程。用实际电流减去观测电流得到误差误差经过符号函数或者饱和函数乘以滑模增益反馈到观测器里。当系统进入滑模面后误差趋近于零此时开关函数的等效控制量就包含了反电动势信息。反电动势的α、β分量经过低通滤波再用反正切或者锁相环提取角度。调参的关键在滑模增益和低通滤波截止频率。滑模增益太小观测器收敛慢太大抖振严重。低通滤波截止频率太低角度滞后大太高滤波效果差。经验做法是滑模增益取反电动势幅值的1.5到2倍低通滤波截止频率取基波频率的2到5倍。实操心得滑模观测器在低速时效果差因为反电动势太小。所以低速段不要硬用滑模该用高频注入就用高频注入该用I/F就用I/F。很多人的无感FOC低速抖动就是因为强行用滑模观测器。4.2 高频注入法的适用场景高频注入法解决的是零速和低速的位置估计问题。原理是给电机注入一个高频电压信号利用电机的凸极效应d轴和q轴电感不同从高频电流响应里提取转子位置。表贴式永磁同步电机凸极效应弱高频注入效果差内置式永磁同步电机凸极效应明显高频注入效果好。高频注入的优点是零速也能估计位置不需要开环启动缺点是注入信号会带来额外损耗和噪音而且对电机参数敏感。实现上分旋转电压注入和脉振电压注入脉振注入的转矩脉动更小但需要知道d轴的大致方向。4.3 三段式启动与切换策略三段式启动是无感FOC最常用的启动方案分三步预定位、强拖加速、切换到闭环。预定位是给一个固定的d轴电压让转子转到已知位置。时间一般几百毫秒电压幅值要足够大让转子对齐但不能太大导致过流。强拖加速是按一个预设的加速度逐步提高开环频率同时保持电压幅值随频率增加。这一步电机处于开环状态角度是人为给定的不是观测出来的。切换是当转速达到一定值反电动势足够大观测器能稳定估计角度时从开环角度切换到观测器角度。切换瞬间如果两个角度差太大电机会失步。所以切换前要让观测器先跟踪一段时间等观测器角度和开环角度接近时再切。注意切换策略有很多种常见的有直接切换、加权切换、滞环切换。直接切换最简单但风险大加权切换是让观测器角度和开环角度按权重过渡平滑但实现复杂。我一般先用直接切换调通再根据实际表现决定是否上加权。5. 电流环、速度环与带宽的理解5.1 电流环整定从理论到工程电流环是FOC最内环也是带宽最高的环。电流环整定的目标是在保证稳定的前提下尽可能提高带宽让电流快速跟踪指令。理论整定方法把电机绕组看成RL电路PI调节器的零点对消电机的极点然后根据期望带宽确定比例增益。具体公式是Kp L * ωcKi R * ωc其中L是电感R是电阻ωc是期望的电流环带宽。工程整定方法先给一个小的Kp逐步增大直到电流响应出现超调或震荡然后回调到临界值的60%到70%。再加大Ki消除稳态误差同样调到临界值后回调。这种方法不需要精确的电机参数适合参数不确定的场合。电流环带宽的经验值一般取PWM频率的1/10到1/20。比如PWM频率16kHz电流环带宽取800Hz到1.6kHz。带宽太高对采样噪声和PWM延迟敏感带宽太低动态响应慢。5.2 速度环与电流环的配合速度环是外环带宽比电流环低一个数量级。一般速度环带宽取电流环带宽的1/5到1/10。速度环的输出是q轴电流指令d轴电流指令一般给零表贴式电机或负值弱磁。速度环整定和电流环类似先P后I先保证不震荡再追求响应速度。速度环的反馈是观测器估计的转速所以观测器的噪声会直接影响速度环。如果速度环震荡先检查观测器的角度和转速是否平滑。实操心得调试顺序一定是先电流环、再速度环、最后位置环如果有。电流环没调好速度环怎么调都是白费。我见过很多人跳过电流环直接调速度环结果电机一转就啸叫回头查半天发现是电流环震荡。5.3 带宽的物理意义与限制因素带宽这个词在FOC里经常出现但很多人说不清楚。带宽的本质是系统能有效跟踪的最高频率。带宽1kHz意味着指令频率在1kHz以内时系统能较好地跟踪超过1kHz幅值衰减、相位滞后。限制带宽的因素PWM频率、采样频率、计算延迟、滤波器截止频率。PWM频率决定了理论上的最高带宽采样和计算延迟会引入相位滞后滤波器会降低有效带宽。所以提高带宽不是无限制的要在整个信号链上做权衡。6. 常见问题与排查技巧实录6.1 电机不转或抖动从哪查起电机不转或者抖动是最常见的问题。排查顺序建议如下先查PWM输出。用示波器看六路PWM波形确认死区正常、互补输出正常、频率正确。如果PWM不对后面都不用查。再查电流采样。给一个固定的d轴电压看采样电流是否和预期一致。如果电流采样偏置不对Clarke和Park变换的结果全错。再查坐标变换。把θ固定给d轴电压看q轴电流是否接近零。如果q轴电流不为零说明角度或者变换有问题。最后查观测器。如果前面都正常电机还是不转那就是观测器没收敛或者启动策略有问题。6.2 常见问题速查表现象可能原因排查方法电机不转有电流角度错误、观测器未收敛固定角度测试、检查观测器输出电机抖动电流环震荡、观测器噪声大降低电流环增益、检查观测器滤波低速失步反电动势太小、观测器失效改用高频注入或I/F启动高速失步电压饱和、观测器带宽不足检查母线电压、提高观测器带宽电流波形畸变死区未补偿、采样时刻不对加死区补偿、调整采样时刻切换时失步切换角度差大、切换时机不对延迟切换、用加权切换噪音大PWM频率低、死区大提高PWM频率、减小死区效率低电流环带宽低、观测器角度滞后提高电流环带宽、补偿角度滞后6.3 独家避坑技巧第一个坑不要一上来就调无感。先把有传感器FOC跑通确认电流环、速度环、SVPWM都正常再拆掉传感器上观测器。这样出问题时能快速定位是无感部分的问题还是基础部分的问题。第二个坑观测器的角度和实际角度要对比。有传感器时把观测器角度和编码器角度同时输出到示波器上对比看观测器的跟踪误差和相位滞后。这个对比能帮你快速判断观测器调得好不好。第三个坑启动参数要保守。强拖的加速度和电压幅值宁可慢一点、小一点也不要激进。启动失败最多是转不起来启动过流可能烧管子。第四个坑PWM频率和电流环带宽要匹配。我见过有人PWM频率10kHz电流环带宽设5kHz结果电流环完全震荡。记住带宽至少是PWM频率的1/10以下。第五个坑电机参数要实测。相电阻、相电感、反电动势常数这些参数不要抄手册要自己测。电阻用电桥测电感用LCR表测反电动势常数用示波器测。参数不准观测器和电流环都调不好。7. 工具链与开源固件参考7.1 开发环境与调试工具STM32的电机控制开发常用STM32CubeMX生成初始化代码配合Keil或者STM32CubeIDE开发。STM32的MC SDKMotor Control SDK提供了完整的FOC库包括观测器和启动策略可以直接用也可以参考它的实现。调试工具方面示波器是必须的至少四通道用来同时看PWM、电流、角度。电流探头或者采样电阻加运放用来观察电流波形。如果条件允许用串口或者DAC把内部变量输出出来在示波器上看波形比单纯看变量值直观得多。7.2 开源固件参考VESC和Moteus是两个比较有名的开源电机控制固件。VESC偏向于大功率、电动载具应用代码结构清晰观测器和启动策略都有实现。Moteus偏向于机器人关节控制精度高代码质量好。参考这些开源固件能少走很多弯路。不过要注意开源固件为了兼容各种电机和场景代码复杂度高直接拿来用可能不如自己写一个精简版来得快。我的建议是先理解原理自己写一版最简单的FOC跑通之后再参考开源固件优化。7.3 参数测量与电机建模电机参数测量是FOC的基础工作。相电阻用直流电桥或者万用表测注意要测线电阻再换算成相电阻。相电感用LCR表测同样要注意线电感和相电感的关系。反电动势常数可以通过外力拖动电机用示波器测线电压峰值再换算成相电压幅值和转速的比值。电机建模的目的是为观测器和电流环提供参数。如果电机参数随温度变化大还需要考虑参数在线辨识。不过对于大多数应用常温下测一次参数就够了。8. 从理论到产品的几个关键决策8.1 观测器选型的权衡滑模观测器、龙伯格观测器、扩展卡尔曼滤波选哪个我的经验是如果MCU算力有限、成本敏感选滑模观测器实现简单、鲁棒性好低速用高频注入或者I/F补。如果算力充足、对性能要求高选扩展卡尔曼滤波全速域性能好但调参复杂。龙伯格观测器介于两者之间依赖精确的电机参数。8.2 启动策略的选择启动策略的选择取决于应用场景。风扇、水泵这类负载启动转矩小可以用I/F启动简单可靠。电动工具、压缩机这类负载启动转矩大可能需要高频注入或者预定位加更强的强拖。如果应用允许加一个霍尔传感器做低速启动、高速切无感是最稳妥的方案。8.3 成本与性能的平衡产品开发永远在成本与性能之间找平衡。单电阻采样省成本但调试难三电阻采样成本高但开发快。高算力MCU性能好但贵低算力MCU便宜但观测器受限。我的建议是先明确产品的性能底线再在底线之上找最便宜的方案。不要为了省几毛钱选了一个调试成本高几周的方案时间也是成本。我个人在实际操作中的体会是FOC无感控制最难的不是某一个算法而是把整条链路打通并调稳定。理论要懂但更重要的是动手调。看十篇论文不如自己焊一块板子、写一版代码、用示波器看一遍波形。这个专栏后续会围绕每个环节展开把代码、波形、参数都摊开来讲希望能帮你少踩几个我踩过的坑。
返回列表