起因是需要用改进的磁链观测器实现某电机的DTC控制时,一直不能得到正确的结果。就先从PMSM的常规DTC部分搭建,看看正确的效果应该是什么样的,参考的是袁雷老师的《现代永磁同步电机控制原理及MATLAB仿真》(电子版及所有的仿真文件都可以在以下链接中找到:https://gitcode.com/open-source-toolkit/f6469,我也是自己搭完之后才发现有现成的matlab代码可以用,哭死)。
但是:有博主纠正了代码中关于作用的开关表以及扇区判断的部分
【电机/控制理论】DTC(Direct Torque Control)直接转矩控制_直接转矩控制pwm-CSDN博客
但我在实际测试的时候,发现袁老师的书和上面的文章的仿真都可以跑出来结果,并且结果都是对的,所以上述两种版本都是正确的,只不过实现方式上有所不同。这里我来细细刨析其中的原理:
关键的关键,在于扇区定义的不同:
袁老师的书中,关于基本电压矢量的定义,大部分情况下都是按照开关顺序的二进制对应的十进制标号的,也就是逆时针是 4(100)-6(110)-2(010)-3(011)-1(001)-5(101),其中括号内的东西是三桥臂上侧开关的状态,基本电压矢量如下图:
但是在DTC开关表中,给出的电压基本矢量其实是按照逆时针顺序标号的:依次是1(100)-2(110)-3(010)-4(011)-5(001)-6(101)。开关表见下图:
也就是说,开关表中的U1 U2....U6和上面图中的编号并不相符合,而是与下图相符合;
当然了,编号虽然有出入,但是开关状态是不变的,即顺序标号的U1和二进制标号的U4对于的空间电压矢量,开关顺序都是(100)
但是,在书中MATLAB仿真实现的时候,实际上采用的标号全都是第一种标号,也就是二进制标号法。
也就是说,仿真中,对于表4-2中的电压矢量的标号,全部要对应到二进制编号中,也就是说:
U1变成U4,U2变为U6,U3->U2, U4->U3,U5->U1,U6->U5
总归一句话:书中表4-2是电压矢量按照逆时针顺序编号给的,但在书中其他部分以及仿真代码中,电压矢量都是按照二级制编号给的。
上面两个博主的文章,实际上是将仿真的标号按照逆时针顺序标号方式更改的。
关于扇区的计算,这里还有要注意的点:
六个电压矢量将复平面分为六个扇区,分别逆时针顺序标号为扇区1 2 3 4 5 6
但这个是基础电压矢量划分的扇区,并不是DTC所需要的扇区
也就是表4-2中s1 s2 s3 s4 s5 s6对应的扇区并不是基础电压矢量划分的扇区,而是按照磁链的alpha beta轴分量所划分的扇区:
关于这部分的理解,推荐上海大学《电力拖动自动控制系统-运动控制系统》这本书,在异步电机的DTC控制中讲的很清晰。
自己搭了系统跑了结果,期间发现怎么调都没办法得到正确的结果,最后发现是求解器的问题,我在仿真中用了ode45,后来改成ode23就好了。以下是效果,并没有详细去调整参数。