欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    基于51单片机实现的电梯模型设计(共42页).doc

    • 资源ID:13352884       资源大小:626.50KB        全文页数:42页
    • 资源格式: DOC        下载积分:20金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要20金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    基于51单片机实现的电梯模型设计(共42页).doc

    精选优质文档-倾情为你奉上电梯模型设计报告学院:自动化学院队名: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:#include<reg52.h>sbit P0_0=P00;sbit P0_1=P01;sbit P1_2=P12;sbit P1_3=P13;sbit P1_4=P14;sbit P1_5=P15;sbit P1_6=P16;sbit P1_7=P17;sbit P3_0=P30;sbit P3_1=P31;sbit P3_4=P34;sbit P3_5=P35;/*函数声明*/void init();/初始化?void keyscan();/键盘扫描void delay1ms(unsigned int count);/延时程序void runto(unsigned int lou);/电梯运行程序 void show();/code unsigned char LedTab=/0xc0, 0xf9, 0xa4, 0xb0,/0x99, 0x92, 0x82, 0xf8, /0x80, 0x90, 0x88, 0x83, /0xc6, 0xa1 ,0x86 ,0x8e, 0xff/;/*数码管十六进制编码表*/code unsigned char LedTab=0xff, 0x7e, 0xbe, 0xde, 0xee,0xed, 0x77, 0x7b, 0x7d, 0xbd, 0xdd, 0xbb, 0xdb, 0xeb, 0xb7 ,0xd7 ,0xe7 ;/*数码管十六进制编码表*/*变量声明*/static int fangxiang=1,weizhi=0,mudi,shijian=3000;/电梯的状态,位置static unsigned int shang6=0,0,0,0,0,0,xia6=0,0,0,0,0,0,led17;/各层的信息,“1”表示有人按键int m,n,k,temp;unsigned char text;void main()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;m<6;m+)if(shangm=1)temp=1;mudi=m;SBUF=mudi;/shangm=0;goto A;fangxiang=-1;/当向上没有检测到呼叫时,从6楼往下检测for(m=5;m>=0;m-)if(xiam=1)temp=0;mudi=m;SBUF=mudi;/xiam=0;goto A;fangxiang=1;/当向上没有检测到呼叫时从1楼网上检测for(m=0;m<weizhi;m+)if(shangm=1)temp=1;mudi=m;SBUF=mudi;/shangm=0;goto A; else if(fangxiang=-1)/从当前位置向上检测,当检测到最近呼叫层时向CPU3发出目标信for(m=weizhi;m>=0;m-)if(xiam=1)temp=0;mudi=m;SBUF=mudi;/xiam=0; goto A;fangxiang=1;for(m=0;m<6;m+)if(shangm=1)temp=1;mudi=m;SBUF=mudi;/shangm=0; goto A;fangxiang=-1;for(m=5;m>weizhi;m-)if(xiam=1)temp=0;mudi=m;SBUF=mudi;/xiam=0; goto A; A:show();if(weizhi=mudi)/当到达目的层时注销呼叫标记if(temp=1)shangmudi=0;ledmudi+6=0;ledmudi+11=0;else if(temp=0)xiamudi=0;ledmudi+1=0;ledmudi+11=0;delay1ms(shijian);/*程序初始化*/void init()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 */void into0() interrupt 0 using 0shijian+=2000;if(shijian>=8000)shijian=3000;/*计时器0*/void timer0() interrupt 1 using 1TH0=(65535-20000)/256;TL0=(65535-20000)%256;show();keyscan();/*计时器1*/void timer1() interrupt 3 using 3void ser() interrupt 4if(RI=1)RI=0;text=SBUF;weizhi=text;if(TI=1)TI=0;void show()unsigned int r;for(r=0;r<=16;r+)if(ledr=1)P1=LedTabr;/*延时程序*/void delay1ms(unsigned int count)unsigned int i,j;for(i=0;i<count;i+)for(j=0;j<120;j+);/*键盘扫描*/void keyscan()int temp;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)case 0xee:shang0=1;led6=1;break;case 0xde:if(fangxiang=1)shang3=1;else xia3=1;led14=1;break;case 0xbe:if(fangxiang=1)shang4=1;else xia4=1;led15=1;break;case 0x7e:if(fangxiang=1)shang5=1;else xia5=1;led16=1;break;while(temp!=0xf0)temp=P2;temp=temp&0xf0; P2=0xfd;temp=P2;temp=temp&0xf0;while(temp!=0xf0)delay1ms(5);temp=P2;temp=temp&0xf0;while(temp!=0xf0)temp=P2;switch(temp)case 0xed:if(fangxiang=1)shang0=1;else xia0=1;led11=1;break;case 0xdd:if(fangxiang=1)shang1=1;else xia1=1;led12=1;break;case 0xbd:if(fangxiang=1)shang2=1;else xia2=1;led13=1;break;case 0x7d:xia5=1;led5=1;break;while(temp!=0xf0)temp=P2;temp=temp&0xf0;P2=0xfb;temp=P2;temp=temp&0xf0;while(temp!=0xf0)delay1ms(5);temp=P2;temp=temp&0xf0;while(temp!=0xf0)temp=P2;switch(temp)case 0xeb:shang1=1;led7=1;break;case 0xdb:shang2=1;led8=1;break;case 0xbb:shang3=1;led9=1;break;case 0x7b:shang4=1;led10=1;break;while(temp!=0xf0)temp=P2;temp=temp&0xf0;P2=0xf7;temp=P2;temp=temp&0xf0;while(temp!=0xf0)delay1ms(5);temp=P2;temp=temp&0xf0;while(temp!=0xf0)temp=P2;switch(temp)case 0xe7:xia1=1;led1=1;break;case 0xd7:xia2=1;led2=1;break;case 0xb7:xia3=1;led3=1;break;case 0x77:xia4=1;led4=1;break;while(temp!=0xf0)temp=P2;temp=temp&0xf0; 电机控制CPU:#include<reg52.h>sbit P0_0=P00;sbit P0_1=P01;sbit P0_2=P02;sbit P0_3=P03;sbit P0_4=P04;sbit P0_5=P05;sbit P0_6=P06;sbit P0_7=P07;sbit P1_5=P15;sbit P1_6=P16;sbit P1_7=P17;sbit P2_0=P20;sbit P2_1=P21;sbit P2_2=P22;sbit P2_5=P25;sbit P2_6=P26;sbit P2_4=P24;sbit P2_7=P27;sbit P3_0=P30;sbit P3_1=P31;sbit P3_2=P32;sbit P3_5=P35;sbit P3_6=P36;sbit P3_7=P37;static int step_n,fangxiang=1,k=1,mudi=3,weizhi=0;/K=1时电机运行unsigned char text,temp;/中间变量,存放通信口收到的信息void init();void step();/电机运行程序void play(int count);void delay1ms(unsigned int count);/延时程序void check();/红外扫描int shudu=5,yuyin;code unsigned char m_ucLedTab=0x7e,0xc4,0x54,0x72,0x51,0x41;/*数码管十六进制编码表*/void main()init();delay1ms(100);play(1);delay1ms(300);while(1)while(k=3)/停电时的乘序if(P0_0=1)&&(P0_1=1)k=0;temp=P0;temp=temp&0xfc;while(temp=0xfc)temp=P0;temp=temp&0xfc;step();delay1ms(8);P1=m_ucLedTabweizhi;check();mudi=weizhi;while(k!=3)/正常模式下电梯的运作if(k=1)step();/电机单步运行if(P0_0=0)/断电信号k=3;while(P0_1=0);/超载信号delay1ms(5);if(k!=3)check();P1=m_ucLedTabweizhi;if(weizhi<mudi)k=1;fangxiang=1;yuyin=0;else if(weizhi>mudi)k=1;fangxiang=-1;yuyin=0;else if(weizhi=mudi)k=0;if(yuyin=0)play(weizhi+2);delay1ms(50);yuyin+;P1=m_ucLedTabweizhi;void play(int count)/语音播放程序int b;P3_5=0;delay1ms(40);P3_5=1;for(b=0;b<=count;b+)P3_6=0;delay1ms(200);P3_6=1;delay1ms(200);P3_7=0;delay1ms(50);P3_7=1;void into() interrupt 0void time1() interrupt 1TH0=(65535-5500)/256;TL0=(65535-5500)%256;void ser() interrupt 4if(RI=1)RI=0;text=SBUF;if(text<6)&&(text>=0)mudi=text;if(TI=1)TI=0;void init()TMOD=0X20;TH0=(65535-50000)/256;TL0=(65535-50000)%256;EA=1;TH1=0xfd;/设置波特率TL1=0xfd;TR1=1;REN=1;/允许接收SM0=0;SM1=1;/设置通信方式1ES=1;/开通信中断/ET0=1;/EX0=1;/开外部中断0/EX1=1;/IT0=1;/跳边缘触发/IT1=1;/TR0=0;/*红外传感器的扫描*/void check()P0=0xff;if(P0_2=0)weizhi=0;SBUF=0;if(P0_3=0)weizhi=1;SBUF=1;if(P0_4=0)weizhi=2;SBUF=2;if(P0_5=0)weizhi=3;SBUF=3;if(P0_6=0)weizhi=4;SBUF=4;if(P0_7=0)weizhi=5;SBUF=5;/*电机运行程序*/void step()switch(step_n)case 0:P2=0x8f;break;case 1:P2=0x1f;break;case 2:P2=0x4f;break;case 3:P2=0x2f;break;if(fangxiang=1)step_n+;if(step_n>3)step_n=0;else if(fangxiang=-1)step_n-;if(step_n<0)step_n=3;void delay1ms(unsigned int count)unsigned int i,j;for(i=0;i<count;i+)for(j=0;j<130;j+);扩展功能CPU:#include<reg52.h>#include<EEPROM.H>#define LED7_STATUSP0/*数码管状态引脚(0为有效,1为无效)*/sbit LED7A_STATUS= P13;/*数码管第一位控制引脚(0为有效,1为无效)*/sbit LED7B_STATUS = P14;/*数码管第二位控制引脚(0为有效,1为无效)*/sbit LED7C_STATUS = P15;/*数码管第三位控制引脚(0为有效,1为无效)*/sbit LED7D_STATUS = P12;/*数码管第四位控制引脚(0为有效,1为无效)*/sbit P3_0=P30;sbit P3_1=P31;sbit SPK = P37;sbit AD_CLK = P10;/*AD转换时钟端*/sbit AD_SDA = P12;/*AD转换数据端*/unsigned char frq; /*函数声明*/void init();/程序初始化void keyscan();/键盘扫描void delay1ms(unsigned int count);/延时程序void Led7Scan();/数码管显示程序unsigned char AD_Read();/*变量声明*/code unsigned char m_ucLedTab=0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90,0x88, 0x83, 0xC6, 0xa1 ,0x86 ,0x8e, 0xff;/*数码管十六进制编码表*/unsigned char temp;/中间变量static unsigned int cod4,k=0,mima=0,a=1;/密码int num16=16,16,16,16;/数码管显示缓冲数int n,m,mode=0;/中间变量unsigned char AD_Buf;/*AD转换存储*/int huanjing=160,zhongliang5=999,30,80;int caozai=19999;/*函数内容*/void main()init();for(n=0;n<4;n+)numn=codn;while(1) Led7Scan();while(mode=0)/超载模式unsigned char AD_Buf;AD_Buf=AD_Read();/读取AD传来的数据 delay1ms(500);while(huanjing-AD_Buf)>caozai)P1=0xc3;P0=(P0>>1)|(P0<<7);keyscan();for(n=0;n<60;n+)frq+;delay1ms(1);a=0;P3_1=0;keyscan();while(mode=1)Led7Scan(); while(k<4)keyscan();/输入4个数if(mima=0)if(k=4)for(n=0;n<4;n+)if(codn!=numn)/判断密码是否正确a=0;if(a=0)/输入的密码错误for(n=0;n<4;n+)numn=16;TR0=0;P0=0xfe;while(a=0)P1=0xc3;P0=(P0>>1)|(P0<<7);keyscan();for(n=0;n<60;n+)frq+;delay1ms(1);else mima=1;/密码正确P3_0=0;for(m=0;m<4;m+)for(n=0;n<4;n+)numn=codn;delay1ms(150);

    注意事项

    本文(基于51单片机实现的电梯模型设计(共42页).doc)为本站会员(飞****2)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开