先放一张矢量控制框图:
一、验证三相逆变模块的正确输出。不接电机,使用高级定时器输出6路互补PWM,改变占空比,测量三相逆变模块的U、V、W对地波形的占空比是否正常。
二、测试相电流采样电路的功能。
1、不接电机,连续采样相电流,此时采样值为相电流为0时的值,此时值应该比较稳定,变化不大,如果变化比较大,说明有问题。
2、接上电机,给U相设置占空比为5%,V、W占空比为0,此时可以用万用表测量取样电阻上的电压值,应该已经有值。再用adc采样相电流,计算相电流采样极性和大小是否正常。根据正电压产生正电流的电动机原则,U相电流应该是正的,V、W两相电流应该是负的,且V、W两相电流应基本相同。若正负号不对,需要进行调整。
三、测试变换程序的正确性。矢量控制的核心其实就在Clark与Park变换上,通过这两个变换实现了直轴与交轴的解耦。如果使用的是官方的库,可以不管本步骤。如果是自己写的,需要通过仿真测试等手段,确保程序的正确性。
四、调试SVPWM模块。通过SVPWM模块可以把FOC的控制结果转换为定时器6个通道的占空比,从而驱动三相逆变模块控制定子绕组产生旋转磁场,拖动转子旋转。为了验证SVPWM模块的功能,需要使用上图中的6、7即反park变换和SVPWM模块,产生开环的旋转磁场。
1、把FOC其他部分注释掉,只保留反park变换和svpwm函数。
2、反park变换的输入参数有3个:Vq、Vd、Angle,将Vq=0,Vd设置为一个较小的值,Angle=0,然后接电机上电,此时svpwm会有输出,电机有力,转子被锁定在当前电角度位置。如果没有力,说明Vd值太小了。同时可以查看CH1、CH2、CH3的波形和svpwm的标准波形做对比。比如,处于svpwm的扇区1,那么CH1、CH2、CH3上的波形关系如下:
你可以在仿真模式下,把CH1、CH2、CH3通道的比较值加入watch窗口,然后手动改变Vd的值。改变Vd的值,3个通道的比较值也会跟着改变。
3、将Angle由0开始,每次增加30°左右,此时电机会跟着旋转,且每次旋转的角度应该是相同的,记录下这个旋转方向,这就是此系统固有的正方向。此时还可以验证电机的极对数,若Angle重复增加N个周期后电机回到起始点(可用记号笔进行标注),电机的极对数即为N。
五、整定d轴、q轴PID参数。
1、把电流采样模块、clark变换、park变换、PID控制器加入。
2、此时系统的输入参数有3个:PID控制器的参考量IQREF、IDREF和Angle。设置Angle=0,IQREF=0,IDREF设置为一个较小值(可以与上面的Vd一样)。
3、d轴和q轴都有PID控制器,将两个PID的参数都设置为0。之后保持q轴的PID为0,然后整定d轴的参数(整定的过程中,可以给电机上电观察效果,目的是使电流采样值经过clark、park变换后的Iq、Id值接近于IQREF、IDREF)。d轴整定完后,把q轴的PID参数设置为相同即可。
六、使用编码器输出角度替代Angle值
改变Angle值,电机旋转起来。旋转状态的Iq、Id值与停止状态一样仍然是接近于IQREF、IDREF的。在程序让Angle自加,使用j-scope观察4个变量的变化:Angle值、编码器返回的角度值、A相电流采样值、B相电流采样值
Angle值、编码器返回的角度值的波形如左边的两个图。两个波形应该都是幅值相同的三角波,如果编码器值的变化方向与Angle不同,那么编码器的输出角度值需要反向。他们两者的波形并不重合,在水平轴上存在偏差值。而这步的目的就是要让他们重合,这样就能用编码器输出值替代Angle值了。
因为Angle值代表的是转子的真实电角度。因此要把编码器输出角度矫正为Angle值。如果是绝对式编码器,就要把编码器返回的角度值减去偏差,使之与Angle值的波形重合。如果是相对式编码器,就需要当电机启动阶段给定一个Angle值进行预定位时,把编码器的输出角度矫正为Angle值。
右边的两个图是相电流的采样值。调试PI控制器参数时也可参考相电流曲线,若曲线发生畸变,不是图中那样的正弦波形,需要降低比例及积分作用。
修改程序,使用编码器的输出角度值替代Angle值。绝对式编码器并不需要特殊的启动过程,因为矫正过后,一上电编码器的输出角度就是与转子的电角度是重合的。使用相对式编码器,在上电时,并不知道转子的位置,因为需要先设定Angle、IqRef为0,IdRef设置为合适值,此时电机转子会自动旋转到零点位置处,然后再把编码器的输出角度值矫正为0,完成编码器值与转子电角度的重合。
七、验证电流闭环
下面依次验证d轴与q轴。因为d轴用于影响转子的磁场,并不产生扭矩(d轴与转子磁场方向在一条直线上,d轴的作用是把转子固定在当前角度,不让转子动)。作用效果如下:
q轴产生的磁场方向垂直于转子磁场方向,于是产生扭矩,吸引着转子旋转。
我们先来验证d轴,将IqRef设置为0,IdRef设置为一个合适的正值,此时电机是不会旋转的,用手转动电机也是可以转动的,只是不同于自由转动状态,此时旋转电机时会感到阻力较大,有一个力始终在维持电机处于当前位置。
验证q轴时同理将IdRef设置为0,IqRef设置为一个合适的值即可。需要注意的是,因为启动电流明显大于稳态电流,如果IqRef的值设置得过小,电机无法旋转起来,而增大IqRef,使电机可以旋转起来后,电机会一直加速到最高转速。为保证安全,需要对输出电压占空比进行限幅。
将IqRef设置为正值时电机应该正转,设置为负值时电机应该反转,且正反转速应该是相同的。此时还可以进一步观察转速采样结果,如果和实际情况符合的话就可以进行下一步了。
八、调试速度闭环
需要先验证转速测量的程序是否正常。然后就可以在电流环的外层添加速度环了。
对于PMSM而言,除了在弱磁控制等情况下,IdRef一般是固定为0的。不过对于异步电机而言,因为要产生绕组电流,IdRef并不是零。IqRef连接至速度环PI控制器的输出上,一般会对IqRef的范围进行限幅,以保证电流在安全范围内。
速度环的PID参数整定就不细说了。
参考:
http://gaomf.cn/2016/11/14/PMSM_Vector_Control/#
https://blog.csdn.net/u010671230/article/details/79478582