课程论文
数字PID控制器设计 |
学生成绩: | |||
学生学号: | 20153050 | ||
学生姓名: | 赵付泽 | ||
学生专业: | 控制工程 | ||
课程名称: | 数字控制技术 | ||
任课教师: | 王英 | ||
提交日期: | 2015 年 | 1 月 | 7 日 |
大连交通大学研究生学院 |
摘要
本文在完成计算机控制学习的基础上结合自动控制原理的学科知识,自拟题目,利用计算机控制系统的知识,借助MATLAB,完成对自拟系统的分析和PID控制器的设计,并将硬件电路画出。
关键词:计算机控制,PID控制器,MATLAB
一﹑前言
设单位反馈系统的开环传递函数为,设计数字PID控制器,使系统的稳态误差不大于0.1,超调量不大于20%,调节时间不大于0.5s。并采用位置算法实现该PID控制器。
二﹑设计原理
PID控制是最早发展起来的经典控制策略,是用于过程控制最有效的策略之一。由于其原理简单.技术成熟,在实际应用中较易于整定,在工业控制中得到了广泛的应用。它最大的优点是不需了解被控对象精确的数学模型,其需在线根据系统误差段误差的变化率等简单参数,经过经验进行调节器参数在线整定,即可取得满意的结果。具有很大的适应性和灵话性。PID控制中的积分作用可以减少稳态误差,但另一方面也容易导致积分饱和,使系统的超调量增大。微分作用可提高系统的响应速度,但其对高频干扰特别敏感,甚至会导致系统失稳。所以,正确计算PID控制器的参数,有效合理地实现PID控制器的设计,对于PID控制器在过程控制中的广泛应用具有重要的理论和现实意义。
在典型PID控制系统中.PID控制器分别对误差信号E(t)进行比例、积分与微分运算.其结果的加权和集成系统的控制信号u(t),送给对象模型加以控制。
PID控制器的数学描述为:(2.1)
其传递函数可表示为: (2.2)
从根本上讲,设计PID控制器也就是确定其比例系数Kp、积分系数Ti和微分系数Td。,这三个系数取值的不同,决定了比例、积分和微分作用的强弱。控制系统的整定就是在控制系统的结构已经确定、控制仪表和控制对象等处在正常状态的情况下.适当选择控制器的参数使控制仪表的特性和控制对象的特性相配合.从而使控制系统的运行达到最佳状态,取得最好的控制效果。
位置式PID控制算法。由于计算机控制是一种采样控制,它只能根据采样时刻的偏差值计算控制量,需要进行离散化处理。现以一系列的采样时刻点kT代表连续时间t,以和式代替积分,以增量代替微分,则可以作近似变换;
图1
由于计算机控制是一种采样控制系统,它只能根据采样时刻的偏差值计算控制量。因此,(2.2)式中的积分和微分项不能直接使用,需要进行离散化处理。现令T为采样周期,以一系列的采样时刻点kT代表连续时间t,以累加求和近似代替积分,以一阶后向差分近似代替微分,做如下的近似变换:
t=KT (2.3)
(2.4)
(2.5)
其中,T为采样周期,e(k)为系统第k次采样时刻的偏差值,e(k-l)为系统第(k-l)次采样时刻的偏差值,k为采样序号,k=0,1,2,…。
将上面的(2.4)式和(2.4)式代入(2.2)式,则可以得到离散的PID表达式
(2.6)
如果采样周期了足够小,该算式可以很好的逼近模拟PID算式,因而使被控过与连续控制过程十分接近。通常把(2.6)式称为PID的位置式控制算法。若在(2.6)式中,令:
(称为积分系数) ; (称为微分系数)
则
(2.7)
(2.7)式即为离散化的位置式PID控制算法的编程表达式。可以看出,每次输出与过去的所有状态都有关,要想计算u(k),不仅涉及e(k)和e(k-l),且须将历次e(j)相加,计算复杂,浪费内存。下面,推导计算较为简单的递推算式。为此,对(2.7)式作如下的变动:
考虑到第(k-l)次采样时有
(2.8)
使(2.7)式两边对应减去(2.8)式,得
整理后的
(2.9)
其中,,(2.9)式就是PID位置式得递推形式。
如果令则
(2.10)
式中的同(2.10)式中的一样。
因为在计算机控制中、、都可以事先求出,所以,实际控制时只须获得e(k)、e(k-l)、e(k-2)三个有限的偏差值就可以求出控制增量。由于其控制输出对应执行机构的位置的增量,故(2.10)式通常被称为PID控制的增量式算式。
三﹑数字PID参数整定
利用扩充临界比例度法选择数字PID参数,扩充临界比例度法是以模拟PID调节器中使用的临界比例带法为基础的一种数字PID参数的整定方法。其整定步骤如下:;
1.选择一个足够短的采样周期T。通常选择采样周期为被控对象纯滞后时间的1/10。
2.在纯比例的作用下,给定输入阶跃变化时,逐渐加大比例作用Kp(即减小比例带),直至系统出现等幅震荡,记录比例增益Kc,及振荡周期Tc 。Kc成为临界振荡比例增益(对应的临界比例带),Tc成为临界振荡周期。
在MATLAB下输入如下程序:
sysc=tf([1],[1/150,36/150,185/150,1]);
p=[20:1:45];
for i=1:length(p);
sysc0=feedback(p(i)*sysc,1);
step(sysc0),hold on
end;
axis([0,10,0,2.3])
得到如下图所示图形:
图2
调整程序参数p=[40:1:45]进一步精确得Kc约为43.2,Tc约为0.5,观察控制系统的响应特性。在MATLAB下输入如下程序:
sysc=tf([1],[1/150,36/150,185/150,1]);
p=[40:1:45];
for i=1:length(p);
sysc0=feedback(p(i)*sysc,1);
step(sysc0),hold on
end;
axis([0,10,0,2.3])
得到如下图所示图形:
图3
扩充临界比例度法选择数字PID参数的计算公式如下表所示:
3.选择控制度。控制度的定义为数字调节器和模拟调节所对应的过度过程的误差平方积分之比,即控制度=式中,为数字调节器的控制误差;e为模拟调节器的控制误差.当控制度为1.05时,数字调节器鱼模拟调节器的控制效果相当;当控制度为2时,数字调节器比模拟调节器的控制效果差一倍;在此选控制度为1.05。
4.按选择的控制度指标及Tc,Kc实验测得值,由查表选择相应的计算公式计算采样周期:T=0.007,Kp=27,Ti=0.245,Td=0.07; =0.77, =270, Ki=0.23
图4
四﹑建立simulink模型
1.采用后向差分离散化,可得:
=
在Matlab-simulink中建立如下模型
Scope中得到阶跃响应曲线如下所示:
图5
由图可见超调量较大减小Kp的值,增大Kd用试凑法得到一组数据:T=0.014,Kp=15,Ki=0.23 ,Kd=250
2.采用后向差分离散化。Matlab-simulink中建立如下模型:
Scope中阶跃响应图形如下
图6
由上图可看出上组数据满足了任务要求:系统的稳态误差不大于0.1,超调量不大于20%,调节时间不大于0.5s。
五MCS-51单片机实现控制器的设计
控制系统结构框图如下:
图7
1.器件选择
主控制器选用熟悉的ATc51单片机。由于没有对精度的要求,选用常见的8位AD/DA芯片ADC0809和DAC0832。由于系统要求采样周期0.015ms,而上述AD、DA芯片转化时间很短(ADC0809约100us,DAC0832约1us),因此上述芯片满足要求。
2.电路设计
1、A/D芯片与单片机连接:单片机与AD、DA采用总线方式连接,锁存器74LS373进行地址锁存。采用统一编址方式访问。地址线A0,A1,A2,A3分别于A,B,C,ALE连接,通过地址选择IN0口为输入。
2、DAC0832与单片机连接如下:电流输出,经双运放转化,输出为双极性。
系统总电路如下:
3.程序设计
程序采用汇编语言编写
主程序流程图、中断服务程序、PID算法流程图如下:
开始 |
输入给定值r(k) |
初始化 |
调用AD转换程序
测出输出值c(k) |
计算偏差e(k)=r(k)-c(k) |
Up(k)=Kb*e(k)
Ui(k)=Ki[e(k)+Ui(k-1)]
Ud(k)=Kd[e(k)-e(k-1)] |
U(k)=Up(k)+Ui(k)+Ud(k)
e(k)→e(k-1)
Ui(k)→Ui(k-1) |
调用DA转换程序
输出控制量u(k) |
Y N
程序设计如下:
R EQU 31H ;给定值(阶跃响应)
KP EQU 32H ;存放kp
KI EQU 33H ;存放256*ki
KD EQU 34H ;存放kd
E0 EQU 35H ;存放e(k)
E1 EQU 36H ;存放e(k-1)
UPL EQU 37H ;Up(k)的低8位
UPH EQU 38H ;Up(k)的高8位
UIL EQU 39H ;Ui(k-1)的低8位
UIH EQU 3AH ;Ui(k-1)的高8位
DAT EQU 3BH ;采样AD数据c(k)
UK EQU 3CH ;PID输出
ORG 0000H
AJMP MAIN
ORG 000BH
LJMP ITT0
ORG 0100H
MAIN: MOV SP,#60H
MOV R0,#31H
MOV R1,0CH
CLR A
LOOP: MOV @R0,A ;31H~3CH清0
INC R0
DJNZ R1,LOOP
MOV R,#01H ;给定阶跃值1
MOV KP,#16 ;比例系数kp=16
MOV KI,#3AH ;积分系数256*ki=3AH 以整数输入
MOV KD,#250 ;微分系数kd=250
MOV TMOD,#01H ;设置定时器0方式1工作(16位定时器)
MOV TL0,#0C9H ;定时14ms
MOV TH0,#4FH
SETB TR0
SETB EA
HERE: AJMP HERE
ITT0: MOV TL0,#0C9H ;重装初值
MOV TH0,#4FH
ACALL ADC ;调用AD转换程序
ACALL PID ;调用PID控制程序
ACALL DAC ;调用DA转换程序
RETI
ADC: MOV DPTR,#0F8H ;ADC0809模拟输入通道IN0的地址
MOVX @DPTR,A ;启动AD转换
ACALL DELAY ;软件延时1s,等待转换结束
MOVX A,@DPTR ;读取转换结果
MOV DAT,A ;转换结果保存,以便PID控制程序使用
DAC: MOV R0,#0F0H ;DAC0832地址F0H送R0
MOV A, UK ;PID输出
MOVX @R0,A ;启动DA转换
RET
DELAY: PUSH PSW
PUSH ACC
SETB RS0 ;选第1组为当前工作寄存器区
CLR RS1
MOV R1,#05H
LOOP1: MOV R0,#H
LOOP2: DJNZ R0,LOOP2 ;延时时间为(100*2+1+2)*5=1000us=1ms
DJNZ R1,LOOP1
POP ACC
POP PSW
RET
PID: MOV B,DAT
MOV A,R
CLR C
SUBB A,B ;求当次偏差e(k)=r-c(k)
MOV E0,A ;存e(k)
MOV B,KP
MUL AB ;求up(k)=kp*e(k)
MOV UPL,A ;保存up(k)的低8位
MOV UPH,B ;保存up(k)的高8位
MOV A,E0
MOV B,KI
MUL AB ;计算256ki*e(k)
MOV R1,B ;256ki*e(k)低8位丢掉,高8位->R1,为ki*e(k)
MOV R2,UIL ;ui(k-1)低8位->R2
MOV R3,UIH ;ui(k-1)高8位->R3
MOV A,R1 ;ki*e(k)->A
ADD A,R2 ;计算ui(k)低8位=ki*e(k)+ui(k-1)低8位
MOV R0,A ;暂存ui(k)低8位->R0
CLR A
ADDC A,R3 ;ui(k)高8位=ui(k-1)低8位+低位进位
MOV R1,A ;ui(k)高8位->R1
MOV UIL,R0 ;存ui(k)低8位
MOV UIH,R1 ;存ui(k)高8位
MOV A,E0 ;e(k)->A
MOV R0,E1 ;暂存e(k-1)->R0
MOV E1,A ;e(k)->e(k-1)为下次循环做准备
CLR C
SUBB A,R0 ;计算e(k)-e(k-1)
MOV B,KD
MUL AB ;计算ud(k)=kd*[e(k)-e(k-1)]
MOV R0,A ;暂存ud(k)低8位->R0
MOV R1,B ;暂存ud(k)高8位->R1
MOV A,R0
ADD A,UIL ;ui(k)低8位+ud(k)低8位->A
MOV R0,A ;暂存ui(k)低8位+ud(k)低8位->R0
MOV A,R1
ADDC A,UIH ;ui(k)高8位+ud(k)高8位+进位位->A
MOV R1,A ;暂存ui(k)高8位+ud(k)高8位->R0
MOV A,UPL
ADD A,R0 ;ui(k)低8位+ud(k)低8位+up(k)低8位->A
MOV R0,A ;暂存ui(k)低8位+ud(k)低8位+up(k)低8位->R0
MOV A,UPH
ADDC A,R1 ;ui(k)高8位+ud(k)高8位+up(k)高8位+进位位->A
MOV UK,A ;存ui(k)高8位+ud(k)高8位+up(k)高8位+进位位作为最后结果
RET
END