- 1、本文档共18页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
电梯模型设计规划报告
电梯模型设计报告
学院:自动化科学与工程学院
队名:酱油小分队
队员:谭斌冠 何健军 闫家炜
时间:2011-11-16
概述
电梯模型以51单片机作为核心处理器,步进电机为控制电机,用ULN2003电流驱动矩阵对步进电机进行驱动,结合光电传感器达到对电梯进行上、下和停止的动作,并确保平层精确度。利用独立键盘和数码管等更好地实现人机互动交流。
方案论证
步进电机+光电传感控制
2003芯片工作电压5V,可以很好地与单片机配合工作。
队长,交给你了= =……
详细设计反感
楼层模型设计
楼层模型选用质地较轻、易于加工的轻型胶合板制作。整个箱体用木块进行加固,确保其稳定性。轿箱轨道采用两根钢丝(尼龙绳?),确保轿箱运行过程中不会出现晃动等情况。轿箱采用轻纸盒加木质配种职称,保证了运行的稳定。
驱动电路模块
采用步进电机28BYJ48型四相八拍电机,电压为DC5V—DC12V。当对步进电机施加一系列连续不断的控制脉冲时,它可以连续不断地转动。每一个脉冲信号对应步进电机的某一相或两相绕组的通电状态改变一次,也就对应转子转过一定的角度(一个步距角)。当通电状态的改变完成一个循环时,转子转过一个齿距。四相步进电机可以在不同的通电方式下运行由于单片机接口信号不够大需要通过ULN2003放大再连接到相应的电机接口
图片
(加图片)
光电传感模块
电梯轿箱部分安装有红外对管的发射管,模型的每个楼层分别安装有接收管,以此确保平层准确。轿箱发出的红外线经楼层上的接受管接收后,引起电平变化,CPU以此信号来做出相应命令。
(图)
楼层按键设计
为模拟乘客在轿箱内对电梯的控制,设计了有5个按键的独立键盘,分别对应1-5楼,基于实验原因,放置于模型外部。
每个楼层各有独立键盘来对轿箱进行呼叫。
中央处理器部分
采用两个51单片机配合控制整个系统。分别为主控CPU、电机驱动CPU。CPU之间有通信。
主控CPU:(图)
驱动CPU:(图)
调试过程
各模块工作正常,达到预期目标。
程序流程图
(图)
程序清单
主控CPU程序:
#includereg52.h
#define unchar unsigned char
#define unint unsigned int
#define shuma P0
sbit key1=P1^0;//前四个上行,后四个下行
sbit key2=P1^1;
sbit key3=P1^2;
sbit key4=P1^3;
sbit key5=P1^4;
sbit key6=P1^5;
sbit key7=P1^6;
sbit key8=P1^7;
sbit key9=P2^0;//内部按键
sbit key10=P2^1;
sbit key11=P2^2;
sbit key12=P2^3;
sbit key13=P2^4;
sbit send1=P2^5;//连接接受单片机
sbit send2=P2^6;
sbit send3=P2^7;
sbit LEDA=P3^3;//红外对管,一次为一到五楼
sbit LEDB=P3^4;
sbit LEDC=P3^5;
sbit LEDD=P3^6;
sbit LEDE=P3^7;
unchar code table[] = {0xD7,0x32,0x92,0xD4,0x98};//楼层?
void keyscan1();
void keyscan2();
void neibu();
void judge1();
void judge2();
void redwai();
void duan();
int m;//记忆是否被呼叫过
int n;//记忆被呼叫的楼层
int b;//数码管
int x;//控制电机
int y1[5];//外部上行按键
int y2[5];//外部下行按键
int f[5];//内部按键
int s=0;//记忆是否有呼叫,采取s++,当有楼层呼叫时加1,到达该楼层时便减1
//int p=0;//记忆内部是否有呼叫
void delay(int i)
{
int j;
for(i;i0;i--)
for(j=0;j325;j++);//1.09ms
}
void keyscan1()//上行键盘扫描
{
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;
文档评论(0)