FOC算法调试记录 矢量控制调试流程

FOC算法调试记录

0 概述

矢量控制又称磁场导向控制(Field Oriented Control, FOC),这是永磁同步电机(PMSM)的主要控制方法,与BLDC的简单控制策略相比,矢量控制要更为复杂,故需要一套系统的调试方法。

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

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控制器了,系统框图如下:

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

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

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

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

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

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

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

3.1 电流环第一次调参

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

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

D轴Kp=0.1,ki=0.0025,积分和输出限幅0.3

Q轴Kp=0.1,ki=0.0025,积分和输出限幅0.95

D轴Kp=0.5,ki=0.0025,积分和输出限幅0.3

Q轴Kp=0.5,ki=0.0025,积分和输出限幅0.95。

D轴Kp=0.6,ki=0.0025,积分和输出限幅0.3

Q轴Kp=0.6,ki=0.0025,积分和输出限幅0.95

D轴Kp=0.7,ki=0.0025,积分和输出限幅0.3

Q轴Kp=0.7,ki=0.0025,积分和输出限幅0.95

D轴Kp=0.8,ki=0.0025,积分和输出限幅0.3

Q轴Kp=0.8,ki=0.0025,积分和输出限幅0.95

D轴Kp=1,ki=0.0025,积分和输出限幅0.3

Q轴Kp=1,ki=0.0025,积分和输出限幅0.95

综合,最终Kp=0.6.

D轴Kp=0.6,ki=0.025,积分和输出限幅0.3

Q轴Kp=0.6,ki=0.025,积分和输出限幅0.95

D轴Kp=0.6,ki=0.05,积分和输出限幅0.3

Q轴Kp=0.6,ki=0.05,积分和输出限幅0.95

D轴Kp=0.6,ki=0.25,积分和输出限幅0.3

Q轴Kp=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电流环第三次调参

2020年7月21日星期二下午,在发现速度波动不理想时,重新调整电流环参数。

D轴Kp=3,ki=0,积分和输出限幅0.3

Q轴Kp=3,ki=0,积分和输出限幅0.95

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

D轴Kp=7.5,ki=0,积分和输出限幅0.3

Q轴Kp=7.5,ki=0,积分和输出限幅0.95

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

D轴Kp=15,ki=0,积分和输出限幅0.3

Q轴Kp=15,ki=0,积分和输出限幅0.95

此时,给定指令0.1。

D轴Kp=20,ki=0,积分和输出限幅0.3

Q轴Kp=20,ki=0,积分和输出限幅0.95

此时,给定指令0.1。

D轴Kp=25,ki=0,积分和输出限幅0.3

Q轴Kp=25,ki=0,积分和输出限幅0.95

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

D轴Kp=30,ki=0,积分和输出限幅0.3

Q轴Kp=30,ki=0,积分和输出限幅0.95

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

Kp取25时。

D轴Kp=25,ki=0.1,积分和输出限幅0.3

Q轴Kp=25,ki=0.1,积分和输出限幅0.95

此时,给定指令0.1。

D轴Kp=25,ki=0.5,积分和输出限幅0.3

Q轴Kp=25,ki=0.5,积分和输出限幅0.95

此时,给定指令0.1。

D轴Kp=25,ki=1,积分和输出限幅0.3

Q轴Kp=25,ki=1,积分和输出限幅0.95

此时,给定指令0.1。

D轴Kp=25,ki=10,积分和输出限幅0.3

Q轴Kp=25,ki=10,积分和输出限幅0.95

此时,给定指令0.1。

D轴Kp=25,ki=100,积分和输出限幅0.3

Q轴Kp=25,ki=100,积分和输出限幅0.95

此时,给定指令0.1。

Kp=15时:

D轴Kp=15,ki=0.5,积分和输出限幅0.3

Q轴Kp=15,ki=0.5,积分和输出限幅0.95

此时,给定指令0.1。

D轴Kp=15,ki=0.45,积分和输出限幅0.3

Q轴Kp=15,ki=0.45 ,积分和输出限幅0.95

此时,给定指令0.1。

D轴Kp=15,ki=0.4,积分和输出限幅0.3

Q轴Kp=15,ki=0.4 ,积分和输出限幅0.95

此时,给定指令0.1。

D轴Kp=15,ki=0.3,积分和输出限幅0.3

Q轴Kp=15,ki=0.3 ,积分和输出限幅0.95

此时,给定指令0.1。

尝试修改:

D轴Kp=18,ki=0.3,积分和输出限幅0.3

Q轴Kp=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速度环第二次调参

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

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

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

4.3速度环第三次调参

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

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

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

4.4速度环第四次调参

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

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

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

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

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

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

KP=0.23,Ki=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的波形。

总结:

2020年7月28日星期二最终确定参数:

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

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

4.5速度环第五次调参

2020年7月29日,电机给定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速度环第六次调参

2020年7月29日星期三下午。

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

今天确定参数:

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

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

小结:拿到一个新电机和开发板,拿到了别人的代码,按以下流程进行操作.

1、根据自己硬件的原理图,修改代码中的GPIO,首先让IO引脚匹配。别人代码中的外设可能和你用的不一样,那需要简单改下,使用你硬件有的外设代替下。

特别注意pwm有效电平必须和自己硬件一致,触发TZ后电平的设置。别人可能是低电平Mos会打开的,因为有的硬件会对电平反向。

2、Vd、Vq、角度都开环,外部给定Vq为0.05-0.15(标幺),Vd=0,角度自++,使得电机旋转起来,基本就行验证自己焊接的硬件没问题,在此条件下测量自己的电流、电压采样,编码器角度解算情况。电流采样噪声不要太大,正负基本对称,不要漂移。编码器角度解算出来基本是锯齿形的就可以。Vq值和角度自++的值需要匹配,才能运转比较好,而且转速不能太高了,10%的额定转速就可以了。

3、Vd、Vq仍然开环,将编码器解算角度加入到闭环中,校准编码器零位后,进行正反运行实验,达到Vq给正负相同的值,电机能正反运行,母线电流基本一致。说明编码器验证正确了。

4、Vd、Vq进行闭环,即进行dq轴电流闭环,调试方法在最上面。

5、进行速度闭环。

6、进行位置闭环。