自动控制系统实验报告.docx
《自动控制系统实验报告.docx》由会员分享,可在线阅读,更多相关《自动控制系统实验报告.docx(51页珍藏版)》请在冰点文库上搜索。
自动控制系统实验报告
自动控制系统实验报告
学号:
班级:
姓名:
老师:
1.运动控制系统实验
实验一.硬件电路的熟悉和控制原理复习巩固
实验目的:
综合了解运动控制实验仪器机械结构、各部分硬件电路以及控制原理,复习巩固以前课堂知识,为下阶段实习打好基础。
实验内容:
了解运动控制实验仪的几个基本电路:
单片机控制电路(键盘显示电路最小应用系统、步进电机控制电路、光槽位置检测电路)
ISA运动接口卡原理(搞清楚译码电路原理和ISA总线原理)
步进电机驱动检测电路原理(高低压恒流斩波驱动电路原理、光槽位置检测电路)
两轴运动十字工作台结构
步进电机驱动技术(掌握步进电机三相六拍、三相三拍驱动方法。
)
微机接口技术、单片机原理及接口技术,数控轮廓插补原理,计算机高级语言硬件编程等知识。
实验结果:
步进电机驱动技术:
控制信号接口:
(1)PUL:
单脉冲控制方式时为脉冲控制信号,每当脉冲由低变高是电机走一步;双
脉冲控制方式时为正转脉冲信号。
(2)DIR:
单脉冲控制方式时为方向控制信号,用于改变电机转向;双脉冲控制方式
时为反转脉冲信号。
(3)OPTO:
为PUL、DIR、ENA的共阳极端口。
(4)ENA:
使能/禁止信号,高电平使能,低电平时驱动器不能工作,电机处于自由状
态。
电流设定:
(1)工作电流设定:
(2)静止电流设定:
静态电流可用SW4拨码开关设定,off表示静态电流设为动态电流的一半,on表示静态电流与动态电流相同。
一般用途中应将SW4设成off,使得电机和驱动器的发热减少,可靠性提高。
脉冲串停止后约0.4秒左右电流自动减至一半左右(实际值的60%),发热量理论上减至36%。
(3)细分设定:
(4)步进电机的转速与脉冲频率的关系
电机转速v=脉冲频率P*电机固有步进角e/(360*细分数m)
逐点比较法的直线插补和圆弧插补:
1.直线插补原理:
如图所示的平面斜线AB,以斜线起点A的坐标为x0,y0,斜线AB的终点坐标为(xe,ye),则此直线方程为:
取判别函数F=(Y—Y0)(Xe—Xo)—(X-X0)(Ye—Y0)
用逐点比较法加工时,每一次只在一个坐标方向给出一个脉冲,使运动件在该坐标方向上进给一步,因此刀具的运动轨迹是折线,而不是斜线AB。
折线拐点M与斜线AB之间的位置关系有如下三种情况:
1)M点在AB线的上方.判别函数F>0;
2)M点在AB线上,F=0
3)M点在AB线的下方,F<0
象限判别和电机方向
方向
第一象限
第二象限
第三象限
第四象限
Xe-X0
>0
<0
<0
>0
Ye-Y0
>0
>0
<0
<0
X向电机
正
反
反
正
Y向电机
正
正
反
反
2.圆弧插补原理:
图中AB是被加工圆弧。
加工程序中给出的已知条件通常是A点B点的坐标值,圆心O’点相对圆弧起点A的增量坐标值。
由图可知:
圆心O’点相对A点的增量坐标值为(—Io,—Jo)。
改变符号后就成为A点相对O’点的增量值Io,Jo。
由此可求出圆弧的半径值R:
R2=Io2+Jo2在以圆心O’点为原点的I、J坐标系中,圆的方程
可表示为:
I2+J2=R2设刀具已位于M1点,则Mi点对圆弧AB的位置有三种情况:
1)Mi在圆弧外侧,则0’Mi>R,Ii2+Ji2>R2
2)Mi在圆弧上,则0’Mi=R,Ii2+Ji2=R2
3)Mi在圆弧内侧,0’Mi在第一象陨顺时针加工圆弧(顺圆弧)和第二、三、四象限加工顺圆弧和逆圆弧时,判别式都不相同。
带符号运算时,无论在哪个象限工作,顺圆弧或逆圆弧,归纳起来有如下四种情
1.+X方向走一步
Ii+1=Ii+1
Fi+1=Fi+2Ii+1
2.-X方向走一步
Ii+1=Ii-1
Fi+1=Fi-2Ii+1
3.+Y方向走一步
Ji+1=Ji+1
Fi+1=Fi+2Ji+1
4.-Y方向走一步
Ji+1=Ji+1
Fi+1=Fi+2Ji+1
四个象限进给方向
象限判断和电机转向
第一象限
第二象限
第三象限
第四象限
Ii的符号
+
-
-
+
Ji的符号
+
+
-
-
X向电机
顺圆
+
+
-
-
逆圆
-
-
+
+
X向电机
顺圆
-
+
+
-
逆圆
+
-
-
+
实验二.键盘显示综合实验
实验目的:
1、复习单片机键盘显示编制方法
2、为下步工作奠定基础
实验内容:
1、编制键盘扫描程序和数码管的静态显示程序
2、编制键盘数据输入程序
3、编制十进制到二进制转换程序
4、编制二进制到十进制转换程序
5、编写显示程序
6、编制功能键跳转程序
7、联机作总体调试
实验结果:
#include//库文件
#include
#include
#include
sbitP32=P3^2;
#defineLEDLen8//六个八段管
#definemode0x81//8255工作模式//方式0,A口、B口及上C口作为输出,下C口作为输入
#defineLEDSELP2
#defineLEDSEL_00x60//八段管地址
#defineLEDSEL_10x64
#defineLEDSEL_20x68
#defineLEDSEL_30x6C
#defineLEDSEL_40x70
#defineLEDSEL_50x74
#defineLEDSEL_60x78
#defineLEDSEL_70x7C
#defineucharunsignedchar
#defineuintunsignedint
//codeucharhang[]={0X01,0X02,0X04,0X08,0X10,0X20,0X40,0X80};
codeucharlie[][8]={0xFF,0x99,0x00,0x00,0x00,0x81,0xC3,0xE7,
0xFF,0xFF,0xDB,0x81,0x81,0xC3,0xE7,0xFF};
#defineTick200
#defineT100us(256-200)
unsignedintC100us=Tick;//200us记数单元
unsignedcharBit=0;
unsignedcharSelectLed[LEDLen]=
{
LEDSEL_0,LEDSEL_1,LEDSEL_2,LEDSEL_3,LEDSEL_4,LEDSEL_5,LEDSEL_6,LEDSEL_7
};
xdataunsignedcharCS8255_at_0x60;//8255
xdataunsignedcharPA_at_0x6000;//8255的PA口
xdataunsignedcharPB_at_0x6001;//8255的PB口
xdataunsignedcharPC_at_0x6002;//8255的PC口
xdataunsignedcharCTL_at_0x6003;//8255控制字地址
unsignedcharLEDBUFF[8];
codeunsignedcharKeyTable[]=//键值表
{
0x7E,0xBE,0xDE,0xEE,
0x7D,0xBD,0xDD,0xED,
0x7B,0xBB,0xDB,0xEB,
0x77,0xB7,0xD7,0xE7
};
codeunsignedcharSWEEP[]=//扫描信号
{
0x7f,0xBf,0xDF,0xEF
};
codeunsignedcharLEDMAP[]=//八段显示管键码
{
0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71
};
//延时
voiddelay(unsignedintCNT)
{
unsignedchari;
while(CNT--!
=0)
for(i=100;i!
=0;--i);
}
unsignedcharTestKey()
{
unsignedchari,Temp;
Temp=PC;//PC是变化的
i=~Temp&0x0f;
returni;
unsignedcharGetKey()
{
unsignedchari,Num=16;
if(TestKey())
{
for(i=0;i<16;i++)
{
if(KeyTable[i]==PC)//有键按下时
{
Num=i;//确定键值
do
{
delay(200);//消除键抖动
}
while(TestKey());//等待按键松开
returnNum;//返回键值
}
}
}
returnNum;
}
voidDisplayResult(unsignedcharNum)
{
LEDBUFF[7]=LEDMAP[Num];
}
voidDisplayLED()
{
unsignedchari;
for(i=0;i<8;++i)
{
LEDSEL=SelectLed[i];
PB=LEDBUFF[i];
delay
(1);
}
}
实验三.步进电机单片机控制实验
(1)
实验目的:
1、掌握步进电机控制基本方法
2、测试出步进电机工作频率范围,确定其正常工作中脉冲频率
3、掌握步进电机加减速控制方法
实验内容:
1、编制步进电动机正反转实验:
采用三相六拍和三相三拍控制方式分别编写步进电动机正反转程序。
2、步进电动机的频率特性测定实验:
改变延时大小,测试步进电动机频率特性,找出不失步的最大频率。
3、编制步进电动机加减速程序,要求实现梯形加减速曲线。
4、结合键盘显示程序编制X、Y轴点动实验:
实现+X、+Y、-X、-Y四个方向的点动功能,按下某个功能键+X,工作台即向该正方向运动,松开该键工作台停止运动。
实验结果:
控制电机直线插补子程序:
voidline(intx1,inty1,intx2,inty2)
{
intdx,dy,n,k,i,f;
intx,y;
dx=abs(x2-x1);
dy=abs(y2-y1);
n=dx+dy;
if(x2>=x1){
k=y2>=y1?
1:
4;
x=x1;
y=y1;
}else{
k=y2>=y1?
2:
3;
x=x2;
y=y2;
}
for(i=0,f=0;iif(f>=0)
switch(k){
case1:
f-=dy;
PA=0xff;delay
(2);//X轴正转
PA=0xfe;delay
(2);
break;
case2:
f-=dx;
PA=0xff;delay
(2);
PA=0xef;delay
(2);//Y轴正转
break;
case3:
f-=dy;
PA=0xfd;delay
(2);
PA=0xfc;delay
(2);//X轴反转
break;
case4:
f-=dx;
PA=0xdf;delay
(2);
PA=0xcf;delay
(2);//Y轴反转
break;
}
else
switch(k){
case1:
f+=dx;
PA=0xff;delay
(2);
PA=0xef;delay
(2);//Y轴正转
break;
case2:
f+=dy;
PA=0xfd;delay
(2);
PA=0xfc;delay
(2);//X轴反转
break;
case3:
f+=dx;
PA=0xdf;delay
(2);
PA=0xcf;delay
(2);//Y轴反转
break;
case4:
f+=dy;
PA=0xff;delay
(2);//X轴正转
PA=0xfe;delay
(2);
break;
}
}
实验四.步进电机单片机控制实验
(2)
实验目的:
1、掌握运动控制系统常用控制方法
2、掌握直线的逐点比较插补方法
实验内容:
1、编制第一象限直线插补程序。
2、结合键盘显示程序,输入直线的终点坐标值Xe、Ye,按下直线键后进行插补运动,检验图纸上所走轨迹是否与设定直线相符合。
3、加入插补过程数据动态显示功能,插补过程中动态显示X、Y任意某轴坐标,或者总步数值。
4、编制四象限直线插补程序。
5、编制一象限圆弧插补程序。
实验结果:
圆弧插补子程序:
voidcircle(intx0,inty0,intxe,intye)
{
intxm,ym,rns;
intnxy;
intfm=0;
xm=x0;
ym=y0;
nxy=abs(xe-xm)+abs(ye-ym);
if(xe>xm)
{
if(ye>ym)
{
if(xm>=0)
{
rns=8;
}
else
{
rns=2;
}
}
else
{
if(xm>=0)
{
rns=1;
}
else
{
rns=7;
}
}
}
else
{
if(ye>ym)
{
if(xe>=0)
{
rns=5;
}
else
{
rns=3;
}
}
else
{
if(xe>=0)
{
rns=4;
}
else
{
rns=6;
}
}
}
while(nxy--)
{
if(fm>=0)
{
if(rns==1||rns==3||rns==6||rns==8)
{
if(rns==1||rns==6)
{
PA=0xdf;delay(5);
PA=0xcf;delay(5);//-y
}
elseif(rns==3||rns==8)
{
PA=0xff;delay(5);
PA=0xef;delay(5);//+y
}
fm=fm-2*abs(ym)+1;
ym=abs(ym)-1;
}
elseif(rns==2||rns==4||rns==5||rns==7)
{
if(rns==2||rns==7)
{
PA=0xff;delay(5);//+x
PA=0xfe;delay(5);
}
elseif(rns==4||rns==5)
{
PA=0xfd;delay(5);//-x
PA=0xfc;delay(5);
}
fm=fm-2*abs(xm)+1;
xm=abs(xm)-1;
}
}
else
{
if(rns==1||rns==3||rns==6||rns==8)
{
if(rns==1||rns==8)
{
PA=0xff;delay(5);//+x
PA=0xfe;delay(5);
}
elseif(rns==3||rns==6)
{
PA=0xfd;delay(5);//-x
PA=0xfc;delay(5);
}
fm=fm+2*abs(xm)+1;
xm=abs(xm)+1;
}
elseif(rns==2||rns==4||rns==5||rns==7)
{
if(rns==2||rns==5)
{
PA=0xff;delay(5);//+y
PA=0xef;delay(5);
}
elseif(rns==4||rns==7)
{
PA=0xdf;delay(5);//-y
PA=0xcf;delay(5);
}
fm=fm+2*abs(ym)+1;
ym=abs(ym)+1;
}
}
}
}
实验五.单片机控制位置检测实验
实验目的:
1、熟悉光电开关的用法
2、掌握一般运动控制系统中位置检测方法
3、掌握相应检测电路原理。
实验内容:
1、测试各个光电开关对应位
2、编制运动中的检测程序
实验六、单片机运动控制系统总体实验
实验目的:
1、培养学生系统设计能力。
2、掌握一般系统功能模块集成方法和调试方法。
3、了解单片机应用系统从设计到应用实际操作流程。
实验内容:
1、由键盘显示程序将各个功能模块综合到一起。
2、调试好程序后,烧入EPROM,脱机运行。
实验总结:
通过这次实验,复习了去年单片机实习的内容,巩固了对单片机各模块的编程操作,掌握了电机驱动器的工作原理和步进电机的工作方式等知识,在实习过程中,理论与实践相结合,加强了对理论知识的理解和掌握,和同学进行团队合作完成实验,也锻炼了我们的团队意识,为在以后的学习和工作能够更好地利用书本知识打下基础。
在实验中,单片机控制位置检测实验这个部分完成地不是很好,需要在以后的学习中,加强这方面知识的学习,使自己的实验结果更加完美。
程序附录:
#include//库文件
#include
#include
#include
#include
#include
sbitP32=P3^2;
#defineLEDLen8//六个八段管
#definemode0x81//8255工作模式//方式0,A口、B口及上C口作为输出,下C口作为输入
#defineLEDSELP2
#defineLEDSEL_00x60//八段管地址
#defineLEDSEL_10x64
#defineLEDSEL_20x68
#defineLEDSEL_30x6C
#defineLEDSEL_40x70
#defineLEDSEL_50x74
#defineLEDSEL_60x78
#defineLEDSEL_70x7C
#defineucharunsignedchar
#defineuintunsignedint
//codeucharhang[]={0X01,0X02,0X04,0X08,0X10,0X20,0X40,0X80};
codeucharlie[][8]={0xFF,0x99,0x00,0x00,0x00,0x81,0xC3,0xE7,
0xFF,0xFF,0xDB,0x81,0x81,0xC3,0xE7,0xFF};
#defineTick200
#defineT100us(256-200)
unsignedintC100us=Tick;//200us记数单元
unsignedcharBit=0;
unsignedcharSelectLed[LEDLen]=
{
LEDSEL_0,LEDSEL_1,LEDSEL_2,LEDSEL_3,LEDSEL_4,LEDSEL_5,LEDSEL_6,LEDSEL_7
};
xdataunsignedcharCS8255_at_0x60;//8255
xdataunsignedcharPA_at_0x6000;//8255的PA口
xdataunsignedcharPB_at_0x6001;//8255的PB口
xdataunsignedcharPC_at_0x6002;//8255的PC口
xdataunsignedcharCTL_at_0x6003;//8255控制字地址
unsignedcharLEDBUFF[8];
codeunsignedcharKeyTable[]=//键值表
{
0x7E,0xBE,0xDE,0xEE,
0x7D,0xBD,0xDD,0xED,
0x7B,0xBB,0xDB,0xEB,
0x77,0xB7,0xD7,0xE7
};
codeunsignedcharSWEEP[]=//扫描信号
{
0x7f,0xBf,0xDF,0xEF
};
codeunsignedcharLEDMAP[]=//八段显示管键码
{
0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71
};
voiddelay(unsignedintCNT)
{
unsignedchari;
while(CNT--!
=0)
for(i=10