4. 电驱控制算法建模与自动代码生成
在电驱控制快速原型流程中,Simulink 模型是算法与嵌入式目标之间的“唯一事实来源”。本节以磁场定向控制(FOC)为主线,说明如何把控制算法搭建成可生成代码的模型,并通过 Embedded Coder 输出可部署到控制器上的实时代码。DTC 的建模思路会在关键差异处对照说明。
一、先确定模型边界与执行节拍
建模前必须先定义清楚三件事:控制周期、采样与执行位置、以及模型与底层驱动的接口。以一台额定 3000 r/min、极对数 4 的永磁同步电机为例,若 PWM 载波频率取 10 kHz,则电流环控制周期为 100 μs,速度环可放在 1 ms 任务中执行。模型顶层应显式区分这两类速率,避免把速度环放进 100 μs 任务导致算力浪费。
接口方面,模型输入通常包括:母线电压 Udc、三相电流 ia/ib/ic 或 ialpha/ibeta、转子电角度 theta_e、转速 omega_m、转矩指令 T_ref;输出包括三相占空比 duty_a/duty_b/duty_c 或 SVPWM 的扇区与作用时间、使能标志与故障标志。电角度方向、相电流正方向、转矩正方向必须在模型注释中写明,并与台架传感器标定保持一致。
二、FOC 模型的信号链搭建
FOC 的核心信号链为:三相电流采样 → Clarke 变换 → Park 变换 → 电流 PI 调节 → 反 Park 变换 → SVPWM 调制。在 Simulink 中建议按以下方式组织:
- 用
Clarke子系统把ia/ib/ic变为ialpha/ibeta,采用等幅值变换时系数为 2/3; - 用
Park子系统结合theta_e得到id/iq; - 电流环 PI 输出
vd/vq,并加入解耦项-omega_e*Lq*iq与omega_e*(Ld*id+psi_f); - 反 Park 得到
valpha/vbeta,送入 SVPWM 计算占空比。
PI 参数可按“带宽法”初设:若希望电流环带宽为 1 kHz,电感 L=0.5 mH,则 Kp ≈ 2π·1000·0.5e-3 ≈ 3.14,Ki = Kp·R/L,其中 R=0.1 Ω 时 Ki ≈ 628。这些数值属于示例假设,实际需结合采样延迟与 PWM 更新方式修正。
三、DTC 建模的关键差异
DTC 不经过电流环,而是直接根据定子磁链与转矩的滞环比较结果选择电压矢量。模型中需要:磁链观测器(电压模型或电流模型)、转矩估算 Te = 1.5p(psi_alpha*i_beta - psi_beta*i_alpha)、以及开关表。与 FOC 相比,DTC 的 Simulink 模型更强调“查表 + 状态机”,代码生成时需注意开关表的离散化与采样周期一致性。
四、代码生成选项的关键配置
在模型配置参数中,以下几项直接决定代码能否在目标板上实时运行:
| 配置项 | 推荐值 | 原因 |
|---|---|---|
| Solver | Fixed-step, discrete | 实时系统必须固定步长,避免变步长导致执行时间不确定 |
| Fixed-step size | 1e-4 s(与电流环一致) | 保证 PWM 更新与采样节拍对齐 |
| System target file | ert.tlc | 生成嵌入式 C 代码,而非通用仿真代码 |
| Language | C | 目标编译器通常为 C,避免 C++ 运行时开销 |
| Code replacement library | TI C2000 / ARM Cortex-M | 调用 IQmath 或 CMSIS-DSP 加速三角函数与 Park 变换 |
| Generate code only | 勾选 | 先离线生成,再集成到工程,便于版本管理 |
若使用定点目标,需在模型中对电流、电压、角度做定标。例如电流采样范围 ±20 A 用 Q12 表示,则分辨率约 0.0049 A;角度用 Q15 表示 0~2π,分辨率约 0.00019 rad。定标不当会直接导致 PI 积分饱和或转矩脉动。
五、从模型到可部署代码的验证闭环
生成代码后,建议按“三步验证”推进:第一步,在 Simulink 中做模型在环(MIL)仿真,确认电流阶跃响应无超调、转速跟踪误差小于 1%;第二步,用 PIL(Processor-in-the-Loop)把生成代码下载到目标板,对比模型输出与板端输出的偏差,重点检查定点截断误差与中断延迟;第三步,接入台架,用示波器观察 duty_a 与相电流波形,确认 SVPWM 扇区切换无异常、死区补偿生效。
完成本节后,你应能独立建立一个可生成代码的 FOC 模型,并理解每个配置项对实时性的影响。DTC 模型可复用相同的代码生成框架,只需替换控制律与开关表部分。