由于本人转入新能源汽车电机控制行业,因此日后会陆续更新汽车电机、控制器、控制算法、电路等的文章。当然别的DIY文章也会继续更,工作、兴趣、生活,该有的都得有。
以下正文:
simulink中实现计时器比较法输出SVPWM控制波形:
计时器比较法是控制中常用的算法,在DSP中基本都使用此算法输出SVPWM,因为与硬件原理相适用,这也是为后续在硬件上实现DSP控制做铺垫。
scope2显示的输出波形:
clock模块用于给定系统输入时间,根据系统时间产生正弦余弦波形:
clock输出的即是一个计时累加的信号,最终值等于simul
ink仿真时间。
双击matlab function,弹出界面进行如下配置,模块输出的是一个复数。带i的为虚部。
输入参数即是一个实部虚部之间相位差pi/2的复数,至于为何三角函数内乘100,因为输入参数u与仿真时间相关,u为0-0.01的递增值,乘100保证相位为0~pi,起码有半个周期的输入,是修正数量级用的参数。
complex to Magnitude-Angle模块分解复数,为幅值和角度:
该模块专用于分解复数,复数的英文即complex。
再下一步,将产生的幅值和角度输入S-function模块:
S-function是simulink中供用户调用自定义脚本函数的模块:
自定义的m文件,下面对m文件代码进行分析:
对输入的连续电压矢量进行离散化:
function
[sys,x0,str,ts] = SVPW_TimeCounterCompare003(t,x,u,flag)
tsam = 0.02/20;
switch
flag,
case
0
[sys,x0,str,ts] = Initialization(tsam);
case
3
sys = mdlOutputs(t,x,u);
case
{1,2,4,9}