网上的电机控制模型一大堆,可能初学者看的最多的就是袁雷老师的教材了。
![](https://i-blog.csdnimg.cn/direct/31a4a63eeb4240309f8afa626da25826.png)
袁老师的教材年份也比较早了,都已经是十年前的东西了,教材中有些缺漏还是需要修改修改的。即使教材中有些不当之处,但是这边教材的贡献还是不可否认的,建议初学者可以看看这篇教材提供的模型****(CSDN上可以免费获取的)****。
滑模控制是电机里面最最最常用的一种非线控制策略了。滑模控制我就不详细说了,知乎或者CSDN上面都有很多的讲解。我们就来看看袁老师构建的滑模控制simulink仿真吧。
1.教材中的模型展示
![](https://i-blog.csdnimg.cn/direct/28eec0224ff540e1bb936b352716758b.png)
![](https://i-blog.csdnimg.cn/direct/681d7517b19e4d7aaf71b2b7908c7b0e.png)
![](https://i-blog.csdnimg.cn/direct/4abd7737d7b64d1488989aa4fa8d0c77.png)
教材中的仿真参数如下:
![](https://i-blog.csdnimg.cn/direct/4abdee28ef2544daacca5ebd513421fd.png)
这里注意一下,开关频率10kHz对应的开关周期=100us,但是仿真的采样周期设置为10us,这是不合理的。对于一般本科生或者是研究生做实验而言,都会采用单采单更的形式。具体可以看我之前的这篇知乎。
https://zhuanlan.zhihu.com/p/678697436https://zhuanlan.zhihu.com/p/678697436
下面这是教材中的仿真模型:
![](https://i-blog.csdnimg.cn/direct/1be0a117ea7945a1b0c8245d1eba7427.png)
我们先用simulink里自带的功能,看看这个系统的各个模块的计算时间分别为多少呢。
![](https://i-blog.csdnimg.cn/direct/df868c58df764858813e9418e7e42c80.png)
![](https://i-blog.csdnimg.cn/direct/87b1aee082d24f889941a38e61354ddb.png)
可以看的,图中红色的部分,也就是转速环和电流环的计算频率是100kHz(对应10us),这显然是不太合理的,一般实验中用的都是10kHz。虽然FPGA可以做到这么高频率,但是一般的实验室也不会有这么贵的控制器。
除了红色的模块,其余黑色的模块都是按照连续域进行计算。例如模型中的三相电流以及转速,按照连续域进行计算就相当于,所有时刻的电流波形你都采集了。实验中的电流的采样周期一般=开关周期=10kHz,而这个模型是不停的采样,那肯定是与实际差别比较大的咯。
我们把这个Uq参考值放到示波器来看看波形
![](https://i-blog.csdnimg.cn/direct/7cfd8897ca294276822e62d3e8eb0feb.png)
我们放大波形来看看,可以看的,在任何时刻,Uq参考值都是完全连续的。而实际控制的中的Uq参考值一般都是10kHz计算一次。
![](https://i-blog.csdnimg.cn/direct/9772697c6f324e9faff45d1f5a98f240.png)
2.教材中的模型纠正
(1)初始化模块
下面这是教材中的参数初始化模块以及PWM模块。
这个地方我想说的是,教材中把一部分变量在初始化模块进行定义了。而有一部分呢,比如直流母线电压311,开关周期0.0001s则是用数字的形式写在对应的地方。
![](https://i-blog.csdnimg.cn/direct/8f8aec02b61842048e6e51e63f7d7bab.png)
![](https://i-blog.csdnimg.cn/direct/98516aed521b477cb1f25fdd2efb3e51.png)
![](https://i-blog.csdnimg.cn/direct/fa8fe36ede594831ab820ed755cd2b46.png)
虽然这样写也没有什么问题,但是你想改参数的话,就会比较麻烦。我是习惯把所有参数都在初始化模块里面写好,想改什么参数就直接在初始化里面改数值就好了,不用在模型里面一个一个进行修改。下面这是我的初始化模块、PWM模块以及电机模块参数设置。
![](https://i-blog.csdnimg.cn/direct/c972dd53e14c4074a6db7ba4fdae36cd.png)
( 2 ) 采样 模块
为了使得控制系统的数据输入频率是10kHz,我们要在simulink模块数据输出的这个bus总线这里加上一个零阶保持器ZOH,ZOH的采样时间设置为1e-4,即100us采样一次。
![](https://i-blog.csdnimg.cn/direct/913cb9c0cd7746379f00baa35aaa3164.png)
(3)电流环模块
教材的电流环模块如下,电流环由PI调节器加状态解耦补偿构成。PI调节器内部设置了积分限幅以及输出限幅。
![](https://i-blog.csdnimg.cn/direct/69106a9fa03c46b7a68baef75a145496.png)
教材的状态解耦补偿是加在电流环限幅之后,而我的一般是把状态解耦补偿是加在电流环限幅之前的。 这两者性能上有何区别我还没有考虑过。但是关于状态解耦补偿、积分限幅以及输出限幅的内容,我往期都已经讲到过了。
https://zhuanlan.zhihu.com/p/682880365https://zhuanlan.zhihu.com/p/682880365
https://zhuanlan.zhihu.com/p/663825561https://zhuanlan.zhihu.com/p/663825561
https://zhuanlan.zhihu.com/p/683953136https://zhuanlan.zhihu.com/p/683953136
![](https://i-blog.csdnimg.cn/direct/51355ae0588d4c5187a640814c25591e.png)
(4)一拍延时的加入
为了模拟数字控制器的一拍延时,这里还要加上一个delay模块。
![](https://i-blog.csdnimg.cn/direct/06d0942dbe98480bace03f61bf5cb1bb.png)
(5)求解器的设置
这个我往期知乎也有说到
![](https://i-blog.csdnimg.cn/direct/9b2059be231543d2a8527d9021b8ad12.png)
3.模型纠正前后的对比
按照上述方式修改后的仿真模型如下。仿真工况是给定转速1000r/min,0.2s突加10Nm负载。
修改前的模型
修改后的模型
上述这两个简单的模型(修改前、修改后的模型),无偿分享,只需要关注我的知乎并私信我即可。(你得告诉我你是从CSDN过来的)
4.仿真模型的进一步优化
对原先的离散化模型做了进一步优化。
![](https://i-blog.csdnimg.cn/direct/185b278365864cc2a51aca954e7b0c72.png)
(1) 修正了模型中的公式错误
修改前的模型
进一步修正后的模型
转矩脉动明显降低,转速超调量明显下降。
(2) 加了入转速滤波模块
![](https://i-blog.csdnimg.cn/direct/f5a69d7becbd45c1870df46f5c4f90f0.png)
(3) 加入了死区模块
标题
(4) 将所有参数统一设置
![](https://i-blog.csdnimg.cn/direct/03293b6e747e425eba099b9acc646251.png)
![](https://i-blog.csdnimg.cn/direct/2c092a113c644f239717d572e5b7125e.png)
这样设置是为了方便修改模型参数。
进一步优化的模型已上架某鱼。前面两个模型仍旧是无偿的 ,仅最新更新的、最终优化完善的模型有偿。 https://m.tb.cn/h.giXCkCI?tk=5ezE3YwcD7Ghttps://m.tb.cn/h.giXCkCI?tk=5ezE3YwcD7G