单电阻无传感器PMSM控制:FOC电流重构与扩展反电动势观测器 简介面向汽车电机控制方向的嵌入式开发者与学习矢量控制的学生这份PDF应用笔记围绕三相无传感器、单分流电阻电流采样的永磁同步电机驱动设计展开重点解决低成本硬件条件下实现速度闭环与转子位置/速度估算的问题。内容以MC9S12ZVM器件为平台讲解PMSM磁场定向控制原理、dq坐标系电机模型、输出电压作用与相电流测量以及基于扩展反电动势观测器的无位置传感器算法并延伸到MC9S12ZVML128上的软件架构、初始化流程和关键外设协同。FreeMASTER与MCAT章节可用于参数整定、实时监控与性能调优适合把控制理论落到车规级电机控制代码中的读者。资源包为1个PDF文件约2.58MB按系统概念、控制策略、软件实现和调试界面组织便于按主题查阅目前已有212人学习可作为单分流PMSM方案入门与工程对照的参考资料。1. 单电阻无传感器把三个传感器和一个编码器一起删掉代价落在哪三个电流传感器加一个旋变是很多人心里三相 PMSM 矢量控制的标准配置。AN5327 走的路线相反板上只留一个采样电阻串在直流母线转子位置和转速全由算法从电压电流里反推。硬件成本压到很低直觉上精度和动态响应也该一起塌掉但它没有。要搞懂 3 相无传感器单分流电流感应 PMSM 电机控制关键不在“省了什么”而在省掉的东西被什么机制接住了母线电流靠 PWM 时序在时间轴上切片重构出三相电流转子位置靠观测器在数学模型里虚拟出来。两件事都要求时序精确到微秒、运算精确到定点数量级对不上就是电流畸变、低速抖动、启动失败而多数人第一反应是去调 PID方向从一开始就错了。下面按数学基础、单电阻重构、观测器、实现与踩坑的顺序把这套机制的骨架拆开。2. FOC 的坐标系变换为什么把交流量搬进 dq 之后PI 控制器就够用了2.1 从三相静止到两相旋转Clarke 与 Park 各自消除了什么三相 PMSM 的定子绕组在空间上互差 120°通入三相正弦电流后合成的是一个旋转的定子磁动势矢量。工程师真正想控制的其实是这个矢量的幅值和方向而不是三根线上的瞬时电流值——后者是随转子位置不停正弦变化的三条曲线任何控制器想直接跟踪它们都会被“一直在变”这件事拖住。Clarke 变换做的是第一刀把三个耦合的量压成两相正交分量 α、β绕组之间的互感耦合在这里被消除从三个约束变成一个平面上的矢量。这一步没有引入任何旋转αβ 仍然是静止坐标系量还是正弦的。Park 变换是第二刀也是整个 FOC 成立的关键。它把 αβ 平面上的矢量投影到一个跟着转子同步旋转的坐标系上d 轴对准转子磁链方向q 轴超前 90°。投影之后稳态下的 dq 分量是直流量——转子转多快坐标系就转多快矢量与坐标系相对静止。这就是为什么 PI 控制器够用PI 对直流量有无穷大直流增益稳态误差可以压到零换成 αβ 下的正弦量PI 的有限增益只会带来幅值衰减和相位滞后转速一高就跟不上。这里有个容易被忽略的细节变换系数有两种约定。等幅值变换带 2/3 系数变换前后矢量幅值相等代价是功率不守恒等功率变换带 √(2/3)功率守恒但幅值被缩放。这份应用笔记的转矩公式里明确出现 3/2 这个常数说明它用的是非功率不变等幅值形式。这件事不影响控制但影响定标如果代码里按等功率形式准备了 Q 格式的系数又拿理论转矩去核对实测转矩两者会差一个常数因子现象是“电机转得对扭矩读数差一截”查半天查不出原因。2.2 dq 轴电压方程里的耦合项不补偿会怎样把三相电压方程投影到同步旋转坐标系后PMSM 的 dq 轴电压方程长这样ud Rs·id Ld·did/dt − ωe·Lq·iq uq Rs·iq Lq·diq/dt ωe·Ld·id ωe·ψPM第一项是电阻压降第二项是电感上的暂态压降剩下的带 ωe 的项是耦合项和反电动势。看结构就知道d 轴电压里混进了 iqq 轴电压里混进了 id还有一项完全由转速决定的反电动势 ωe·ψPM。控制器输出 ud、uq 是想控制 id、iq 的但这两个被控对象之间是互相串的突加 q 轴电流d 轴电流会跟着动转速一变q 轴电压需求整体平移一个 ωe·ψPM。转速低的时候这些项数值小不补偿也能转转速上去之后它们占主导后果是动态过程里 id 大幅波动凸极机里 id 波动又反过来影响转矩电流环带宽被压死加速时电机发出明显的啸叫甚至失步。所以 FOC 的标准做法是在 PI 输出上加前馈补偿把耦合项和反电动势显式抵掉剩下两个结构完全一致的一阶惯性环节——Rs L·s。补偿项里的 ωe 用观测器估计的转速Ld、Lq、ψPM 用 MCAT 里标定出来的参数参数不准的时候补偿不干净残余部分就变成动态过程中的电流毛刺这是后面调参要反复对的地方。2.3 电流环 PI 增益ω0 和 ξ 是怎么定出来的补偿之后 d 轴和 q 轴各是一个 Rs L·s 的一阶对象用标准 PI 控制器去闭环可以按二阶系统的极点配置反推增益。设期望闭环自然频率 ω0、阻尼比 ξ则Kp 2ξω0·L − Rs Ki ω0²·L两个式子的物理含义很直接积分增益决定把稳态误差压掉的速度正比于电感比例增益除了带宽还要减掉被控对象自带的电阻极点。实际工程里 ω0 不是随便填的它受采样频率约束——控制周期 100 μs 意味着采样频率 10 kHz电流环带宽通常取采样频率的 1/10 到 1/20也就是 ω0 在几百 Hz 的量级再往上离散化和采样延迟会让相位裕度迅速被消耗。ξ 一般取 0.707二阶 Butterworth 响应无超调的临界点或 1.0更保守响应慢一点但不振荡。这两个参数在 MCAT 里是开放给用户调的工具会把 ω0、ξ 换算成实际的 Kp、Ki 写进代码里的参数结构体。很多人调电流环时直接改 Kp、Ki 数值试其实等价于在盲调 ω0 和 ξ不如反过来先在 MCAT 里设定期望带宽让工具算再看阶跃响应是不是对得上。这里还有一个隐含前提——Ld、Lq 是从电机参数表或 MCAT 的电机参数辨识环节来的如果电感值标错一倍换算出来的 Kp 也就错一倍调参调不出来是必然的。2.4 变换链在定点 MCU 上的落地位宽和角度索引器件是面向汽车应用的 16 位内核没有浮点单元整条 FOC 链路都跑定点。这一步的问题往往不在公式在定标和位宽上。/* 等幅值 Clarke三相 - 两相静止 */ static inline void clarke(const int16_t ia, const int16_t ib, const int16_t ic, int16_t *alpha, int16_t *beta) { /* α 轴与 a 轴重合省掉一次乘加 */ *alpha ia; /* 1/sqrt(3) ≈ 0.57735Q15 表示 18919 */ *beta (int16_t)(((int32_t)(ib - ic) * 18919) 15); } /* Park静止 - 旋转sin/cos 由电角度索引查表 */ static inline void park(const int16_t alpha, const int16_t beta, const int16_t sin_t, const int16_t cos_t, int16_t *d, int16_t *q) { int32_t d_tmp (int32_t)alpha * cos_t (int32_t)beta * sin_t; int32_t q_tmp (int32_t)beta * cos_t - (int32_t)alpha * sin_t; *d (int16_t)(d_tmp 15); /* Q15 归一化 */ *q (int16_t)(q_tmp 15); }clarke里 alpha 直接取 ia是因为等幅值变换下 α 轴与 a 轴重合省掉一次乘加β 需要 (ib − ic)/√318919 就是 0.57735 的 Q15 表示。乘积用 int32 承接再右移是因为两个 int16 相乘最大能到 2^30直接塞回 int16 会溢出——这类问题小电流时跑起来完全正常满载时才翻车属于最难查的一类。park的 sin/cos 来自角度查表索引是观测器输出的电角度累加值表长一般取 2 的整数次幂用位与代替取模这样在中断编程里不会引入除法开销。反 Park 变换同理方向相反复用同一份查表值。整条链路每 100 μs 跑一次运算量集中在两次 Park、两次反 Park 和两次 PI 上定点实现下 16 位内核能留出足够裕量给 ADC 采样和故障检测。位宽规划要一次性做对中间结果统一用 int32只在写回状态变量时截断截断点越少越好。3. 单电阻电流重构一个采样电阻怎么还原三相电流3.1 八个基本电压矢量与母线电流的对应关系三相逆变桥有 6 个开关管每相上下管互补考虑死区有 8 种开关组合对应 8 个基本电压矢量6 个非零矢量幅值相同、方向相差 60°外加 2 个零矢量000 和 111电机端被短接输出电压为零。关键点在于采样电阻串在直流母线负极和桥臂之间它测的是从母线流入逆变桥的电流不是某一相电流。而母线上流过的电流取决于当前哪几个上管导通。以矢量 100 为例A 相上管、B/C 相下管导通电流从母线经 A 相流入电机从 B、C 相流回负极此时 i_dc 就是 ia。矢量 101A、C 上管导通时电流经 A 相流入、从 B 相流出i_dc −ib。零矢量时三个上管全通或全断电机端短接母线电流为零采不到任何相电流信息。矢量A B C导通的上管母线电流 i_dc对应相100AiaA110A、B−icC010BibB011B、C−iaA001CicC101A、C−ibB000 / 111无 / 全0无六个非零矢量刚好覆盖了三相电流的正负两种观测方式每个 PWM 周期只要采到其中两个第三相就能由基尔霍夫电流定律 ia ib ic 0 算出来。这就是单电阻能成立的全部依据——它并非靠测一相推出三相其原理是利用“不同开关状态下母线电流对应不同相”这个时间复用关系。理解这一点后面所有限制条件都能自然推出来能采到哪两相、什么时刻采完全由当前矢量在扇区里的位置决定。3.2 双矢量采样窗口为什么一个 PWM 周期里必须采两次SVPWM 用相邻两个非零矢量加零矢量合成参考电压矢量。以七段式调制为例一个周期内的作用顺序是零矢量 → 矢量 1 → 矢量 2 → 零矢量 → 矢量 2 → 矢量 1 → 零矢量。两个非零矢量的作用时间 T1、T2 由参考矢量在扇区里的位置决定两者之和不超过 PWM 周期。采样必须落在非零矢量作用期间而且要在开关动作完成后留出稳定时间死区时间、开关管开通延时、运放和 RC 滤波的建立时间、ADC 采样保持时间加起来通常需要 1~2 μs 的最小窗口。这份应用笔记选的是 100 μs 的控制周期非零矢量持续时间在大多数工况下够用但边界情况不够。采到两个电流后第三相由 KCL 得到。这里有个实现细节值得注意两个采样点对应的矢量是相邻的它们给出的两相电流符号可能不同一个正、一个负重构时要统一到同一极性约定否则 dq 变换出来的矢量方向会偏 60° 的整数倍现象是电机能转但转矩明显偏小、电流明显偏大而电流环自己觉得一切正常。3.3 采样窗口塌缩低调制比和扇区边界处的不可观测区这是单电阻方案最本质的限制。窗口宽度直接由占空比决定会出现在两类位置低调制比时参考矢量幅值很小T1 和 T2 都被压缩两个窗口可能同时掉到最小窗口以下扇区边界处参考矢量接近某一个基本矢量另一个矢量的作用时间趋近于零只有一路能采到。窗口不够时ADC 采到的是开关振铃和没建立完的运放输出重构出的电流完全错误。表现很有规律电流波形在每个电周期里出现 6 次畸变对应 6 个扇区边界或者轻载时电流彻底乱掉、满载反而正常——因为这个“轻重载反常”的现象很多人会误判成电流环增益问题。常见的解决思路有三类实际产品里往往组合使用。一是移相法窗口不足时把某一相的 PWM 边沿整体平移一个固定量人为撑开有效矢量的作用时间代价是输出谐波变大。二是多次采样在一个周期内增加采样点甚至利用零矢量期间注入测量脉冲从别的矢量组合里拿到缺失的那一相。三是观测器补偿在不可观测区用上一周期的电流值或电流观测器输出做预测牺牲一小段动态精度换取连续性。这份应用笔记的实现里最小窗口是通过软件判断的窗口不足时对重构结果做保持处理——这是最省事、也最容易被忽略的做法。如果不做保持直接把振铃采回来电流环就会拿着错误反馈去调节把整个系统带偏。3.4 ADC 触发时序与运放调理几微秒决定成败重构能不能成一半取决于软件判断另一半取决于模拟前端的时序配合。该器件内部集成了两个运放配合外部电阻网络把采样电阻上的小电压抬到 ADC 输入范围的中点附近再送进 ADC。增益和偏置的选择要同时满足两个约束最大电流时不能饱和到电源轨最小可分辨电流时要高于 ADC 的量化噪声。双极性电流正负都可能有必须做虚拟地偏置否则负半周直接削掉。触发时刻一般不用软件定时器去“卡”而是用 PWM 模块的比较匹配事件硬触发 ADC。中心对齐模式下计数器从 0 涨到峰值再落回 0两个非零矢量的中点分别在上升沿和下降沿各出现一次触发点就设在这些位置上。硬件触发的好处是抖动只有时钟周期量级软件里轮询标志位再启动转换抖动会随中断响应时间飘一旦飘到开关沿上采样值就是垃圾。4. 无位置传感器扩展反电动势观测器怎么把转子位置算出来4.1 为什么表贴式 PMSM 也能用“扩展反电动势”传统认知里表贴式 PMSMLd ≈ Lq没有凸极性好像只能靠反电动势过零检测只有凸极机才能用高频注入。但把 dq 轴电压方程改写成 αβ 静止坐标系下、以电流为状态量的形式会出现一个包含 (Ld − Lq)·(ωe·id − diq/dt) 的项它和 ωe·ψPM 项一起被打包成一个待观测量通常叫扩展反电动势。对表贴式电机Ld − Lq 项近似为零扩展反电动势退化成普通的旋转反电动势观测器照样成立。“扩展”二字的含义就在这里把凸极项和永磁项合成一个量模型对两类电机统一代码不用为电机类型分支。状态方程写成d/dt [iα; iβ] (1/Ld)·([uα; uβ] − Rs·[iα; iβ] − [eα; eβ])其中 eα −ωe·ψPM·sin θe、eβ ωe·ψPM·cos θe符号依坐标约定而定。观测器的构造方式和 Luenberger 观测器一样用同一个模型并行算一份估计电流拿实际电流与估计电流的差乘增益去校正误差收敛后校正项里就含着反电动势。4.2 误差信号与位置跟踪从电流误差到角度校正项里包含 sin/cos 的角度信息但不能直接算 atan2——定点开销大而且反电动势估计本身带噪声直接取角度会让转速估计抖得没法用。标准做法是用一个跟踪观测器PLL 型构造误差信号 ε −êα·cos θ̂ − êβ·sin θ̂把它送进一个 PIPI 输出就是估计转速积分得到估计角度。稳态时 ε 正比于 sin(θe − θ̂)小角度下近似线性整个环路就是一个二阶锁相环。这样做的另一个好处是转速和角度一起估出来不需要对角度做差分——差分会把量化噪声放大几十倍。PLL 的带宽要低于电流环带宽同时高于速度环带宽夹在中间太高会跟着电流噪声抖太低则加速时角度跟不上表现为动态过程中转矩不足。这也是 MCAT 里观测器参数和速度环参数要分开调的原因两者的时间尺度本来就不一样。4.3 启动对齐、开环强拖与切换反电动势幅值正比于转速。零速和极低速时反电动势的信噪比接近零观测器在数学上就不可观这不是调参能解决的。所以必须有一段开环先给 d 轴通一个直流电流iq 置零把转子强行拉到 d 轴对齐位置保持一段时间让转子稳定然后按设定的加速度给一个虚拟角度斜坡电流环跟着这个角度走电机被强拖加速等转速升到观测器能稳定收敛的阈值以上再把本文还有配套的精品资源点击获取