![先进PID控制MATLAB仿真(第5版)](https://wfqqreader-1252317822.image.myqcloud.com/cover/9/47549009/b_47549009.jpg)
1.3.2 连续系统的数字PID控制算法
本方法可实现D/A及A/D的功能,符合数字实时控制的真实情况,计算机及DSP的实时PID控制都属于这种情况。
【仿真之一】 采用M语言进行仿真
被控对象为一电机模型传递函数:
![](https://epubservercos.yuewen.com/49A0DC/26947284307535106/epubprivate/OEBPS/Images/45295_30_3.jpg?sign=1739001011-lHuTjc2bEd3BXPCjluedHPfGUar1w6BI-0-77bf23cc1d19074870aef1e72c490bfb)
式中,J=0.0067;B=0.10。
采用M函数的形式,利用ODE45的方法求解连续对象方程,输入指令信号为yd(k)=0.50sin(2πt),采用PID控制方法设计控制器,kp=20.0、kd=0.50,仿真结果如图1-10所示。
![](https://epubservercos.yuewen.com/49A0DC/26947284307535106/epubprivate/OEBPS/Images/45295_30_4.jpg?sign=1739001011-hfr97YzwZmPXOEZIjHRxf5fdUMVHI7GT-0-28decb214937b419f60364b230909744)
图1-10 采用M语言的PID正弦跟踪
〖仿真程序〗
(1)控制主程序:chap1_6.m
![](https://epubservercos.yuewen.com/49A0DC/26947284307535106/epubprivate/OEBPS/Images/45295_31_1.jpg?sign=1739001011-wh7egUvVdbSAof00bH0HHzuF2qpV1MfV-0-6d3e0401be77b7594dab31a1a31901dd)
(2)连续对象子程序:chap1_6plant.m
![](https://epubservercos.yuewen.com/49A0DC/26947284307535106/epubprivate/OEBPS/Images/45295_31_2.jpg?sign=1739001011-RuzXaqGonZZvFaZDlxdAomZHx6Annl8o-0-1eb56361f7301d055cfc20743f787831)
![](https://epubservercos.yuewen.com/49A0DC/26947284307535106/epubprivate/OEBPS/Images/45295_32_1.jpg?sign=1739001011-i7rTghiYnjX8kW9m7wwC0gyCumwdJ4Fn-0-b8819eba7eb04d665a150e67c3da854f)
【仿真之二】 采用Simulink模块进行仿真
被控对象为三阶传递函数,采用Simulink模块与M函数相结合的形式,利用ODE45的方法求解连续对象方程,主程序由Simulink模块实现,控制器由M函数实现。输入指令信号为正弦信号0.05sin(2πt)。采用PID方法设计控制器,其中,kp=2.5,ki=0.02,kd=0.50。误差的初始化是通过时钟功能实现的,从而在M函数中实现了误差的积分和微分。仿真结果如图1-11所示。
![](https://epubservercos.yuewen.com/49A0DC/26947284307535106/epubprivate/OEBPS/Images/45295_32_3.jpg?sign=1739001011-avRojqbYoCURxXwy78ktVVOkApDjpums-0-655b7ecca114612e355a661530c9f8e2)
图1-11 采用Simulink模块的PID正弦跟踪
〖仿真程序〗
(1)Simulink主程序:chap1_7.mdl
![](https://epubservercos.yuewen.com/49A0DC/26947284307535106/epubprivate/OEBPS/Images/45295_32_4.jpg?sign=1739001011-MThpqZLmBqi5grulYNjo2U0UPbbnUiQ6-0-bdf6cd4fcc9322a5620120bd857d038e)
(2)控制器子程序:chap1_7ctrl.m
![](https://epubservercos.yuewen.com/49A0DC/26947284307535106/epubprivate/OEBPS/Images/45295_32_5.jpg?sign=1739001011-xK1mqzn9y1pz4rAqODCt9SZeqKSsR9dp-0-627cdd56b9b44b1a26cf17c980b7be7c)
![](https://epubservercos.yuewen.com/49A0DC/26947284307535106/epubprivate/OEBPS/Images/45295_33_1.jpg?sign=1739001011-WS27NGQMw5XBpzfZ16Br3VTF8qCs1dRT-0-5e7e43a5d2571cc0f63c081187a3621a)
(3)作图程序:chap1_7plot.m
![](https://epubservercos.yuewen.com/49A0DC/26947284307535106/epubprivate/OEBPS/Images/45295_33_2.jpg?sign=1739001011-odpIbC3AIMyIWGxuQXhhtTpbcRKQ5AHa-0-6d5b5abbb829520707094bc711f9eac7)
【仿真之三】 采用S函数的离散PID控制进行仿真
被控对象为三阶传递函数,在S函数中,采用初始化函数、更新函数和输出函数,即mdlInitializeSizes函数、mdlUpdates函数和mdlOutputs函数。在初始化中采用sizes结构,选择1个输出、2个输入。其中一个输入为误差信号,另一个输入为误差信号上一时刻的值。S函数嵌入在Simulink程序中,采样时间为1ms。仿真结果如图1-12所示。
![](https://epubservercos.yuewen.com/49A0DC/26947284307535106/epubprivate/OEBPS/Images/45295_33_4.jpg?sign=1739001011-RTdAcO2Up9wCgUjTPJ5KCZuYVqCIaNJn-0-513f4c5a578411aae15dda96cf2152bc)
图1-12 采用S函数进行仿真的PID正弦跟踪
〖仿真程序〗
(1)Simulink主程序:chap1_8.mdl
![](https://epubservercos.yuewen.com/49A0DC/26947284307535106/epubprivate/OEBPS/Images/45295_34_1.jpg?sign=1739001011-4XTnjCoVj30sHJj6oYBHZPqdnwAY0qA8-0-ca093c9e7f92ee2517d60f635c007620)
(2)PID控制器程序:chap1_8s.m
![](https://epubservercos.yuewen.com/49A0DC/26947284307535106/epubprivate/OEBPS/Images/45295_34_2.jpg?sign=1739001011-xpjdpOfRUpsfzQevbpJDkHjVHMlJLbPz-0-4fc6ae4184d8429f78e6b33de00032d1)
![](https://epubservercos.yuewen.com/49A0DC/26947284307535106/epubprivate/OEBPS/Images/45295_35_1.jpg?sign=1739001011-j8G3sJ2GCRuoWuga0uvi2uG7zCU1zG59-0-5f0a610a21f097296e6515c763217ed0)
(3)作图程序:chap1_8plot.m
![](https://epubservercos.yuewen.com/49A0DC/26947284307535106/epubprivate/OEBPS/Images/45295_35_2.jpg?sign=1739001011-ekGqIH3jzofRIhWbZgxdNCxCdjMbZQFq-0-e3dc79ad9848e7bee3e58fd73fd3b909)