




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、電梯模型設計報告學院:自動化學院隊名:xxx隊員:xxx日期:2009.11.20一、 概述電梯模型以51為核心處理器,步進電機為控制電機,用L298N搭建驅動電機模塊,結合光電傳感器實現對電梯的上升,下降,準確平層各種運行方式的控制。利用矩陣鍵盤、ISD1760語音芯片,數碼管等各種功能模塊實現電梯的擴展功能及人機交互功能。二、 方案論證方案一:直流伺服電機+光電傳感控制方式。 優點:直流電機速度可以平滑調節,自帶編碼盤可以記錄電梯運行位移,速度調節范圍大。缺點:用編碼盤測量位移誤差較大,對CPU運算處理要求較高而且直流電機運行時帶有一定慣性,對平層帶來較大難度。方案二:步進電機+光電傳感控
2、制。優點:步進電機可以用脈沖方式控制轎廂位移,配合光電傳感模塊可以準確實現轎廂平層;步進電機為輸入脈沖時,電機可以卡死不發生轉動,使得電梯在樓層處安全停止,等待相應操作。缺點:步進電機轉速較慢,速度控制要通過該變脈沖頻率來調節,控制電路要求較高。由于本作品為電梯模型,速度要求不高,通過單片機可以方便輸出電機所需脈沖,配合L298芯片可以實現對步進電機的完美控制,所以我們選擇方案二。三、 詳細設計方案1. 樓層模型設計電梯模型采用易于加工的木材,選用1.2米長的木板作為模擬樓層,底座用三角架固定,確保電梯運行過程不會出現模型搖動現象。電梯軌道處拉兩根鐵絲作為電梯導軌,保障電梯的運動軌跡。轎廂用紙
3、盒模擬代替,盒子敞開一面,可以放入物品,模擬乘客進出電梯。2. 驅動電路模塊控制電機選用四相步進電機,步進角為1.8度。步進電機可以通過直流斬波改變順序控制電機正反傳,51單片機的定時/計數器可以模擬輸出4路直流斬波,通過步進電機驅動電路控制步進電機。驅動電路以L298N驅動芯片為核心部件,L298N芯片的電平電壓與51單片機兼容,驅動電壓可達50V完全可以驅動電梯模型所用控制電機。驅動電路如下圖:四個輸出端分別接步進電機的四個脈沖輸入端,通過定時計數器模擬輸出的四路直流斬波控制L298N的輸出端口,從而可以方便的控制步進電機。電機的運轉速度可以通過調節直流斬波的頻率來控制。同時,通過對脈沖個
4、數的控制,也可以粗略了解轎廂運行的位移,配合光電模塊,將使電梯平層更加便捷、準確。3. 光電傳感模塊為了確保準確平層,每層樓都安裝紅外對管,用于檢測轎廂是否運行至樓層,若檢測到轎廂運行至目標樓層,則像CPU發出中斷請求,執行電梯停止運行操作。紅外對管原理:紅外對管由發射和接受兩部分組成,發射的紅外線京轎廂反射后被接受管接受后,引起電平跳變CPU根據此信號做出相應命令。電路原理圖如下:4. 樓層按鍵設計為了模擬乘客在轎廂內對電梯的控制,我們擴展了一個4*4的鍵盤,用于乘客選擇樓層及轎廂內的一些控制按鈕,考慮到實驗的原因,控制鍵盤并未裝在轎廂內部,而是引到模型外面,便于演示。本模型用到兩個4*4矩
5、陣鍵盤,一個用于樓層級轎廂控制,另一個用于密碼和其他設置,接口原理相同。5. 語音播放模塊本模型加入了語音播放功能,及時播放轎廂運行狀況,所有錄音內容均為小組設計,是本模型人機交互人性化設計一個重要部分。語音播放模塊以ISD1760語音芯片為核心, ISD1700系列芯片是華邦公司新推出的單片優質語音錄放電路,該芯片提供多項新功能,包括內置專利的多信息管理系統,新信息提示。語音芯片提前錄入“歡迎乘坐長頸鹿電梯”、報告層數的語音數據,電梯平層后,CPU會輸出脈沖控制芯片,喇叭發出歡迎語音和層數提示。ISD電特性及應用電路如下:ISD1700電特性: 工作電壓:2.4V-5.5V,最高
6、不能超過6V 靜態電流:0.5 - 1 A 工作電流:20mA電路圖如下: 語音變化信號由15腳輸出,采用簡單的三極管電流放大電路,接入小喇叭,實現語音輸出。 小喇叭參數:8歐,0.5W。6. 電源切換部分考慮到緊急停電情況,用電池作為備用電源,停電時用繼電器切換至備用電源,在備用電源供電情況下,控制轎廂運行到附近樓層,若檢測到不是短時停電,則控制電梯在備用電源供電下運行。電路原理圖如下:7. 負載控制部分本模型采用光電方式控制額定負載,輸出電壓信號經AD轉換為0-255之間的數字信號輸入CPU。單片機將輸入值的大小與設定額定值比較,若超過額定值,則發出報警音,同時像電機控制CPU發送超載信號
7、,電機控制CPU停止運行。若要改變額定負載值,可以用相應按鍵設置,改變程序中存儲的額定負載值即可。8. 中央處理器部分本作品使用3片51單片機配合使用來控制整個系統,單片機之間通過通信達到信息傳遞。單片機接口原理圖(主要功能CPU)如下:主控CPU;電機控制CPU:功能擴展CPU:四、 調試過程 各個模塊均可以獨立正常運行,通過單片機系統總線將各個模塊連接起來,實現了預期結果。五、 程序流程圖開始主板CPU:初始化掃描是否有脈沖(呼叫樓層)輸入? 否 是向電機控制CPU發送相應信息電機控制CPU:開始初始化判斷電梯運行方向掃描判斷轎廂位置根據呼叫樓層及電梯運行方向確定目標樓層(符合電梯模型運行
8、規則)判斷目標樓層在上面還是下面 上 下 控制電機正傳控制電機正傳掃描平層傳感器是否到達目標樓層電機停止,平層播放提示音功能擴展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=P1
9、7;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, 0
10、xa1 ,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,
11、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;fangxian
12、g=-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
13、;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)xi
14、amudi=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>
15、;=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;
16、/*延時程序*/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;c
17、ase 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
18、=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&
19、;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&am
20、p;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;
21、電機控制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;sbi
22、t 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 un
23、signed 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=
24、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
25、_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=SBU
26、F;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)w
27、eizhi=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>
28、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為無效
29、)*/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
30、 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 c
31、od4,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傳來的數據
32、 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;
33、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);for(n=0;n<4;n+)numn=16;delay1ms(150);num3=AT24C02ReadByte(5);num3+;AT24C02WriteByte(5,num3);e
34、lse if(mima=1)for(n=0;n<4;n+)codn=numn;AT24C02WriteByte(n,codn);delay1ms(5);mode=0;void init()unsigned int i;for(i=0;i<4;i+)codi=AT24C02ReadByte(i);delay1ms(5);EA=1;EA=1;/開總中斷EX0=1;/開處部中斷0TH0=(65535-20000)/256;TL0=(65535-20000)%256;ET0=1;/開計時器0TR0=1;/開機計時TMOD=0x11;/設置定時器1為工作方式2TH1=0xfd;TL1=0xf
35、d;ET1=1;TR1=1;void timer0() interrupt 1Led7Scan();TH0=0xec;/*重新設置T0定時值*/TL0=0x78;/Led7Scan();void timer1() interrupt 3if(a=0)TH1 = 0xfe;TL1 = frq;SPK = SPK;/*名稱: Led7Scan()說明: 數碼管動態掃描處理程序參數: 無返回: 無*/void Led7Scan()static unsigned char a=0;switch(a)/*判斷數碼管動態掃描值*/case 0:/*處理數碼管第一位*/LED7D_STATUS=1;/*設置
36、數碼管第四位為無效*/LED7A_STATUS=0;/*設置數碼管第一位位有效*/break; case 1:/*處理數碼管第二位*/LED7A_STATUS=1;/*設置數碼管第一位為無效*/LED7B_STATUS=0;/*設置數碼管第二位位有效*/break; case 2:/*處理數碼管第三位*/LED7B_STATUS=1;/*設置數碼管第二位為無效*/LED7C_STATUS=0;/*設置數碼管第三位位有效*/break; case 3:/*處理數碼管第四位*/LED7C_STATUS=1;/*設置數碼管第三位為無效*/LED7D_STATUS=0;/*設置數碼管第四位位有效*/b
37、reak; LED7_STATUS=m_ucLedTabnuma;/*將顯示碼送數碼管狀態引腳*/a+;/*數碼管動態掃描值加1,若該值4則置為0*/if(a>3)a=0;unsigned char AD_Read() unsigned char i,ADC; AD_CLK=0; AD_SDA=1; ADC=0; for(i=0;i<8;i+) AD_CLK=1; AD_CLK=1; ADC<<=1;if(AD_SDA=1)ADC|=0x01;elseADC&=0xfe; AD_CLK=0; AD_CLK=0; AD_CLK=0; AD_SDA=0; return(ADC);/*延時程序*/void delay1ms(unsigned int count)unsigned int i,j;for(i=0;i<count;i+)for(j=0;j<120;j+);/*鍵盤掃描*/void keyscan()P2=0xfe;temp=P2;temp=tem
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 美發分紅協議書
- 經費撥付協議書
- 綠化收購協議書
- 美伊談判協議書
- 道路刷黑協議書
- 混凝土臨時供貨協議書
- 資金三方協議書
- 紗窗合作協議書
- 財務調賬協議書
- 美女婚前協議書
- 農村污水處理設施運維方案服務承諾及質量保證
- 人教版小學四年級下冊《生命.生態.安全》教案
- 倉庫安全 清潔點檢記錄表
- 2023中考數學練習 08 圓與幾何綜合問題(學生版+解析版)
- 讀后續寫:三大出彩收尾設計(解析版)2023年新高考英語讀后續寫練習
- 合伙人協議書的財務透明
- 《建筑基坑工程監測技術標準》(50497-2019)
- 產品合格證出廠合格證A4打印模板
- 100kg級復合翼垂直起降無人機系統總體技術方案報告20170428(公開)
- 噴淋塔設計標準參考
- 國家課程設置標準課時
評論
0/150
提交評論