电梯模型设计报告.docx
《电梯模型设计报告.docx》由会员分享,可在线阅读,更多相关《电梯模型设计报告.docx(23页珍藏版)》请在冰豆网上搜索。
电梯模型设计报告
电梯模型设计报告
————————————————————————————————作者:
————————————————————————————————日期:
电梯模型设计报告
学院:
自动化科学与工程学院
队名:
酱油小分队
队员:
谭斌冠何健军闫家炜
时间:
2011-11-16
1、概述
电梯模型以51单片机作为核心处理器,步进电机为控制电机,用ULN2003电流驱动矩阵对步进电机进行驱动,结合光电传感器达到对电梯进行上、下和停止的动作,并确保平层精确度。
利用独立键盘和数码管等更好地实现人机互动交流。
2、方案论证
步进电机+光电传感控制
2003芯片工作电压5V,可以很好地与单片机配合工作。
队长,交给你了==……
3、详细设计反感
1、楼层模型设计
楼层模型选用质地较轻、易于加工的轻型胶合板制作。
整个箱体用木块进行加固,确保其稳定性。
轿箱轨道采用两根钢丝(尼龙绳?
),确保轿箱运行过程中不会出现晃动等情况。
轿箱采用轻纸盒加木质配种职称,保证了运行的稳定。
2、驱动电路模块
采用步进电机28BYJ48型四相八拍电机,电压为DC5V—DC12V。
当对步进电机施加一系列连续不断的控制脉冲时,它可以连续不断地转动。
每一个脉冲信号对应步进电机的某一相或两相绕组的通电状态改变一次,也就对应转子转过一定的角度(一个步距角)。
当通电状态的改变完成一个循环时,转子转过一个齿距。
四相步进电机可以在不同的通电方式下运行。
由于单片机接口信号不够大需要通过ULN2003放大再连接到相应的电机接口。
图片
(加图片)
3、光电传感模块
电梯轿箱部分安装有红外对管的发射管,模型的每个楼层分别安装有接收管,以此确保平层准确。
轿箱发出的红外线经楼层上的接受管接收后,引起电平变化,CPU以此信号来做出相应命令。
(图)
4、楼层按键设计
为模拟乘客在轿箱内对电梯的控制,设计了有5个按键的独立键盘,分别对应1-5楼,基于实验原因,放置于模型外部。
每个楼层各有独立键盘来对轿箱进行呼叫。
5、中央处理器部分
采用两个51单片机配合控制整个系统。
分别为主控CPU、电机驱动CPU。
CPU之间有通信。
主控CPU:
(图)
驱动CPU:
(图)
4、调试过程
各模块工作正常,达到预期目标。
5、程序流程图
(图)
6、程序清单
主控CPU程序:
#include
#defineuncharunsignedchar
#defineunintunsignedint
#defineshumaP0
sbitkey1=P1^0;//前四个上行,后四个下行
sbitkey2=P1^1;
sbitkey3=P1^2;
sbitkey4=P1^3;
sbitkey5=P1^4;
sbitkey6=P1^5;
sbitkey7=P1^6;
sbitkey8=P1^7;
sbitkey9=P2^0;//内部按键
sbitkey10=P2^1;
sbitkey11=P2^2;
sbitkey12=P2^3;
sbitkey13=P2^4;
sbitsend1=P2^5;//连接接受单片机
sbitsend2=P2^6;
sbitsend3=P2^7;
sbitLEDA=P3^3;//红外对管,一次为一到五楼
sbitLEDB=P3^4;
sbitLEDC=P3^5;
sbitLEDD=P3^6;
sbitLEDE=P3^7;
uncharcodetable[]={0xD7,0x32,0x92,0xD4,0x98};//楼层?
voidkeyscan1();
voidkeyscan2();
voidneibu();
voidjudge1();
voidjudge2();
voidredwai();
voidduan();
intm;//记忆是否被呼叫过
intn;//记忆被呼叫的楼层
intb;//数码管
intx;//控制电机
inty1[5];//外部上行按键
inty2[5];//外部下行按键
intf[5];//内部按键
ints=0;//记忆是否有呼叫,采取s++,当有楼层呼叫时加1,到达该楼层时便减1
//intp=0;//记忆内部是否有呼叫
voiddelay(inti)
{
intj;
for(i;i>0;i--)
for(j=0;j<325;j++);//1.09ms
}
voidkeyscan1()//上行键盘扫描
{
P1=0xff;
if(key1==0)
{
delay
(1);
if(key1==0)
{
y1[0]=1;
if(m)
{
n=1;
m=0;
}
while(!
key1);
}
}
if(key2==0)
{
delay
(1);
if(key2==0)
{
y1[1]=2;
if(m)
{
n=2;
m=0;
}
while(!
key2);
}
}
if(key3==0)
{
delay
(1);
if(key3==0)
{
y1[2]=3;
if(m)
{
n=3;
m=0;
}
while(!
key3);
}
}
if(key4==0)
{
delay
(1);
if(key4==0)
{
y1[3]=4;
if(m)
{
n=4;
m=0;
}
while(!
key4);
}
}
}
voidkeyscan2()//下行键盘扫描
{
P1=0xff;
if(key5==0)
{
delay
(1);
if(key5==0)
{
y2[1]=2;
if(m)
{
n=2;
m=0;
}
while(!
key5);
}
}
if(key6==0)
{
delay
(1);
if(key6==0)
{
y2[2]=3;
if(m)
{
n=3;
m=0;
}
while(!
key6);
}
}
if(key7==0)
{
delay
(1);
if(key7==0)
{
y2[3]=4;
if(m)
{
n=4;
m=0;
}
while(!
key7);
}
}
if(key8==0)
{
delay
(1);
if(key8==0)
{
y2[4]=5;
if(m)
{
n=5;
m=0;
}
while(!
key8);
}
}
}
voidneibu()
{
if(key9==0)
{
delay
(1);
if(key9==0)
{
f[0]=1;
if(m)
{
n=1;
m=0;
}
while(!
key9);
}
}
if(key10==0)
{
delay
(1);
if(key10==0)
{
f[1]=2;
if(m)
{
n=2;
m=0;
}
while(!
key10);
}
}
if(key11==0)
{
delay
(1);
if(key11==0)
{
f[2]=3;
if(m)
{
n=3;
m=0;
}
while(!
key11);
}
}
if(key12==0)
{
delay
(1);
if(key12==0)
{
f[3]=4;
if(m)
{
n=4;
m=0;
}
while(!
key12);
}
}
if(key13==0)
{
delay
(1);
if(key13==0)
{
f[4]=5;
if(m)
{
n=5;
m=0;
}
while(!
key13);
}
}
}
voidmotor1()
{
if(x==1)
{
send1=0;
delay
(2);
send1=1;
}
if(x==2)
{
send2=0;
delay
(2);
send2=1;
}
if(x==0)
{
send3=0;
delay
(2);
send3=1;
}
}
voidpanduan()
{
inti;
s=0;
for(i=0;i<5;i++)
{
if(y1[i]!
=0)
s++;
if(y2[i]!
=0)
s++;
if(f[i]!
=0)
s++;
}
}
voidredwai()//红外对管
{
//LEDA=0;
//LEDB=0;
//LEDC=0;
//LEDD=0;
//LEDE=0;
if(LEDA==0)
{
b=1;
duan();
shuma=0x00;
shuma=table[0];
}
if(LEDB==0)
{
b=2;
duan();
shuma=0x00;
shuma=table[1];
}
if(LEDC==0)
{
b=3;
duan();
shuma=0x00;
shuma=table[2];
}
if(LEDD==0)
{
b=4;
duan();
shuma=0x00;
shuma=table[3];
}
if(LEDE==0)
{
b=5;
duan();
shuma=0x00;
shuma=table[4];
}
}
voidmain()
{
while
(1)
{
if(s==0)//电梯停止,则重新激活
m=1;
keyscan1();
keyscan2();
neibu();
panduan();
redwai();
if(n!
=0)//纯粹的只是为了开启电梯,电梯一动,它的历史使命就完成啦。
{
if(bx=1;
if(b==n)//轿厢正好在呼叫楼层,轿厢停止
//x=0;
m=1;
if(b>n)//轿厢在呼叫楼层上面,轿厢准备下行
x=2;
n=0;
}
motor1();
}
}
voidduan()
{