广西大学实验报告纸
姓名:指导老师:成绩: 学院:专业:班级
实验内容:直流电机PID闭环数字控制器设计 2014年 其他组员:
实验时间:2014年10月28号
实验方式:课外在MATLAB平台上完成实验。 实验目的:
1、掌握线性系统状态空间标准型、解及其模型转换。 实验设备与软件:
1、 MATLAB数值分析软件 实验原理:
1、求矩阵特征值
[V J]=eig(A),cv= eig(A) 2、求运动的方法
(1)利用Laplace/Z逆变换----适合于连续/离散线性系统;
(2)用连续(离散)状态转移矩阵表示系统解析解----适合于线性定常系统; (3)状态方程的数值积分方法----适合于连续的线性和非线性系统; (4)利用CotrolToolBox中的离散化求解函数----适合于LTI系统; (5)利用Simulink环境求取响应----适于所有系统求取响应。 1、PID调节原理
比例调节作用:按比例反应系统的偏差产生调节作用。比例作用大,可以加快调节,减少误差,但是过大的比例,使系统的稳定性下降,甚至造成系统不稳定。
积分调节作用:消除稳态误差。积分作用的强弱取决与积分时间常数Ti,Ti越小,积分作用就越强;反之,Ti大则积分作用弱
微分调节作用:微分作用反映系统偏差信号的变化率,产生超前的控制作用。在偏差还没有形成之前,已被微分调节作用消除,改善系统的动态性能。在微分时间选择合适情况下,可以减少超调,减少调节时间。微分作用不能单独使用。
按偏差的PID是过程控制中应用最广泛的一种控制规则,该调解器是一种线性调节器,。PID的控制原理表达式为: ?1tde(t)?u(t)?Kp?e(t)??e(t)dt?Td? Ti0dt?? 比比P
y(t)r(t)e(t)u(t) 比比I比比
比比D
图1 PID控制原理图
2、PID算法的数字实现 (1)标准PID算法:
在输出不振荡时,增大比例增益,减小积分时间常数,增大微分时间常数。因本实验采用的是一种离散时间的离散控制系统,因此为了用计算机实现PID控制必须将其离散化,故可用数字形式的差分方程来
n代替
u(n)?Kpe(n)?Ki?e(j)?Kd?e(n)?e(n?1)?(1)
式中积分系数Ki?TTdKp微分系数Kd?Kp,其中T--采样周期;u(n)--第n次采样时计算机输出;TiTj?0e(n)--第n次采样时的偏差值;e(n?1)--第n-1次采样时的偏差值.
可将上式转化成增量的形式:
? u(n)?u(n)?u(n?1)?Kp?e(n)?e(n?1)??Kie(n)?Kd?e(n)?2e(n?1)?e(n?2)?(2)
(2)积分分离PID控制算法
与上述标准算法比,该算法引进积分分离法,既保持了积分的作用,又减小了超调量,使控制性能得到较大的改善。令积分分离法中的积分分离阈值为E0,则 ?0,e(n)?E0n?u(n(3) )?Kpe(n)?Ki??e(j)?Kd?e(n)?e(n?1)?Ki???Tj?0?KpT,e(n)?E0 ?i(3)不完全微分PID算法
微分作用容易引起高频干扰,因此通常在典型PID后串接一个低通滤波器来抑制高频干扰,微分作用能在各个周期按照偏差变化趋势均匀的输出,真正起到微分的作用,改善系统性能。这样得到的PID算法成为不完全微分PID算法,表达式为:
u(n)?au(n?1)?(1?a)u?(n)(4)
??TdTna?Tf(Tf?T)式中 ? (un)?Kp?e(n)??e(j)??e(n)?e(n?1)????Tij?0T??
3、直流电机闭环调速系统原理
中断子程序数字化定时IRQ6CPU程序开关控制 控制对象数字设e(n)数字PIDu(n)u(n)u(t)标度变换DA0832驱动电路直流电机 定值算法 B9-IRQ6B9-OUT1\\1通道作5ms定时器 8253A0+2通道作计数器
读8253A2通 道计数值CE CPU程序脉冲信号实际转速CPU8088光栅盘PULSE 数据处理光电断续器B9-IRQ7中断子程序IRQ7
—(4)被模拟对象模型描述
图2 直流电机闭环调速系统原理
该闭环调速实验中,直流电机对象可通过实验测得其空载时的标称传递函数如下: 482.7?0.08s
W(s)?e0.3s?1(5)
实验过程与分析
依据电机模型公式(5),在simulink中搭建直流电机闭环调速的仿真模型,分析PID对对象的影响,并选择一组较好的PID参数为在实验操作提供可行依据,搭建的模型如下:
比比比比比比/min比比比比比比比比比比比比比比比比_
其中PID模块的封装为:
K1K2PIDK3ZOH比比
(1)实验程序 标准PID程序:
intpid(intP,intI,intD,int E) {
int KI,KD,KP,U; KP=P;
KI=5*KP/I; //求出积分系数KI KD=D*P/5; //求出微分系数Kp II=II+E; //求出积分 U=KP*E+KD*(E-E0)+KI*II; E0=E; return U; }
积分分离PID程序:
int pid(int P,int I,int D,int E) {
int KI,KD,KP,U,fa; KP=P;
KI=5*KP/I; //求出积分系数KI KD=D*KP/5; //求出微分系数Kp II=II+E; //求出积分 if(E<0)