FOC(电机矢量控制)调试记录

0 概述

矢量控制又称磁场导向控制(Field Oriented Control, FOC),这是永磁同步电机(PMSM)的主要控制方法,与BLDC的简单控制策略相比,矢量控制要更为复杂,故需要一套系统的调试方法。(淘宝遍地都是BLDC,BLDC和PMSM都算无刷直流电机,所以都可以用FOC来控制,如果要求不是特别高,完全可以买BLDC)

本文按照如下步骤对FOC控制系统进行调试。

(目前已经量产的板子主控发生变化了,变为STM32F407了,双驱,单个驱动2kw级,驱控分离模块化设计,可以同时通过CAN或者485带多电机控制,最终版的代码优化后,比本文中的代码要复杂一些,但是更好理解一些)

1 调试基本功能模块

矢量控制中,需要获取转子位置、相电流及转速,输出是三相逆变器的占空比信号,故首先要配置好所需的硬件功能模块,并进行测试验证,这是之后所有工作的基础。

1.1 配置PWM输出

矢量控制中,一般需要六路三组PWM输出,配置为两两互补导通的形式,按照寄存器定义配置好模块后,需要验证配置的正确性。

断开电机连接,理论上依次将U、V、W三相的占空比设置为0、100%、50%,使用万用表测量对应端口的电压,0占空比时输出电压应接近0V,100%占空比时接近母线电压,50%占空比时为母线电压的一半。

实验序号

直流母线电压28V

占空比设置

理论电压

实际电压

1

MotDriv.Vv=0.8

22.4

22.2

MotDriv.Vv=0.9

25.1

25.2

MotDriv.Vv=0.95

26.5

26.6

MotDriv.Vv=0.97

27.1

27.16

MotDriv.Vv=0.98

27.44

14

2

MotDriv.Vv=0.55

15.3

15.4

MotDriv.Vv=0.52

14.5

14.56

MotDriv.Vv=0.51

14

14.28

3

MotDriv.Vv=0.1

2.7

2.8

MotDriv.Vv=0.03

0.7

0.84

MotDriv.Vv=0.02

0

0.7

与理论相符,说明配置正确。值得注意的是,实际应用中占空比不能大于0.97,个人认为由于有死区时间,最终会使占空比为100%,MOS管的预驱芯片不能满占空比工作,没有充电时间,无法工作。

这里注意:配置PWM时,需要注意硬件上是否对PWM波的高低电平反向处理,高电平管子开通时采用“AHC”的死区方案,低电平管子开通时采用“ALC”的死区配置方案。

这里举一个例子,从程序解读,到配置,到波形占空比计算,到实验,供理解上述注意事项。

以ePWM1为例,程序如下:

EALLOW;

  EPwm1Regs.TBPRD = PWM_PeriodMax;              //9375

  EPwm1Regs.TBPHS.half.TBPHS = 0;                 //相位寄存器清0

  EPwm1Regs.TBCTR = 0;                            //计数器清0

  EPwm1Regs.TBCTL.bit.CTRMODE = TB_COUNT_UPDOWN;  //增减计数

  EPwm1Regs.TBCTL.bit.PHSEN = TB_DISABLE;    //Master Mode,禁止相位装载功能

  EPwm1Regs.TBCTL.bit.PRDLD = TB_SHADOW;  //CTR=0时将映射寄存器中的值装入当前寄存器

  EPwm1Regs.TBCTL.bit.SYNCOSEL = TB_CTR_ZERO; //CTR=0时发出同步信号

  EPwm1Regs.TBCTL.bit.HSPCLKDIV = TB_DIV1;  //1分频

  EPwm1Regs.TBCTL.bit.CLKDIV = TB_DIV1;     //1分频

//CC

  EPwm1Regs.CMPCTL.bit.LOADAMODE = CC_CTR_ZERO;  //CTR=0时将映射寄存器中的值装入当前寄存器

  EPwm1Regs.CMPCTL.bit.LOADBMODE = CC_CTR_ZERO;  //CTR=0时将映射寄存器中的值装入当前寄存器

  EPwm1Regs.CMPA.half.CMPA = PWM_HalfPerMax;  //50%;

  EPwm1Regs.CMPB = PWM_HalfPerMax;              //50%;

//AQ

  EPwm1Regs.AQCSFRC.bit.CSFA = AQ_NO_ACTION; //软件强制时,0:无动作,1:强制为低;2:强制为高;3:禁止强制,无动作。

  EPwm1Regs.AQCSFRC.bit.CSFB = AQ_NO_ACTION; //软件强制时,0:无动作,1:强制为低;2:强制为高;3:禁止强制,无动作。

  EPwm1Regs.AQCTLA.bit.CAU = AQ_CLEAR;

  EPwm1Regs.AQCTLA.bit.CAD = AQ_SET;

  EPwm1Regs.AQCTLB.bit.CAU = AQ_CLEAR;

  EPwm1Regs.AQCTLB.bit.CAD = AQ_SET;

//DB

  EPwm1Regs.DBCTL.bit.OUT_MODE = DB_FULL_ENABLE;  //使能上升沿和下降沿的延时信号

  EPwm1Regs.DBCTL.bit.POLSEL = DB_ACTV_LOC;     //ALC:EPWM1A反转极性。即低电平有效,互补输出。

  EPwm1Regs.DBCTL.bit.IN_MODE = DBB_ALL; //EPWM1B作为上升沿及下降沿延时的信号源。

      EPwm1Regs.DBFED =  PWM_Deadband;

      EPwm1Regs.DBRED =  PWM_Deadband;              //2us=2*150*1/150M

//PC

  EPwm1Regs.PCCTL.bit.CHPEN = CHP_DISABLE;      //禁止PWM斩波控制

//TZ

  EALLOW;

  EPwm1Regs.TZCTL.bit.TZA = TZ_HIZ; //当外部触发事件发生时,ePWM采取的动作:High impedance 高阻抗

  EPwm1Regs.TZCTL.bit.TZB = TZ_HIZ; //High impedance

EDIS;

ePWM2和ePWM3的配置相似。注意:ePWM1为主模块,发出同步信号,ePWM2和ePWM3为从模块,接收同步信号,从而实现3个逆变桥的同步控制。

程序由ePWM1模块产生中断信号,故它还需要如下配置:

  EPwm1Regs.ETSEL.bit.INTEN = ET_CTR_ZERO; //TBCTR=0时产生EPWMx_INT中断

  EPwm1Regs.ETSEL.bit.INTSEL = 1;          // Enable interrupt CNT_zero event

  EPwm1Regs.ETPS.bit.INTPRD = ET_1ST;     //每发生1次事件,产生中断信号EPWMx_INT

  EPwm1Regs.ETCLR.bit.INT = 1;            // Enable more interrupts

值得注意的是,本程序的配置方法是Epwm1A的波形来自ePWM1B的反转,并加入死区时间,我们给EPwm1Regs.CMPB中装入值,产生ePWM1B波形,然后通过死区模块,就产生了对称互补带死区的两路PWM波。死区采用ALC方式,即EPWM1A反转极性。低电平有效,互补输出。具体波形如图:

图 带死区的对称互补PWM波形产生原理

注意:该方式适用于低电平有效的驱动芯片。

程序中为了方便计算ePWM计数器中的值,在增减计数模式下,按以下公式进行参数计算。

T=1.0/ISR_FREQUENCY;  //

PWM_PeriodMax=SYSTEM_FREQUENCY*1000000*T/2; // 9375

PWM_HalfPerMax=PWM_PeriodMax*0.5;     //  4688

PWM_Deadband  =2.0*SYSTEM_FREQUENCY;  // 300

对应不同的要求,只需要设定系统频率、中断周期,便可得到寄存器中的值。

配置好ePWM模块后,应该对其进行验证,确保配置的正确无误。

我们直接给3相桥臂进行占空比赋值:

Svpwmdq.Ta = 0.5;

Svpwmdq.Tb = -0.2;

Svpwmdq.Tc =  0;

即给ePWM模块的比较寄存器CMPB中设定值为:

EPwm1Regs.CMPB=(Svpwmdq.Ta+1) * PWM_HalfPerMax=7032(75%)

EPwm2Regs.CMPB=3750(40%)

EPwm3Regs.CMPB=4688(50%)

此时不考虑死区,只考虑对称互补,6路PWM的占空比应该为:

EPwm1A

EPwm1B

EPwm2A

EPwm2B

EPwm3A

EPwm3B

25%

75%

60%

40%

50%

50%

程序中通过死区模块,采用ALC:EPWMA反转极性即低电平有效,互补输出的方式(该方式用于低电平有效的驱动芯片),产生了带死区的互补PWM

死区占空比为:150/9375=1.6%

因此最终的6路PWM占空比应该为:

EPwm1A

EPwm1B

EPwm2A

EPwm2B

EPwm3A

EPwm3B

26.6%

76.6%

61.6%

41.6%

51.6%

51.6%

将程序烧录到硬件中,利用示波器观察波形: 

            EPWM1A

        EPWM1B

EPWM2A

EPWM2B

EPWM3A

EPWM3B

可见,实验和理论分析相符,配置的波形正确。

1.2 配置电流采样

矢量控制中需要同时获得三相电流,一般采集其中两相(我的板子三相都采集了),根据基尔霍夫定律即可推出第三相的电流。

首先断开电机连接,使用仿真器连续读取AD采样结果寄存器的值,此时的采样值即为电流零点。观察电流零点的稳定性,一般来说,如果电流采样的稳定性较好,AD结果寄存器中只会有最后一两位在波动。若电流零点波动得较严重,说明采样稳定性很差,此时需要在程序中增加滤波算法。实际读数为2524~2530之间跳动,理论值为2455(有的芯片性能好一些,波动小一些,如果一定时间段内,波动情况是有正有负,绝对值差不多大,基本上没问题

之后接上电机,给U相输出一个很小的占空比,V、W两相占空比设置为0。具体占空比的值取决于母线电压及绕组电阻,可以预先估计一下,保证电流在安全范围内,一般可以取为1A左右。此时再用仿真器读取计算出的U、V、W三相电流,根据正电压产生正电流的电动机原则,U相电流应该是正的,V、W两相电流应该是负的,且V、W两相电流应基本相同。若正负号不对,需要进行调整。此实验,电机是锁轴的状态。通过改变PWM占空比,保证增大占空比电流也会增大,减小占空比电流也随之减小即可。实验如下:

实验序号

U

V

W

备注

1

占空比设置

0.55

0.1

0.1

读数的小数点后第3位跳动

采集的电流

0.082

-0.035

-0.047

2

占空比设置

0.65

0.1

0.1

采集的电流

0.1

-0.056

-0.044

1.3 配置角度及转速采样

角度和转速都来源于旋转变压器,采用AD2S1210进行解码,角度采用实际值进行运算,速度使用标幺值表示。

配置好后验证如下:用手缓慢旋转电机,角度采样值会由0-6.28周期性变化,符合要求,说明程序正确。

2 调试SVPWM模块

SVPWM(空间矢量调制)模块要求其输入的ualfa和ubeta的矢量和小于1(参照TI电机例程中的说明),不清楚的也可参考《01手把手教你学FOC与SVPWM技术》中的相关内容,先搞清楚SVPWM原理。这里仅仅采用Matlab的Simulink工具对算法进行仿真,结果如图。

实际编程时,SVPWM模块不用修改,直接使用即可。

3 调试电流

SVPWM模块调试正常后就可以加上电流PI控制器了,系统框图如下:

其中IqRefIdRefAngle是调试变量。从图中可以看到,这里使用了两个PI控制器,需要对其参数进行粗略的整定。

首先将AngleIqRef设置为0,IdRef设置为一个安全的电流值,PI控制器参数均设置为0,此时应该是没有电流的。之后将IdPI控制器的Kp值设置为一个合适的值,具体值根据输入输出的数量级来确定,不设置得太大,若都使用标幺值的话,可以设置为1。此时重新运行程序,观察Id的实际值,Id的值应该不等于0,不过与IdRef之间存在一个静差,逐步增加Ki,直到静差满足要求为止。将IqPI控制器参数值设置为相同的即可。

之后与调试SVPWM模块时相同,逐步改变Angle的值,此时电机应该也是会动的。可以在程序中让Angle自动增加,不过增加的速度不要太快,此时电机应该会正向旋转起来。若让Angle自动减小,则电机会反向旋转。正转与反转应该是对称且相同的。注意,此时设置的是IdRef(IqRef为0)。

记录下旋转时角度采样值与Angle值,并绘制曲线进行观察,二者应该是频率相同的三角波,且有一个固定相位差。与此同时,相电流的采样值应该是比较接近正弦的波形。如下图所示:

调试PI控制器参数时也可参考相电流曲线,若曲线发生畸变,不是图中那样的正弦波形,需要降低比例及积分作用。

最后,检查采样计算出的转速值,正转(逆时针)时转速应该是正的,反转(顺时针)时是负的。根据Angle的变化周期可以计算出此时的实际转速,将实际转速与转速采样值进行对比,二者应该基本相同。如果有条件的话,可以进一步使用转速计进行验证。如果此处的转速符号或大小有误,需要检查程序进行修改。

    以下为我个人调试记录(3.1-3.3),没有实验条件的,可以看看调试过程中,参数改变对电流环响应的影响。

3.1 电流环第一次调参(不同电机不一样,但是思路一样

原始程序,参数未标幺,初次尝试调参。

电流环参数测试:电机堵转,电流闭环,给定iq=2.5A

DKp=0.1,ki=0.0025,积分和输出限幅0.3

QKp=0.1,ki=0.0025,积分和输出限幅0.95

DKp=0.5,ki=0.0025,积分和输出限幅0.3

QKp=0.5,ki=0.0025,积分和输出限幅0.95

DKp=0.6,ki=0.0025,积分和输出限幅0.3

QKp=0.6,ki=0.0025,积分和输出限幅0.95

DKp=0.7,ki=0.0025,积分和输出限幅0.3

QKp=0.7,ki=0.0025,积分和输出限幅0.95

DKp=0.8,ki=0.0025,积分和输出限幅0.3

QKp=0.8,ki=0.0025,积分和输出限幅0.95

DKp=1,ki=0.0025,积分和输出限幅0.3

QKp=1,ki=0.0025,积分和输出限幅0.95

综合,最终Kp=0.6.

DKp=0.6,ki=0.025,积分和输出限幅0.3

QKp=0.6,ki=0.025,积分和输出限幅0.95

DKp=0.6,ki=0.05,积分和输出限幅0.3

QKp=0.6,ki=0.05,积分和输出限幅0.95

DKp=0.6,ki=0.25,积分和输出限幅0.3

QKp=0.6,ki=0.25,积分和输出限幅0.95

最终选ki=0.04.

第一次调参电流环确定参数为:

Kp=0.6,Ki=0.04,d和q轴积分输出限幅0.3、0.95

总结:指令和反馈代表的具体量不清楚,只是感性的观察KP和KI参数对电流环性能的影响,为后续工作打下基础。

3.2正负指令输出力矩不一致问题

加载试验,发现电机的输出力矩上不去,因此,对电流环的限幅进行了调整,并对电流采样进行了标幺处理,明确了各参数代表的实际物理量。

指令1代表iq给定25A电流。

经过多次测试,电流环指令和电机输出力矩呈正比例关系,并且可以达到电机设计时的最大输出力矩。

实验时发现:正负方向相同电流值,电机输出力矩不一致。

解决方法1:调整了电流采样处理时的值,结果如下表所示。

序号

指令pu

iq反馈A

力矩nM

备注

1

0.1

2.48

6.75

Iu-0.001

-0.1

-2.75

8.56

2

0.25

6.23

13.75

Iu-0.001

-0.25

-6.33

16.58

3

0.1

2.52

7.86

Iu-0.01

-0.1

-2.77

9.8

4

0.25

6.25

14.78

Iu-0.01

-0.25

-6.22

17.04

5

0.1

2.5

7.07

Iu+0.01

-0.1

-2.74

6.98

6

0.25

6.24

13.6

Iu+0.01

-0.25

-6.24

16.25

从实验可以得出结论:Iu整体减值,会使同指令下电机的输出力矩变大,加值,会减小。

在+0.01时,电机给定0指令,输出力矩最大1.27NM。

以上方法原理不清晰,应从电流反馈和指令的波形入手分析问题。

解决方法2:

将电流采样处理程序参数恢复正常:。

正向0.1指令,即iq=2.5A

此时:瞬间力矩6.7Nm,上位机传入指令为0.09,母线电流0.767A。

(同样的指令,每次发送阶跃时,电机的输出力矩不一样,时间间隔不一样,力矩差异更大一些,这和电机发热、正反向机械间隙、和联轴器结合的位置等因素有关。)

-0.1指令,即iq=-2.5A波形。

此时,上位机传入指令为-0.11,力矩为7.56Nm,母线电流为0.847A

小结:

序号

Iq给定pu

上位机传入

Iq反馈

Uq

力矩

母线电流

1

0.1

0.09

2.5A

0.36

6.7Nm

0.767A

-0.1

-0.11

-2.75A

-0.41

-7.56Nm

0.847A

2

0.25

0.25

6.26A

0.89

14.8Nm

4.78A

-0.25

-0.25

-6.25A

-0.87

13.8Nm

4.67A

经过多次测试,发送正指令,上位机传数很多时候比指令小0.01-0.02,负向则大0.01-0.02。因为标幺,该偏差相当于有0.25A-0.5A的电流指令差异。

经过确认,上位机发数程序有问题,等待修改上位机程序。

3.3电流环第二次调参

测试波形不理想,删除了。

实验时发现给定0指令时,电机会在原地轻微的高频抖动,手摸可以感觉到。

故给定iq=0,测电流环,Kp=0.6,Ki=0.04,d和q轴积分输出限幅0.3、0.95。

可以看出:给定iq=0时,q轴电流反馈毛刺较大。 

目前程序对电流反馈采用的是一阶滤波,毛刺问题的影响待后续研究。

3.3电流环第三次调参

在发现速度波动不理想时,重新调整电流环参数。

DKp=3,ki=0,积分和输出限幅0.3

QKp=3,ki=0,积分和输出限幅0.95

此时,给定指令0.1,母线电流为0.12A,iq反馈为1.03A

DKp=7.5,ki=0,积分和输出限幅0.3

QKp=7.5,ki=0,积分和输出限幅0.95

此时,给定指令0.1,母线电流为0.324A,iq反馈为1.62A

DKp=15,ki=0,积分和输出限幅0.3

QKp=15,ki=0,积分和输出限幅0.95

此时,给定指令0.1

DKp=20,ki=0,积分和输出限幅0.3

QKp=20,ki=0,积分和输出限幅0.95

此时,给定指令0.1

DKp=25,ki=0,积分和输出限幅0.3

QKp=25,ki=0,积分和输出限幅0.95

此时,给定指令0.1,母线电流为0.7A,iq反馈为1.62A

DKp=30,ki=0,积分和输出限幅0.3

QKp=30,ki=0,积分和输出限幅0.95

此时,给定指令0.1,母线电流为0.7A,iq反馈为1.62A

Kp25时。

DKp=25,ki=0.1,积分和输出限幅0.3

QKp=25,ki=0.1,积分和输出限幅0.95

此时,给定指令0.1

DKp=25,ki=0.5,积分和输出限幅0.3

QKp=25,ki=0.5,积分和输出限幅0.95

此时,给定指令0.1

DKp=25,ki=1,积分和输出限幅0.3

QKp=25,ki=1,积分和输出限幅0.95

此时,给定指令0.1

DKp=25,ki=10,积分和输出限幅0.3

QKp=25,ki=10,积分和输出限幅0.95

此时,给定指令0.1

DKp=25,ki=100,积分和输出限幅0.3

QKp=25,ki=100,积分和输出限幅0.95

此时,给定指令0.1

Kp=15时:

DKp=15,ki=0.5,积分和输出限幅0.3

QKp=15,ki=0.5,积分和输出限幅0.95

此时,给定指令0.1

DKp=15,ki=0.45,积分和输出限幅0.3

QKp=15,ki=0.45 ,积分和输出限幅0.95

此时,给定指令0.1

DKp=15,ki=0.4,积分和输出限幅0.3

QKp=15,ki=0.4 ,积分和输出限幅0.95

此时,给定指令0.1

DKp=15,ki=0.3,积分和输出限幅0.3

QKp=15,ki=0.3 ,积分和输出限幅0.95

此时,给定指令0.1

尝试修改:

DKp=18,ki=0.3,积分和输出限幅0.3

QKp=18,ki=0.3 ,积分和输出限幅0.95

此时,给定指令0.1。发现,静差消除变慢了。

小结:最终选择kp=15,ki=0.4(电流环响应时间约5ms,有超调)。

加入速度环,观察电流环跟随情况,发现电流跟随很好。

4 调试速度

对于PMSM而言,除了在弱磁控制等情况下,IdRef一般是固定为0的。IqRef连接至速度环PI控制器的输出上,一般会对IqRef的范围进行限幅,以保证电流在安全范围内。

之前已经验证了速度采样的正确性,故这里只需要整定PI控制器参数即可。方法按照通用步骤,先设置一个Kp,再慢慢增大Ki,根据设定值与实际值的曲线进一步调节参数即可。整定完成后,系统应该是完全可控的,电机会按照给定速度旋转,且正转反转应该都是没有问题的。

  以下为我个人调试记录(4.1-4.6),没有实验条件的,可以看看调试过程中参数改变对速度响应的影响,加深对调参的理解。

4.1速度环第一次调参

空载,速度阶跃指令60r/min启动电机。

Kp=0.1,ki=0,积分和输出限幅0.95,ACC=0.8.

Kp=0.25,ki=0,积分和输出限幅0.95,ACC=0.8.

Kp=0.3,ki=0,积分和输出限幅0.95,ACC=0.8.

Kp=0.31,ki=0,积分和输出限幅0.95,ACC=0.8.

Kp=0.32,ki=0,积分和输出限幅0.95,ACC=0.8.

Kp=0.4,ki=0,积分和输出限幅0.95,ACC=0.8.

Kp=0.5,ki=0,积分和输出限幅0.95,ACC=0.8.

经过对比,暂时选取KP=0.32.

Kp=0.32,ki=1,积分和输出限幅0.95,ACC=0.8.

现象:电机高频抖动中运转。

Kp=0.32,ki=0.01,积分和输出限幅0.95,ACC=0.8.

Kp=0.32,ki=0.01,积分限幅0.45,输出限幅0.95,ACC=0.8.可以看出来,积分限幅相当于削弱了积分的作用,在这里没有好的收益。

Kp=0.32,ki=0.001,积分和输出限幅0.95,ACC=0.8.

Kp=0.32,ki=0.0005,积分和输出限幅0.95,ACC=0.8.从图中可以看出,进入稳态后,每间隔约0.5s,速度下降一次,约5r/min,呈周期性波动。此时,速度指令60r/min,0.5s电机转半圈,电机的旋变为2对极,因此怀疑和旋变有关。另外,从图中可以看出,速度波动严重时,转子角度也出现波动,需分析其关系。

Kp=0.32,ki=0.0001,积分和输出限幅0.95,ACC=0.8.

根据以上仿真,初步确定Kp=0.32,ki=0.001,积分和输出限幅0.95

将ACC=0.05.如图:

将ACC=0.065.如图:

将ACC=0.08.如图:

最终选择ACC=0.065.

最终确定的参数:

Kp=0.32,ki=0.001,积分和输出限幅0.95,ACC=0.065

在此参数下,测试系统如下:

空载,阶跃60r/min。

空载,阶跃120r/min。

在此参数下,断开速度环,电流给定iq=0.3

4.2速度环第二次调参

在调整好了电流环后,重新调整速度环参数。

此时速度环Kp=0.32,ki=0.001,限幅0.95,ACC=0.65.

Kp=0.8,ki=0.001,限幅0.95,ACC=0.65.

4.3速度环第三次调参

重新调整了电流环,在此参数下,调整速度环。

此时速度环参数:Kp=0.25,ki=0,限幅0.95,ACC=0.65.

Kp=0.5,ki=0,限幅0.95,ACC=0.65.

4.4速度环第四次调参

在电流环调整并确认的基础上,再次重新他调整速度环。

此时速度环参数:KP=0.28Ki=0,限幅0.95,ACC=0.06

KP=0.23Ki=0,限幅0.95,ACC=0.06

KP=0.2Ki=0,限幅0.95,ACC=0.06

KP=0.18Ki=0,限幅0.95,ACC=0.06

KP=0.23Ki=0.01,限幅0.95,ACC=0.06

KP=0.23Ki=0.001,限幅0.95,ACC=0.06

以上参数,进行120r/min启动。

以上实验的速度环限幅0.95,当转速指令为120r/min时,速度环输出为3.277A,但电流环的反馈最大为2.43A。

当转速指令为60r/min时,速度环输出最大为2.8A,即2.8/25=0.112,因此,速度环的输出指令可以限幅0.22,因为0.22*25=5.5A,对应了电机的最大电流。

限幅更为为0.22,电机空载启动,给定转速60r/min的波形。

限幅更为为0.22,电机空载启动,给定转速120r/min的波形。

总结:

最终确定参数:

速度环:限幅0.22,Kp=0.23,Ki=0.001

电流环:限幅0.95,Kp=15,Ki=0.4

4.5速度环第五次调参

电机给定0转速指令时,有高频的轻微抖动。

挂仿真器测试,电机不动时,旋变的读数不跳动。

通过速度环给定0转速指令,发现电机是在非常缓慢的转动,速度越来越慢,最终,速度反馈如下图的紫色曲线。该跳动经分析,是电流采样的噪声引起的。

实验时发现,速度平滑不起作用,查程序发现平滑函数被屏蔽,打开速度平滑,进行实验。

参数设置为

速度环:限幅0.22,Kp=0.23,Ki=0.001

电流环:限幅0.95,Kp=15,Ki=0.4

取ACC=0.01.

取ACC=0.02.

取ACC=0.03

加入平滑处理后,启动阶段,电机的速度响应会变慢一些,使得电机的启动电流减小,冲击减小。

速度指令平滑处理,会影响系统的超调量、响应速度。具体值应该根据带载进行调整,也要计算电机的加速度能力。

4.5速度反馈滤波实验

原始程序对速度反馈进行了一阶滤波,再次基础上,添加加权滑动滤波函数,进行了测试。对速度反馈量的滤波效果如下:

当sfilter.FilterTime=5时

当sfilter.FilterTime=10时

可见,增大滤波尺度,对毛刺滤波效果更明显,但相位滞后更严重。

滤波方式适用于带有高频噪声的信号。

4.6速度环第六次调参

经过反复多次调整,速度环转速波动在给定60r/min阶跃指令时,差别不大,改进效果不明显,但给定120r/min阶跃指令时,波动明显减小了,算是收获。

今天确定参数:

速度环:限幅0.22,Kp=0.28,Ki=0.002,ACC=0.03.

电流环:限幅0.95,Kp=15,Ki=0.4

实验框架参考了这篇博客原文: https://gaomf.cn/2016/11/14/PMSM_Vector_Control/  作者: 高明飞

  • 3
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
### 回答1: FOC矢量控制是现代交流电机控制的一种高级算法,它主要用于控制永磁同步电机(PMSM)、感应电机(IM)等电机的运动。FOC矢量控制可以实现高效、高精度、高响应的电机控制,并且可以提高电机的效率和可靠性。 在Simulink仿真中,我们可以使用FOC矢量控制算法电机进行控制和仿真。这里以赵云为例,他是一名机电工程师,熟悉FOC矢量控制算法,并且熟练掌握Simulink仿真技术。 赵云首先需要将FOC矢量控制算法应用于Simulink仿真中,包括电机控制模块、电机运动学模型、电机动力学模型等。然后,他可以进行不同的仿真实验,如电机空载、电机负载、电机启动、电机制动等。 通过Simulink仿真,赵云可以获得实时的数据和曲线图,比如电动势(EMF)波形、电流波形、转速曲线、扭矩曲线等,从而分析和评估电机的性能表现。他还可以根据仿真结果,对FOC矢量控制算法进行优化和改进,以提高电机控制精度和效率。 总之,FOC矢量控制Simulink仿真是一种非常有用的技术,可以帮助赵云更好地理解电机控制算法的原理和性能特点,并且可以为电机控制系统的设计和开发提供有力的支持。 ### 回答2: FOC矢量控制是一种基于空间矢量分解的电机控制技术,可以实现电机高精度定位转矩控制。在Simulink仿真中使用FOC矢量控制可以帮助工程师验证电机控制方案,进行性能评估和调试。 众所周知,电机控制技术的传统方法是采用速度环和电流环来实现电机转矩控制。但FOC矢量控制则能够更好地利用矢量控制的优势,实现高效率、高精度的电机控制FOC矢量控制通过将三相交流电压或电流向量视为两个独立的矢量,即转子磁场矢量和旋转矢量,来实现空间矢量分解,从而实现电机的高精度定位转矩控制。 在Simulink仿真中,我们可以根据电机的特性参数,设置FOC矢量控制的基本参数。通过Simulink中的Block图形界面,我们可以进行可视化的电路设计,包括乘法器、积分器、S函数、PID控制器、限幅器等模块。此外,我们还可以通过模拟不同的负载和转速,来模拟FOC矢量控制在不同工况下的性能。 总之,FOC矢量控制在现代电机控制技术领域具有广泛应用价值。通过在Simulink中进行FOC矢量控制仿真,我们可以更好地理解和实现FOC控制算法,从而提高电机控制系统的性能和稳定性。 ### 回答3: FOC矢量控制是电气工程中的一种常用控制策略。它是一种基于磁通定向控制矢量控制的混合控制策略,能够实现对电机的精准控制,使得电机的性能达到最优。在FOC矢量控制中,通过将电机电流转换为直角坐标系下的矢量,可以避免电机转子位置的影响,从而达到高精度控制的目的。 在Simulink仿真中,可以通过搭建FOC矢量控制模型来对电机进行仿真测试。模型的主要组成部分包括电机模型、空间矢量PWM模块、磁场定向控制器和速度环控制器等。其中,磁场定向控制器能够将电流转换为磁场矢量来控制电机的磁场方向,从而使得电机的磁通始终指向所需的方向。速度环控制器则可以通过对电机的速度进行反馈,调节电机的输出电流来控制电机的转速。空间矢量PWM模块则可以通过改变PWM波的占空比和极性,来实现对电机电流的精确控制。 总之,FOC矢量控制模型是一种高精度的电机控制技术,可以在Simulink仿真中通过搭建控制模型进行测试验证。它在电气工程和机械工程等领域都具有广泛的应用,是目前电机控制技术的重要发展方向之一。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值