直流电机PID闭环数字控制器设计 下载本文

广西大学实验报告纸

姓名:指导老师:成绩: 学院:专业:班级

实验内容:直流电机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)