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 模型更强调“查表 + 状态机”,代码生成时需注意开关表的离散化与采样周期一致性。

FOC 控制模型信号链与代码生成接口 ADC 采样 ia / ib / ic Udc, theta_e Clarke ialpha / ibeta Park id / iq 电流 PI + 解耦 vd / vq Kp=3.14, Ki=628 反 Park valpha / vbeta SVPWM duty_a/b/c 10 kHz 更新 速度环 PI omega_m → iq_ref 1 ms 任务 iq_ref 位置/角度 theta_e 编码器/观测器 theta_e 用于 Park/反Park Embedded Coder 代码生成配置 求解器 Fixed-step discrete 1e-4 s 数据类型 single / int16 定点化可选 避免 double 代码风格 ERT / 可重入 函数复用 生成 .c/.h 目标硬件 TI C2000 / ARM PIL / 外部模式 链接器配置 生成

四、代码生成选项的关键配置

在模型配置参数中,以下几项直接决定代码能否在目标板上实时运行:

配置项推荐值原因
SolverFixed-step, discrete实时系统必须固定步长,避免变步长导致执行时间不确定
Fixed-step size1e-4 s(与电流环一致)保证 PWM 更新与采样节拍对齐
System target fileert.tlc生成嵌入式 C 代码,而非通用仿真代码
LanguageC目标编译器通常为 C,避免 C++ 运行时开销
Code replacement libraryTI 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 扇区切换无异常、死区补偿生效。

若生成代码后编译报“未定义符号”,优先检查:模型是否引用了未包含的库函数、代码替换库是否与目标芯片匹配、以及自定义代码(Custom Code)中的头文件路径是否已加入工程。

完成本节后,你应能独立建立一个可生成代码的 FOC 模型,并理解每个配置项对实时性的影响。DTC 模型可复用相同的代码生成框架,只需替换控制律与开关表部分。