工程技术学院电子与控制工程系实验指导书《计算机控制技术》实验指导书制订人:胡东2010年4月目录实验一 A/D与D/A转换实验 (3)实验二数字PID控制算法的实验研究 (10)实验三最少拍数字控制器的设计 (15)实验一 A/D与D/A转换实验一、实验目的与要求1、了解几种类型AD转换的原理;掌握使用ADC0809进行模数转换2、了解几种类型DA转换的原理;掌握使用DAC0832进行数模转换2、认真预习实验内容,做好准备工作,完成实验报告。
二、实验设备天煌系列实验仪一套、PC机一台、万用表一个。
Proteus软件一套。
三、实验内容1、ADC0809(F3区)(1) 模数转换器,8位精度,8路转换通道,并行输出(2) 转换时间100us,转换电压范围0~5V2、编写程序:制作一个电压表,测量0~5V,结果显示于数码管上。
3、利用Proteus设计DAC仿真电路,编写仿真程序,进行DA实验仿真。
利用DA转换五、实验步骤1、连线说明:2、调节0~5V电位器(F2区)输出电压,显示在LED上,第4、5位显示16进制数据,第0、1、2位,显示十进制数据。
用万用表验证AD转换的结果。
3、实验记录旋转电位器,使电压从0V~5V变化。
读取数码管显示数据,记录电压值与转换出来的数字量。
填入下表:3、数据分析(1)计算数字理论值和误差,填入上表。
(2)绘制电压与转换出数字量曲线。
在坐标纸上以电压为横坐标,以数字量为坐标绘制。
4、利用Proteus构建仿真电路,进行编程仿真。
(1)打开Proteus V7.4 SP3软件。
从元件库中找到下列元件:①电容: CAP②极性电容: CAP-POL③晶振:CRYSTAL④ DAC0832⑤ AT89C51⑥按钮: BUTTON⑦ LM358N⑧变阻器: POT-LOG⑨电阻: RES(2)按下图所示构建仿真电路设置器件属性,直接双击相应器件的图标即可。
图1—2 DA转换实验原理图(3)编写仿真程序①汇编语言:DAC0832 EQU 00HORG 0000HLJMP MAIN ;设DAC0832地址ORG 0030HMAIN: MOV C,P2.7JC TRIAN ;P2.7为1时,输出锯齿波,P2.7为0时,输出为正弦波 MOV R1,#63 ;单位周期内共64个采样输出SIN: MOV DPTR,#TABMOV A,R1MOVC A,@A+DPTR ;查找正弦代码MOV DPTR,#DAC0832MOVX @DPTR,A ;输出NOPDJNZ R1,SINLJMP MAINTRIAN: MOV R1,#0 ;锯齿波LOOP: MOV A,R1MOV DPTR,#DAC0832MOVX @DPTR,AMOV A,R1ADD A,#4 ;步长为4MOV R1,ANOPJNZ LOOPLJMP MAINTAB: DB 80H,8CH,98H,0A5H,0B0H,0BCH,0C7H,0D1H ;正弦代码表 DB 0DAH,0E2H,0EAH,0F0H,0F6H,0FAH,0FDH,0FFHDB 0FFH,0FFH,0FDH,0FAH,0F6H,0F0H,0EAH,0E3HDB 0DAH,0D1H,0C7H,0BCH,0B1H,0A5H,99H,8CHDB 80H,73H,67H,5BH,4FH,43H,39H,2EHDB 25H,1DH,15H,0FH,09H,05H,02H,00HDB 00H,00H,02H,05H,09H,0EH,15H,1CHDB 25H,2EH,38H,43H,4EH,5AH,66H,73HEND② C语言#include <reg51.H>#define step 4unsigned char pdata DAC0832;//设DAC0832地址unsigned char sindot[64]={0x80,0x8c,0x98,0xa5,0xb0,0xbc,0xc7,0xd1,0xda,0xe2,0xea,0xf0,0xf6,0xfa,0xfd,0xff,0xff,0xff,0xfd,0xfa,0xf6,0xf0,0xea,0xe3,0xda,0xd1,0xc7,0xbc,0xb1,0xa5,0x99,0x8c,0x80,0x73,0x67,0x5b,0x4f,0x43,0x39,0x2e,0x25,0x1d,0x15,0xf,0x9,0x5,0x2,0x0,0x0,0x0,0x2,0x5,0x9,0xe,0x15,0x1c,0x25,0x2e,0x38,0x43,0x4e,0x5a,0x66,0x73};//正弦代码表sbit K1=P2^7;//控制开关,void delay(unsigned char m)//延时{ unsigned char i;for(i=0;i<m;i++);}void main(void){unsigned char k; while(1){ if (K1==0)//K1为1时,输出锯齿波,K1为0时,输出为正弦波 {for(k=0;k<64;){ DAC0832=sindot[k];//取正弦代码并输出 k++;delay(1); } } else{ for(k=0;k<250;)//锯齿波 { DAC0832=k; k+=step; delay(1); } }} }六、演示程序1、程序算法A/D 转换子程序:显示子程序:图1—3 AD 转换算法框图2、程序清单EXTRN CODE(Display8)Addr_0809 XDATA 0F000HBuffer DATA 30H ;8个字节的显示缓冲区EOC_0809 BIT P1.2ORG 0LJMP STARTORG 0100HSTART: MOV SP,#60H ;设堆栈START1: ACALL AD0809ACALL Display_DataMOV R0,#Buffer ;显示缓冲区首地址LCALL DisPlay8 ;调用显示子程序LCALL TIME ;延时SJMP START1Display_Data: MOV B,AANL A,#0FHMOV buffer+4,AMOV A,BANL A,#0F0HSWAP AMOV buffer+5,AMOV A,BMOV B,#51 ;255/5 (16进制的1 = 1/51V)DIV ABORL A,#80H ;加上小数点MOV buffer+2,AACALL Display_Data_1MOV buffer+1,A ;第一位小数ACALL Display_Data_1MOV buffer,A ;第二位小数MOV buffer+3,#10HMOV buffer+6,#10HMOV buffer+7,#10H ;消隐RETDisplay_Data_1: MOV A,#10MUL ABADD A,BJNC Display_Data_11INC AINC BDisplay_Data_11: MOV R7,AMOV A,BRL ARL AADD A,BXCH A,R7MOV B,#51DIV ABADD A,R7RETAD0809: MOV A,#0MOV DPTR,#Addr_0809MOVX @DPTR,A ;启动AD转换JNB EOC_0809,$ ;是否转换完成MOVX A,@DPTR ;读转换结果RETTIME: PUSH 06HPUSH 07HMOV R6,#200TIME1S1: MOV R7,#200DJNZ R7,$DJNZ R6,TIME1S1POP 07HPOP 06HRETEND七、实验扩展及思考1.如何实现多路模拟量的数据采集、显示?2. Proteus有何优势?Keil 和 Proteus如何联调?八、实验报告要求将实验过程、实验现象,现象分析、实验结论详细的书写在实验报告册中。
要求书写规范,条理清晰,如实记录数据和分析实验现象。
得出合理的实验结论。
实验成绩如下规定:1. 实验成绩占平时成绩的10%。
包括考勤、课堂纪律、实验操作、实验报告三个部分。
10%的成绩中,课堂纪律占10%,实验操作占10%,实验报告占80%。
2. 实验报告不认真或上交不及时,酌情扣分。
3. 缺席实验一次,本课程平时总成绩清为0分。
实验二 数字PID 控制算法的实验研究一、实验目的和要求1、掌握控制系统PID 控制规律。
2、掌握PID 位置式控制算法。
3、掌握PID 增量式控制算法。
二、实验设备1. 硬件:计算机2. 软件:MATLAB V7.0 三、实验理论 1. 位置式控制算法根据模拟PID 控制算法,以一系列的采样时刻点kT 代表连续时间t ,以矩阵法数值积分近似代替积分,以一阶后向差分近似代替微分,即⎪⎪⎪⎩⎪⎪⎪⎨⎧--=--====≈⎰∑∑==)1()())1(()()()()()()2,1,0(000k error k error T T k error kT error dt t derror j error T jT error dt t error k kT t tk j kj 可得离散PID 表达式为:)]}1()([)()({)(0--++=∑=k error k error TT j error T T k error k k u Dkj Ip T k e r r o r k e r r o r k T j e r r o rk k e r r o r k dkj ip /))1()(()()(0--++=∑=式中,Ip i T k k =,D p d T k k =;T 为采样周期;k 为采样序号,k = 1, 2, …;error(k)和error(k-1)分别为第k 和第k-1时刻的偏差信号。
位置式PID 控制框图如图2-1所示,)(t图2—1 位置式PID 控制框图位置式PID 控制程序框图如图2-1所示,图2—2 位置式PID 控制程序框图四、实验内容及步骤采用Simulink 仿真。
被控对象为三阶传递函数,采用Simulink 模块与M 函数相结合的方式,利用ODE45的方法求解连续对象方程,主程序由Simulink 模块实现,控制器由M 函数实现。
输入信号为一采样周期1ms 的正弦信号。
采用PID 方法设计控制器,其中05.0,0.2,5.1===d i p k k k 。
误差的初始化通过时钟功能实现,在M 函数中实现误差的积分和微分。
1. 编写实验程序:clear all ; close all ;ts=0.001;sys=tf(523407,[1,86.85,10465,0]);dsys=c2d(sys,ts,'z');[num,den]=tfdata(dsys,'v');u_1=0.0;u_2=0.0;u_3=0.0;r_1=rand;y_1=0;y_2=0;y_3=0;x=[0,0,0]';error_1=0;for k=1:1:3000time(k)=k*ts;kp=1.0;ki=2.0;kd=0.01;S=1;if S==1 %Triangle Signalif mod(time(k),2)<1rin(k)=mod(time(k),1);elserin(k)=1-mod(time(k),1);endrin(k)=rin(k)-0.5;endif S==2 %Sawtooth Signalrin(k)=mod(time(k),1.0);endif S==3 %Random Signalrin(k)=rand;vr(k)=(rin(k)-r_1)/ts; %Max speed is 5.0 while abs(vr(k))>=5.0rin(k)=rand;vr(k)=abs((rin(k)-r_1)/ts);endendu(k)=kp*x(1)+kd*x(2)+ki*x(3); %PID Controller%Restricting the output of controllerif u(k)>=10u(k)=10;endif u(k)<=-10u(k)=-10;end%Linear modelyout(k)=-den(2)*y_1-den(3)*y_2-den(4)*y_3+num(2)*u_1+num(3)*u_2+num(4 )*u_3;error(k)=rin(k)-yout(k);r_1=rin(k);u_3=u_2;u_2=u_1;u_1=u(k);y_3=y_2;y_2=y_1;y_1=yout(k);x(1)=error(k); %Calculating Px(2)=(error(k)-error_1)/ts; %Calculating Dx(3)=x(3)+error(k)*ts; %Calculating Ixi(k)=x(3);error_1=error(k);D=0;if D==1 %Dynamic Simulation Displayplot(time,rin,'b',time,yout,'r');pause(0.00000000000000000);endendplot(time,rin,'r',time,yout,'b');grid;xlabel('time(s)');ylabel('rin,yout');2. 分析仿真结果:五、实验扩展思考1、增量式PID控制算法有何优点?2、位置式PID控制算法在什么场合下使用比较合理?3、在什么场合下使用增量型PID控制算法,误差较小?六、撰写实验报告将实验过程、实验现象,现象分析、实验结论详细的书写在实验报告册中。