电机控制算法(FOC、SVPWM、电流环速度环)
第一部分第一性原理——电机为什么会转1.1 从一根导线说起高中物理先回到最基本的物理事实通电导线在磁场中会受到力。这是安培定律。把导线绕成线圈通电后线圈就变成一个电磁铁有N极和S极。如果你把这个电磁铁放在一个永磁体附近同性相斥、异性相吸线圈就会转动——这就是电机的基本原理。生活中的例子你拿一块磁铁靠近一个指南针指南针会转过去对齐磁铁的方向。电机转子永磁体追随定子电磁铁产生的磁场旋转本质上是同一回事。1.2 无刷电机为什么需要“控制”有刷电机靠电刷机械换向电流方向随着转子转动自动切换。但无刷电机没有电刷必须靠电子器件MOS管主动切换电流方向。问题是怎么切换什么时候切换切换得多快如果切换得不对磁场方向跟转子位置不匹配力矩就忽大忽小电机就抖。FOC要解决的就是让定子产生的磁场始终与转子保持最佳角度90°让电机又稳又高效。第一性原理一句话FOC的核心就是实时计算转子位置精确控制定子磁场的方向和大小让磁场始终“推”在转子的最佳发力点上。1.3 直观对比方波驱动 vs FOC方波驱动六步换向FOC磁场定向控制磁场变化60°一跳跳跃式360°连续平滑旋转转矩波动15%-20%2%能量利用率70%90%运行质感抖动、异响丝滑、安静生活类比方波驱动像“用鞭子抽驴”——一下是一下力道忽大忽小。FOC像“用磁悬浮列车牵引”——全程平滑、精准、高效。或者像骑自行车方波是一脚重一脚轻地踩FOC是专业骑手均匀发力、每一脚都踩在最有效的角度。第二部分FOC的数学工具——坐标变换大学线性代数现在问题来了我们要控制的是三相交流电三个相位相差120°的正弦波电流。控制三个随时间正弦变化的量太难了。能不能把它变成控制两个恒定的直流分量就像控制直流电机那样简单这就是FOC最天才的想法——用坐标变换把交流电机“变成”直流电机来控制。2.1 Clark变换从三维到二维降维物理直觉三个相隔120°的矢量合成之后其实等效于一个矢量。你不需要管三个只需要管合成了哪一个。数学本质把三相静止坐标系ABC轴投影到两相静止直角坐标系α-β轴。公式等幅值变换由于基尔霍夫电流定律IaIbIc0只需要采样两相电流就能算出第三相——硬件上省一路电流传感器。生活类比三个人从三个方向推一个箱子你不需要分别记录三个人的力只需要知道合力的大小和方向就够了。2.2 Park变换从静止到旋转跟随转子物理直觉Clark变换之后α-β坐标系还是静止的但转子在旋转。从静止坐标系看电流分量仍然是正弦变化的。我们需要一个跟着转子一起转的坐标系。数学本质把静止的α-β坐标系旋转一个角度θ转子当前的电角度得到旋转的d-q坐标系。公式IdIαcosθIβsinθIq−IαsinθIβcosθ关键理解在d-q旋转坐标系中d轴直轴与转子磁场方向对齐 → 控制励磁磁通q轴交轴与转子磁场方向垂直 → 控制转矩出力这两个分量是解耦的——调d不影响q调q不影响d。而且它们都是直流分量恒定值用简单的PI控制器就能精确跟踪。生活类比你在操场上跑步转子旋转朋友站在操场中央看你静止坐标系α-β——你的位置一直在变很难描述。但如果你自己带个摄像机跟着你跑旋转坐标系d-q——你在画面里的位置是固定的。2.3 完整的信号流AI生成text三相电流 Ia,Ib,Ic → 【Clark变换】→ Iα,Iβ两相静止 → 【Park变换】→ Id,Iq两相旋转直流 → 【PI控制器】→ Vd,Vq → 【反Park变换】→ Vα,Vβ → 【SVPWM】→ 三相电压 Va,Vb,Vc → 驱动电机第三部分SVPWM——怎么把“想要的矢量”变成“实际的电压”大学物理/电力电子现在我们已经算出了想要施加给电机的电压矢量 Vα,Vβ。但问题是逆变器MOS管只能输出“开”或“关”两种状态没法直接输出任意方向和大小的电压。SVPWM要解决的就是用有限的开关状态合成任意想要的电压矢量。3.1 逆变器的8种状态三相逆变器有6个MOS管每相有“上管开下管关”或“上管关下管开”两种状态。三相共有 2^38 种组合6个非零矢量V1到V6分布在复平面上相隔60°2个零矢量V0和V7所有上管全开或全关输出电压为零这6个非零矢量构成了一个正六边形的六个顶点。3.2 矢量合成原理平均值等效核心思想在一个PWM周期T内让相邻的两个非零矢量分别作用 t1 和 t2 时间零矢量作用剩余时间 t0它们的平均效果就等于你想要的矢量。Tt1t2t0生活类比你想调一杯特定温度的温水。手边只有冰水矢量A和开水矢量B。你只需要控制冰水和开水的比例——倒多一点冰水t1大就凉一些倒多一点开水t2大就热一些——就能调出任何温度。3.3 最大调制范围所有能合成的矢量不能超出这个正六边形。六边形的内切圆半径是 33Vdc33VdcVdcVdc是母线电压——这就是SVPWM能输出的最大正弦波幅值。对比SPWMSPWM的母线电压利用率只有 Vdc/2SVPWM高出约15%。这是SVPWM成为主流的原因之一。第四部分电流环与速度环——串级PID控制大学自动控制原理FOC本身只是“如何精确控制电流”但控制什么电流由外层的速度环决定。4.1 串级结构FOC通常采用双闭环结构AI生成text【速度环】外环—— 控制转速 ↓ 输出 Iq_ref目标转矩电流 【电流环】内环—— 控制电流 ↓ 输出 Vd, Vq目标电压 【SVPWM】→ 电机也可以再加位置环作为最外环。为什么用串级而不是单环生活类比你开车上高速。单环控制只看速度表油门一脚踩到底速度到了就松—— overshoot严重来回震荡。串级控制速度环告诉电流环“我要加速到120”电流环精确控制发动机喷油量——又快又稳。内环电流环反应快负责执行外环速度环反应慢一些负责决策。内环的快速度能及时抑制电流波动比如负载突变外环再慢慢调整目标值。4.2 电流环内环详解电流环的目标是让实际的 Id和 Iq跟随目标值 Id_ref 和 Iq_ref。流程采样三相电流 → Clark变换 → Park变换 → 得到 Id,Iq计算误差edId_ref−IdeqIq_ref−Iq两个误差分别送入PI控制器→ 输出 Vd,Vq反Park变换 → SVPWM → 驱动电机关键点通常设置 Id_ref0因为d轴电流励磁分量不产生转矩只会发热。所有电流都用来出力q轴。4.3 速度环外环详解速度环的目标是让实际转速跟随目标转速。流程通过编码器或传感器获取当前转速 ω计算误差eωωref−ω误差送入速度PI控制器→ 输出 Iq_refIq_ref作为电流环的目标电流环执行速度环的输出就是电流环的输入——环环相扣。4.4 生活类比总览把电机控制系统想象成餐厅后厨顾客点菜目标速度 速度环的输入店长下单Iq_refIq_ref 速度环的输出厨师炒菜电流环 精确控制火候电流服务员上菜SVPWM 执行到电机顾客说“再快点”速度误差大店长喊“加大火”Iq_refIq_ref增大厨师精准调火电流环控制菜就上来了。第五部分完整FOC流程图AI生成text┌─────────────────────────────────────────────────────────────────┐ │ 速度环外环 │ │ ┌─────────┐ ┌─────────┐ ┌─────────┐ │ │ │目标转速 │───→│ 误差 │───→│ PI │───→ Iq_ref │ │ │ω_ref │ │ 计算 │ │ 控制器 │ │ │ └─────────┘ └─────────┘ └─────────┘ │ │ ↑ │ │ │ │ ↓ │ │ 实际转速ω Id_ref通常0 │ │ ↑ │ │ │ │ ↓ │ │ ┌─────────┐ ┌─────────────────────────────────────────┐ │ │ │ 编码器/ │ │ 电流环内环 │ │ │ │ 观测器 │ │ ┌────────┐ ┌────────┐ ┌────────┐ │ │ │ └─────────┘ │ │三相电流│─→│ Clark │─→│ Park │─→│ Id,Iq│ │ │ │ Ia,Ib,Ic│ │ 变换 │ │ 变换 │ │ │ │ │ └────────┘ └────────┘ └────────┘ │ │ │ │ │ │ │ │ ┌────────┐ ┌────────┐ ┌────────┐ │ │ │ │ │ Id_ref │─→│ 误差 │─→│ PI │─→│ Vd │ │ │ │ Iq_ref │─→│ 计算 │─→│ 控制器 │─→│ Vq │ │ │ └────────┘ └────────┘ └────────┘ │ │ │ │ │ │ │ │ ┌────────┐ ┌────────┐ ┌────────┐ │ │ │ │ │ Vd,Vq │─→│ 反Park │─→│SVPWM │─→│ 三相│ │ │ │ │ │ 变换 │ │ 调制 │ │ 电压│ │ │ └────────┘ └────────┘ └────────┘ │ │ │ └─────────────────────────────────────────┘ │ └─────────────────────────────────────────────────────────────────┘第六部分工程实践——给新手的实用建议6.1 硬件选型建议组件建议原因主控MCUSTM32F3/F4系列或带FPU的Cortex-MFOC需要大量浮点运算电流采样双电阻采样省成本或三电阻采样更精确双电阻配合基尔霍夫定律算第三相转子位置有感磁编码器如TLE5012无感反电动势观测有感精度高无感成本低PWM频率10kHz-20kHz太低有噪音太高开关损耗大6.2 调试顺序铁律先内环后外环先比例后积分。Step 1电流环调试固定 Id_ref0给一个阶跃的 Iq_refIq_ref先调 Kp比例让电流快速跟踪但不震荡再调 Ki积分消除稳态误差电流环带宽要比速度环高Step 2速度环调试在电流环调好之后给一个阶跃的速度指令先调 Kp观察转速响应速度和超调再调 Ki消除静差速度环响应要比电流环慢避免互相干扰实用技巧很多芯片厂商如TI提供自动参数计算工具输入电机参数就能算出初始PI值。先用自动值转起来再微调。6.3 常见坑与解决方法问题可能原因解决方法电机不转转子初始位置不对先开环强拖到一定转速再切闭环电机抖动电流环Kp太大减小Kp增加采样滤波高速上不去母线电压不够启用弱磁控制Id0启动反转初始角度估算错误检查编码器零点校准噪音大PWM频率太低提高到16kHz以上6.4 学习路径建议先用仿真MATLAB/Simulink搭个简单的FOC模型看波形变化理解每个环节的作用买现成的开发板如SimpleFOC、ODrive等开源项目有完整代码和社区支持从有感FOC开始先不用处理无感观测器的复杂逻辑逐模块理解不要一上来就看全部代码先看Clark变换 → Park变换 → PI控制 → SVPWM一个一个啃动手改参数改一个参数看波形怎么变——这是最快的学习方式6.5 一句话总结FOC的本质用坐标变换把复杂的交流电机控制变成简单的直流电机控制。SVPWM的本质用有限的开关状态合成任意想要的电压矢量。双环控制的本质内环电流环快速执行外环速度环缓慢决策。工程调试的本质先内后外先P后I从能转到调优。最后的话FOC看起来复杂但拆解开就是三个核心思想坐标变换线性代数——把复杂变简单矢量合成物理/电力电子——把有限变无限串级控制自动控制——把混乱变有序但使龙城飞将在不教胡马度阴山。——王昌龄《出塞·其一》