找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 8778|回复: 1
打印 上一主题 下一主题
收起左侧

凑试法 扩充临界比例度法 扩充响应曲线法整定PID参数单片机源程序 带死区PID算法

[复制链接]
跳转到指定楼层
楼主
ID:275622 发表于 2018-1-13 17:19 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
学过的单片机实验内容及程序
计算机控制技术综合性实验指导书-电气(单片机实验
编写:蒙志强
重庆交通大学机电与汽车工程学院
机电与自动化控制实验室
2017年3月1日
目录
项目一、凑试法整定PID参数
项目二、带死区PID算法
项目三、扩充临界比例度法PID参数
项目四、扩充响应曲线法整定PID参数

                                          项目1  凑试法整定PID参数
一、实验目的
1.了解PID参数对系统性能的影响。
2.学习凑试法整定PID参数。
3.掌握积分分离法PID控制规律
二、实验设备
PC机一台,TD-ACC+实验系统一套,i386EX系统板一块
三、实验原理和内容

图3.2-1

图3.2-1是一个典型的PID闭环控制系统方框图,其硬件电路原理及接线图可设计如下,图中画“○”的线需用户在实验中自行接好,对象需用户在运放单元搭接。

上图中,控制计算机的“OUT1”表示386EX内部1#定时器的输出端,定时器输出的方波周期=定时器时常,“IRQ7”表示386EX 内部主片8259的7号中断,用作采样中断,“DIN0”表示386EX的I/O管脚P1.0,在这里作为输入管脚用来检测信号是否同步。

这里,系统误差信号E通过模数转换单元“IN7”端输入,控制机的定时器作为基准时钟 (初始化为10ms),定时采集“IN7”端的信号,并通过采样中断读入信号E的数字量,并进行PID计算,得到相应的控制量,再把控制量送到数模转换单元,由“OUT1”端输出相应的模拟信号,来控制对象系统。

本实验中,采用位置式PID算式。在一般的PID控制中,当有较大的扰动或大幅度改变给定值时,会有较大的误差,以及系统有惯性和滞后,因此在积分项的作用下,往往会使系统超调变大、过渡时间变长。为此,可采用积分分离法PID控制算法,即:当误差e ( k ) 较大时,取消积分作用;当误差e ( k ) 较小时才将积分作用加入。

讨论PID参数对系统性能的影响:

(1) 增大比例系数KP一般将加快系统的响应,在有静差的情况下有利于减小静差。但过大的比例系数会使系统有较大的超调,并产生振荡,使系统稳定性变坏。

(2) 增大积分时间参数TI有利于消除静差、减小超调、减小振荡,使系统更加稳定,但系统静差的消除将随之减慢。

(3) 增大微分时间参数TD有利于加快系统响应,使超调量减小,系统稳定性增加,但系统对扰动的抑制能力减弱,对扰动有较敏感的响应。

在调整参数时,可以使用凑试法。参考以上参数对控制过程的影响趋势,对参数实行“先比例,后积分,再微分”的步骤。

(1) 首先整定比例部分。将比例系数KP由小变大,并观察相应的系统响应,直到响应曲线超调小、反应快。如果系统没有静差,或者静差小到允许的范围内,那么只需比例调节器即可。

(2) 如果在比例调节的基础上系统的静差不能满足要求,则须加入积分作用。整定时首先置积分时间TI为一较大值,并将第一步整定得到的比例系数KP缩小 (如80%),然后减小积分时间,使静差得到消除。如果动态性能 (过渡时间短) 也满意,则需PI调节器即可。

(3) 若动态性能不好,则需加入微分作用。整定时,使微分时间TD从0变大,并相应的改变比例系数和积分时间,逐步凑试,直到满意结果

由于PID三个参数有互补作用,减小一个往往可由几个增大来补偿,因此参数的整定值不唯一,不同的参数组合完全有可能得到同样的效果。

四、实验步骤

1.参考流程图3.2-3编写实验程序,检查无误后编译、链接。

2.按照实验线路图3.2-2接线,检查无误后开启设备电源。

3.调节信号源中的电位器及拨动开关,使信号源输出幅值为2V,周期6S的方波。确定系统的采样周期以及积分分离值。

4.装载程序,将全局变量TK (采样周期)、EI (积分分离值)、KP (比例系数)、TI (积分系数)和TD (微分系数) 加入变量监视,以便实验过程中观察和修改。

5.运行程序,将积分分离值设为最大值7FH (相当于没有引入积分分离),用示波器分别观测输入端R和输出端C。

6.如果系统性能不满意,用凑试法修改PID参数,直到响应曲线满意,并记录响应曲线的超调量和过渡时间。

7.修改积分分离值为20H,记录此时响应曲线的超调量和过渡时间,并和未引入积分分离值时的响应曲线进行比较。

8.将6和7中的较满意的响应曲线分别保存,在画板、PHOTOSHOP中处理后粘贴到WORD中,方便形成实验报告。

五、实验代码:

功能描述:实现数字PID调节器的功能。

  1. *****************************************/
  2. #include <reg51.h>
  3. #include <absacc.h>
  4. #include <math.h>
  5. /*****************************************
  6. 宏定义
  7. *****************************************/
  8. #define uchar unsigned char
  9. #define uint  unsigned int
  10. #define ADC_7 XBYTE[0x0600]                                          //定义模数转换IO地址
  11. #define DAC_1 XBYTE[0x0640]                                          //定义D/A第一路的IO地址

  12. /*****************************************
  13. 全局变量定义
  14. *****************************************/
  15. sbit  str  = P1^7;                                                                      //定义A/D启动信号
  16. sbit  DIN0 = P1^0;                                                                      //声明同步信号
  17. uint  data time;                                                                      //声明变量,用于定时
  18. uchar data t0_h,t0_l;                                                        //用于存储定时器0的初值
  19. char TK=5;                                                                                                  //声明采样周期变量,//采样周期=TK*10ms
  20. char TC;                                                                                                  //TK的变量
  21. float kp=0.20;                                                                                    //比例系数
  22. char ti=30;                                                                                                  //积分系数
  23. char td=1;                                                                                                  //微分系数
  24. char IBAND=32;                                                                                    //积分分离值
  25. char EK;                                                                                                  //当前采样的偏差值
  26. char EK_1;                                                                                                  //上一次采样的偏差值
  27. char AEK;                                                                                                  //偏差的变化量
  28. char UK;                                                                                                  //当前时刻的D/A输出
  29. int  ZEK;
  30. /*****************************************
  31. 主函数
  32. *****************************************/
  33. void main(void)
  34. {              
  35.               TMOD = 0x01;
  36.               time = 10;                                                                                                  //定时10ms
  37.               t0_h  = (65536-500*time)/256;                            //计算定时器0初值
  38.               t0_l  = (65536-500*time)%256;
  39.               t0_l = t0_l+20;                                                                                    //修正因初值重装而引起的定时误差
  40.               TH0  = t0_h;
  41.               TL0  = t0_l;
  42.               IT1  = 1;                                                                                                  //边沿触发中断
  43.               EX1  = 1;                                                                                                  //开外部中断1
  44.               ET0  = 1;                                                                                                  //开定时中断0
  45.               TR0  = 1;                                                                                                  //启动定时器

  46.               TC   = 1;
  47.               DAC_1= 0x80;                                                                                    //D/A清零
  48.               EK=EK_1=0;                                                                                                  //变量清零
  49.               AEK=UK=0;
  50.               ZEK=0;

  51.               EA              = 1;                                                                                                  //开总中断
  52.               while(1);
  53. }

  54. /**********************************************
  55. 函数名:INT1
  56. 功能  :1号外部中断服务程序
  57. 参数  :无*
  58. 返回值:无 *
  59. ***********************************************/
  60. void int1() interrupt 2 using 2
  61. {              float P,D,I,TEMP;

  62.               DIN0 = 1;                                                                                                  //读取输入前,先输出高电平
  63.   if(DIN0)                                                                                                                //判同步信号到否
  64.               {
  65.                   EK=EK_1=0;                                                                                    //变量清零
  66.                             UK=AEK=0;
  67.                   ZEK=0;
  68.                   DAC_1 =0x80;                                                                      //D/A输出零
  69.                             TC=1;
  70.               }
  71.   else
  72.     {
  73.                             TC--;                                                                                                  //判采样周期到否
  74.                   if(TC==0)
  75.                                {
  76.                                           EK  = ADC_7-128;                                          //采样当前的偏差值,并计算偏差的变化量
  77.                                           AEK =EK-EK_1;
  78.                                           EK_1=EK;
  79.                                          
  80.                                          
  81.                                  if(abs(EK)> IBAND)  I=0;              //判积分分离值
  82.                                  else
  83. …………
  84. …………限于本文篇幅 余下代码请从51黑下载附件…………

复制代码

六、实验结果及分析


项目2   带死区PID控制

一、实验目的

掌握带死区的PID控制规律

二、实验设备

PC机一台,TD-ACC+实验系统一套,i386EX系统板一块

三、实验原理及内容

1.在计算机控制系统中,某些系统为了避免过于频繁的控制动作,为了消除由于频繁动作所引起的振荡,通常采用带死区的PID控制系统,该系统实际上是一个非线性控制系统。其基本思想是:可以按实际需要设置死区B,当误差的绝对值B时,P (K)为0,U (K)也为常值,实际应用中,常值是由经验值来确定的;当>B时,P (K)= , U (K)以PID运算的结果输出。

图3.3-1

2.图3.3-1所示的方框图,其硬件电路原理及接线图见图3.3-3。

图3.3-3

四、实验步骤

1.参照图3.3-2的流程图编写实验程序,检查无误后编译、链接。

2.按照实验线路图3.3-3接线,检查无误后开启设备电源。调节信号源中的电位器和拨动开关,使信号源输出幅值为4V,周期6S的方波。

3.装载程序,将全局变量TK (采样周期)、EI (积分分离值)、KP (比例系数)、TI (积分系数)、TD (微分系数)、PT(死区变量值) 和 CONST(常值)加入变量监视,以便实验过程中观察和修改。

4.运行程序,将死区宽度B (PT) 设为最小值00H (相当于没有引入死区控制),用示波器分别观测控制量输出端U (即数模转换单元的“OUT1”端) 和对象输出端C。

5.如果系统性能不满意,用凑试法修改PID参数,直到响应曲线满意。

6.修改死区宽度B (PT)为02H,用示波器分别观测控制量输出端U (即数模转换单元的“OUT1”端) 和对象输出端C,记录并和积分分离时的响应曲线进行比较



五、实验代码
功能描述:实现死区PID数字调节器,死区宽度和常值可根据实际情况进行修改

(源码见附件)

六、实验结果分析



项目3  扩充临界比例度法整定PID参数

一、实验目的

1.学习并掌握扩充临界比例度法整定PID参数。

二、实验设备

PC机一台,TD-ACC+实验系统一套,i386EX系统板一块

三、实验原理及内容

1、实验原理

扩充临界比例度法是对模拟调节器中的临界比例度法的推广,在工程实践中最常用,其参数整定步骤如下:

(1) 选择一个足够小的采样周期T,一般取系统纯滞后时间的1/10以下。

(2) 使系统闭环工作,只用比例控制,增大比例系数KP直到系统等幅振荡,记下此时的临界比例系数KPU和临界振荡周期TU (见图3.4-1)。

图3.4-1

(3) 选择控制度 (1.05~2.0)。控制度指数字调节器和模拟调节器控制效果之比。

(4) 根据控制度,查表3.4-1计算出采样周期T和KP、TI、TD。

表3.4-1

控制度

T

KP

TI

TD

1.05

0.014TU

0.63KPU

0.49TU

0.14TU

1.2

0.043TU

0.47KPU

0.47TU

0.16TU

1.5

0.09TU

0.34KPU

0.43TU

0.20TU

2.0

0.16TU

0.27KPU

0.40TU

0.22TU


2) 实验设计

图3.4-2是一个PID闭环控制系统的实验电路原理及接线图,图中画“○”的线需用户在实验中自行接好,对象需用户在运放单元搭接。其相应的程序流程图和3.2节中的图3.2-3是一样的,实验中的参数取值范围规定为:

参数名称

T

KP

TI

TD

取值范围

1~FFH

0~FFFFH

1~7FFFH

0~7FFFH

实际量纲

10~2550ms

0~1倍

10ms~327.67s

0ms~327.67s


图3.4-2

上图中,控制计算机的“OUT1”表示386EX内部1#定时器的输出端,定时器输出的方波周期=定时器时常,“IRQ7”表示386EX 内部主片8259的7号中断,用作采样中断,“DIN0”表示386EX的I/O管脚P1.0,在这里作为输入管脚用来检测信号是否同步。

本实验中,将针对该闭环系统应用临界比例度法来整定PID参数。

四、实验步骤

(1) 编写程序,检查无误后编译、链接并装载程序。

(2) 按照实验线路图3.4-2接线,调节信号源使其输出幅值为3V,周期6S的方波。

(3) 由于模拟对象的惯性时常约为250ms,取采样周期T=10ms。

(4) 装载程序,将全局变量TK (采样周期)、EI (积分分离值)、KP (比例系数)、TI (积分系数)和TD (微分系数)加入变量监视,以便实验过程中观察和修改。

(5) 运行程序且只用比例控制 (EI = 0,TD = 0),KP由小变大,使系统等幅振荡,记下此时的临界比例系数KPU和临界振荡周期TU。

(6) 查表3.4-1,选择控制度2.0,计算出采样周期T和KP、TI、TD。

(7) 将参数重新写入PID控制程序,运行程序并用示波器观测输入和输出,如果控制效果不太满意,可适当结合凑试法调整参数,直到满意为止。

五、实验代码

功能描述:利用此程序可以实现临界比例度法整定PID参数。


(源码见附件)


六、实验结果





项目4  扩充响应曲线法整定PID参数

一、实验目的

1.学习并掌握扩充响应曲线法整定PID参数。

二、实验设备

PC机一台,TD-ACC+实验系统一套,i386EX系统板一块

三、实验原理及内容

1 实验原理

扩充响应曲线法是模拟调节器的响应曲线法的一种扩充,也是一种常用的工程整定方法。其参数整定步骤如下:

(1) 使数字调节器不接入系统,让系统处于手动操作状态,当系统稳定在某一值处后,给对象一个阶跃输入。

(2) 用仪表记录下被调量在阶跃输入下的整个响应曲线,见图3.4-3。

图3.4-3

图中“”表示对象的时间常数;“”表示对象的纯滞后时常

(4) 根据所得的,查表3.4-2计算出采样周期T和KP、TI、TD

表3.4-2

控制度

T

KP

TI

TD

1.05

0.05

1.15

2.00

0.45

1.2

0.16

1.0

1.90

0.55

1.5

0.34

0.85

1.62

0.65

2.0

0.60

0.60

1.50

0.82


2) 实验设计

同样,图3.4-4也是一个PID闭环控制系统的实验电路原理及接线图,图中画“○”的线需用户在实验中自行接好,对象需用户在运放单元搭接。其相应的程序流程图和3.2节中的图3.2-3是一样的。本实验中,将针对该闭环系统应用扩充响应曲线法来整定PID参数。

图3.4-4中,控制计算机的“OUT1”表示386EX内部1#定时器的输出端,定时器输出的方波周期=定时器时常,“IRQ7”表示386EX 内部主片8259的7号中断,用作采样中断,“DIN0”表示386EX的I/O管脚P1.0,在这里作为输入管脚用来检测信号是否同步。

实验中,参考程序中的参数取值范围规定为:

参数名称

T

KP

TI

TD

取值范围

1~7FH

0~800H

1~1FFH

0~1FFH

实际量纲

10~1270ms

0~8倍

10ms~5110s

0ms~5110ms


图3.4-4

四、实验步骤

(1) 参照图3.4-5接线,调节器先不接入系统中。图中画“○”的线需用户在实验中自行接好,对象需用户在运放单元搭接。

图3.4-5

(2) 调节信号源使其“OUT”输出幅值为2V,周期12S的方波。

(3) 用示波器测量系统输出“C”,并记录下波形。在响应曲线最大斜率处作切线,用游标测量,作图求得滞后时间和对象时常。计算出/,查表3.4-2,控制度选择2.0时可求得数字调节器的KP、TI、TD以及采样周期T的初始值。

  • 按照图3.4-4接线,将数字调节器接入系统,将以上得到的参数KP、TI、TD和T重新写入程序中,然后编译、链接。

(5) 装载程序,将全局变量TK (采样周期)、EI (积分分离值)、KP (比例系数)、TI (积分系数)和TD (微分系数)加入变量监视,以便实验过程中观察和修改。

(6) 运行程序,用示波器测量系统输出“C”,观察数字调节器在这组参数下的控制效果,若不理想,可适当调整参数,直到控制效果满意为止。

五、实验代码

功能描述:此程序可以作为扩充响应曲线法整定PID参数的验证程序,可把整定后的PID参数写入程序中。

(源码见附件)


六、实验结果分析




全部资料51hei下载地址:

计算机控制技术综合性实验指导书-电气(新设备).docx (404.12 KB, 下载次数: 25)
程序:
example51_c.rar (382.72 KB, 下载次数: 29)


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏2 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:335031 发表于 2018-11-28 20:08 | 只看该作者
谢谢支持一下
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表