1. Simulink基础与电机控制概述

大家好,我是老张。做嵌入式电机控制这些年,从最早的手写C代码到后来用Simulink自动生成,这条路我走了不少弯路。今天咱们聊聊Simulink电机控制的基础,特别是永磁同步电机(PMSM)的数学模型。这些东西看着枯燥,但你要是真搞懂了,后面做代码生成会顺很多。

1.1 Simulink环境介绍

Simulink说白了就是一个图形化的编程工具。你不需要一行行敲代码,而是拖拽模块、连线、设置参数,就能搭出一个完整的控制系统模型。我个人习惯把Simulink当成一个「快速原型验证平台」——先在软件里把算法跑通,再生成代码烧到芯片里。

打开Simulink,你会看到几个核心区域:

  • 模块库浏览器:左边那一堆,里面藏着电机控制常用的模块,比如PI控制器、SVPWM、坐标变换等
  • 模型画布:中间的大白板,你就在这上面搭积木
  • 仿真配置面板:设置步长、求解器类型,这些直接影响仿真精度和速度
我的小建议:刚开始别急着用高级功能。先把基础模块拖出来,连一连,跑一跑。我在项目中遇到过有人一上来就搞复杂的子系统封装,结果调试时根本找不到问题在哪。

Simulink的求解器选择是个坑。电机控制仿真一般用定步长求解器,比如ode3或ode4。为什么?因为代码生成后,芯片里的控制周期是固定的,你仿真也得用固定步长才匹配。我曾经用变步长仿真调好的参数,生成代码后电机抖得跟筛子似的——后来才发现是求解器不匹配。

1.2 电机控制基本概念

电机控制,说白了就是让电机按照你想要的转速和转矩转起来。这里面有几个核心概念,我一个个说。

1.2.1 控制架构

最常见的电机控制架构是级联控制,也就是外环套内环:

  • 速度环:最外层,控制电机转速。输出是电流指令
  • 电流环:内层,控制电机电流。输出是电压指令
  • PWM调制:最底层,把电压指令变成开关管的导通信号

你想想看,为什么搞这么复杂?因为电流环响应快,速度环响应慢。把快的放里面,慢的放外面,这样系统才稳定。我刚开始做电机控制时,把速度环和电流环的带宽设反了,结果电机一启动就过流保护——嗯,那教训挺深刻的。

1.2.2 坐标变换

电机控制里绕不开坐标变换。三相静止坐标系(abc)下的电压电流是交流量,控制起来很麻烦。所以我们要把它变换到两相旋转坐标系(dq)下,变成直流量,这样用PI控制器就能轻松搞定。

常用的变换有:

变换名称 作用 公式核心
Clark变换 abc → αβ 三相变两相静止
Park变换 αβ → dq 静止变旋转
逆Park变换 dq → αβ 旋转变静止
逆Clark变换 αβ → abc 两相变三相
重要提醒:坐标变换的角度必须和电机转子位置对齐。角度错了,整个控制就乱了。我在项目中遇到过编码器安装偏差导致角度偏移,结果电机电流一直很大但就是转不起来——查了两天才找到原因。

1.3 永磁同步电机(PMSM)数学模型

搞电机控制,数学模型是根基。PMSM的数学模型看着公式多,但核心就两个方程:电压方程和转矩方程。

1.3.1 dq坐标系下的电压方程

在dq旋转坐标系下,PMSM的电压方程是这样的:

ud = Rs * id + Ld * (did/dt) - ωe * Lq * iq
uq = Rs * iq + Lq * (diq/dt) + ωe * (Ld * id + ψf)

这里面:

  • ud、uq:d轴和q轴电压
  • id、iq:d轴和q轴电流
  • Rs:定子电阻
  • Ld、Lq:d轴和q轴电感
  • ωe:电角速度
  • ψf:永磁体磁链

注意看,d轴和q轴的方程是耦合的。d轴方程里有ωe * Lq * iq这一项,q轴方程里有ωe * Ld * id这一项。这就是为什么电机高速时,d轴和q轴会互相影响。做电流环解耦时,就是要消除这个耦合项。

1.3.2 转矩方程

PMSM的电磁转矩公式:

Te = 1.5 * p * [ψf * iq + (Ld - Lq) * id * iq]

这里面:

  • Te:电磁转矩
  • p:极对数
  • 第一项 ψf * iq 是永磁转矩
  • 第二项 (Ld - Lq) * id * iq 是磁阻转矩

对于表贴式PMSM(SPMSM),Ld ≈ Lq,磁阻转矩几乎为零。这时候转矩只和iq成正比,控制起来简单——你只要控制iq就能控制转矩。但对于内置式PMSM(IPMSM),Ld < Lq,磁阻转矩不可忽略。这时候可以利用id来产生额外的转矩,这就是最大转矩电流比(MTPA)控制的基础。

避坑指南:我曾经在项目里直接用SPMSM的控制方法去控制IPMSM,结果效率低得吓人。后来才发现,IPMSM需要MTPA控制才能发挥性能。所以拿到电机先看参数表,搞清楚是表贴式还是内置式。

1.3.3 运动方程

电机转起来还得看运动方程:

Te - Tl = J * (dωm/dt) + B * ωm

这里面:

  • Tl:负载转矩
  • J:转动惯量
  • ωm:机械角速度
  • B:阻尼系数

这个方程告诉你,电机加速靠的是电磁转矩减去负载转矩。转动惯量越大,加速越慢。我在做伺服电机控制时,客户要求快速启停,结果发现负载的转动惯量太大,怎么调参数都追不上——最后只能换大电机。

1.4 在Simulink中搭建PMSM模型

理论讲完了,咱们看看怎么在Simulink里搭一个PMSM模型。Simulink自带的电机模块库里有现成的PMSM模型,但我建议初学者自己搭一遍,这样对数学模型的理解会更深刻。

搭建步骤:

  1. 用积分器模块搭建dq电流的微分方程
  2. 用乘法器和加法器实现电压方程中的耦合项
  3. 用转矩方程计算电磁转矩
  4. 用运动方程计算机械转速和位置
  5. 用坐标变换模块把dq电流变回abc电流
我的习惯:搭模型时,我会把电机参数(Rs、Ld、Lq、ψf、J、B)都定义成MATLAB工作空间的变量。这样改参数时不用打开模型,直接在命令行改就行。调试效率高很多。

嗯,到这里咱们把Simulink基础、电机控制概念和PMSM数学模型都过了一遍。这些东西是后面做代码生成的基石。下一章我会讲怎么在Simulink里搭建完整的FOC控制环路,包括电流采样、坐标变换、PI调节器和SVPWM调制——到时候咱们再细聊。

记住一句话:模型搭得清楚,代码生成才靠谱。别急着跑,先把基础打牢。