
简介《MICROCHIP-AN1078.PDF》是Microchip编号AN1078的应用笔记面向家电电机控制开发者、嵌入式工程师及自动化相关专业学习者聚焦永磁同步电机PMSM无传感器磁场定向控制FOC的算法实现与器件选型。压缩包仅含1个PDF文件大小约1.03MB便于直接查阅、课堂讲解与项目归档。文档从空调、洗衣机等动态负载场景出发对比六步控制与FOC在转矩平稳性、振动噪声和动态响应上的差异说明无传感器方案降低霍尔传感器依赖、适应浸水或线束受限安装的原因并梳理PMSM在尺寸、效率与噪声方面的优势。内容进一步介绍dsPIC DSC的PWM、ADC、QEI、MAC指令和硬件饱和等电机控制资源以dsPIC30F6010A为例给出1.5kW空调压缩机、5007300RPM、50µs控制环及约21MIPS开销等应用要点可供算法移植、方案评估、课程设计与技术预研参考。目前已有1082人学习。1. 从滚筒顶部那半桶衣物说起家电电机为什么绕不开无传感器 FOC洗衣机滚筒转到某个角度湿衣物全堆在顶部电机要在这一瞬间输出比空载大得多的转矩空调在室温跳变时要把压缩机从低速迅速拉到高速。这类负载的共同点是转矩随位置和工况剧烈变化六步梯形控制在换相点产生的转矩脉动落到整机上就是抖动、噪声和转速掉落。AN1078 这份应用笔记给的解法是用 dsPIC DSC 做 PMSM 的无传感器磁场定向控制把定子电流拆成励磁分量和转矩分量分别闭环转子位置和速度全部从反电动势里估出来省掉霍尔和编码器。它盯的不是实验室极限性能而是家电的成本结构——一颗三十 MIPS 级别的控制器、两颗分流电阻、六个功率管驱动 1.5 kW 压缩机从 500 RPM 跑到 7300 RPM。下面按需求、架构、变换、估算、起动、避坑、验收的顺序把这份笔记里的算法拆成能照着搭的结构。2. 总体架构设计三环控制主线、硬件链路与 50 µs 时间预算这套方案的所有动作都挂在一条 50 µs 的中断上理解架构的关键不是先看公式而是先弄清这条中断里到底跑了什么、外面挂了什么。硬件决定你能测到什么时序决定你什么时候测资源预算决定你还剩多少算力去跑估算器。三者任何一环卡住后面写再漂亮的 Park 变换也跑不起来。2.1 硬件链路从 115/230 VAC 母线到两颗分流电阻功率侧是标准的三相电压型逆变器交流输入整流后挂母线电容六个开关管组成三相桥输出接 PMSM 的三相绕组。桥臂左侧通常还有一级功率因数校正电路本方案不展开验收时把它当成一个已存在的输入级即可。真正决定控制精度的是电流检测低阻值分流电阻串在下桥臂与母线负端之间两相各一颗采样电压经运放放大后送进控制器的模拟输入。第三相电流不测由基尔霍夫电流定律反算。选下桥臂电阻而不是相线霍尔原因很直接下桥臂导通时母线电流才流过电阻采样时刻与 PWM 状态强相关可以用 PWM 模块自己触发 ADC省掉外部采样保持逻辑成本也压到最低。代价是采样窗口受占空比约束占空比拉满时窗口会被吃掉这条在后面的避坑章里会重点讲。保护链路不能省。逆变器的过流比较器输出接到控制器的故障输入脚一旦触发硬件直接把六路 PWM 输出缓冲器置为高阻不等软件反应。软件侧再读故障标志做状态机复位。开发阶段我一般会先把这条硬件封锁验证一遍人为短接一相下桥臂确认 PWM 在微秒级关断再去调算法。用户接口部分很朴素一个电位器给参考转速一个按键做起停一个字符型 LCD 显示状态。这些东西不影响控制性能但答辩时是加分项因为它证明整套系统能脱机运行而不是挂在调试器上才能转。2.2 中断时序A/D 触发到 PWM 更新的九个步骤控制环以 PWM 频率运行一个周期 50 µs。PWM 采用中心对齐模式计数器在周期中点产生触发信号启动 A/D 转换四路输入可同时采样转换完成后进中断。中断里的执行顺序是固定的不能随意调换因为后一步的输入依赖前一步的输出读两相电流采样值做零漂校正按 ia ib ic 0 反算出 icClarke 变换把三轴静止量压成两轴静止量 iα、iβPark 变换用上一次迭代算出的角度把 iα、iβ 旋到 d-q 轴得到 Id、Iq用测量电流、上一拍电压和观测器状态估算本拍的反电动势、角度和速度速度外环 PI输出 Iq 参考值同时做转矩限幅Id、Iq 两个电流内环 PI输出 Vd、VqPark 逆变换用新角度把 Vd、Vq 转回 vα、vβClarke 逆变换与空间矢量调制合并计算得到三相占空比写入 PWM 占空比寄存器清中断标志注意第 4 步在第 5、6 步之前。很多人按直觉把估算放到环路之后结果这一拍用的还是上一拍的角度去算电压高速时角度滞后被放大表现为电流波形畸变、效率下降。估算器必须先用本拍的测量值把角度更新出来环路再基于新角度算输出这个顺序是这套方案能跑到 7300 RPM 的前提。2.3 资源预算21 MIPS、450 字节与 6K 程序空间意味着什么这份笔记给出的资源账很具体50 µs 控制周期下算法约占 21 MIPS相当于 CPU 总开销的三分之二整机数据存储约 450 字节含用户界面在内程序空间约 6K 字节。按这个量级器件下限可以压到该系列里最小的一颗。反推回来你选的控制器至少要留出三分之一余量给中断响应、通信和状态机否则一旦加个串口协议就超时。模块是否放中断优化手段采样与坐标变换是Q15 定点乘法走单周期 MAC滑模观测器与滤波是符号函数代替除法滤波器用移位近似三环 PI是增益定点化限幅用比较指令角度三角函数是查表或 CORDIC 迭代不调浮点库空间矢量调制是与逆变换合并减少一次开方状态机、显示、参数存储否放主循环靠标志位与中断交互这张表最容易被忽略的是最后一行。把 LCD 刷新、按键扫描塞进中断单次可能只多几微秒但一旦碰上长分支50 µs 就被吃掉PWM 更新滞后一拍现象是低速正常、高速莫名其妙地抖。分清楚什么必须实时、什么可以慢比抠指令周期更有效。3. 正向通道实现Clarke/Park 变换、抗饱和 PI 与 SVM 占空比生成正向通道负责把「我要多少转矩」翻译成「六个开关管这一拍怎么开」。它由采样、坐标变换、三个 PI 环和调制四段组成每一段都有明确的数值范围和溢出边界。这一段写对了电机至少能转写错了通常表现为电流波形削顶、PI 输出贴限幅、或者干脆过流保护。3.1 采样窗口与第三相电流的重建分流电阻上的电压只在下桥臂导通期间有效所以采样点必须落在下桥臂稳定导通的中点。中心对齐 PWM 的好处就在这里计数器在周期中点附近三相下桥臂的导通状态是确定的触发一次 ADC 就能同时抓到两相电流。占空比很大的时候某一相下桥臂导通时间被压缩运放还没来得及建立就采样读回来的值偏小甚至反号这类失真在轻载高速时最明显。第三相电流用 ia ib ic 0 反算省一颗传感器和一路运放。前提是两相采样必须严格同步如果两路 ADC 有先后反算出来的 ic 就带上了两相之间的相位误差表现为三相电流不对称。通常的做法是用同一触发源启动多路同时采样而不是顺序转换。零漂要在上电时标定母线不上电、PWM 不输出连续采若干次取平均作为偏移量存起来运行中每次采样先减掉。温漂大的运放建议在停机间隙周期性重标否则低速小电流时 Id 会缓慢偏移白白消耗励磁电流。3.2 Clarke 与 Park把交流量搬进直流坐标系的定点写法Clarke 变换把三轴静止坐标系压成两轴正交Park 变换再把两轴旋到随转子同步旋转的 d-q 坐标系。物理意义值得在答辩时讲清楚从定子看电流是正弦交变量PI 很难无静差跟踪旋到转子上看稳态时 Id、Iq 都是直流量用最普通的 PI 就能做到零稳态误差。这就是 FOC 相对六步控制的核心优势。/* Q15 定点1.0 32767电流已按满量程归一化 */ #define SQRT3_INV_Q15 18919 /* 1/√3 ≈ 0.57735 */ typedef struct { int16_t alpha, beta; } AB_t; typedef struct { int16_t d, q; } DQ_t; /* Clarke三轴静止 → 两轴静止ic 由 ia ib ic 0 消去 */ void clarke(int16_t ia, int16_t ib, AB_t *out) { out-alpha ia; /* iα ia */ out-beta (int16_t)(((int32_t)ia 2 * (int32_t)ib) * SQRT3_INV_Q15 15); /* iβ (ia2ib)/√3 */ } /* Park静止 → 旋转sin/cos 由估算角查表得到 */ void park(const AB_t *in, int16_t sin_t, int16_t cos_t, DQ_t *out) { int32_t d (int32_t)in-alpha * cos_t (int32_t)in-beta * sin_t; int32_t q -(int32_t)in-alpha * sin_t (int32_t)in-beta * cos_t; out-d (int16_t)(d 15); out-q (int16_t)(q 15); }两段代码的关键都在中间那一步用 32 位累加。Q15 乘 Q15 得到 Q30如果不升位直接截断低速小电流时有效位会被吃掉Id、Iq 出现台阶状跳动。右移 15 位还原量纲之后再做饱和判断防止极端工况下回绕成反号。角度 θ 一般用 256 点或 512 点正弦表加线性插值索引由估算器输出的 0~2π 归一化值映射。表太粗会在低速时引入周期性转矩波动表太大会吃掉本就紧张的 6K 程序空间256 点配插值是这套方案里比较平衡的选择。逆变换方向对称先用 Park 逆变换把 Vd、Vq 转回 vα、vβ再进调制环节。注意逆变换用的是本拍新算出的角度而不是上一拍的角度否则电压矢量会整体滞后一个控制周期。3.3 PI 环的定点实现与 Kc 抗积分饱和三个环共用一个 PI 结构速度外环输出 Iq 参考Id 环的参考固定为 0表贴式 PMSM 不需要弱磁Iq 环输出转矩电压。三个环都带输出限幅和抗积分饱和项后者是这套算法里最容易被删掉、删掉之后又最难查的一段。typedef struct { int16_t kp, ki, kc; /* 三个增益Q15kc 通常取 ki 附近 */ int16_t out_max, out_min; int32_t sum; /* 积分累加器扩展精度 */ int16_t out; } PI_t; int16_t pi_run(PI_t *p, int16_t ref, int16_t fb) { int16_t err ref - fb; int32_t u p-sum ((int32_t)p-kp * err 15); /* 输出限幅超出部分不进入执行机构 */ int16_t out (u p-out_max) ? p-out_max : (u p-out_min) ? p-out_min : (int16_t)u; /* 饱和量与限幅输出之差用来回退积分 */ int16_t excess (int16_t)(u - out); p-sum ((int32_t)p-ki * err 15) - ((int32_t)p-kc * excess 15); p-out out; return out; }sum 这一项存的是积分的全部历史。没有 Kc 的时候输出一旦贴限幅误差还在往 sum 里灌等误差反向sum 要花很长时间才能退回来表现就是起动瞬间电流冲一下、转速过冲再掉下来。加了 Kc 之后饱和期间 sum 会被 excess 项往回拉退饱和几乎是即时的。Kc 取值一般与 Ki 相同取太大等效于削弱积分取太小退饱和偏慢可以在阶跃响应里看转速恢复段来微调。另一条经验是 Iq 参考一定要做斜率限制。速度环输出直接甩给电流环遇到负载突变会产生一个阶跃电流环拼命跟母线电流瞬间拉高。加一个每拍限幅的斜坡响应慢几毫秒但过流保护的误触发会少很多。3.4 三个环的整定顺序与输出限幅整定顺序必须是先内后外Id 环、Iq 环、速度环。上来就调速度环是新手最容易翻的车因为外环输出是内环的参考内环还没稳外环看到的对象模型完全是错的。第一步把速度和 Iq 环断开只给 Id 环一个小阶跃观察 Id 跟随。P 从小到大加加到刚好不振荡为止然后加一点 I 消除静差。Id 环的对象是电感响应很快增益可以给得比较激进。第二步合上 Iq 环同样的方法给转矩电流阶跃。注意 Iq 阶跃会真的让电机出力试验时要么带惯量盘要么把限幅压到很小。看上升时间和超调超调超过两成说明 P 偏大或 I 偏大。第三步才合速度环。速度环的带宽通常是电流环的十分之一到五分之一P 给大了就是典型的转速振荡跟着电流也荡。速度环输出接转矩限幅限幅值按电机峰值转矩对应的 Iq 来定这一步不做堵转时电流会一路顶到硬件保护。微分项不用。电机转速的响应时间相对机械时间常数来说变化慢加了 D 只会让 PWM 占空比在扰动时剧烈跳变反而容易引发过流。这份笔记里明确不用 D 项实际调试下来也确实没必要。3.5 空间矢量调制八个状态、两个作用时间与中心对齐 PWM三相桥的六个开关管每相只能接正母线或负母线。三相互相组合共 2³ 8 种状态其中全接正和全接负这两种不产生线电压是零矢量剩下六个构成六个间隔 60° 的有效矢量。任意一个期望电压矢量都可以用它所在扇区的两个相邻有效矢量加零矢量按时间比例合成出来。实现上有个很省算力的技巧把 Clarke 逆变换和扇区判断合并。把 vα、vβ 的定义稍作调整参考轴相对星型图偏移 30°六个扇区里恰好有一个轴与该扇区反向另外两个轴正好是扇区边界沿这两个轴的分量直接就是两个有效矢量的作用时间 T1、T2不需要开方也不需要三角函数。剩下的时间 T0 T - T1 - T2 分配给零矢量。/* 归一化作用时间T1/T2 落在 [0,1]T0 补足剩余 */ static void svm(int16_t v_alpha, int16_t v_beta, uint16_t period, uint16_t *duty_a, uint16_t *duty_b, uint16_t *duty_c) { /* 由 vα、vβ 直接判扇区并算出 T1、T2省略扇区分支 */ int16_t t1 ...; int16_t t2 ...; int16_t t0 ONE_Q15 - t1 - t2; /* 中心对齐三相比较值以周期中点为对称轴 */ *duty_a (uint16_t)((t0 2) * period 15); *duty_b (uint16_t)(((t0 2) (t1 1)) * period 15); *duty_c (uint16_t)(((t0 2) (t1 1) (t2 1)) * period 15); }用中心对齐而不是边沿对齐是为了让每个 PWM 周期内产生两个线间脉冲等效开关频率翻倍电流纹波减半而功率管的开关损耗没变。代价是占空比计算要用对称的装载方式写寄存器时注意周期值和比较值的对应关系写反了会得到反相的 PWM一上电就是直通。调制环节还有一条硬约束必须给占空比留上下限。上限不留给采样窗口下限不留会让桥臂直通。通常最小占空比取百分之几具体数值由驱动死区和运放建立时间共同决定这个值不是拍脑袋定的要在示波器上看相电流波形调到干净为止。4. 反向通道实现滑模观测器估角、反电动势滤波与开环起动切换反向通道解决的是「转子现在在哪、转多快」。没有传感器唯一的线索是定子绕组里的反电动势转子永磁体扫过绕组感应出的电压幅值与转速成正比相位与转子位置直接相关。难点在于反电动势没法直接测——端电压里混着开关噪声和电阻压降只能靠一个数字电机模型去逼近再用测量电流把模型拉回来。4.1 数字化电机模型F 与 G 两个参数的标定电机在 d-q 轴下的电气方程可以简化成一个电阻加一个电感的等效回路输入电压等于电阻压降、电感压降与反电动势之和。把微分项离散化就得到一个一阶差分方程形式是「下一拍电流 F × 当前电流 G ×电压 − 反电动势」。F 和 G 就是这套观测器仅有的两个参数它们把所有电气特性压缩成了两个 Q15 常数。F 1 − Ts·R/LG Ts/L其中 Ts 是控制周期R 是相电阻L 是相电感。注意这里是相值不是线值。用万用表量两相之间的电阻得到的是两倍相电阻必须除以 2 再代入电感同理用 LCR 表或电桥量线间电感后除以 2。举个具体的例子。控制频率 8 kHz 时 Ts 125 µs实测线间电阻 5.0 Ω、线间电感 10 mH那么相电阻 2.5 Ω、相电感 5 mH代入得 F 1 − 125 µs × 2.5 / 5 mH 0.9375G 125 µs / 5 mH 0.025。这两个数填进代码观测器才有正确的收敛速度。F 和 G 与开关频率强绑定。改了 PWM 频率、改了死区、甚至换了一颗电感量略有差异的电机都要重算。我见过不止一次「换个控制周期试试」之后电机直接失步的案例原因就是 G 放大了一倍观测器增益相对过大抖振被当成反电动势。4.2 滑模电流观测器用符号函数把估算电流拉回测量值观测器本质上是把上面那个数字模型跑一遍得到估算电流 is*。但模型参数总有误差估算电流会慢慢偏离实测电流。校正的办法是引入一个滑模控制器取估算电流与实测电流之差的符号乘以一个增益 K得到一个校正电压 z加到模型的电压输入项上。差值为正就往下压差值为负就往上抬每个控制周期都做一次直到两者相等。/* 一个控制周期的观测器更新F/G 已按当前 Ts 算好 */ void observer_step(int16_t v_a, int16_t v_b, int16_t i_a, int16_t i_b, int16_t *i_est_a, int16_t *i_est_b, int16_t *e_est_a, int16_t *e_est_b) { /* 滑模校正项只取误差符号乘以增益 K */ int16_t z_a (*i_est_a i_a) ? SMC_K : -SMC_K; int16_t z_b (*i_est_b i_b) ? SMC_K : -SMC_K; /* 数字模型i*(n1) F·i*(n) G·(v − e* − z) */ int16_t na (int16_t)(((int32_t)MODEL_F * (*i_est_a) 15) ((int32_t)MODEL_G * (v_a - *e_est_a - z_a) 15)); int16_t nb (int16_t)(((int32_t)MODEL_F * (*i_est_b) 15) ((int32_t)MODEL_G * (v_b - *e_est_b - z_b) 15)); *i_est_a na; *i_est_b nb; /* 反电动势一阶低通把 z 里的高频抖振滤掉 */ *e_est_a (int16_t)(((int32_t)LPF_K * (z_a - *e_est_a)) 15); *e_est_b (int16_t)(((int32_t)LPF_K * (z_b - *e_est_b)) 15); }K 的取值是整个观测器里最需要动手调的一个参数。K 太小估算电流追不上实测电流误差项里混进大量模型偏差估出来的反电动势幅值偏小角度滞后高速时直接失步K 太大符号函数在零点附近来回跳抖振被低通滤波之后仍然留在反电动势里表现为相电流有高频毛刺、转速有轻微抖动。工程上的办法是先取一个让电机能稳定低速运转的值再逐步往上加加到电流波形开始变毛就退回来一档。符号函数本身可以换成饱和函数或者 sigmoid 类平滑函数来削弱抖振代价是低速时收敛变慢。这份笔记用的是纯符号函数配合后面的滤波环节在家电这种对噪声不极端敏感的场合够用。4.3 反电动势滤波与 CORDIC 求角模型校正完成之后把校正项 z 滤一遍就得到反电动势估算值。滤波器是一阶数字低通形式是「本拍输出 上一拍输出 系数 ×输入 − 上一拍输出」系数由截止频率和控制周期共同决定。截止频率不能设得太低否则反电动势相位滞后严重角度越估越偏也不能太高否则抖振滤不干净。实际调的时候这个截止频率跟 K 是联动的K 加大就要相应压低截止频率。滤波要做两次。第一次的输出回灌给数字模型用于下一拍的电流估算第二次再滤一遍得到一个更平滑的版本专门用来算角度。两次滤波的目的是让模型内部的反馈和角度计算解耦避免角度计算被模型内部的瞬态带偏。角度由 eα 和 eβ 两个分量算出数学上是反正切。直接调浮点 atan2 在只有 6K 程序空间的器件上不现实通常用 CORDIC 迭代把向量逐步旋转每次根据 y 的符号决定转正还是转负旋转角度按 2 的负幂次递减迭代十几次就能收敛到足够精度全程只有加减和移位。迭代次数和角度精度之间是线性关系12 到 15 次对电机控制来说已经够。算出来的角度是未补偿角它已经包含了滤波引入的相位延迟。这个延迟与转速成正比低速时可以忽略高速时必须补回来补偿方法放在下一节。4.4 速度计算与 8 段相位补偿速度不能直接对角度求导那样噪声太大。常用做法是把相邻两次采样的角度差累加 m 次再乘以一个与极对数和控制周期相关的常数得到角速度。累加的作用相当于一个滑动平均把单次角度量化误差摊薄。角度差必须做卷绕处理。角度在 0 到 2π 之间循环从 6.2 rad 跳到 0.1 rad直接相减会得到一个巨大的负值速度瞬间塌到零转速环立刻反应整机就是一下明显的顿挫。判断方法是差值超过 π 就加 2π小于 −π 就减 2π两行代码的事漏掉就是玄学故障。算出来的速度还要再过一次低通得到滤波速度。滤波速度和未补偿角一起送进补偿环节查表得到当前速度段对应的补偿量加到未补偿角上得到最终换相角。补偿量不是一个常数而是随速度分段变化的线性函数。这份笔记把整个速度范围切成 8 段每段有自己的斜率和常量偏置低速段补偿量为零中速段斜率大高速段斜率逐渐变小。滤波速度区间归一化相位补偿公式最小值 ~ 0.09375θoffset 00.09375 ~ 0.1875θoffset 4·ω 0.3750.1875 ~ 0.2876θoffset 2·ω0.2876 ~ 0.3810θoffset ω 0.28760.4750 ~ 0.5680θoffset 0.5·ω 0.52510.5680 ~ 0.7560θoffset 0.25·ω 0.66710.7560 ~ 最大值θoffset 0.125·ω 0.7483代码里用一个结构体数组存每段的上下界、斜率和常量运行时顺序查表落在哪段就用哪段的参数算段与段之间做一点过渡避免跳变。这里的系数是跟具体电机绑定的换电机必须重标。标定方法不复杂但要耐心在若干个转速点上手动微调补偿角直到相电流幅值最小、母线电流最低记录该转速下需要的补偿角度代进线性拟合得到斜率和常量。这套笔记配套的表格工具就是干这个的输入转速和角度直接吐出斜率和常量。我一般取 6 到 8 个转速点覆盖从最低速到最高速的全区间点太稀拟合出来的直线在中间段会偏。4.5 开环起动反电动势为零时的过渡方案整套观测器建立在反电动势上而反电动势与转速成正比。电机静止时反电动势为零观测器没有任何有效输入估出来的角度是随机的。这时候如果直接闭环结果就是电机原地抖动、猛冲一下触发过流或者干脆不转。这不是算法 bug是物理约束。起动阶段必须开环。按下起停键后控制器输出一组连续的正弦电压角度不是估算出来的而是自己按固定加速度累加出来的。角度增量按平方率递增等效于给电机一个恒定加速度转子跟着旋转磁场走转差被控制在可接受范围内。这期间 Id、Iq 的电流环仍然是闭环的只是角度来源换成开环给定。转速升到某个门槛值通常是额定转速的百分之几到十几具体看反电动势在最低转速下能否被可靠检测之后切换到估算角。切换瞬间最怕角度跳变所以切换前要让开环角和估算角做一段平滑过渡或者在角度差足够小的时候才允许切换。切换失败要有回退如果切换后估算速度与开环给定偏差超过阈值或者电流突然增大就退回开环继续加速过一会儿再试。这条路径听起来笨但它把「零速无法观测」这个硬约束绕开了而且是可复现的每次起动走的都是同一条斜坡加速时间、切换点、电流包络都是确定的调试时容易对比也容易写进验收文档。5. 避坑排查这套无传感器 FOC 最容易翻车的五个地方算法本身在笔记里写得清楚真正消耗时间的是那些「原理都对、就是转不起来」的场合。下面五条是这类项目里出现频率最高的每条都按现象、原因、解决三步走。5.1 大占空比下电流采样失真现象轻载高速时相电流波形出现尖刺Iq 反馈跟着跳转速环开始振荡示波器上看 PWM 占空比已经接近满值。原因分流电阻只在下桥臂导通时才有电流占空比拉满后下桥臂导通时间被压缩到比运放建立时间还短ADC 采到的不是稳态值。这不是采样代码的问题是硬件时序的物理限制。解决先给占空比设上限留出最小采样窗口采样点尽量落在 PWM 周期正中间运放选建立时间短的型号反馈电阻不要给太大如果速度范围实在压不下来改用三电阻采样或者母线单电阻方案代价是算法复杂度上升。5.2 F、G 参数直接拿线间测量值代入现象低速能转一上高速角度越估越偏最后失步或者换一个控制频率之后原本正常的参数突然不灵了。原因万用表量的是线间电阻和线间电感是相值的两倍。直接代入会让 G 偏大一倍观测器增益相对过大抖振被当成反电动势F 也会偏模型衰减速度不对。解决测量值一律除以 2 再代入公式电感和电阻最好用 LCR 表在接近工作频率下测万用表直流档测出来的电感误差很大F、G 与控制周期强绑定改 PWM 频率必须重算写代码时把这两个常数和 Ts 放在一起改一个就提醒自己改另一个。5本文还有配套的精品资源点击获取