计算机控制系列实验报告.docx
- 文档编号:23945022
- 上传时间:2023-05-22
- 格式:DOCX
- 页数:30
- 大小:687.31KB
计算机控制系列实验报告.docx
《计算机控制系列实验报告.docx》由会员分享,可在线阅读,更多相关《计算机控制系列实验报告.docx(30页珍藏版)》请在冰豆网上搜索。
计算机控制系列实验报告
实验一小功率随动系统的元部件测试与建模
一、实验目的
了解小功率随动系统元部件的基本原理及输入/输出特性;掌握测量仪器的使用方法和元部件的测试方法;学习数据处理和利用工程方法建立被控对象的数学模型的基本方法;了解元部件的非线性因素及模型误差产生的原因等;了解最小二乘拟合方法
二、实验内容
分别测试力矩电机、测速机、功率放大器及反馈电位计的各种性能及输入/输出特性;根据测试结果建立小功率随动系统的数学模型;分析误差产生原因.
三、实验设备
IBMPC系列微机一台(586以上机型)、HD121912位A/DD/A接口板一块、XSJ-3小功率直流随动系统学习机一台、DH1718双路直流稳压电源一台、41/2数字多用表一台、DT6234光电式转速表一台、MF-18电流表一块
四、实验步骤及数据处理
模拟式小功率随动系统的实验调试:
(1)系统结构图
伺服系统实验电路
(2)实验数据:
滑动变阻(k
)
3
7.6
25
44
静态误差(V)
-0.17
0.18
-0.7
0.14
给定角度(°)
30
30
30
30
输出角度(°)
12
25
27
28
静差角度(°)
-18
-5
-3
-3
(3)动态响应曲线:
输入电压为3k
的实验图形
结论:
从图中可以看出有较大的静态误差。
输入电压为7.6k
的时候静态误差较小
结论:
从图中可以看出此时的静态误差较小。
输入电压为245k
出现较大的超调量。
结论:
此时出现较大的超调量。
输入电压为44k
的图像
结论:
从图中可以看出系统阶跃响应已经呈现高频振荡。
五.课后思考
1.如果速度反馈极性不对应如何处理?
如果位置反馈极性不对应如何处理?
答:
给定1v的输入电压,用万用表测反馈的电压值,如果不为负值,说明速度环的反馈极性不对应,这时候应该要把测速机的输出极性倒置。
同速度环反馈极性的测量方法,如果反馈极性不对应,就将电位计端±10V的接线对调。
2.系统是几阶无静差系统?
产生静差的原因。
答:
系统为二阶无静差系统,当比例因子K是以偏差调节电机转角的,所以会产生静差。
积分环节用于消除静差
产生静差的其它原因有:
1.实验条件的限制,无法满足严格的理论值。
2.时间上存在延迟。
3.运算放大器的开环放大系数数值有限
3.说出开环放大系数与静差及稳定性的关系.
二、A/D和D/A接口的使用和数据采集
一、实验目的
1)了解A/D和D/A接口的基本原理,硬件结构及编程方法
2)掌握机器内部的数据转换和储存方式
3)测量A/D和D/A的输入输出特性,分析误差产生原因
二、实验内容
1)用C语言编制A/D和D/A程序
2)输入电压进行测试并测量输出电压
三、实验设备
1)IBMPC系列微机一台(586)
2)HD121912位A/DD/A接口板一块
3)DH1718双路直流稳压电源一台
4)41/2数字多用表一台
四、实验原理
1)HD1219接口板I/O地址的功能基地址Base=310H
如下表:
地址
芯片
R/W
功能
Base
AD574
W
通道选择
Base+1
AD574
W
A/D起动
Base+2
AD574
R
高4位
Base+3
AD574
R
低8位
Base+4
DA1232
(1)
W
高8位
Base+5
DA1232
(1)
W/R
低4位,启动D/A
Base+6
DA1232
(2)
W
高8位
Base+7
DA1232
(2)
W/R
低4位,启动D/A
Base+8
8253(计数器)
W
计数器0
Base+9
8253(计数器)
W
计数器1
Base+10
8253(计数器)
W
计数器2
Base+11
8253(计数器)
W
控制字
Base+12
8255(并口)
W/R
A口
Base+13
8255(并口)
W/R
B口
Base+14
8255(并口)
W/R
C口
Base+15
8255(并口)
W
控制字
2)A/D原理
3)D/A原理
五、实验数据记录处理
(1)A/D转换
电压(V)
-10
-7.5
-5
-2.5
0
偏移码
3
202
401
600
7ff
补码
f803
fa02
fc01
fe00
ffff
浮点数
-0.998626
-0.749132
-0.499542
-0.250000
-0.000503
电压(V)
2.5
5
7.5
10
偏移码
a00
bfc
dff
fc3
补码
200
3fc
5ff
7c3
浮点数
0.250000
0.498040
0.749512
0.970215
(2)D/A转换
Co
大小
0000
2000
4000
6000
8000
A000
C000
E000
FFFF
V(理论值)
-5
-3.75
-2.5
-1.25
0
1.25
2.5
3.75
5
V(实测值)
-5.005
-3.742
-2.510
-1.260
-0.001
1.251
2.500
3.751
5.002
转换码
0
1ffe
3ffc
5ffa
7ff8
9ff6
bff4
dff2
fff0
六、实验总结
1、在实验中,A/D、D/A转换存在一定的误差,主要原因有1)量化误差,模拟量和数字量之间的转换存在量化误差;2)万用表的精度误差;3)噪音引起的误差。
2、通过本次实验,熟悉了A/D和D/A的硬件口以及如何通过编程来设置A/D和D/A。
和微机原理的实验有很大的相似点。
实验四计算机控制系统的实验调试
一、实验目的
掌握数控伺服系统静态参数选取的一般方法;掌握利用极点配置方法进行离散系统全状态反馈控制规律及降维观测器的设计;掌握控制算法编排实现及比例因子配置方法;学会数控伺服系统调试的方法与过程。
二、实验设备
IBMPC系列微机一台(586)、HD121912位A/DD/A接口板一块、XSJ-3小功率直流随动系统学习机一台、DH1718双路直流稳压电源一台、41/2数字多用表一台
三、实验步骤
1、系统结构图:
直流数控伺服系统原理图
数控伺服系统电路图
数控伺服系统结构图
2、系统设计:
要求:
D/A输出120mv,电机启动:
,则
D/A输出10v,电机转速=26rad/s,
考虑静态值,可得方程
解之得k=0.3494
(2)、求状态方程
经过Z变换之后可得
可得状态方程
即
原系统极点
,所以
根据
取
得
所以
则期望的特征方程是
由Ackerman公式可得
降维观测器极点为
又
则
所以令
可得L=0.6799
可得
对上述两个式子做Z变换得:
可得
所以
根据系统调整参数
k1=-0.6743,k2=0.25,k3=-0.459,k4=0.521,k5=2,k6=2
3、程序控制流程图:
五、实验数据处理
一、实验程序代码
#include
#include
#include
#include
#include
#include
#include
#definepi3.14159265
/*------definek1tok7-------*/
floatk1=-0.6743,k2=0.25,k3=-0.459,k4=0.521,k5=2,k6=2
floatt=0.025,x=0,x1,adpre=0,adpre1=0;
floattimer=0;
intN1;
voidinterrupt(*oldint)(...);
voidinterruptnewint(...);
floatadc(intn);
voiddac(floatda);
voidinitialscreen();
voidmain()
{
initialscreen();
oldint=getvect(0xb);
setvect(0xb,newint);
disable();
intn,temp;
N1=10/t;
x1=50*t;
n=2000000*t;
temp=n;
n=n*256;
outportb(0x31b,0xb6);
outportb(0x31a,n);
outportb(0x31a,temp);
outportb(0x21,inportb(0x21)&0xf7);
setcolor(RED);
enable();
getch();
closegraph();
outportb(0x21,inport(0x21)|0x08);
setvect(0xb,oldint);
}
voidinterruptnewint(...)
{
while(timer>=N1)
{
disable();
outportb(0x20,0x20);
gotoa;
}
timer=timer+0.3;
floatad0,ad1,a1,da,d1;
ad0=adc(0);
ad1=adc
(1);
/*------DRAWTHEPICTURE------*/
setcolor(BLUE);
line(240+x1*timer,120-adpre1*90,240+x1*timer,120-ad0*90);
adpre1=ad0;
setcolor(RED);
line(240+x1*(timer),350-adpre*90,240+x1*timer,350-ad1*90);
adpre=ad1;
/*------DRAWTHEPOINTER------*/
setcolor(BLACK);
setfillstyle(0,BLACK);
fillellipse(120,120,77,77);
setcolor(BLUE);
line(120,120,120+75*cos((ad0+0.5)*pi),120-75*sin((ad0+0.5)*pi));
setcolor(RED);
setfillstyle(0,RED);
fillellipse(120,350,77,77);
setcolor(YELLOW);
line(120,350,120+75*cos((ad1+0.5)*pi),350-75*sin((ad1+0.5)*pi));
a1=ad1*k1+x;
d1=ad0*k5+a1*k2;
if(d1>=1/k6)
d1=1/k6;
elseif(d1<=-1/k6)
d1=-1/k6;
da=k7*d1;
dac(da);
x=k1*k3*ad1+k4*a1;
a:
outportb(0x20,0x20);
}
/*------D/APROGRAM------*/
voiddac(floatda)
{
inty,lo,hi,newhi,newlo;
y=(da+1)/2*0xfff0;
lo=y&0x00ff;
hi=(y&0xff00)/256;
newhi=(hi&0x000f)*16+(hi&0x00f0)/16;
outportb(0x314,newhi);
newlo=(lo&0x00f0)/16;
outportb(0x315,newlo);
inportb(0x315);
}
/*------A/DPROGRAM------*/
floatadc(intn)
{
floatad;
intp,q;
inti,r;
outportb(0x31b,0x18);
outportb(0x310,n);
for(i=0;i<500;i++)
outportb(0x311,0x0);
for(i=0;i<500;i++)
p=inportb(0x312)%16;
q=inportb(0x313);
//printf("%0x,%0x\n",p,q);
r=p*256+q;
//printf("%0x",r);
floatr1=r;
ad=r1/0x800-1;
//printf("%f",ad);
//getch();
returnad;
}
/*------FIGUREPLOT------*/
voidinitialscreen()
{
intgm,i,Radius,numy,width,startx,starty,height,blockHeight;
charmsg[100];
intpoint[16];
intgdriver=DETECT,gmode;
initgraph(&gdriver,&gmode,"D:
\\BORLANDC\\BGI");
cleardevice();
setbkcolor(WHITE);
setcolor(3);
intx1=120,y1=120;
intx2=120,y2=350;
//Radius=80;
chark[100];
for(floatt=0;t<360;t++)
{
if((int)(t)%5!
=0)
{
line(x1+98*sin(t/180*pi),y1+98*cos((180-t)/180*pi),x1+100*sin(t/180*pi),y1+100*cos((180-t)/180*pi));
line(x2+98*sin(t/180*pi),y2+98*cos((180-t)/180*pi),x2+100*sin(t/180*pi),y2+100*cos((180-t)/180*pi));
}
else
if((int)t%10==0)
{
if((int)t%30==0)
{
sprintf(k,"%2.0f",t);
if(t>=360)
{
sprintf(k,"%2.0f",t-360);
outtextxy(x1+120*sin(t/180*pi),y1+120*cos((180-t)/180*pi),k);
outtextxy(x2+120*sin(t/180*pi),y2+120*cos((180-t)/180*pi),k);
}
else
{
outtextxy(x1+108*sin(t/180*pi),y1+108*cos((180-t)/180*pi),k);
outtextxy(x2+108*sin(t/180*pi),y2+108*cos((180-t)/180*pi),k);
}
setcolor(4);
line(x1+85*sin(t/180*pi),y1+85*cos((180-t)/180*pi),x1+100*sin(t/180*pi),y1+100*cos((180-t)/180*pi));
line(x2+85*sin(t/180*pi),y2+85*cos((180-t)/180*pi),x2+100*sin(t/180*pi),y2+100*cos((180-t)/180*pi));
setcolor(14);
}
else
{
line(x1+90*sin(t/180*pi),y1+90*cos((180-t)/180*pi),x1+100*sin(t/180*pi),y1+100*cos((180-t)/180*pi));
line(x2+90*sin(t/180*pi),y2+90*cos((180-t)/180*pi),x2+100*sin(t/180*pi),y2+100*cos((180-t)/180*pi));
}
}
else
{
line(x1+94*sin(t/180*pi),y1+94*cos((180-t)/180*pi),x1+100*sin(t/180*pi),y1+100*cos((180-t)/180*pi));
line(x2+94*sin(t/180*pi),y2+94*cos((180-t)/180*pi),x2+100*sin(t/180*pi),y2+100*cos((180-t)/180*pi));
}
}
charinput,output;
sprintf(msg,"InputV:
",input);
outtextxy(373,15,msg);
setcolor(RED);
sprintf(msg,"OutputV:
",output);
outtextxy(373,235,msg);
height=180,width=390,startx=240,starty=30;
intrp[8];
chara[60];
setfillstyle(1,WHITE);
rp[0]=rp[2]=startx;
rp[1]=rp[7]=starty;
rp[4]=rp[6]=startx+width;
rp[3]=rp[5]=starty+height;
fillpoly(4,rp);
settextstyle(0,0,0);
setlinestyle(1,1,1);
setcolor(DARKGRAY);
height=180,width=390,startx=240,starty=260;
inttp[8];
charb[60];
setfillstyle(1,WHITE);
tp[0]=tp[2]=startx;
tp[1]=tp[7]=starty;
tp[4]=tp[6]=startx+width;
tp[3]=tp[5]=starty+height;
fillpoly(4,tp);
settextstyle(0,0,0);
setlinestyle(1,1,1);
setcolor(DARKGRAY);
/*------AXISPLOT------*/
for(numy=30,i=0;i<=10;i++,numy+=18)
{
line(240,numy,620,numy);
}
for(numy=275,i=0;i<=10;i++,numy+=18)
{
line(240,numy,620,numy);
}
for(numy=19,i=0;i<=20;i++,numy+=19)
{
line(240+numy,30,240+numy,210);
}
for(numy=19,i=0;i<=20;i++,numy+=19)
{
line(240+numy,260,240+numy,440);
}
setcolor(LIGHTBLUE);
rectangle(240,30,620,210);
rectangle(240,260,620,440);
setcolor(RED);
for(numy=30,i=0;i<=10;i++,numy+=18)
{
sprintf(msg,"%d",2*(5-i));
outtextxy(225,numy,msg);
}
for(numy=260,i=0;i<=10;i++,numy+=18)
{
sprintf(msg,"%d",2*(5-i));
outtextxy(225,numy,msg);
}
setcolor(GREEN);
line(240,40,240,200);
line(240,270,240,430);
line(240,120,620,120);
line(240,347,620,347);
for(numy=240,i=0;i<15;i++,numy+=25)
{
sprintf(msg,"%d",i);
outtextxy(numy,130,msg);
}
for(numy=240,i=0;i<15;i++,numy+=25)
{
sprintf(msg,"%d",i);
outtextxy(numy,355,msg);
}
setcolor(GREEN);
setlinestyle(SOLID_LINE,0,1);
t=0;
circle(x1,y1,100);
line(x1,y1,x1+75*sin(t/180*pi),y1+75*cos((180-t)/180*pi));
circle(x2,y2,100);
line(x2,y2,x2+75*sin(t/180*pi),y2+75*cos((180-t)/180*pi));
setcolor(RED);
outtextxy(280,450,"---DesignedBYWANGZIMENG_37030422");
}
二、实验图形
1、利用计算所得到的数据对阶跃信号进行跟踪
k1=-0.6743,k2=0.25,k3=-0.459,k4=0.521,k5=2,k6=2
2、改变参数跟踪阶跃信号
当k1=-0.6546,k2=0.25,k3=-0.4293,k4=0.5024,k5=0.75,k6=4,
当k1=-0.6546,k2=0.25,k3=-0.4293,k4=0.5024,k5=0.75,k6=4,
当k1=-0.67,k2=0.25,k3=-0.459,k4=0.521,k5=0.75,k6=0.25,
实验结果分析:
由图像中可以看出
(1)K1增大时候系统跟踪时候出现超调,因为K1是闭环反馈增益,从而K1增加时候导致闭环增益增加,因而系统的稳态改变,稳态性能变化,出线超调。
(2)K2只是系统的反馈极性问题,这里没有必要改变,因为是负反馈所以K1*K2是保持负的,而K1是负的,所以K2是正的。
(3)K3是系统的零点,K3会影响系统的增益范围。
(4)K4是系统的极点,K4会影响系统的稳定性,K4在单位圆内时候会保持系统的稳定,当K4在单位圆之外时候会让系统不再稳定。
极点越靠近原点,系统就会越稳定,极点越靠近1,则系统让靠近震荡状态。
(5)K5是前向通道增益,会影响系统的稳定增益,输出幅值。
由于AD与
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机控制 系列 实验 报告