您好,欢迎访问三七文档
当前位置:首页 > IT计算机/网络 > 其它相关文档 > 基于51单片机实现的电梯模型设计
电梯模型设计报告学院:自动化学院队名:xxx队员:xxx日期:2009.11.20一、概述电梯模型以51为核心处理器,步进电机为控制电机,用L298N搭建驱动电机模块,结合光电传感器实现对电梯的上升,下降,准确平层各种运行方式的控制。利用矩阵键盘、ISD1760语音芯片,数码管等各种功能模块实现电梯的扩展功能及人机交互功能。二、方案论证方案一:直流伺服电机+光电传感控制方式。优点:直流电机速度可以平滑调节,自带编码盘可以记录电梯运行位移,速度调节范围大。缺点:用编码盘测量位移误差较大,对CPU运算处理要求较高而且直流电机运行时带有一定惯性,对平层带来较大难度。方案二:步进电机+光电传感控制。优点:步进电机可以用脉冲方式控制轿厢位移,配合光电传感模块可以准确实现轿厢平层;步进电机为输入脉冲时,电机可以卡死不发生转动,使得电梯在楼层处安全停止,等待相应操作。缺点:步进电机转速较慢,速度控制要通过该变脉冲频率来调节,控制电路要求较高。由于本作品为电梯模型,速度要求不高,通过单片机可以方便输出电机所需脉冲,配合L298芯片可以实现对步进电机的完美控制,所以我们选择方案二。三、详细设计方案1.楼层模型设计电梯模型采用易于加工的木材,选用1.2米长的木板作为模拟楼层,底座用三角架固定,确保电梯运行过程不会出现模型摇动现象。电梯轨道处拉两根铁丝作为电梯导轨,保障电梯的运动轨迹。轿厢用纸盒模拟代替,盒子敞开一面,可以放入物品,模拟乘客进出电梯。2.驱动电路模块控制电机选用四相步进电机,步进角为1.8度。步进电机可以通过直流斩波改变顺序控制电机正反传,51单片机的定时/计数器可以模拟输出4路直流斩波,通过步进电机驱动电路控制步进电机。驱动电路以L298N驱动芯片为核心部件,L298N芯片的电平电压与51单片机兼容,驱动电压可达50V完全可以驱动电梯模型所用控制电机。驱动电路如下图:四个输出端分别接步进电机的四个脉冲输入端,通过定时计数器模拟输出的四路直流斩波控制L298N的输出端口,从而可以方便的控制步进电机。电机的运转速度可以通过调节直流斩波的频率来控制。同时,通过对脉冲个数的控制,也可以粗略了解轿厢运行的位移,配合光电模块,将使电梯平层更加便捷、准确。3.光电传感模块为了确保准确平层,每层楼都安装红外对管,用于检测轿厢是否运行至楼层,若检测到轿厢运行至目标楼层,则像CPU发出中断请求,执行电梯停止运行操作。红外对管原理:红外对管由发射和接受两部分组成,发射的红外线京轿厢反射后被接受管接受后,引起电平跳变CPU根据此信号做出相应命令。电路原理图如下:4.楼层按键设计为了模拟乘客在轿厢内对电梯的控制,我们扩展了一个4*4的键盘,用于乘客选择楼层及轿厢内的一些控制按钮,考虑到实验的原因,控制键盘并未装在轿厢内部,而是引到模型外面,便于演示。本模型用到两个4*4矩阵键盘,一个用于楼层级轿厢控制,另一个用于密码和其他设置,接口原理相同。5.语音播放模块本模型加入了语音播放功能,及时播放轿厢运行状况,所有录音内容均为小组设计,是本模型人机交互人性化设计一个重要部分。语音播放模块以ISD1760语音芯片为核心,ISD1700系列芯片是华邦公司新推出的单片优质语音录放电路,该芯片提供多项新功能,包括内置专利的多信息管理系统,新信息提示。语音芯片提前录入“欢迎乘坐长颈鹿电梯”、报告层数的语音数据,电梯平层后,CPU会输出脉冲控制芯片,喇叭发出欢迎语音和层数提示。ISD电特性及应用电路如下:ISD1700电特性:.工作电压:2.4V-5.5V,,最高不能超过6V.静态电流:0.5-1μA.工作电流:20mA电路图如下:语音变化信号由15脚输出,采用简单的三极管电流放大电路,接入小喇叭,实现语音输出。小喇叭参数:8欧,0.5W。6.电源切换部分考虑到紧急停电情况,用电池作为备用电源,停电时用继电器切换至备用电源,在备用电源供电情况下,控制轿厢运行到附近楼层,若检测到不是短时停电,则控制电梯在备用电源供电下运行。电路原理图如下:7.负载控制部分本模型采用光电方式控制额定负载,输出电压信号经AD转换为0-255之间的数字信号输入CPU。单片机将输入值的大小与设定额定值比较,若超过额定值,则发出报警音,同时像电机控制CPU发送超载信号,电机控制CPU停止运行。若要改变额定负载值,可以用相应按键设置,改变程序中存储的额定负载值即可。8.中央处理器部分本作品使用3片51单片机配合使用来控制整个系统,单片机之间通过通信达到信息传递。单片机接口原理图(主要功能CPU)如下:主控CPU;电机控制CPU:功能扩展CPU:四、调试过程各个模块均可以独立正常运行,通过单片机系统总线将各个模块连接起来,实现了预期结果。五、程序流程图主板CPU:否是开始初始化向电机控制CPU发送相应信息扫描是否有脉冲(呼叫楼层)输入?电机控制CPU:上下扫描判断轿厢位置初始化开始控制电机正传扫描平层传感器判断电梯运行方向根据呼叫楼层及电梯运行方向确定目标楼层(符合电梯模型运行规则)判断目标楼层在上面还是下面控制电机正传播放提示音电机停止,平层是否到达目标楼层功能扩展CPU:否是否是否密码验证程序初始化扫描键盘开始是否有键按下是否密码按键键设置额定负载是否超重报警并向电机控制CPU发送超重信号密码相关控制(修改密码,电梯不接受呼叫)六、程序清单主控制CPU:#includereg52.hsbitP0_0=P0^0;sbitP0_1=P0^1;sbitP1_2=P1^2;sbitP1_3=P1^3;sbitP1_4=P1^4;sbitP1_5=P1^5;sbitP1_6=P1^6;sbitP1_7=P1^7;sbitP3_0=P3^0;sbitP3_1=P3^1;sbitP3_4=P3^4;sbitP3_5=P3^5;/*******函数声明********/voidinit();//初始化?voidkeyscan();//键盘扫描voiddelay1ms(unsignedintcount);//延时程序voidrunto(unsignedintlou);//电梯运行程序voidshow();//codeunsignedcharLedTab[]=//{//0xc0,0xf9,0xa4,0xb0,//0x99,0x92,0x82,0xf8,//0x80,0x90,0x88,0x83,//0xc6,0xa1,0x86,0x8e,0xff//};/*数码管十六进制编码表*/codeunsignedcharLedTab[]={0xff,0x7e,0xbe,0xde,0xee,0xed,0x77,0x7b,0x7d,0xbd,0xdd,0xbb,0xdb,0xeb,0xb7,0xd7,0xe7};/*数码管十六进制编码表**/******变量声明********/staticintfangxiang=1,weizhi=0,mudi,shijian=3000;//电梯的状态,位置staticunsignedintshang[6]={0,0,0,0,0,0},xia[6]={0,0,0,0,0,0},led[17];//各层的信息,“1”表示有人按键intm,n,k,temp;unsignedchartext;voidmain(){init();P1=0x0f;while(1){while(P0_1==0){EA=0;}while(P0_0==0){EA=0;}while((P0_0==1)&&(P0_1==1)){EA=1;show();if(fangxiang==1)//从当前位置向上检测,当检测到最近呼叫层时向CPU3发出目标信号{for(m=weizhi;m6;m++)if(shang[m]==1){temp=1;mudi=m;SBUF=mudi;//shang[m]=0;gotoA;}fangxiang=-1;//当向上没有检测到呼叫时,从6楼往下检测for(m=5;m=0;m--)if(xia[m]==1){temp=0;mudi=m;SBUF=mudi;//xia[m]=0;gotoA;}fangxiang=1;//当向上没有检测到呼叫时从1楼网上检测for(m=0;mweizhi;m++)if(shang[m]==1){temp=1;mudi=m;SBUF=mudi;//shang[m]=0;gotoA;}}elseif(fangxiang==-1)//从当前位置向上检测,当检测到最近呼叫层时向CPU3发出目标信{for(m=weizhi;m=0;m--)if(xia[m]==1){temp=0;mudi=m;SBUF=mudi;//xia[m]=0;gotoA;}fangxiang=1;for(m=0;m6;m++)if(shang[m]==1){temp=1;mudi=m;SBUF=mudi;//shang[m]=0;gotoA;}fangxiang=-1;for(m=5;mweizhi;m--)if(xia[m]==1){temp=0;mudi=m;SBUF=mudi;//xia[m]=0;gotoA;}}A:show();if(weizhi==mudi)//当到达目的层时注销呼叫标记{if(temp==1){shang[mudi]=0;led[mudi+6]=0;led[mudi+11]=0;}elseif(temp==0){xia[mudi]=0;led[mudi+1]=0;led[mudi+11]=0;}delay1ms(shijian);}}}}/****程序初始化*****/voidinit(){EA=1;//开总中断EX0=1;//开处部中断0TH0=(65535-20000)/256;TL0=(65535-20000)%256;ET0=1;//开计时器0TR0=1;//开机计时TMOD=0x21;//设置定时器1为工作方式2TH1=0xfd;TL1=0xfd;TR1=1;REN=1;SM0=0;SM1=1;ES=1;}/*外部中断0*/voidinto0()interrupt0using0{shijian+=2000;if(shijian=8000)shijian=3000;}/*计时器0*/voidtimer0()interrupt1using1{TH0=(65535-20000)/256;TL0=(65535-20000)%256;show();keyscan();}/*计时器1*/voidtimer1()interrupt3using3{}voidser()interrupt4{if(RI==1){RI=0;text=SBUF;weizhi=text;}if(TI==1){TI=0;}}voidshow(){unsignedintr;for(r=0;r=16;r++){if(led[r]==1)P1=LedTab[r];}}/*延时程序*/voiddelay1ms(unsignedintcount){unsignedinti,j;for(i=0;icount;i++)for(j=0;j120;j++);}/*键盘扫描*/voidkeyscan(){inttemp;show();P2=0xfe;temp=P2;temp=temp&0xf0;while(temp!=0xf0){delay1ms(5);temp=P2;temp=temp&0xf0;while(temp!=0xf0){temp=P2;switch(temp){case0xee:shang[0]=1;led[6]=1;break;case0xde:{if(fangxiang==1)shang[3]=1;elsexia[3]=1;led[14]=1;}break;case0xbe:{if(fangxiang==1)shang[4]=1;elsexia[4]=1;led[15]=1;}break;case0x7e:{if(fangxiang==1)shang[5]=1;elsexia[
本文标题:基于51单片机实现的电梯模型设计
链接地址:https://www.777doc.com/doc-4826622 .html