![先进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=1738885463-f5VvfU7qLAe8plVhhsmbDnyoMrmXbS6P-0-51026081fb92c0a2507915136dd7af3b)
式中,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=1738885463-6YffxSUPkdmn66AbRCKUI1zU5g5RSvhw-0-b3542529473bb02ab9b37f5a9153cbc1)
图1-10 采用M语言的PID正弦跟踪
〖仿真程序〗
(1)控制主程序:chap1_6.m
![](https://epubservercos.yuewen.com/49A0DC/26947284307535106/epubprivate/OEBPS/Images/45295_31_1.jpg?sign=1738885463-WiKOGaZWjUPyhJyYiyfOK4gNGTlAeKke-0-639bec3ca13ba5dd2bbd890027adc9d2)
(2)连续对象子程序:chap1_6plant.m
![](https://epubservercos.yuewen.com/49A0DC/26947284307535106/epubprivate/OEBPS/Images/45295_31_2.jpg?sign=1738885463-zGGo50LitBkF0dwfUlwR3I5c13X6epZX-0-2bf0a145bfb8d534ab5017dfae6ffd06)
![](https://epubservercos.yuewen.com/49A0DC/26947284307535106/epubprivate/OEBPS/Images/45295_32_1.jpg?sign=1738885463-bXZ7dn9L20rlMsdOfRVdhIbr8eUkazHI-0-883408402276b8aa97aa1ad9c92b547e)
【仿真之二】 采用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=1738885463-mvwtgCVN8ew4jWGm2H2xb1UPpKLOdx93-0-cda6f1a796ebc05469bb3d68dd24c4a9)
图1-11 采用Simulink模块的PID正弦跟踪
〖仿真程序〗
(1)Simulink主程序:chap1_7.mdl
![](https://epubservercos.yuewen.com/49A0DC/26947284307535106/epubprivate/OEBPS/Images/45295_32_4.jpg?sign=1738885463-U78mW7k9JkkKgVqh13hp1MEoEMJroiXn-0-ab415597501771734bea75ab7fa0e858)
(2)控制器子程序:chap1_7ctrl.m
![](https://epubservercos.yuewen.com/49A0DC/26947284307535106/epubprivate/OEBPS/Images/45295_32_5.jpg?sign=1738885463-0roUdGD7etlmf6mfw5vQyJhBiyZwMy5L-0-4090ef4bbfc0698290324122669cc64d)
![](https://epubservercos.yuewen.com/49A0DC/26947284307535106/epubprivate/OEBPS/Images/45295_33_1.jpg?sign=1738885463-yflFn73l9bfoKWmKFm9ZJhW48w7hZsTG-0-437d37ed9cae86e43ea1d8d956f59413)
(3)作图程序:chap1_7plot.m
![](https://epubservercos.yuewen.com/49A0DC/26947284307535106/epubprivate/OEBPS/Images/45295_33_2.jpg?sign=1738885463-0uqwtk4tT9Xj3Wg95nT9DNVdndE6o3bz-0-f4992f69815b0e0e15a8de909ee2ab14)
【仿真之三】 采用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=1738885463-PZFh7kMbBGUIpgqvnr7bvTyMxLtQtsrk-0-a4751dac1af445b09e9bd995bef2d2ef)
图1-12 采用S函数进行仿真的PID正弦跟踪
〖仿真程序〗
(1)Simulink主程序:chap1_8.mdl
![](https://epubservercos.yuewen.com/49A0DC/26947284307535106/epubprivate/OEBPS/Images/45295_34_1.jpg?sign=1738885463-CCBVsL18vRF6MimKcLAuRhSPWIYL9QYG-0-44d410794284f8cb4a299ea2531f95c2)
(2)PID控制器程序:chap1_8s.m
![](https://epubservercos.yuewen.com/49A0DC/26947284307535106/epubprivate/OEBPS/Images/45295_34_2.jpg?sign=1738885463-KO7sbFd2zYsvSJsYQBbdp19NpDDfieJj-0-12ed8854afa89dde299b5b57abc56347)
![](https://epubservercos.yuewen.com/49A0DC/26947284307535106/epubprivate/OEBPS/Images/45295_35_1.jpg?sign=1738885463-KkdNPdJJJ421A0c1SUsvbOHmN4qSoSCU-0-3b7f8353d1c1d191d338f960e1163663)
(3)作图程序:chap1_8plot.m
![](https://epubservercos.yuewen.com/49A0DC/26947284307535106/epubprivate/OEBPS/Images/45295_35_2.jpg?sign=1738885463-u22uyXN0HTmNhaU8trj9s1YjrLFcagPa-0-b3ae41a36be2e67954a759527f3cb976)