AD与DA转换及数字PID调节器算法的研究实验报告 下载本文

东南大学自动化学院

实 验 报 告

课程名称: 计算机控制技术

第 1 次实验

实验名称: A/D与D/A转换 & 数字PID调节器算法的研究 院 (系): 自动化学院 专 业: 自动化 姓 名: 学 号: 实 验 室: 416 实验组别: 同组人员: 实验时间: 2014年 3月 20日 评定成绩: 审阅教师:

第一部分 实验一A/D与D/A转换

一、实验目的

1、通过编程熟悉VC++的Win32 Console Application的编程环境; 2、通过编程熟悉PCI-1711数据采集卡的数据输入输出; 3、了解采集卡AD转换芯片的转换性能; 4、通过实验了解字节数与二进制数的转换。

二、实验设备

1.THBDC-1型控制理论·计算机控制技术实验平台 2.PCI-1711数据采集卡一块

3.PC机1台(安装软件“VC++”及“THJK_Server”)

三、实验原理

1.数据采集卡

PCI-1711是输入功能强大的低成本多功能PCI总线卡。 特点:16路单端模拟量输入

12位A/D转换器,采样速率可达100KHz 每个输入通道的增益可编程 自动通道/增益扫描

卡上1K采样FIFO缓冲器

2路12位模拟量输出(仅PCI-1711) 16路数字量输入及16路数字量输出 可编程触发器/定时器

图1-1 PCI-1711卡管脚图

2. AD/DA转换原理

该卡在进行A/D转换实验时,输入电压与二进制的对应关系为:-10~10V对应为0~4095(A/D转换精度为12位)。

输入 正满度 正满度-1LSB 中间值(零点) 负满度+1LSB 负满度 D/A通道输出范围为0~10V。

A/D数据编码 1111 1111 1111 1111 1111 1110 0111 1111 1111 0000 0000 0001 0000 0000 0000 四、实验步骤

1、仔细阅读“PCI-1711数据采集卡驱动函数说明.doc”文档。

2、将实验台上的“阶跃信号发生器”的输出端通过导线与PCI-1711数据采集接口的AD1通道输入端相连,同时将PCI-1711数据采集接口的AD1通道通过导线与实验平台上的交直流数字电压表(选取直流档)的输入端相连;

3、打开ADDA实验VC++程序文件夹,打开.dsw工程文件,添加缺少的main函数(主程序),编程实现以下功能:

在运行程序后的DOS界面上应显示AD第一通道输入值,同时并显示出转换后对应的以十进制存放的二进制码,并将其转换为二进制码;

在程序中使用输出函数通过DA1通道输出一个0~10V的电压(PCI-1711卡无法输出负电压),然后使用THBDC-1型实验平台上的直流数字电压表进行测量,并确认输出值是否正确。

五、实验记录

1.系统main函数如下:

void main() //主程序 {

init_1711(); for(;;) {

ADinput(0); //读取AD1通道的电压值 printf(\通道输入值:%.3f\\n\ADbinaryIn(0);

//读取AD1通道的二进制电压值

//-10V~10V对应为(0~4095)

printf(\通道的二进制值为(以十进制数存放):%d\\n\

//AD数据转换为二进制

char *temp = new char[NUM+1];

Convert(bin,temp,NUM); //十进制数转换为二进制数的转换函数 printf(\通道数据转换为二进制为:%s\\n\DAoutput(0,3.2);

//从DA1通道输出3.2V的电压值

delete temp;

}

printf(\通道输出值:%.3f\\n\ } expexit();

DABinaryout(1,4095);

printf(\通道输出值:%d\\n\Sleep(1000);

printf(\

2.程序的主要函数:

void Convert(USHORT data,char* temp,long Dim); void ErrorHandler( DWORD dwErrCde ); void ErrorStop( long*, DWORD ); bool init_1711(); void expexit();

//十进制数转换为二进制数

//出错处理函数 //初始化设备 //关闭设备

//通过错误代码来获取相应的错误信息函数

float ADinput(unsigned char chan); //模拟量输入函数 //模拟量输出函数

bool DAoutput(unsigned char chan,float DAdata); USHORT ADbinaryIn(unsigned char chan);

//模拟量输入函数(二进制形式)

3.由于是验证性实验,以下为我们记录的两组数据:

①A/D转换

通过改变滑动变阻器的阻值,改变AD1输入端输入电压的大小,用电压表测出实际输入的电压值,并记录通过A/D转换计算机采集的十进制与二进制值,程序运行结果见下表中,在变化过程中实际输入与计算机采集的数据的对应关系如表: 程序运行后DOS界面显示结果 直流电压表(v) AD1通道输入值 0.000 4.982 9.985 -4.932 AD1通道数据转化为十进制 2047 3068 4092 1037 AD1通道数据转化为二进制码 011111111111 101111111100 111111111100 010000001101 0.00 5.00 10.00 -5.00 程序将外界输入电压通过A/D转换得到与原输入值大致相等的电压,输入电压与二进制的对应关系为:-10~10V对应为0~4095,采用“除二取余”法计算相应的二进制码,验证发现结果是比较准确的,误差较小。 ②D/A转换

在程序中多次改变输出电压的大小(通过改变主程序中DAoutput(0,x)中的函数),利用电压表测量实际DA1输出的电压值,运行程序后,得到的具体的D/A转换的对应关系如表: 程序设定值(V) 2.5 3.0 电压表输出电压值(V) 2.50 3.00 由表中数据可以看出,DA1通道的输出电压值与程序中设定的值十分接近(相等),在误差允许的范围内认为输出值正确。

六、实验总结

1.此次实验比较简单,通过简单地连线验证实验结果的正确性,由实验结果可以看出程序可以将外界输入电压通过A/D以及D/A转换,得到与原输入值大致相等的电压。

2.输入电压与二进制的对应关系为:-10~10V对应为0~4095(程序设定A/D转换精度为12位),相当于每1V对应十进制为204.8;通过“除二取余”法,假定data为待转换数据,temp为转化后数据,Dim为转换精度,通过循环: for(int i=0;i

temp[Dim-1-i]=data%2+48;//(程序中加48是将二进制数转换为ASCII码) data/=2; }

temp[Dim]='\\0';将十进制数转化为二进制码。

第二部分 实验二数字PID调节器算法的研究

一、实验目的

1、通过编程熟悉VC++的Win32 Console Application的编程环境; 2、通过编程熟悉PCI-1711数据采集卡的数据输入输出; 3、掌握PID控制器的编程方法; 4、了解闭环控制系统的概念与控制方法; 5、熟悉定时器及显示界面的使用方法;

二、实验设备

1.THBDC-1型 控制理论·计算机控制技术实验平台 2.PCI-1711数据采集卡一块

3.PC机1台(安装软件“VC++”及“THJK_Server”)

三、实验原理

1.被控对象的模拟与计算机闭环控制系统的构成,

图2-1计算机控制系统原理框图

图中信号的离散化通过 PCI-1711数据采集卡的采样开关来实现。

计算机 R(t)

+ - AD1 PID DA1 二阶对象 Y(t)

2.常规PID控制算法 常规PID控制位置式算法为

TTku(k)?kp{e(k)??e(i)?d[e(k)?e(k?1)]},当计算机等外部环境发生变化时,U(k)

Tii?1T会产生大幅度的变化,这对很多执行对象来说,这种冲击是不能接受的。所以,工程上常用

增量式控制算法。

其增量形式为:

u(k)?u(k?1)?Kp[e(k)?e(k?1)]?Kie(k)?Kd[e(k)?2e(k?1)?e(k?2)]

式中Kp---比例系数

Ki=KpT积分系数,T采样周期

TiKd=KpTd微分系数 T本实验就是采用的PID增量式算法。

根据被控对象和环境等不同,还可以采用积分分离PID算法,智能PID算法,微分先行等多种形式的PID控制算法。

图中信号的离散化是由数据采集卡的采样开关来实现。 3.数字PID控制器的参数整定

在模拟控制系统中,参数整定的方法较多,常用的实验整定法有:临界比例度法、阶跃响应曲线法、试凑法等。我们控制器参数的整定也可采用类似的方法,如扩充的临界比例度法、扩充的阶跃响应曲线法、试凑法等。

针对本实验的二阶线性系统对象,建议用衰减曲线法:《自动控制原理》田玉平二版316页。

4.程序流程图:

Y 定时器时间到? 等待 在显示软件上画出阶跃响应曲线 控制量限幅,D/A输出控制量 A/D采样,PID控制 Y 按下“e”和“enter”键否? 关闭设备,结束 初始化数据采集卡,与显示软件进行通信,从键盘输入有关输入参数 开始 四、实验步骤

1、仔细阅读“PCI-1711数据采集卡驱动函数说明.doc”和“THJK-Server软件使用说明.doc”

文档,掌握PCI-1711数据采集卡的数据输入输出方法和THJK-Server软件(及相关函数)的使用方法。

2、模拟电路接线图如下所示:

图2-2 二阶被控对象与计算机连接图

图中R1=510K,R2=510K,R3=100K,R4=200K,C1=1uF,C2=10uF。 DA1, AD1, AD2, 是PCI-1711实验面板的接口

3、用导线将二阶模拟系统的输入端连接到PCI-1711数据采集卡的“DA1”输出端,系统的输出端与数据采集卡的“AD1”输入端相连;

4、用导线将+5V直流电源输出端连接到PCI-1711数据采集卡的“AD2”输入端,作为阶跃触发使用,阶跃幅度由软件设定。初始时,+5V电源开关处于“关”状态;

5、打开数字PID实验文件夹下.dsw工程文件,源程序中缺少PID算法程序。请同学用增量式算法编写PID控制程序。

6、源程序编译通过后,先启动“THJK_Server”图形显示软件,再执行程序代码,在显示界面出现的曲线并稳定后(初始化后),把+5V电源打到“开”状态,观测系统的阶跃响应曲线。在实验结束后,在键盘上按下“e”和“Enter(回车键)”键,程序退出。

7、用衰减曲线法反复调试PID参数,选择适当的PID参数后,重复第5步骤,直到得到满意的阶跃响应曲线为止并截图。

五、实验记录

1.编写PID数字控制器的C++程序(增量式算法)。

//PID 算法函数:pid[0]=P;pid[1]=I;pid[2]=D double PID(double ei, double *pid,double Ts) { static double ex=0,ey=0; static double q0=0; static double q1=0; static double q2=0; static double op=0; q0=pid[0]*(ei-ex); //比例项

if (pid[1]==0) q1=0; else q1=pid[0]*Ts*ei/pid[1] ; //当前积分项 q2=pid[0]*pid[2]*(ei-2*ex+ey)/Ts; //微分项 ey=ex; ex=ei;

op=op+q0+q1+q2; return op; }

程序对PID参数的设置进行编程,采用的是增量式算法

2.无PID调节时,得到的阶跃响应曲线:

图1 无PID调节时阶跃响应曲线

此时设定P=1,I=0,D=0,传递函数为:G(S)?12?可以看到无PID时,阶

0.51s?12s?1,

跃响应的响应时间较长,且有较大的稳态误差。

3.绘制二阶被控对象在采用数字控制器后的阶跃曲线 (1)利用“衰减曲线法”,先采用比例控制,使k从0逐渐增加 K 衰减振荡比 5 8.50 7 4.25 7.5 4.00 8 2.62 直到系统出现如图所示4:1的衰减振荡:

记录此时的Kr=7.5,I=10000,并测出此时的振荡周期Pr=1.67 (2)将其代入公式:Kp=0.85Kr=6.375,Ti=0.5Pr=0.835,Td=0,得PI控制的阶跃响应曲线:

图2 PI调节时阶跃响应曲线

由实验曲线可知,阶跃响应有所改善,但对于积分调节,具有积分作用的PI调节器,只要被调量和给定值之间有误差,其输出就会不停的变化。由于某种原因,误差一时无法消除,调节器就要不停的校正这个误差,结果很容易造成积分饱和,严重时还会导致处理器溢出。因此实际应用中必须采取一定的改进措施避免出现积分饱和现象,如积分分离、遇限消弱积分、停止饱和积分、反馈抑制积分饱和等。

(3)将其代入公式:Kp=1.25Kr=9.375,Ti=0.3Pr=0.501,Td=0.1Pr=0.167,得PID控制的阶跃响应曲线:

图3 较好的PID参数时的阶跃响应曲线

从图中可以看出,此时的阶跃响应超调量较小,且响应时间较短,PID调节比较理想。 (4)分析采样周期Ts对系统阶跃响应的影响 ①当Ts=50ms时,阶跃响应曲线如图4所示:

②当Ts=80ms时,阶跃响应曲线如图5所示:

③当Ts=150ms时,阶跃响应曲线如图6所示:

与T=100ms相比,适当减小或增大采样周期,调节时间会增加,虽然不是最理想的PID参数,但是系统有稳定的输出,且系统的阶跃响应与模拟系统的输出响应基本吻合。继续增大采样周期,由于不满足香农定理,系统响应会出现严重失真,系统的输出不能稳定。

六、实验总结

1、PID控制器中的比例环节Kp,调整系统的开环增益,提高系统的稳态精度,加快响应速度。但是Kp过大会使系统超调量过大,稳定性减弱。积分环节Ki可以使系统输出无静差,但是系统稳定性下降,响应速度变慢,微分环节可以加快系统的响应速度。在低频段,主要是PI控制规律起作用,提高了系统的型别,消除或减小了稳态误差;在中高频段主要是PD控制规律起作用, 增大截止频率和相角裕度,提高了响应时间。PID控制调节可以增大系统的瞬态和稳态性能。

2、在对象模型确知时,由于在工业系统中对象很复杂,一般不能用解析的方法得到较为准确的模型,因此,可以通过系统的动态响应调整PID控制参数。这类方法一般采用阶跃或脉冲等信号激励被控对象,根据被控对象的过渡过程响应曲线来获得系统的瞬态性能。用衰减曲线法来确定P、I、D的参数,其步骤是先采用比例控制,即将Kp从0逐渐增加,直到系统出现4:1的衰减(衰减比定义为第一次超调和第二次超调之比),记下此时增益值Kr,Kp=1.25Kr=,Ti=0.3Pr,Td=0.1Pr。

3、由对比实验可以看出,在计算机速度允许的情况下,采样周期Ts较小时,调节品质好,系统响应越接近于连续系统的阶跃响应输出;采样周期Ts过长时,系统控制精度不好,甚至采样信号无法恢复为原模拟信号,抗干扰能力下降,系统出现振荡。 4、增量式控制算法与位置式控制算法相比具有以下优点:

①由于控制增量一般很小,故可对其进行限幅,限制或禁止故障时的输出,从而缩小机器故障时影响范围。

②由于增量式控制时阀位与步进电机转角对应,故手动-自动切换时冲击小。

③控制增量的确定仅与最近几次的采样值有关,容易通过加权处理以获得较好的控制效果。