文章

simulink FOC PMSM 仿真搭建

simulink FOC PMSM 仿真搭建

电机及模型基本参数

  此文件是设置一些模型的基本参数。
  首先要确定系统运行的周期(频率),如果逆变器运行基频为20kHz, 就设置 PWM_frequency = 20e3 ,根据基频计算出 PWM 开关周期 T_pwm。
  其他运行周期基本都是由基频确定的,比如转数环 Ts_speed 。
  电机参数设置建议先看 MATLAB 帮助中心的 Surface Mount PMSM 模块文档,先搞清楚每个参数是什么, 特别注意单位是什么。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
%% Set PWM Switching frequency
PWM_frequency 	= 20e3;    %Hz          // converter s/w freq
T_pwm           = 1/PWM_frequency;  %s  // PWM switching time period

%% Set Sample Times
Ts          	= T_pwm;        %sec        // Sample time step for controller
Ts_simulink     = T_pwm/2;      %sec        // Simulation time step for model simulation
Ts_motor        = T_pwm/2;      %Sec        // Simulation sample time
Ts_inverter     = T_pwm/2;      %sec        // Simulation time step for average value inverter
Ts_speed        = 10*Ts;        %Sec        // Sample time for speed controller


%% Set data type for controller & code-gen
%dataType = fixdt(1,32,17);    % Fixed point code-generation
dataType = 'single';           % Floating point code-generation


% lingdong12v

pmsm.model             ='motor1_12v';
pmsm.sn                ='001';
pmsm.p                 =6;          %motor1 极对数
pmsm.Rs                =0.05500/2;    %motor1 相电阻
pmsm.Ld                =0.09e-3/2;    %motor1 d轴电感
pmsm.Lq                =0.09e-3/2;    %motor1 q轴电感
pmsm.J                 = 4.56e-5;     %转动惯量45.6Kg*mm^2
pmsm.B                 =2.53e-08;     %粘滞摩擦系数
%pmsm.N_max            =5300;       %motor1 最高转速
pmsm.Ke                =1.84;       %motor1 Vpk_LL/krpm 反电动势常数
pmsm.Kt                =0.02647;    %转矩常量Nm/A,
pmsm.FluxPM            =(pmsm.Ke)/((sqrt(3)*2*pi*1000*pmsm.p)/60); %永磁链
pmsm.DC                =12;     %V,电源

ISenseMax = 11.2;   %A,电流限制

Kp_C=pmsm.Lq/(4*Ts); % 电流环比例系数
Ki_C=pmsm.Rs/(4*Ts); % 电流环积分系数

Kp_C_fc = 2*pi*pmsm.Lq*2300; % 电流环比例系数,使用带宽计算
Ki_C_fc = 2*pi*pmsm.Rs*2300; % 电流环积分系数,使用带宽计算
 
Kp_S=(pi*pmsm.J)/(45*5*Ts*10^(2.5/2)*pmsm.p*pmsm.FluxPM);
Ki_S=(pi*pmsm.J)/(45*5*Ts*10^(2.5/2)*pmsm.p*pmsm.FluxPM*4*Ts*10^(2.5));

模型设置

  在模型设置中配置求解器,类型:定步长,求解器:离散(无连续状态), 步长(基础采样时间)设置为 Ts_simulink 。
  此设置是可以配置代码生成的,也可以配置硬件实现(需要下载硬件支持包)
  数据导入,在 建模-模型资源管理器,点击 Model Workspace ,右侧 工作区数据,数据源:matlab文件,文件名,将上面保存的文件导入, 然后点击 从源重新初始化。

选择模块及连接

  为了较快的搭建验证模型,直接选择 Motor Control Blockset 中的模块。 如果自己想搞清楚每个模块是怎么计算的,可以使用基础模块搭建,就比较考验耐心。

img_foc_svpwm

模块信息

计算模块

  可以复制模块名称,在 simulink 空白处双击鼠标左键,粘贴进去,就可以选择模块添加到模型中。

Inverse Park Transform
PWM Reference Generator
  SVPWM模块,点击模块选择SVM,此模块的输出需要归一化,在后面添加一个 Gain 模块, 增益设置为 1/(2*pmsm.DC/sqrt(3)) ,再+0.5,将信号移到 [0,1] 范围。因为查看此模块封装内部可发现,在输出最终结果前 Gain 了个 2/sqrt(3) ,所以后面归一化把此参数补回去。

Clarke Transform
SinCos Embedded Optimized
  新版 Sine-Cosine Lookup 模块变为了 SinCos Embedded Optimized ,使用方式是一样的。

Park Transform

  部分信号可使用goto和from模块连接,避免过长的信号线。

电机模块

img_foc_svpwm

Average-Value Inverter
  逆变器,将 SVPWM 后的归一化信号转换为电压信号,输出到电机, 另一个输入直接选常数Constant模块,参数 pmsm.DC 。

Surface Mount PMSM

img_foc_svpwm

  将上面的电机参数填写到模块中, 详细信息注意看帮助文档,输出总线信号 Info 可以使用 Bus Selector 模块展开选择。
  在总线信号中选择 MtrPos(电机的机械角位置,θm,弧度)引出, 接 Gain 模块,增益设置为 pmsm.p ,将机械角位置转换为电角度位置(rad 单位不变), 角度输出到 SinCos Embedded Optimized 的输入。
  MtrSpd 电机的机械角速度,单位 rad/s ,将此参数反馈到转数环时注意单位要变换为rpm。 此参数的另一个作用是电流环的解耦,需要转换为电角频率,乘 pmsm.p 。

控制回路

  双击搜索 PID ,选择 PID Controller, 控制器选择 PI,时域选择离散,速度环采样时间填 Ts_speed ,电流环可以默认。
  参数选择文件中的默认参数,基本是稳定的,可以在此基础上微调。
  按照一般的FOC控制框图将PID模块连接起来。
  在 调试 点击 叠加信息,选择采样时间下的颜色,就可以用不同的颜色 来反应模块的执行频率。

img_foc_svpwm

  电机转数波形 img_foc_svpwm

本文由作者按照 CC BY 4.0 进行授权