ARTICLE DETAIL

资讯详情

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

FOC无感控制从理论到落地:坐标变换、SVPWM与滑模观测器实战

FOC无感控制从理论到落地:坐标变换、SVPWM与滑模观测器实战 FOC 无感控制这个方向我从第一次点亮电机到现在前后折腾了差不多三年。最开始用带霍尔传感器的方案觉得挺简单换到无感之后才发现坑一个接一个转子初始位置检测不准、滑模观测器抖得厉害、低速干脆转不起来、电流环一加负载就震荡。这些问题逼着我把 FOC 的每个环节都拆开重新理解了一遍从坐标变换的数学推导到 SVPWM 的定时器配置再到观测器的离散化实现每一步都踩过坑也总结了一些经验。这个专栏我打算把 FOC 无感控制从理论到落地的完整链路讲清楚。不是那种只贴公式的教程也不是只给代码不说原理的速成帖而是把为什么这么做和实际怎么做结合起来。适合已经了解电机控制基础、想从有感到无感过渡的工程师也适合正在调无感 FOC 但卡在某个环节找不到方向的朋友。整个专栏会围绕FOC、无感控制、坐标变换、SVPWM、滑模观测器这些核心内容展开每一篇都尽量做到能直接参考复现。1. 为什么无感 FOC 值得单独拿出来讲1.1 有感与无感的分水岭到底在哪很多人觉得无感 FOC 就是在有感的基础上把传感器去掉代码改几行就完事了。我一开始也这么想结果第一次跑无感的时候电机直接堵转发热差点烧了绕组。后来才明白有感和无感的分水岭不在有没有传感器而在于转子位置信息的获取方式发生了根本变化。有感方案里霍尔或者编码器直接告诉你转子在哪个扇区、角度是多少控制器只需要做坐标变换和电流调节就行。无感方案里转子位置变成了一个估计值这个估计值来自电压、电流、反电动势等可测量量的计算。问题在于电机静止或者转速极低的时候反电动势几乎为零你根本没法从反电动势里提取位置信息。这就是无感 FOC 最核心的矛盾高速时观测器很准低速时观测器失效。这个矛盾衍生出了一系列工程问题。启动怎么办低速用什么策略观测器怎么设计才能在宽速范围内稳定这些问题不是改几行代码能解决的需要从控制策略层面重新设计。所以无感 FOC 值得单独拿出来讲因为它不是有感方案的简单替换而是一套需要重新思考的控制体系。1.2 无感控制真正难啃的三块骨头我把无感 FOC 的难点归纳为三块启动、低速观测、参数敏感性。启动是最先遇到的坎。电机静止时反电动势为零观测器没有输入信号你只能先用开环方式把电机拖到一定转速再切换到闭环。这个开环拖到闭环的过程涉及开环强拖的电流设定、切换转速的选择、切换时的平滑过渡每一步都有讲究。我试过切换转速设太低观测器还没收敛就切过去结果电机直接失步也试过设太高开环阶段电流太大电机发热明显。低速观测是第二块骨头。反电动势幅值跟转速成正比低速时信号很弱信噪比差观测器容易受噪声干扰。滑模观测器在低速时抖振明显龙伯格观测器又对参数敏感。实际工程里往往需要结合高频注入或者 I/F 启动策略来覆盖低速段。参数敏感性是第三块。无感算法依赖电机参数定子电阻、电感、磁链这些参数如果跟实际电机偏差大观测器估计的角度就会有稳态误差。电机运行一段时间后温度升高电阻会变化电感也会随电流饱和而变化。这些因素叠加起来让无感控制在实际工况下的鲁棒性成为一个持续要面对的问题。1.3 这个专栏打算怎么讲我不打算按教科书的顺序从电机模型讲到控制策略那样太枯燥也不符合实际调试的顺序。这个专栏会按照实际调试的推进路径来组织先讲坐标变换和 SVPWM 这些基础但必须扎实的环节再讲电流环和速度环的设计然后重点讲观测器的原理与实现最后讲启动策略和整体调试方法。每一篇都会包含三部分内容原理说明为什么这么做、实现细节具体怎么配、怎么写、调试经验我踩过的坑和验证过的方法。原理部分不会堆公式而是用物理直觉解释数学实现部分会给出具体的参数计算和代码结构调试部分会分享一些文档里不会写的实操技巧。2. 坐标变换从三相到两相的思维转换2.1 Clarke 变换不只是数学简化Clarke 变换把三相电流 Ia、Ib、Ic 变成两相静止坐标系下的 Iα、Iβ。很多资料把它讲成数学上的降维简化这个说法没错但容易让人忽略它的物理意义。从物理上看三相绕组在空间上互差 120 度它们产生的磁动势是三个脉动磁场的合成。Clarke 变换的本质是把这个合成磁场用两个正交的分量来表示。Iα 和 Iβ 就是合成磁动势在静止两相坐标系下的投影。理解这一点很重要因为它解释了为什么 Clarke 变换的系数是 2/3 而不是别的数——2/3 是为了保证变换前后磁动势幅值不变。实际实现的时候有个细节三相电流之和理论上为零所以只需要采样两相就能算出第三相。但实际电路中采样两相再计算第三相会引入误差尤其是采样时刻不同步的时候。我一般建议采样三相电流虽然多占一个 ADC 通道但精度更有保障。如果确实只能采两相那第三相用 Ia Ib Ic 0 来算但要注意采样时刻必须对齐。2.2 Park 变换的核心是跟着转子转Park 变换把静止坐标系下的 Iα、Iβ 变成旋转坐标系下的 Id、Iq。这个变换的关键在于旋转角度 θ 就是转子电角度。变换之后Id 对应励磁分量Iq 对应转矩分量。对于表贴式永磁同步电机SPMSMId 的参考值通常设为零因为磁阻转矩为零只需要 Iq 产生转矩就行。这里有个容易混淆的点电角度和机械角度的关系。电角度 极对数 × 机械角度。如果你的电机是 4 对极那转子转一圈电角度转了 4 圈。Park 变换用的是电角度不是机械角度。我见过有人把机械角度直接代进去结果电机转起来一顿一顿的查了半天才发现是极对数没乘。Park 变换的实时性要求很高。因为 θ 在不停变化每个 PWM 周期都要重新计算 sinθ 和 cosθ。如果直接用 math.h 的 sinf 和 cosf在低端 MCU 上可能占用不少时间。实际工程里常用查表法或者 CORDIC 算法来加速。查表法要注意表长和插值方式表太短精度不够表太长占 Flash。我一般用 1024 点的表加线性插值精度和资源占用比较平衡。2.3 反 Park 变换与电压重构反 Park 变换把 Vd、Vq 变回 Vα、Vβ然后送给 SVPWM 模块。这一步看起来简单但有个实际问题死区补偿和电压重构。逆变器桥臂有死区时间防止上下管直通。死区会导致实际输出电压跟指令电压有偏差尤其在电流过零附近偏差更明显。这个偏差会造成电流波形畸变进而影响观测器的估计精度。所以实际工程里往往需要做死区补偿根据电流方向修正占空比。电压重构是另一个问题。SVPWM 模块输出的是占空比但观测器需要的是实际相电压。如果你直接用指令电压给观测器那死区、管压降、母线电压波动这些因素都没考虑进去观测精度会受影响。更准确的做法是根据占空比和母线电压反算实际相电压再送给观测器。这个细节在低速时特别重要因为低速时反电动势本来就小电压误差占比大。3. SVPWM不只是提高电压利用率3.1 SVPWM 和 SPWM 的本质区别很多人知道 SVPWM 比 SPWM 电压利用率高 15.47%但不太清楚这个数字怎么来的也不清楚为什么高。我一开始也只是记住这个结论后来自己推导了一遍才真正理解。SPWM 是把正弦调制波跟三角载波比较生成开关信号。它的线性调制区最大输出相电压幅值是 Vdc/2对应线电压幅值是 √3·Vdc/2。SVPWM 是把逆变器的 8 种开关状态对应的电压矢量合成起来用两个相邻矢量和零矢量在一个 PWM 周期内作用等效出目标电压矢量。它的线性调制区最大输出相电压幅值是 Vdc/√3比 SPWM 高了约 15.47%。这个提升的本质原因是SVPWM 在合成电压矢量时零矢量的作用时间可以被两个相邻矢量分摊使得合成矢量的轨迹更接近圆形从而在同样的母线电压下输出更大的基波幅值。换句话说SVPWM 更充分地利用了逆变器的电压输出能力。实际实现的时候SVPWM 需要判断目标矢量在哪个扇区然后计算两个相邻矢量的作用时间和零矢量时间。扇区判断可以用 Vα、Vβ 的符号和大小关系来做也可以用反正切算角度再判断。前者计算量小后者逻辑简单。我一般用前者因为 MCU 上算反正切比较费时间。3.2 七段式与五段式 SVPWM 的取舍SVPWM 的开关序列有两种常见形式七段式和五段式。七段式在一个 PWM 周期内开关序列是对称的零矢量平均分配在周期两端和中间。它的优点是谐波特性好电流纹波小缺点是每个周期有 6 次开关动作开关损耗大。五段式把零矢量集中在一端开关次数减少到 4 次开关损耗降低但谐波特性变差电流纹波增大。选哪种取决于应用场景。如果开关频率高、对效率要求高五段式更合适如果对电流纹波和噪声要求高七段式更好。我做的几个项目里风机类负载用五段式因为对噪声不敏感效率优先伺服类负载用七段式因为对转矩脉动要求高。还有一个细节零矢量的分配方式。七段式里两个零矢量 V0 和 V7 可以平均分配也可以按比例分配。平均分配实现简单但中点电位平衡性差一些按比例分配可以调节中点电位但逻辑复杂。对于两电平逆变器中点电位不是问题平均分配就行。如果是三电平逆变器中点电位平衡就是个必须处理的问题。3.3 定时器配置与 PWM 波形生成SVPWM 最终要落到定时器的比较寄存器上。以 STM32 的高级定时器为例通常配置成中央对齐模式这样生成的 PWM 波形对称谐波特性好。配置的时候有几个关键参数载波频率、死区时间、比较寄存器的更新时机。载波频率决定了 PWM 周期。频率越高电流纹波越小但开关损耗越大。一般 IGBT 模块用 10kHz 到 20kHzMOSFET 可以用到 20kHz 以上。我做的低压小功率电机用 20kHz高压大功率用 10kHz。死区时间根据功率管的开关特性来定。IGBT 一般 1 到 3 微秒MOSFET 可以短一些几百纳秒。死区太短会直通太长会畸变。我一般先用数据手册的推荐值然后根据实际波形微调。比较寄存器的更新时机很重要。如果在 PWM 周期中间更新可能导致波形不对称产生额外的谐波。正确做法是在周期开始或者计数器溢出时更新保证每个周期的波形完整。STM32 的定时器有影子寄存器可以在更新事件时自动加载新值这个功能要用上。还有一个容易忽略的点ADC 采样时刻跟 PWM 的同步。电流采样要在开关管导通、电流稳定的时刻进行通常是在 PWM 周期的中点或者零矢量作用期间。如果采样时刻不对采到的电流会有很大噪声影响控制精度。STM32 的定时器可以触发 ADC实现硬件同步这个功能一定要用。4. 电流环与速度环带宽匹配是核心4.1 电流环的设计逻辑电流环是 FOC 最内层的控制环它的带宽决定了整个系统的动态响应能力。设计电流环的时候核心问题是带宽设多少合适理论上电流环带宽越高响应越快。但实际上带宽受限于几个因素PWM 频率、采样频率、电机电气时间常数。根据经验电流环带宽一般取 PWM 频率的 1/10 到 1/20。比如 20kHz 的 PWM电流环带宽取 1kHz 到 2kHz。如果取太高采样噪声和 PWM 更新延迟会导致震荡取太低动态响应慢负载变化时电流跟不上。电流环的 PI 参数可以用内模控制或者极点配置来算。我一般用极点配置把闭环极点配置在期望带宽处然后反推 PI 参数。具体公式是Kp L × ωcKi R × ωc其中 L 是电感R 是电阻ωc 是期望带宽。这个公式假设电流环的采样和 PWM 更新延迟可以忽略实际调试时还要根据波形微调。调试电流环的时候我一般先给一个阶跃电流指令看实际电流的响应。如果超调大减小 Kp如果响应慢增大 Kp如果有稳态误差增大 Ki。但要注意Ki 太大会导致低频震荡尤其是电机参数不准的时候。4.2 速度环与电流环的带宽分离速度环是外环它的带宽必须远低于电流环否则两个环会互相干扰。一般速度环带宽取电流环的 1/5 到 1/10。比如电流环 1kHz速度环取 100Hz 到 200Hz。这个带宽分离的原则来自级联控制理论内环要足够快才能在外环看来是一个理想的执行器。如果内环和外环带宽接近外环的调节会引起内环的震荡整个系统就不稳定。速度环的 PI 参数设计类似电流环但转动惯量和负载特性影响很大。实际调试时我一般先空载调再带载调。空载时速度环增益可以高一些带载后如果震荡就降低增益或者加积分分离。还有一个实际问题速度反馈的滤波。速度是通过位置差分算出来的噪声很大。如果直接用作反馈速度环会震荡。所以需要加低通滤波但滤波会引入相位滞后降低带宽。我一般用一阶低通截止频率取速度环带宽的 2 到 5 倍在噪声和滞后之间折中。4.3 带宽理解中的常见误区关于带宽我见过几个常见的误解。第一个误解是带宽越高越好。实际上带宽受限于采样频率和噪声盲目提高带宽只会引入震荡。我试过把电流环带宽设到 PWM 频率的 1/5结果电流波形全是毛刺电机发热严重。第二个误解是带宽就是响应速度。带宽确实跟响应速度有关但它还跟稳定性、抗扰性有关。一个高带宽的系统可能响应快但对噪声和参数变化更敏感。实际工程里要在响应速度和鲁棒性之间折中。第三个误解是电流环和速度环可以独立调。虽然理论上可以分开设计但实际调试时两个环是耦合的。电流环没调好速度环怎么调都不对速度环震荡也会反过来影响电流环。所以调试顺序很重要先调电流环确认电流跟踪良好再调速度环。5. 无感观测器从反电动势到转子位置5.1 滑模观测器的原理与抖振问题滑模观测器是无感 FOC 里最常用的方案之一。它的核心思想是构造一个电流观测器让观测电流跟踪实际电流跟踪误差通过滑模控制律收敛到零然后从滑模控制律里提取反电动势再算出转子位置。滑模观测器的优点是鲁棒性强对参数变化不敏感。缺点是抖振。因为滑模控制本质上是开关控制控制律在滑模面两侧切换实际实现时由于离散化和延迟会产生高频抖振。这个抖振会传到反电动势估计里导致角度估计有噪声。抑制抖振的方法有几种用饱和函数代替符号函数、用边界层法、用高阶滑模。我一般用饱和函数实现简单效果也够用。饱和函数的边界层厚度要调太薄抖振抑制不够太厚收敛变慢。还有一个实际问题是低速时反电动势太小。滑模观测器依赖反电动势低速时反电动势幅值小信噪比差估计精度下降。所以滑模观测器一般用在高速段低速段需要配合其他策略。5.2 龙伯格观测器与参数敏感性龙伯格观测器是另一种常见方案。它基于电机的状态空间模型构造一个全维或者降维观测器通过配置观测器极点来保证收敛速度。龙伯格观测器的优点是估计平滑没有滑模的抖振问题。缺点是依赖电机参数尤其是电感和磁链。如果参数不准估计角度会有稳态误差。而且电机运行时温度变化会导致电阻变化电流饱和会导致电感变化这些都会影响观测精度。实际工程里我一般用龙伯格观测器做基础估计然后加一个参数自适应环节在线辨识电阻或者磁链。自适应律的设计可以用李雅普诺夫方法保证稳定性。但自适应会增加计算量也会引入新的稳定性问题调试起来更复杂。还有一种做法是结合滑模和龙伯格用滑模观测器估计反电动势用龙伯格观测器做角度平滑。这样既有滑模的鲁棒性又有龙伯格的平滑性。我试过这种方案效果不错但参数更多调试更麻烦。5.3 高频注入法在低速段的应用低速段是无感控制的难点。反电动势太小观测器失效。高频注入法通过在定子电压上叠加一个高频信号利用电机的凸极效应来估计转子位置。这个方法的优点是低速甚至零速都能工作缺点是需要电机有一定的凸极性而且注入信号会产生额外的损耗和噪声。高频注入法分旋转电压注入和脉振电压注入。旋转注入是在 αβ 坐标系下注入一个旋转的高频电压矢量通过检测高频电流的幅值变化来估计位置。脉振注入是在 d 轴或者 q 轴注入高频信号通过检测高频电流的相位来估计位置。旋转注入实现简单但对凸极性要求高脉振注入精度高但需要知道大概的转子位置。实际应用里高频注入一般用在启动和极低速段转速上来之后切换到反电动势观测器。切换过程要平滑否则电机会抖动。我一般用加权过渡低速时高频注入权重大高速时反电动势观测器权重大中间线性过渡。6. 启动策略从零速到闭环的完整链路6.1 开环强拖的参数选择无感 FOC 启动的第一步通常是开环强拖。控制器按照设定的加速度和电流让电机从静止加速到一定转速然后切换到闭环。开环强拖的关键参数是加速度和电流幅值。加速度太小启动慢太大电机会失步。电流幅值太小带不动负载太大电机发热。我一般根据负载惯量和摩擦转矩来估算先给一个保守值然后根据实际启动情况调整。还有一个细节开环阶段的电流频率和幅值要匹配。如果频率上升太快电流幅值跟不上电机会失步。我一般让电流幅值在启动初期稍大然后随着转速上升逐渐减小到额定值。开环强拖的缺点是效率低、发热大而且如果负载变化启动可能失败。所以有些方案用 I/F 启动就是电流闭环、频率开环这样电流可控发热小一些。I/F 启动的实现比纯开环复杂但效果更好。6.2 开环到闭环的切换时机切换时机是无感启动最关键的环节。切早了观测器还没收敛角度估计不准电机会失步切晚了开环阶段太长发热和效率都差。判断观测器是否收敛可以用几个指标观测角度的误差、反电动势估计的幅值、观测器的收敛标志。我一般用反电动势估计幅值来判断当估计幅值超过一定阈值认为观测器已经收敛可以切换。切换过程要平滑。如果直接切角度可能有跳变电机会抖。我一般用加权过渡开环角度和观测角度的权重随时间变化逐渐从开环过渡到闭环。过渡时间根据转速和负载来定一般几十毫秒到几百毫秒。还有一个实际问题是切换时的电流冲击。开环时电流是给定的闭环时电流由 PI 调节器控制切换瞬间 PI 调节器的输出可能跟开环电流不匹配导致冲击。解决办法是在切换前把 PI 调节器的积分项预置到跟开环电流匹配的值这样切换时输出连续。6.3 启动失败时的排查思路启动失败是无感调试里最常见的问题。我总结了一个排查顺序先看电流波形。如果电流波形畸变严重可能是 SVPWM 配置有问题或者死区补偿不对。如果电流幅值不够可能是母线电压不足或者电流环参数不对。再看角度估计。如果角度估计跳变或者噪声大可能是观测器参数不对或者采样噪声太大。可以用示波器看观测角度和实际角度的对比判断误差来源。然后看切换过程。如果切换时电机抖动或者失步可能是切换转速太低观测器还没收敛或者切换过渡太突然角度跳变。最后看负载匹配。如果空载能启动带载失败可能是开环电流不够或者加速度太大。需要根据负载调整参数。这个排查顺序我用了很多次基本能覆盖大部分启动问题。关键是要有波形数据光看代码是看不出问题的。7. 调试工具与实测经验7.1 示波器与电流探头的使用技巧调试 FOC 离不开示波器。我一般用四通道示波器同时看三相电流、母线电压、PWM 波形和观测角度。看电流波形的时候要注意探头的带宽和量程。电流探头带宽不够高频纹波看不到量程不对小电流信号看不清。我一般用 10A 到 30A 量程的探头根据电机额定电流选。看 PWM 波形的时候要注意探头的地线。如果地线太长会引入噪声波形失真。我一般用弹簧地线尽量短。看观测角度的时候可以用 DAC 输出把角度值转成模拟电压然后示波器看。这样能实时观察角度变化比串口打印直观得多。STM32 的 DAC 输出很快延迟小适合看动态过程。7.2 串口波形与上位机监控除了示波器串口波形也是常用工具。我一般用串口把关键变量传到上位机用波形软件显示。这样能看长时间的趋势也能记录数据离线分析。串口波形的关键是采样率和数据量。采样率太低动态过程看不到数据量太大串口带宽不够。我一般用 1kHz 到 10kHz 的采样率传关键变量比如 Id、Iq、转速、观测角度。数据量大的时候用 DMA减少 CPU 占用。上位机软件我用过几种各有优缺点。有的实时性好有的分析功能强。我一般用能同时显示多路波形、支持数据导出、能加数学运算的。这样可以在上位机上算误差、算频谱比在 MCU 上算方便。7.3 常见问题与快速定位调试过程中遇到的问题我整理了一个快速定位表现象可能原因排查方法电机不转母线电压不足、PWM 无输出、电流环饱和查母线电压、查 PWM 波形、查电流指令电机抖动角度估计不准、电流环震荡、切换不平滑查观测角度、查电流波形、查切换过程低速失步观测器失效、开环电流不够、加速度太大查反电动势幅值、查开环电流、降低加速度高速震荡电流环带宽太高、观测器噪声大、滤波不足降低电流环增益、加观测器滤波、查采样噪声发热严重电流畸变、死区补偿不对、开关损耗大查电流波形、调死区补偿、降低载波频率这个表是我自己调试时总结的不一定全面但覆盖了大部分常见问题。实际排查的时候关键是先看波形再改参数不要盲目调。8. 参数辨识与在线校正8.1 定子电阻与电感的离线测量无感算法依赖电机参数参数不准观测器就有误差。所以调试之前先测准参数。定子电阻可以用直流伏安法测。给电机任意两相通直流电测电压和电流算电阻。注意要测多组数据取平均因为接触电阻和温度会影响结果。我一般测三组电流从小到大看电阻是否随电流变化。如果变化大说明有饱和或者接触问题。电感可以用交流伏安法或者 LCR 表测。交流伏安法是在两相间加交流电压测电流和相位差算电感和电阻。LCR 表直接测但要注意测试频率跟实际工作频率接近。我一般用 LCR 表测再用交流法验证。磁链常数可以用反电动势法测。用外力拖动电机旋转测相反电动势幅值和转速算磁链。注意要测线电压然后换算成相电压。我一般用示波器测反电动势波形算幅值和频率再算磁链。8.2 参数变化对观测精度的影响电机运行时参数会变化。电阻随温度升高而增大铜的电阻温度系数是 0.00393/°C温度升高 50°C电阻增大近 20%。电感随电流增大而减小因为磁路饱和。磁链随温度升高而减小因为永磁体磁性减弱。这些变化对观测器的影响不一样。电阻变化主要影响低速因为低速时电阻压降占比大。电感变化影响动态响应因为电流变化率跟电感有关。磁链变化影响反电动势幅值进而影响角度估计。实际工程里如果对精度要求高需要在线辨识参数。电阻辨识可以用直流注入法在 d 轴注入一个小直流测电压电流算电阻。磁链辨识可以用反电动势法根据稳态方程算磁链。电感辨识比较难一般用高频注入或者递归最小二乘。8.3 在线校正的工程实现在线校正的实现要考虑几个问题计算量、收敛速度、稳定性。计算量不能太大否则占用控制周期。我一般用递推最小二乘计算量适中收敛也快。但递推最小二乘对噪声敏感需要加遗忘因子遗忘因子太小收敛慢太大噪声大。收敛速度要跟工况匹配。如果负载变化快校正要快如果工况稳定校正可以慢一些。我一般用变遗忘因子工况变化时遗忘因子小收敛快工况稳定时遗忘因子大噪声小。稳定性是最重要的。在线校正相当于在控制回路里加了一个慢速自适应环如果自适应环跟控制环带宽接近会互相干扰。所以自适应环的带宽要远低于控制环一般取控制环的 1/10 到 1/100。9. 从代码到硬件的完整链路9.1 中断优先级与实时性保障FOC 控制对实时性要求高中断优先级配置很关键。我一般把 PWM 更新中断设为最高优先级电流采样中断次之速度环和通信中断最低。PWM 更新中断里做坐标变换、电流环计算、SVPWM 输出。这个中断必须准时不能被打断。如果被其他中断打断PWM 更新延迟电流波形会畸变。电流采样中断跟 PWM 更新中断同步在 PWM 周期中点触发。采样完成后立即做 Clarke 变换然后等 PWM 更新中断做后续计算。这样安排能保证采样和计算的时序正确。速度环和通信中断优先级低可以被打断。速度环周期比电流环长一般 1ms 到 10ms 一次被打断几次影响不大。通信中断更不重要可以放到最低优先级。9.2 定点与浮点的选择MCU 上做 FOC定点还是浮点是个常见问题。浮点运算精度高编程方便但需要硬件 FPU 或者软件浮点库。有 FPU 的 MCU比如 STM32F4 系列浮点运算很快直接用浮点就行。没有 FPU 的 MCU软件浮点很慢一个乘法可能几十个周期影响控制周期。定点运算快但编程麻烦要考虑定标和溢出。我一般用 Q 格式比如 Q15 表示 -1 到 1 之间的小数Q12 表示 -8 到 8 之间的小数。定标要根据变量范围来选太小精度不够太大容易溢出。实际工程里如果 MCU 有 FPU我优先用浮点开发效率高。如果没有 FPU关键路径用定点非关键路径用浮点。比如电流环用定点速度环和通信可以用浮点。9.3 硬件保护与故障处理FOC 系统需要硬件保护防止过流、过压、过热损坏功率管和电机。过流保护一般用比较器电流超过阈值直接封锁 PWM。比较器的阈值要设得比软件保护高一些软件保护作为第二道防线。我一般设硬件保护在额定电流的 2 到 3 倍软件保护在 1.5 到 2 倍。过压保护用分压电阻采母线电压超过阈值封锁 PWM 或者泄放能量。母线电压波动大的场合还要加制动电阻或者制动斩波器。过热保护用温度传感器贴在功率管或者散热器上。温度超过阈值降额运行或者停机。我一般设两级保护一级降载二级停机。故障处理要有记录方便排查。我一般把故障类型、发生时间、当时的电流电压转速都存到 Flash 里事后可以读出来分析。10. 一些零散但重要的经验10.1 采样时刻与噪声抑制电流采样时刻很关键。理想情况下在 PWM 周期中点采样此时电流纹波最小。但实际电路中开关噪声、地弹、探头噪声都会影响采样精度。我一般用以下方法抑制噪声采样电阻靠近功率地减少地弹采样信号走差分线减少共模干扰ADC 参考电压加滤波减少电源噪声采样时刻避开开关瞬间等开关噪声衰减后再采样。还有一点采样窗口要足够长。ADC 采样保持需要时间如果采样窗口太短采样电容充不满采样值不准。我一般根据 ADC 手册的推荐值设采样时间再根据实际波形微调。10.2 死区补偿的实操细节死区补偿说起来简单做起来麻烦。补偿量跟电流方向有关电流过零时方向不确定补偿容易出错。我一般用几种方法结合电流幅值大的时候根据电流方向补偿电流幅值小的时候不补偿或者用线性过渡电流过零附近用滞环判断方向避免频繁切换。补偿量的大小要根据死区时间和母线电压算。死区导致的电压误差是 ΔV (Tdead / Tpwm) × Vdc。补偿的时候根据电流方向在对应相的占空比上加或者减这个量。实际调试时先不加补偿看电流波形。如果过零附近有畸变再加补偿从小到大调直到波形改善。补偿过头也会畸变所以要慢慢调。10.3 不同电机类型的适配FOC 算法对不同类型的电机适配方式不一样。表贴式永磁同步电机SPMSM的 d 轴和 q 轴电感相等磁阻转矩为零Id 参考值设为零就行。内置式永磁同步电机IPMSM的 d 轴和 q 轴电感不等有磁阻转矩可以用最大转矩电流比MTPA控制提高效率。无刷直流电机BLDC的反电动势是梯形波FOC 算法假设正弦波用在 BLDC 上会有转矩脉动。如果对转矩脉动要求高需要做反电动势谐波补偿。异步电机的 FOC 更复杂需要估计转子磁链还要考虑转差频率。我做的项目里永磁同步电机居多异步电机少一些。10.4 调试心态与迭代方法最后说点虚的但我觉得挺重要。FOC 无感调试是个 iterative 的过程不可能一次成功。我一开始总想一次调好结果越调越乱。后来学会了一步一步来先保证硬件没问题再调开环再调电流环再调速度环最后调观测器和启动。每次只改一个参数改完看波形确认效果再改下一个。如果一次改多个参数出了问题不知道是哪个引起的。还有记录很重要。我一般用表格记录每次调试的参数和现象这样能回溯也能看出趋势。有时候调着调着忘了之前试过什么记录能避免重复劳动。这个专栏后续会按这个框架展开每一篇深入讲一个环节。如果你正在调无感 FOC希望这些经验能帮你少走点弯路。有问题欢迎交流我也还在学习很多地方的理解可能不全面互相探讨才能进步。
返回列表