3. 电驱控制核心算法与C2000实现映射

在新能源汽车电驱控制器中,算法本身并不直接决定能否跑起来,真正决定系统性能与实时性的是“算法如何映射到C2000的硬件资源与中断时序”。FOC、SVPWM、MTPA、弱磁等模块如果全部塞进同一个高频中断,CPU负载会迅速逼近极限;如果切分不当,又会引入采样延迟、角度不同步和转矩脉动。因此,本节的核心不是重新推导公式,而是建立一张“算法—任务—外设—负载”的映射关系,并给出可评估的计算量估算方法。

一、控制链路的时间尺度分层

电驱控制中,不同算法的更新频率差异很大。电流环必须与PWM载波同步,典型载波频率为10 kHz,对应100 μs周期;速度环通常为1 kHz,即1 ms;而MTPA与弱磁的查表或在线计算,可以放在速度环中执行,也可以按5~10 ms的慢任务调度。把三者混在一个中断里,会导致高频中断中执行大量浮点查表和除法,直接拉高CPU占用率。

合理的划分是:电流环中断只做Clarke、Park、两个电流PI、反Park和SVPWM占空比计算;速度环任务做转速PI、MTPA电流指令生成和弱磁电压闭环;慢任务做温度补偿、参数辨识和故障诊断。这样,高频中断的代码路径短、可预测,慢任务即使偶尔超时也不会破坏PWM时序。

FOC/SVPWM/MTPA/弱磁在C2000上的任务分层与数据流 电流环中断(10 kHz,100 μs) ADC采样 ia/ib/udc Clarke iα/iβ Park id/iq 电流PI vd/vq 反Park + SVPWM Tabc → CMPA/CMPB 速度环任务(1 kHz,1 ms) 转速PI T* → iq* MTPA id* = f(iq*) 弱磁电压闭环 |us| > umax → Δid id*/iq* id*/iq* 慢任务(5~10 ms):温度补偿、参数辨识、故障诊断、CAN通信 温度补偿 Rs/Ld/Lq辨识 故障诊断 CAN/标定 CPU负载估算(示例:F28379D,200 MHz,10 kHz电流环) 电流环 ≈ 3.2 μs 速度环 ≈ 2.1 μs 慢任务 ≈ 1.5 μs 合计约 6.8 μs / 100 μs ≈ 6.8% CPU占用(不含背景任务)

二、FOC与SVPWM的C2000映射要点

FOC的Clarke变换在C2000上通常用定点或单精度浮点实现。以F28379D为例,其C28x内核带FPU,单精度浮点乘加约1个周期,因此Clarke和Park各约20~30个周期即可完成。真正耗时的是Park变换中的sin/cos查表或CORDIC计算。若使用eQEP或旋变解码得到电角度,建议在电流环中断中直接读取角度寄存器,避免在中断内做角度归一化除法。

SVPWM的实现有两种常见方式:一是计算扇区、作用时间和比较值;二是采用载波比较法,直接由反Park后的vα/vβ计算三相占空比。后者代码更短,适合高频中断。以10 kHz载波、200 MHz主频为例,100 μs对应20000个时钟周期。若电流环中断总耗时控制在7 μs以内,CPU占用率约7%,剩余资源可用于通信和诊断。

三、MTPA与弱磁的任务归属

MTPA的目标是在给定转矩下找到最小的定子电流幅值。对于表贴式永磁电机,Ld≈Lq,MTPA退化为id*=0;对于内置式永磁电机,Ld<Lq,需要按转矩公式求解id与iq的关系。在线求解需要迭代或查表,不适合放在10 kHz中断中。工程上通常将MTPA做成二维查表,输入为转矩指令和母线电压,输出为id*和iq*,放在1 kHz速度环中执行。

弱磁控制则是在母线电压受限时,通过增加负向id来削弱磁场,从而扩展转速范围。弱磁的电压闭环可以放在速度环中,以电压利用率作为反馈量,输出Δid叠加到MTPA的id*上。这样,电流环只接收最终的id*/iq*,不关心它们来自MTPA还是弱磁,任务边界清晰。

四、计算负载评估方法

评估CPU负载不能只看代码行数,而应基于“中断周期内实际执行的时钟周期数”。具体做法是:在电流环中断入口和出口翻转一个GPIO,用示波器测量高电平宽度,得到中断执行时间;再除以中断周期,得到占用率。若没有空闲GPIO,也可以用C2000的CPU定时器或性能计数器统计。

以下是一个可参考的负载估算表,参数为示例假设,实际值需以具体工程测量为准:

任务 执行频率 主要运算 示例耗时 周期占比
电流环中断 10 kHz Clarke/Park/PI/反Park/SVPWM 约3.2 μs 3.2%
速度环任务 1 kHz 转速PI、MTPA查表、弱磁闭环 约2.1 μs 0.21%
慢任务 200 Hz 温度补偿、参数辨识、CAN 约1.5 μs 0.03%
背景任务 空闲 状态机、故障记录 约1.0 μs —

从表中可见,电流环中断是负载的主要来源。若把MTPA和弱磁也放进10 kHz中断,单次耗时可能增加到5~6 μs,占用率升至5%~6%,虽然看似仍有余量,但中断响应抖动会增大,影响PWM边沿的确定性。因此,高频中断只做“必须与载波同步”的运算,是C2000电驱软件架构的基本原则。

实践建议:在项目初期就建立“中断时间预算表”,为每个中断分配最大允许执行时间。例如电流环中断预算8 μs,速度环任务预算50 μs,慢任务预算200 μs。每次新增功能后重新测量,避免后期因功能叠加导致时序崩溃。

五、任务划分的检查清单

  • 电流环中断中是否只包含Clarke、Park、电流PI、反Park和SVPWM?
  • MTPA查表是否放在速度环或更慢的任务中?
  • 弱磁电压闭环是否与MTPA在同一时间尺度,避免id*突变?
  • 角度采样与PWM更新是否在同一中断中完成,保证相位一致?
  • 是否用GPIO翻转法实测了中断执行时间,而非仅凭估算?
  • 慢任务是否使用后台循环或低优先级中断,不阻塞电流环?

把算法映射到C2000,本质上是把数学公式翻译成“在正确的时间、用正确的外设、做正确的事”。FOC和SVPWM属于电流环,MTPA和弱磁属于速度环,温度补偿和参数辨识属于慢任务。只要任务边界清晰、负载可测,后续增加观测器、无位置控制或功能安全诊断时,才有可扩展的余量。