全速域PMSM无感FOC:高频注入+SMO平滑切换的工程实现解析
搞PMSM无感FOC控制的同行应该都对“低速拉不起来”这件事有切身体会。B1.1版本这套全速域永磁同步电机无感控制方案就是在解决这个老问题基于高频注入做转子初始位置辨识低速区域用高频注入的角度闭环中高速切到SMO滑模观测器中间用权重切换平滑过渡整体跑在TI DSP F283x系列C2000平台工程名就是TIDSP_F283xC2000_IPM_FOC_Sensorless_V1.0。这篇文章会把架构思路、核心原理、TI DSP上的工程实现、调试步骤和常见坑一次讲透适合正在做无感FOC、卡在“零速启动”“低速切高速”的工程师参考。1. 项目概述真·全速域无感FOC的实现路径1.1 B1.1版本到底解决了什么问题很多做无感控制的同学一开始都是从滑模观测器入手的。SMO的思路很直接通过反电动势估算转子位置和速度中高速表现不错成本低、实现简单。可一旦转速降到额定转速的5%以下反电动势信噪比变得极差估算结果几乎是噪声电机根本站不住。零速下反电动势为零SMO直接失效这时候电机就没法正常启动。B1.1版本要解决的核心问题就是把这个断档补上。方案分三段工作静止状态下通过高频注入辨识转子初始位置低速区域继续用高频注入闭环控制中高速区域切回SMO。这样从零速到额定转速全部由无感算法接管不需要编码器也不需要额外的启动强拖逻辑。这里面最容易被低估的是“全速域”这三个字。很多方案单独做低频注入或者单独做SMO都能跑难的是两组估计算法怎么交接。切换时如果角度发生跳变电流会瞬间波动轻则转速波动重则过流保护。B1.1版本用权重切换处理这个交接而且加了滞环和角度差归一化目的就是让切换过程尽量无感。1.2 这套架构适合谁以及为何值得细看适合三类人。第一类刚做完有感FOC、想往无感方向升级的工程师这套架构能让你少走至少两个月弯路。第二类已经在做无感FOC但只停留在高速域被启动问题卡住的人高频注入那几节可以直接落地。第三类使用TI C2000平台做电机控制的同学工程里的PWM配置、ADC时序、中断框架有很强的参考价值。从工程命名也能看出来这是一份偏实战的代码工程不是论文层面的算法演示。TIDSP_F283xC2000_IPM_FOC_Sensorless_V1.0里包含了基于TI官方例程改造的底层驱动配合CCS开发环境使用。IPM如果按内置式永磁电机理解高频注入的凸极效应会非常明显如果你的电机是表贴式SPM电动势法也适用只是注入幅值和解调参数需要根据电感差异调整。2. 为什么是高频注入加SMO而不是单靠一个算法2.1 低速和零速下反电动势失效的物理原因永磁同步电机的反电动势大小正比于转速和磁链。SMO本质上是观测反电动势所以一旦转速掉到某个范围反电动势被淹没在死区效应、逆变器非线性、采样噪声里信噪比低到没法用。这不是算法改进能彻底解决的问题是物理层面的极限。低速下你不增大电流激励反电动势就是那么点电压。强行放大增益噪声也跟着放大观测器剧烈抖动最后角度飞到天上。有人会问低速下能不能用“强制定位”的方式先给一个固定方向的电压矢量把转子拉到一个已知角度然后直接启动。这个办法在风机水泵类轻载负载下可以凑合但在压缩机、电动工具、搬运机器人这类带负载启动的场合很容易失步。因为负载不确定强制定位角度和实际负载角对不上一松手就倒转。所以B1.1版本选择高频注入作为低速域的解决方案。它不依赖反电动势而是主动往电机里注入一个高频电压然后检测对应的电流响应通过电机的凸极性识别转子位置。零速下依然有效这是本质区别。2.2 高频注入和滑模观测器的天然互补关系高频注入的优点是零低速性能好缺点是中高速性能受限。为什么受限一方面注入的高频分量会占据一部分PWM调制能力转速越高需要的基波电压越大高频分量很容易导致过调制另一方面高速下铁损和涡流效应会让高频阻抗变得复杂解调误差变大。SMO恰好相反转速越高反电动势越大观测越轻松。所以一个管低速一个管中高速两者在各自主场都很强互补性非常好。权重切换就是在这个基础上设计的低速区域完全信任高频注入中高速完全信任SMO中间一段按比例融合。控制程序里并没有“谁取代谁”的判断而是两个观测器同时运行按转速实时分配权重。这样做的好处是切换过程连续不会出现离散的状态跳变。3. 转子初始位置辨识电机一上电就知道角度3.1 高频电压注入的物理基础内置式永磁同步电机转子结构上有明显的d轴和q轴电感差异这是高频注入能工作的基础。d轴磁路经过永磁体磁阻大电感小q轴磁路主要是空气和铁芯磁阻小电感大。这个电感差异就是凸极效应。当你在某个方向上注入高频电压产生的电流幅值会和该方向相对于d轴的夹角有关。通过测量电流响应就能反推出转子d轴指向。如果d轴和q轴电感完全一样比如理想的表贴式电机电流响应就没有方向信息高频注入就难以生效。这也是为什么很多高频注入方案在IPM电机上效果好在SPM电机上要做一些特殊处理。初始位置辨识比低速闭环更讲究。电机静止时你并不知道转子在哪所以需要在静止坐标系或者估计坐标系注入一个旋转高频电压矢量或者注入两个正交方向的高频方波。注入之后采电流做解调得出来的角度会有一个180度模糊的问题也就是d轴正方向和负方向分辨不出来。3.2 信号注入与解调的完整流程我这里用的是旋转高频电压注入实现相对简单在αβ静止坐标系下注入一个幅值恒定、频率固定的旋转电压矢量。电机是IPM电流响应里就包含转子位置相关的高频分量并且带二倍位置信息。解调流程大概是先采样三相电流变换到αβ坐标系再用带通滤波器把高频成分提取出来。把提取出来的电流信号乘以一个与注入频率同步的正弦/余弦参考信号然后经过低通滤波器去掉二倍频分量就能得到包含转子位置误差的直流分量。这个位置误差信号通常是一个关于角度差的正弦函数。只要角度差不大可以用线性近似送给一个PI调节器做闭环。这个闭环的目标就是让估计角度和真实d轴角度差趋向零PI的输出就是转速修正量积分得到角度。N极和S极的识别需要利用磁饱和效应。转子磁极方向不同磁路饱和度轻微不同会出现一个小的二次谐波分量。调试时可以在估计角度上加一个小扰动电流观察电流响应方向来判定极性。工程上更省事的做法是先解算出d轴角度然后注入一个短时的d轴电流脉冲根据正反两个方向电感差异判断N极。注意初始位辨识阶段不要直接上大扭矩。这一步的核心是“找角度”如果辨识完立刻强拉负载角度误差还没收敛电机会抖一下。我们一般会让它先静止稳定几百毫秒确认角度估计值不再漂移再启动转速环。3.3 注入频率、幅值和滤波器参数的实战选择注入频率的选择要考虑三件事PWM开关频率、电流环带宽、以及数字控制的采样延迟。一般建议注入频率不超过PWM频率的十分之一到二分之一但至少要高于电流环带宽三到五倍。以10kHz PWM为例电流环带宽通常在800Hz到1.5kHz注入频率我习惯放在500Hz到1kHz之间。幅值的选择更偏经验。太小电流响应信噪比差太大会有明显的噪声和损耗。一般先按母线电压的5%到10%试再结合电流采样的分辨率调整。有些小电感电机5%母线电压就能产生数安培高频电流这时要降低幅值或者串联阻抗限流。滤波器这块带通滤波器中心频率等于注入频率品质因数不能太高否则动态响应太慢太低又滤不干净SMO和基波分量。我通常先用二阶带通Q取1到2。解调后的低通滤波器截止频率设在注入频率的十分之一到五分之一之间原则是既要滤掉2倍注入频率分量又要保留位置跟踪的动态速度。4. 低速区域的高频注入控制与权重切换设计4.1 低速电流环带宽与高频注入的隔离策略高频注入不是只做初始定位在低速闭环阶段要持续工作。这时电流环既要响应基波电流指令又要对高频注入分量表现出特定阻抗。如果电流环带宽设计得过高会主动去跟踪高频电流那高频注入信号被电流环抵消位置信息就没了。所以低频注入运行时电流环带宽必须刻意压低或者至少保证对注入频率的增益足够小。这里就回到了热词里很多人问的“FOC控制中带宽的理解”带宽高了响应快但对高频噪声敏感带宽低了抗干扰好但响应慢。在低速高频注入段我们要的不是对高频注入的快速跟踪而是稳定的基波电流响应所以电流环带宽不宜超过注入频率的一半。PWM波形和定时器在这个阶段也很有讲究。FOC的PWM载波频率决定了电流采样时刻。多数C2000工程里PWM周期寄存器TBPRD决定载波频率计数器归零时触发ADC采样正好采到PWM周期中点此时电流纹波最小。高频注入叠加在SVPWM输出上实际上是通过调制波里加高频分量实现的相当于PWM波形的占空比在按注入频率波动。采样时要注意避开死区时间和开关切换引起的尖峰。如果ADC触发点不对采到的高频电流相位会乱解调出来的角度就偏。我们在工程里通常把触发点设置在PWM计数器的周期值和零值处即每个载波周期的中点这样采样的窗口最为稳定。4.2 权重切换的实现细节权重切换的核心问题是怎么让高频注入估计的角度和SMO估计的角度在过渡区间内平滑组合。实现上先用转速计算权重我习惯用三段式曲线0到10%额定转速权重固定为1完全使用高频注入角度。10%到30%额定转速权重从1线性降到0高频注入角度权重递减SMO角度权重递增。30%额定转速以上权重为0完全使用SMO输出。这个比例可以根据负载特性调整。重载启动时SMO在中低速也能提前介入因为电流大反电动势观测相对稳定轻载时反电动势小SMO要推迟介入。切换阈值必须加滞环。比如升速到12%额定转速进入过渡区间降到8%时退出过渡区间避免电机在阈值附近来回波动。高速域时高频注入可以关闭以减小损耗和噪声再降速到阈值附近再重新开启注意重新开启时高频注入需要短暂收敛时间所以滞环宽度要留够。4.3 切换区间内的角度融合与滞环处理角度融合不能简单写theta w * theta_smo (1-w) * theta_hfi。因为这两个角度是推算出来的低频注入角度可能因为解调误差有几度偏差SMO角度在中低速也可能有相位滞后直接把两个角度做加权平均值会在某些时刻产生明显跳变。正确做法是把两个角度的差值先处理到[-180度, 180度]范围内然后对差值做加权再加到基准角度上。伪代码如下float delta theta_smo - theta_hfi; while (delta PI) delta - 2.0f * PI; while (delta -PI) delta 2.0f * PI; theta_est theta_hfi weight * delta;这样即使在过渡区间内两个角度有几十度的偏差输出角度依然连续不会突然翻转一圈。这里补充一个经验切换时除了看转速还要看两个观测器的角度差是否在合理范围。如果角度差超过30度说明某个观测器可能已经发散此时贸然切换会出问题。我一般会增加一个角度差保护判断角度差太大时强制保持当前权重并在调试日志里打标记。还有一个容易被忽略的问题不是直接对角度做加权而是对角度差做加权否则在跨过360度/0度边界时会瞬跳。上面这个处理就规避了这个坑。5. SMO滑模观测器从中速到高速的硬核接手5.1 SMO的基本原理与观测器方程SMO是在αβ坐标系下工作的。电机电压方程里包含了反电动势项而反电动势的方向和转子磁极位置直接相关。SMO的思路是构造一个电流观测器用滑模项让观测电流逼近实际电流此时滑模控制律的输出就是反电动势的估计值。典型方程形式// 电流观测方程 d_i_alpha_hat/dt (u_alpha - e_alpha_hat - R*i_alpha_hat) / Ls; d_i_beta_hat/dt (u_beta - e_beta_hat - R*i_beta_hat) / Ls; // 滑模项 e_alpha_hat K * sign(i_alpha_hat - i_alpha); e_beta_hat K * sign(i_beta_hat - i_beta);其中K就是滑模增益。实际工程中直接对高频抖动的开关信号做反正切会得出一堆毛刺所以需要经过低通滤波得到平滑的反电动势再由反正切或者锁相环算出角度。5.2 反电动势观测的角度补偿问题低通滤波器会让反电动势信号相位滞后。转速越高滞后角越大。如果不补偿高速下角度估计始终慢半拍FOC坐标变换用的角度就不准输出转矩会下降效率变差。补偿公式一般写成角度补偿量与电角速度成正比theta_comp theta_est k_phase * omega_e;系数k_phase需要根据低通滤波器的阶数和截止频率计算或者直接通过实验标定。方法是让电机在某一转速稳定运行用编码器或者注入法得到的真实角度做对比把角度差和转速的比值记录下来。另一个角度补偿的难点是负载角。无感算法观测到的是反电动势矢量方向也就是永磁磁链方向但实际转子位置在带载时会有转矩角偏移尤其是IPM电机磁阻转矩占比大负载角不可忽略。工程上轻载问题不大重载时要么查表补偿要么用磁链模型修正。5.3 SMO增益、滤波器与启动边界条件滑模增益K必须足够大保证滑模面可达。物理上K要大于反电动势峰值加上扰动项否则观测电流无法收敛。问题是反电动势随转速升高而升高所以K不能固定。低速时K太大系统抖动严重高速时K太小观测误差大。工程上我习惯把K做成与转速相关的分段函数或者用归一化反电动势标幺值设计。低通滤波器截止频率也要跟着转速变化。固定截止频率低速时滤掉谐波的同时可能把基波反电动势也削弱高速时截止频率太低又会造成很大的相位滞后。比较省事的做法是用一阶低通加转速前馈补偿先不管相位后面统一补偿。SMO有个天然边界条件转速太低不能启用。在我们这套架构里这个边界由权重切换保证。当转速低于10%额定转速时SMO输出的角度只做监控不参与闭环。等转速上来了再逐步提高SMO权重。边界值不是绝对的如果电机带载大反电动势在当前转速下依然可观可以把切换点调低。6. 基于TI F283x的工程落地配置、中断与软件框架6.1 PWM配置和电流采样时序C2000系列里的EPWM模块配置核心是决定载波频率和ADC触发时刻。以10kHz PWM为例如果EPwm时钟是100MHz那么TBPRD应设为5000计数模式用递增递减这样PWM频率就是100MHz/(2*5000)10kHz。EPwm1Regs.TBPRD 5000; EPwm1Regs.TBPHS.all 0; EPwm1Regs.TBCTR 0; EPwm1Regs.TBCTL.all 0x001E; // 增/减计数模式, 同步时钟ADC触发我一般用PWM计数器周期事件触发而不是软件触发。这样每次载波周期的开始或者中点启动采样时间确定不会因为中断抖动影响采样精度。三相电流采样的顺序要在软件里固定住采样窗口尽量和PWM开关动作错开避开死区引起的电流尖峰。死区设置也很关键。IPM模块一般需要互补PWM加死区防止上下桥直通。F283x的AQCTLA、AQCTLB配合DB模块配置输出极性和死区时间。死区太大波形畸变大低速反电动势和注入信号都受影响死区太小模块发热风险高。一般按IPM数据手册的推荐值来0.5到2微秒很常见。6.2 ADC、坐标变换与SVPWM的实现ADC采回来的值是数字量先要减去偏移量做标定。电流采样电阻或者霍尔传感器的零点偏移上电时要自动校准一次不然两相电流有直流偏置Clark变换后会有振荡。坐标变换这块FOC的标准流程是三相电流Iu/Iv/Iw - Clarke - Ialpha/Ibeta - Park - Id/Iq。位置角度在低速段来自高频注入输出在中高速段来自SMO输出切换段来自两者融合结果。SVPWM的实现可以直接用TI官方的svgen库也可以自己写扇区判断和矢量作用时间。自己写的好处是能清楚看到调制波和定时器的关系。七段式SVPWM里零矢量分配决定开关频次和电流纹波占空比计算结果最终装载到CMPA寄存器。// 占空比装载 EPwm1Regs.CMPA.half.CMPA duty_a * TBPRD; EPwm2Regs.CMPA.half.CMPA duty_b * TBPRD; EPwm3Regs.CMPA.half.CMPA duty_c * TBPRD;频率越高PWM分辨率越重要。F283x的PWM模块是高分辨率PWMHRPWM在高频时建议用HRPWM扩大占空比精度尤其是高频注入段很小的占空比变化都会影响注入电压的准确性。6.3 主中断ISR的软件框架整套控制我放在一个PWM中断里执行中断频率等于PWM频率的2倍或者1倍由项目调试需要决定。推荐主中断流程interrupt void MainISR(void) { // 1. ADC转换结束读取三相电流 // 2. 电流标定和 Clarke/Park 变换 // 3. 根据当前状态机选择角度源 // STATE_ALIGNMENT: 高频注入角度定位逻辑 // STATE_LOW_SPEED: 高频注入角度闭环 // STATE_TRANSITION: 权重融合角度 // STATE_HIGH_SPEED: SMO角度 // 4. 电流环PI计算 // 5. 转速环PI计算 // 6. 反Park变换 // 7. SVPWM输出 // 8. 更新状态机切换判断 }状态机是工程里最重要的一部分。没有状态机单纯把两个算法写在一起很容易在切换时跑飞。我用四个状态初始辨识、低速闭环、过渡切换、中高速闭环。每个状态进入时有独立的条件退出也有独立的判断这样变量可以分清楚。调试时建议把ADC采样、坐标变换和电流环放在高频中断里把转速环和观测器更新放在相对低频率或者同一个中断的慢速段执行避免中断执行时间过长。高频注入和SMO对实时性要求不同注入解调要求采样同步性高SMO可以稍微慢一点。7. 调试实录上电定位、带载启动和切换调参7.1 开环调试到闭环切换的步骤第一次上板不要直接跑闭环。先断开电源用示波器检查三路PWM波形是否正常频率、死区、互补关系对不对。确认后低压给母线不接电机看看ADC采到的电流是不是接近零。这些基础检查没问题再接电机。初始定位调试时让程序停在辨识状态观测估算的角度是否稳定。用手慢慢转动电机轴看估算角度是否跟着转方向是否正确。方向反了多半是相序或者Clark变换符号问题不要动算法先检查接线和变换。低速闭环启动我习惯给一个很小的转速指令比如额定转速的2%观察电流波形是否平稳。高频注入的角度波形应该是一个缓慢变化或者保持不变的值。如果角度在某个位置抖动先看解调低通的输出大概率是滤波器参数太宽放进了基波分量。带载启动调试重点看从初始定位到低速闭环切换那一瞬间。如果电机猛地抖一下多半是初始定位还没稳住就切了。解决办法是延长辨识稳定时间或者在切换前强制力矩电流为零等角度确认后加力矩。7.2 观测角度波形与电流波形的典型特征高频注入正常时如果存储角度波形它会在真实角度附近小幅波动波动幅度大约一两个机械角度乘以极对数。电流波形上q轴电流里会混有高频成分但经过低通后应该平滑。如果高频成分严重检查带通滤波器是否中心和注入频率偏了。SMO介入后观测电角度应该始终跟踪估计角度。用示波器同时看SMO角度和高频注入角度在过渡区间两者差值不能出现周期性跳变。如果差值周期性变化说明其中一个角度源存在倍频误差比如反电动势滤波后的角度有转速纹波。切换调参的现场经验先调低速段让高频注入稳定再单独调SMO让中高速稳定最后调权重切换。不要一开始就想着两个一起调。一次只改一个参数记录切换点的转速和电流跳变幅度。过渡区间权重线性段太短切换会猛太长两个异步误差源混合时间过久反而出现低频抖动。8. 常见问题与排查技巧8.1 启动抖动、反转和失步的排查启动抖动最常见的原因是初始位置辨识不准。先确认高频注入解调出来的角度是否和实际转子位置一致。把电机轴固定给定一个小角度步进看估算角度是不是也步进同样的度数。如果角度差始终差一个固定值说明解调基准相位有偏需要调整注入信号和采样信号的相位对齐。启动反转也经常遇到。这种情况多是初始位置辨识把N极和S极搞反了。检查磁极二次谐波判定逻辑或者在注入后增加一个d轴电流脉冲验证。脉冲方向正确时q轴电流响应应该很小如果q轴响应明显说明角度极性错了。失步通常和电流环带宽有关。低速高频注入段电流环带宽太低负载突变时电流跟不上太高注入信号被电流环吃掉。实际调的时候从低带宽往高带慢慢加找到一个既能稳住电流、又不过度抑制注入分量的临界点。8.2 切换点扰动和角度跳变切换点扰动优先怀疑角度融合没做差归一化或者滞环区间太窄。先把权重过渡区间加宽一些延长过渡时间看扰动是否降低。如果角度融合后出现周期性的几十度跳变检查角度取模逻辑是否写对跨零处理是否完整。还有一种情况高频注入和SMO都在用同一个速度环输出但两个观测器对速度的估计存在稳态误差。切换时速度环积分量变化电流会有一个冲击。排查方法是在过渡区间观察两个角度源的转速值两者差不能大。若差得大要检查SMO的低通相位补偿是否准确。如果一切正常但切换点还是抖动可以尝试在切换区间加入一个简单的滤波比如对融合角度做一阶惯性平滑。这个方法治标不治本但调试初期能快速稳住系统之后再回头查根因。8.3 高频噪声、过热与母线电压波动高频注入带来的可闻噪声是正常现象但噪声过大就有问题。先看注入幅值是不是太高试着逐步降低幅值观察位置估计是否还能稳定。有些电机转子结构使得高频电流集中在局部磁路发热明显这时可以降低注入频率而不是一味降低幅值因为低频下同样电流产生的损耗分布不同。母线电压波动会影响注入电压幅值。母线升高实际注入高频电压增大电流响应变大母线跌落位置估计信噪比变差。工程上要对注入幅值做母线电压归一化也就是把设定幅值乘以一个系数使其等效到固定母线电压这样母线波动时位置观测不会跟着抖。过温问题不仅要看功率部分还要检查d轴高频电流是否过大。IPM电机的永磁体对温度敏感过温会导致磁链下降进而让SMO反电动势系数变化。如果观察到一个方向长期稳定偏移可以往参数辨识的方向预留接口先把补偿系数做成可标定表格。我自己调试这套架构时最大的体会是“不要试图让一个算法解决所有问题”。高速有高速的办法低速有低速的办法关键是让它们在自己最舒服的区间工作再花心思做交接。B1.1版本这个工程里高频注入和SMO本身都算不上新东西真正难的是如何稳定地从一个观测器过渡到另一个观测器并且在上电那一刻就能给出可信的初始角度。最后分享一个调试习惯每次切换调参前先把高频注入角度和SMO角度同时记录下来用两路DAC或者调试变量输出到一个文件中看它们的差值和变化趋势再决定动哪个参数。这个习惯让我少排查了很多诡异问题比盲目改增益有效得多。
上一篇/下一篇内容由系统自动关联
返回资讯列表 →