
1. 从三相到两轴FOC 到底在解决什么问题如果你拆过航模电调、伺服驱动器或者电动车的控制器大概率会看到一块板子上密密麻麻的功率管旁边一颗主控芯片跑着几十 kHz 的 PWM。这块芯片里跑的核心算法十有八九就是磁场定向控制FOCField-Oriented Control。我最早接触 FOC 是在做云台电机驱动的时候当时用方波六步换相低速抖动大、噪音刺耳换成 FOC 之后整个电机像换了一颗心脏转起来几乎听不到声音转矩也顺滑得多。从那以后我陆续在无刷云台、电动工具、小型伺服、无感风机上反复折腾 FOC踩过的坑从电流采样噪声到转子初始位置检测基本把能踩的都踩了一遍。这篇内容我想把 FOC 里最核心的一条主线讲透三相电流怎么通过 Clarke 变换和 Park 变换映射到 dq 坐标系又怎么在 dq 轴上分别控制励磁分量和转矩分量最终实现对转矩的精确控制。这条主线是 FOC 的骨架理解了它你再看电流环带宽、PWM 与定时器配置、无感滑模观测器、转子初始位置检测这些热搜词就不会觉得是一堆孤立的碎片。适合谁来读如果你已经会点 C 语言、懂基本的 PI 控制、知道 PWM 是什么但一看到“dq 轴解耦”“电流环带宽”就发懵那这篇就是写给你的。我会尽量用生活化的类比把坐标系变换讲清楚同时给出可以直接抄的参数计算和代码结构。全程不堆公式吓人但关键的推导逻辑一个都不省因为 FOC 这东西跳过原理直接抄代码调不出来的时候你连从哪下手都不知道。先说结论性的认知FOC 的本质是把一个三相耦合、随转子旋转、难以直接控制的交流电机通过坐标变换等效成一台两轴解耦、相对转子静止、像直流电机一样好控的虚拟电机。直流电机为什么好控因为它的励磁和转矩是天然分开的你给励磁绕组固定电流产生磁场给电枢绕组电流就产生转矩两者互不干扰。FOC 干的事就是用数学手段在交流电机上“伪造”出这种解耦结构。理解了这一点后面所有的变换、PI 环、解耦补偿都是为这个目标服务的。2. 三相电流与坐标变换的底层逻辑2.1 为什么三相电流不能直接拿来控制三相无刷电机PMSM 或 BLDC的定子有三个绕组空间上互差 120 度电角度。你给三相通入相位互差 120 度的正弦电流它们合成的磁场就是一个匀速旋转的圆形磁场转子被这个磁场拖着走。问题在于这三相电流是强耦合的你想改变转矩理论上要同时调整三相的幅值和相位而且转子每转一个角度同样的三相电流产生的转矩方向都在变。这就好比你想推一个旋转的秋千每次推的方向都得跟着秋千的位置变直接控制三相电流等于在跟一个不断旋转的坐标系较劲。更麻烦的是转矩和磁链是纠缠在一起的。在静止坐标系下你没法单独说“这部分电流负责产生磁场那部分电流负责产生转矩”它们混在一起。这就是为什么早期的方波驱动只能做到“能转就行”效率、噪音、低速平稳性都很差。FOC 的破局点就是引入一套跟着转子一起转的坐标系把这种耦合彻底拆开。2.2 Clarke 变换三相到两相静止坐标系第一步是Clarke 变换把三相电流 Ia、Ib、Ic 降维成两相静止坐标系下的 Iα、Iβ。因为三相电流满足 Ia Ib Ic 0星形连接、无中线三个量里只有两个是独立的所以可以压缩到两维。变换的物理意义是把三个空间上差 120 度的绕组产生的磁动势等效成两个正交绕组 α、β 产生的磁动势合成效果完全一样。常用的等幅值 Clarke 变换公式是这样的// 等幅值 Clarke 变换三相 - 两相静止 Ialpha Ia; Ibeta (Ia 2.0f * Ib) * ONE_BY_SQRT3; // ONE_BY_SQRT3 0.577350269f这里有个细节很多人会搞混Clarke 变换有等幅值和等功率两种版本系数不一样。等幅值版本下变换后矢量的幅值等于原来相电流的幅值调试时看波形最直观所以我一般用等幅值。等功率版本会多一个 sqrt(2/3) 的系数好处是变换前后功率不变做理论分析方便但实际写代码时容易和后续的 Park 变换系数打架。我的建议是整个工程统一用等幅值版本别混用否则电流环的增益会莫名其妙差一个系数调到你怀疑人生。Clarke 变换之后Iα、Iβ 仍然是交流量它们随转子旋转而正弦变化。这时候还不能直接做 PI 控制因为 PI 控制器对交流量的跟踪是有稳态误差的——你让一个 PI 去追一个一直在变的量它永远追不完美。所以必须再来一步。2.3 Park 变换两相静止到两相旋转坐标系第二步是Park 变换把静止的 α、β 坐标系旋转到跟着转子走的 d、q 坐标系。d 轴direct axis对准转子磁极方向q 轴quadrature axis超前 d 轴 90 度电角度。变换需要知道转子的电角度 θ这就是为什么 FOC 必须要有转子位置信息——有感的用编码器/霍尔无感的用观测器估算。Park 变换公式// Park 变换两相静止 - 两相旋转 Id Ialpha * cos_theta Ibeta * sin_theta; Iq -Ialpha * sin_theta Ibeta * cos_theta;变换之后如果角度 θ 准确Id 和 Iq 就变成了直流量。这是 FOC 最精妙的地方原本在静止坐标系下疯狂旋转的交流量到了旋转坐标系下变成了两个稳稳的直流量。直流量意味着什么意味着你可以用最普通的 PI 控制器去控制它而且能做到零稳态误差。这就好比你在旋转的秋千上装了一个跟着秋千转的摄像头从摄像头视角看秋千永远是静止的你想推哪个方向就推哪个方向。2.4 反变换从 dq 回到三相控制算完之后还要把 dq 轴上的电压指令变回三相才能给到 PWM 模块。流程是 Park 反变换 Clarke 反变换也叫逆 Clarke 或 SVM 前的准备// Park 反变换两相旋转 - 两相静止 Valpha Vd * cos_theta - Vq * sin_theta; Vbeta Vd * sin_theta Vq * cos_theta; // 逆 Clarke 变换两相静止 - 三相 Va Valpha; Vb -0.5f * Valpha SQRT3_BY_2 * Vbeta; // SQRT3_BY_2 0.866025403f Vc -0.5f * Valpha - SQRT3_BY_2 * Vbeta;实际工程里逆 Clarke 之后通常不直接输出三相占空比而是走SVPWM空间矢量脉宽调制因为 SVPWM 的电压利用率比正弦 PWM 高约 15%而且开关次数更优。但 SVPWM 的输入本质上还是 Valpha、Vbeta所以坐标变换这条链路是不变的。注意Park 变换用的角度 θ 必须是电角度不是机械角度。电角度 机械角度 × 极对数。我见过新手把机械角度直接喂进去结果电机转起来一顿一顿的查了半天才发现是极对数没乘。这个坑非常隐蔽因为电机“能转”只是转得不对。3. dq 坐标系下的转矩控制核心3.1 d 轴和 q 轴分别管什么到了 dq 坐标系事情就清晰了。对于表贴式永磁同步电机SPMSMd 轴电感约等于 q 轴电感转矩公式可以简化为Te 1.5 × Pn × ψf × Iq其中 Pn 是极对数ψf 是永磁体磁链Iq 是 q 轴电流。你看转矩只跟 Iq 有关跟 Id 没关系。这意味着什么意味着控制转矩就是控制 Iq简单粗暴。那 Id 呢对于表贴式电机Id 不产生转矩只会增加铜耗所以理想情况下让 Id 0这就是经典的Id0 控制。但对于内置式永磁同步电机IPMSMd 轴和 q 轴电感不相等Ld Lq存在磁阻转矩这时候可以故意给一个负的 Id弱磁方向利用磁阻转矩提升总转矩这就是MTPA最大转矩电流比控制。所以你会看到有些 FOC 代码里 Id 的参考值不是 0而是根据 Iq 算出来的一个负值那就是在做 MTPA。电机类型Ld 与 Lq 关系Id 参考值策略转矩构成表贴式 SPMSMLd ≈ LqId 0仅永磁转矩内置式 IPMSMLd LqId 0MTPA永磁转矩 磁阻转矩3.2 电流环FOC 的内核dq 轴电流的参考值和反馈值都拿到之后就进入电流环。电流环是 FOC 最内层、也是带宽最高的控制环通常用两个独立的 PI 控制器分别控制 Id 和 Iq。为什么用 PI 而不是 PID因为电流环的被控对象近似一阶惯性环节积分项足以消除稳态误差微分项反而会放大电流采样噪声得不偿失。电流环 PI 的输出是 Vd、Vq也就是要施加到电机上的电压指令。这里有个关键点dq 轴之间并不是完全解耦的存在交叉耦合项。电机旋转时q 轴电流会在 d 轴产生反电动势d 轴电流也会在 q 轴产生反电动势具体表现为Vd 需要补偿 -ωe × Lq × IqVq 需要补偿 ωe × (Ld × Id ψf)其中 ωe 是电角速度。如果不做这个前馈解耦补偿当转速升高时Id 和 Iq 会互相干扰电流环动态变差严重时甚至发散。很多开源 FOC 代码为了简化在低速场合省略了解耦项也能跑但一旦转速上去就露馅。我的做法是只要转速超过额定转速的 10%就把解耦项加上代价只是两次乘法和两次加法换来的是全速域稳定的电流环。3.3 电流环带宽怎么理解热搜词里有个“foc控制中带宽的理解”这个点值得单独说。电流环带宽指的是电流环能有效跟踪参考值的频率范围通常定义为闭环幅频特性下降到 -3dB 对应的频率。带宽越高电流响应越快转矩动态越好但对采样和控制频率的要求也越高。工程上有个经验公式电流环带宽 ≈ 采样频率 / 10 到 / 20。比如你的 PWM 频率是 20kHz电流环在每次 PWM 中断里执行一次采样频率就是 20kHz那么电流环带宽大概能做到 1kHz 到 2kHz。想再高要么提高 PWM 频率要么用双采样双更新在一个 PWM 周期内采样两次、更新两次但后者对 ADC 和 CPU 要求更高。带宽不是越高越好。带宽太高电流采样噪声会被放大PI 输出抖动PWM 占空比乱跳反而导致电机发热和噪音。我一般把电流环带宽设在 1kHz 左右配合 20kHz 的 PWM稳定性和动态性平衡得比较好。调带宽的方法很简单给 Iq 一个阶跃指令看实际 Iq 的上升时间上升时间越短带宽越高。如果上升过程中出现明显超调或振荡说明带宽设高了或者 PI 参数太激进。实操心得调电流环 PI 的时候先把积分增益 Ki 设为 0只调比例增益 Kp让阶跃响应快速但不振荡然后慢慢加 Ki直到稳态误差消除且不引入明显超调。Kp 决定响应速度Ki 决定消除误差的快慢两者要配合着调别一次改两个。4. 从算法到硬件PWM、定时器与采样时机4.1 PWM 波形与定时器的配合FOC 最终要落到 PWM 上。三相逆变器有六个功率管通常用中心对齐 PWM也叫对称 PWM因为中心对齐的谐波特性更好而且能在计数器过零时触发 ADC 采样采样时刻正好落在 PWM 周期的中点此时开关噪声最小。以常见的 STM32 高级定时器 TIM1 为例配置要点计数模式设为中心对齐模式Center-Aligned Mode预分频器和自动重载值决定 PWM 频率PWM 频率 定时器时钟 / (2 × ARR × (PSC1))死区时间必须配置防止上下桥臂直通一般设 0.5~2 微秒具体看功率管开关速度触发 ADC 的事件选在计数器等于 ARR即中点时// STM32 中心对齐 PWM 关键配置示意 htim1.Init.CounterMode TIM_COUNTERMODE_CENTERALIGNED1; htim1.Init.Period ARR_VALUE; // 决定 PWM 频率 htim1.Init.Prescaler PSC_VALUE; // 死区配置 sBreakDeadTimeConfig.DeadTime 72; // 约 1us 72MHz // ADC 触发源选 TIM1_TRGOPWM 频率怎么选太低比如 8kHz 以下会有可听噪音电流纹波也大太高比如 40kHz 以上开关损耗增加MOS 发热严重。工业上 10kHz~20kHz 是甜点区既避开人耳敏感频段又兼顾效率。我做的云台项目用 20kHz电动工具用 16kHz都挺稳。4.2 电流采样时机与方式电流采样是 FOC 里最容易出问题的一环。常见方案有三种三电阻采样三个下桥臂各串一个采样电阻成本低但低调制比时采样窗口不够双电阻采样两个下桥臂采样第三个通过 IaIbIc0 算出最常用单电阻采样一个母线电阻靠不同开关状态重构三相电流成本最低但算法复杂采样时机必须落在下桥臂导通的时候因为只有下桥臂导通采样电阻上才有电流流过。中心对齐 PWM 的中点时刻如果占空比合适下桥臂正好导通这时候触发 ADC 最准。但如果占空比接近 100%高调制比下桥臂导通时间极短采样窗口可能不够这时候要么用最小脉宽限制要么切换到其他采样策略。注意采样电阻的阻值选择要权衡。阻值大信号强、信噪比好但功耗大、发热阻值小功耗低但信号弱、容易被噪声淹没。一般选几毫欧到几十毫欧配合运放放大到 ADC 量程的 1/2 到 2/3 处。我踩过的坑是运放带宽不够电流波形被“磨圆”了导致电流环反馈失真换了高带宽运放才解决。4.3 无感 FOC 的转子位置从哪来有感 FOC 用编码器或霍尔位置直接读。无感 FOC 没有传感器位置得靠观测器估算热搜词里的“无感foc滑膜观测器”就是主流方案之一。滑模观测器的思路是根据电机的电压方程构造一个滑模面让估算电流跟踪实际电流跟踪误差收敛后反电动势信息就藏在等效控制量里从反电动势再反推转子角度。滑模观测器的优点是鲁棒性强对参数变化不敏感缺点是低速时反电动势幅值太小信噪比差估算不准。所以无感 FOC 通常有个最低启动转速低速段要么用开环强拖要么用高频注入法。热搜词里的“foc 转子初始位置检测”就是解决零速启动问题的——高频注入法通过向 d 轴注入高频电压利用凸极效应产生的响应电流来辨识初始位置对 IPMSM 效果好对 SPMSM 效果一般。位置检测方案适用转速段优点缺点编码器/霍尔全速域精度高、响应快增加成本、接线滑模观测器中高速鲁棒性强、无需额外硬件低速不准高频注入零速/低速可检测初始位置有高频噪音、算法复杂开环强拖启动段实现简单效率低、可能失步5. 实操过程与核心环节实现5.1 一套最小 FOC 代码的骨架我把 FOC 的中断服务函数骨架抽象出来你可以对照自己的平台填充。整个流程在 PWM 中断里执行频率等于 PWM 频率void FOC_ISR(void) { // 1. 读取三相电流ADC 已在中断触发时完成转换 Ia adc_to_current(ADC_Ia); Ib adc_to_current(ADC_Ib); Ic -Ia - Ib; // 由基尔霍夫定律算出 // 2. 读取转子电角度 theta_e get_rotor_angle(); // 有感读编码器无感用观测器 // 3. Clarke 变换 Ialpha Ia; Ibeta (Ia 2.0f * Ib) * ONE_BY_SQRT3; // 4. Park 变换 sin_t sinf(theta_e); cos_t cosf(theta_e); Id Ialpha * cos_t Ibeta * sin_t; Iq -Ialpha * sin_t Ibeta * cos_t; // 5. 电流环 PI含解耦补偿 Vd PI_Id(Id_ref - Id) - omega_e * Lq * Iq; Vq PI_Iq(Iq_ref - Iq) omega_e * (Ld * Id PSI_F); // 6. 电压限幅防止超出逆变器输出能力 limit_voltage(Vd, Vq, VDC_MAX); // 7. Park 反变换 Valpha Vd * cos_t - Vq * sin_t; Vbeta Vd * sin_t Vq * cos_t; // 8. SVPWM 生成占空比 SVPWM(Valpha, Vbeta, Ta, Tb, Tc); // 9. 更新 PWM 比较寄存器 set_pwm_duty(Ta, Tb, Tc); }这段代码看着简单但每一行背后都有讲究。比如第 6 步的电压限幅很多人忽略结果 PI 积分饱和电机一加速就失控。限幅的思路是把 Vd、Vq 合成的矢量幅值限制在逆变器能输出的最大电压圆内SVPWM 线性区最大是 Vdc/√3超了就等比例缩小同时冻结积分项防止饱和。5.2 参数计算以一台具体电机为例光说公式没感觉拿一台实际电机算一遍。假设手头有一台云台电机参数如下极对数 Pn 7相电阻 Rs 10 Ωd 轴电感 Ld 5 mHq 轴电感 Lq 5 mH表贴式永磁磁链 ψf 0.005 Wb母线电压 Vdc 12 VPWM 频率 f_pwm 20 kHz电流环 PI 参数整定按内模控制或带宽法电流环期望带宽取 ωc 2π × 1000 rad/s。对于一阶惯性对象Kp ωc × Ld 6283 × 0.005 ≈ 31.4Ki ωc × Rs 6283 × 10 62830。实际写代码时还要考虑采样周期和标幺化这里给的是连续域参考值离散化后 Kp、Ki 要乘以采样周期 Ts 1/20000 50 微秒。最大电压圆SVPWM 线性区最大相电压幅值 Vdc / √3 12 / 1.732 ≈ 6.93 V。所以第 6 步限幅时Vd² Vq² 的平方根不能超过 6.93 V。额定转矩估算Te 1.5 × Pn × ψf × Iq 1.5 × 7 × 0.005 × Iq 0.0525 × Iq。如果 Iq 额定 2A额定转矩约 0.105 N·m。这个数值可以用来校验你的电流环参考值范围。实操心得算出来的 PI 参数只是起点实际调试时我一般先把 Kp 设为计算值的 0.5 倍慢慢往上加加到阶跃响应刚好不振荡为止。因为实际系统有延迟、有滤波、有死区理论值和实际值能差一倍以上。别迷信公式公式给你方向示波器给你答案。5.3 上电调试的完整流程我总结了一套 FOC 上电调试的顺序按这个走能少烧几个管子不接电机先测 PWM用示波器看六路 PWM确认频率、死区、互补性都对中心对齐波形对称接电机但不转测电流采样给固定占空比让电流流过某一相读 ADC 值校验采样电阻和运放增益是否匹配开环旋转给一个固定的电压矢量让电机慢慢转起来确认角度方向、极对数正确闭环电流环Id 给 0Iq 给小值看电流能不能跟上波形是否干净闭环速度环在电流环外面套速度环给阶跃速度指令调速度环 PI加载测试逐步加负载观察电流、转速、温度确认没有失控和过热每一步都要用示波器或上位机看波形别凭感觉。我见过太多人跳过第 2 步直接闭环结果电流采样有偏置电机一上电就飞车。6. 常见问题与排查技巧实录6.1 电机不转或抖动这是最常见的问题原因可能有一堆。我整理了一个排查顺序表按概率从高到低排现象可能原因排查方法完全不动有电流声角度错误、相序接反检查编码器方向、交换任意两相抖动但不连续转极对数错、角度偏移核对极对数校准角度偏置低速抖、高速正常电流采样噪声大检查采样时机、加滤波高速失步电压限幅、解耦缺失检查限幅逻辑、加解耦补偿一转就过流死区不足、直通加大死区、检查驱动电路角度错误是最隐蔽的。有感的编码器安装有机械偏差无感的观测器有相位延迟都会导致 dq 轴对不准。判断方法让 Id 给一个固定值、Iq 给 0如果电机能稳定停在某个位置说明角度基本对如果电机缓慢旋转或抖动说明角度有偏差需要校准角度偏置。6.2 电流波形畸变正常的相电流应该是平滑的正弦波。如果波形出现平顶、毛刺、不对称通常是这几个原因采样窗口不足高调制比时下桥臂导通时间太短ADC 没采到真实值。解决方法是限制最大占空比或者改用单电阻采样配合移相策略死区效应死区导致实际电压和指令电压有偏差低速时尤其明显。可以在电压指令上加死区补偿根据电流方向修正运放带宽不够电流信号被低通滤波“磨圆”了。换高带宽运放或者减小采样电阻、提高放大倍数PWM 和采样不同步采样时刻落在开关瞬间采到的是开关噪声。确保 ADC 由定时器中点触发6.3 无感 FOC 启动失败无感 FOC 的启动是最难的部分。零速时反电动势为零观测器没有输入无法估算位置。常见的启动策略是三段式启动预定位 → 开环强拖 → 切换到闭环。预定位是给一个固定角度比如 d 轴方向通电流把转子强行拉到已知位置。开环强拖是按一个预设的加速度逐渐提高频率和电压拖着转子转。当转速足够高、反电动势足够大时观测器能估准了再切换到闭环。切换瞬间最容易失步因为开环的角度和观测器的角度可能有偏差切换时要平滑过渡不能硬切。避坑技巧开环强拖的加速度别设太大否则转子跟不上直接失步。我一般从额定加速度的 1/3 开始试稳定后再往上加。另外切换闭环的转速阈值要留足余量太低切过去观测器还没收敛太高又浪费了开环段的时间。6.4 电流环振荡电流环振荡表现为 Iq 波形持续振荡、电机发出高频啸叫。原因通常是 PI 参数太激进、带宽设太高、或者采样延迟太大。排查步骤把 Ki 设为 0只留 Kp看振荡是否消失。如果消失说明 Ki 太大降低 Kp看振荡是否减弱。如果减弱说明带宽设高了检查采样到执行的延迟。如果 ADC 采样和 PWM 更新之间隔了好几个周期等效延迟增大带宽必须降低检查解耦补偿的符号和系数是否正确。符号错了会变成正反馈直接发散我个人的经验是电流环振荡十有八九是 PI 参数问题剩下的是采样延迟和角度误差。调的时候要有耐心一次只改一个参数改完看波形别一次改一堆否则你都不知道是哪个起的作用。7. 几个容易被忽略的工程细节7.1 标幺化与定点数很多低成本方案用定点 MCU没有浮点单元FOC 运算要做标幺化。标幺化的核心是选好基准值电流基准选额定电流电压基准选 Vdc/√3频率基准选额定电频率。所有变量除以基准值变成 -1 到 1 之间的小数再用 Q15 格式表示。标幺化的好处是数值范围统一不容易溢出而且 PI 参数和物理量解耦换电机时不用大改。但标幺化也有坑基准值选得不好小信号分辨率不够。比如电流基准选太大小电流时量化误差就明显。我一般让额定值对应标幺值的 0.7 左右留点余量给过载。7.2 温度与参数漂移电机的相电阻随温度升高而增大铜的电阻温度系数约 0.4%/°C。冷态 10Ω 的电阻热态可能到 12Ω 以上。电阻变了电流环的 Ki 就不匹配了稳态误差会变大。高端方案会做在线参数辨识实时估算 Rs 并修正 PI 参数。低成本方案一般不管因为电流环带宽够高的话电阻变化的影响有限。但如果你的应用对转矩精度要求高比如力控或伺服那就得考虑温度补偿。7.3 电磁兼容与布线FOC 的 PWM 是强干扰源dv/dt 很高容易耦合到电流采样线上。布线时要注意电流采样走差分对尽量靠近采样电阻远离功率走线采样电阻的地和功率地单点连接避免地环路运放电源加去耦电容靠近芯片引脚PWM 走线短而粗减少辐射我遇到过一次电流采样噪声大查了半天是采样线跟 PWM 线平行走了 5 厘米改成垂直交叉后噪声立刻降下来。这种问题教科书上不会写但实际调试中很常见。7.4 不同芯片平台的差异市面上 FOC 芯片很多从通用 MCUSTM32、GD32到专用 FOC 芯片如峰岹等各有特点。通用 MCU 灵活什么算法都能跑但外设配置复杂开发周期长。专用 FOC 芯片把 Clarke/Park、SVPWM、观测器都做成硬件加速开发快、成本低但算法自由度受限适合量大、算法固定的场景。选型时我的建议是前期验证用通用 MCU把算法跑通、参数调好量产时如果成本敏感再考虑专用芯片。因为专用芯片的调试工具和文档往往不如通用平台完善前期用它容易卡在工具链上浪费时间。8. 写在最后的一点个人体会FOC 这东西看理论觉得不难不就是几个坐标变换加两个 PI 吗但真正上手调你会发现每个环节都有坑而且坑和坑之间还会互相影响。我调第一台 FOC 电机花了整整两周从电流采样噪声查到角度校准最后发现是编码器安装偏了 15 度。后来调多了慢慢形成了一套自己的排查顺序和参数整定习惯效率才上来。如果你正在入门 FOC我的建议是别一上来就追求无感、追求高性能先把有感电流环跑通把波形看明白把 PI 调稳。电流环是 FOC 的地基地基不稳上面盖什么都是空中楼阁。等电流环稳了再加速度环、加观测器、加弱磁一步一步来。每加一个环节都要回头确认前面的环节没被影响。最后分享一个小技巧调 FOC 的时候养成录波形的习惯。不管是示波器截图还是上位机数据把每次调试的波形存下来标注参数。这样当你调乱了想回退时有据可查当你调好了想复现时有参数可依。我现在的项目里每个电机的调试记录都存了几十组波形这些波形比任何文档都值钱。