![先进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=1739285123-NifUZ6pDdn6CwZ9QB6gfth5xOkn82Wed-0-6a05de3958c8d2b4eeff1aba48abce57)
式中,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=1739285123-Jt0RnKH7bmv3tFEZzF8FHeo9rGoWVIFg-0-e6acfeb34c63b3be94bcad9c08d42c33)
图1-10 采用M语言的PID正弦跟踪
〖仿真程序〗
(1)控制主程序:chap1_6.m
![](https://epubservercos.yuewen.com/49A0DC/26947284307535106/epubprivate/OEBPS/Images/45295_31_1.jpg?sign=1739285123-hg4p6UHZnnoU4vWcJNn198TM97euFj7u-0-9b5487525e6e6f7e9fa268f4af6d22df)
(2)连续对象子程序:chap1_6plant.m
![](https://epubservercos.yuewen.com/49A0DC/26947284307535106/epubprivate/OEBPS/Images/45295_31_2.jpg?sign=1739285123-ohFYMXLEBqDtg6iGk58dvbQekYMS3jNA-0-10c58292f02afd1d896ca115572f89b6)
![](https://epubservercos.yuewen.com/49A0DC/26947284307535106/epubprivate/OEBPS/Images/45295_32_1.jpg?sign=1739285123-kFyAY96DABsdl10izDsSvJ5FmwNhCGEc-0-825104ab1dd76114e35cf60210f28a00)
【仿真之二】 采用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=1739285123-Z8k8uQDRCouHD3mdYIEHCp96XJip04aI-0-d0add0d03e04ee64d98e050ae179bfbf)
图1-11 采用Simulink模块的PID正弦跟踪
〖仿真程序〗
(1)Simulink主程序:chap1_7.mdl
![](https://epubservercos.yuewen.com/49A0DC/26947284307535106/epubprivate/OEBPS/Images/45295_32_4.jpg?sign=1739285123-bIn70AzIIyg4Olo0xvSDLeHgjq1nTcr0-0-863ac13d97df4df1066b8032298f43dc)
(2)控制器子程序:chap1_7ctrl.m
![](https://epubservercos.yuewen.com/49A0DC/26947284307535106/epubprivate/OEBPS/Images/45295_32_5.jpg?sign=1739285123-zDa7kE6KaP0U3YuiP8Jiai65tYbpeIIv-0-be681fd016c93194b618e189592a91ac)
![](https://epubservercos.yuewen.com/49A0DC/26947284307535106/epubprivate/OEBPS/Images/45295_33_1.jpg?sign=1739285123-7olCfjHS3JhdPSPJlxlt7z7ChTAipB0j-0-dba9abe1dbd54a7c8a3c689547f415d5)
(3)作图程序:chap1_7plot.m
![](https://epubservercos.yuewen.com/49A0DC/26947284307535106/epubprivate/OEBPS/Images/45295_33_2.jpg?sign=1739285123-vtRkpw5AFVCSDhgYwo85KELrILnZ6Ixu-0-6814f3ae5d2a0c0253191e55c4d08d3a)
【仿真之三】 采用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=1739285123-6zx2WFs4HtZKdhlc7f7bO6U2KQUEhtvQ-0-3151b8dd44c11463a6c4a95dfdf116a9)
图1-12 采用S函数进行仿真的PID正弦跟踪
〖仿真程序〗
(1)Simulink主程序:chap1_8.mdl
![](https://epubservercos.yuewen.com/49A0DC/26947284307535106/epubprivate/OEBPS/Images/45295_34_1.jpg?sign=1739285123-ArNNxDR7AlP86mrjzlfMQGMOtEXJU2uw-0-41bfbac493fcc388dba47d5df0a5b421)
(2)PID控制器程序:chap1_8s.m
![](https://epubservercos.yuewen.com/49A0DC/26947284307535106/epubprivate/OEBPS/Images/45295_34_2.jpg?sign=1739285123-OsnRPNr1rYUr9hc84320scbhPD5OCOPf-0-71f5cc71365f0f23aed55be00bf435b8)
![](https://epubservercos.yuewen.com/49A0DC/26947284307535106/epubprivate/OEBPS/Images/45295_35_1.jpg?sign=1739285123-yOZAVoqmKvLH6qjataOTeELMeaoT9GRk-0-3856bc093706e2efa11a156511969a0b)
(3)作图程序:chap1_8plot.m
![](https://epubservercos.yuewen.com/49A0DC/26947284307535106/epubprivate/OEBPS/Images/45295_35_2.jpg?sign=1739285123-zQ436C229L9HXUfGubmceKZnOkD0mYhW-0-db5a4efeaa5e4436863eafe2c3bfc43c)