微機課程設(shè)計報告-風(fēng)扇控制_第1頁
微機課程設(shè)計報告-風(fēng)扇控制_第2頁
微機課程設(shè)計報告-風(fēng)扇控制_第3頁
微機課程設(shè)計報告-風(fēng)扇控制_第4頁
微機課程設(shè)計報告-風(fēng)扇控制_第5頁
已閱讀5頁,還剩38頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、家用電扇控制與驅(qū)動電路設(shè)計報告目錄1、 設(shè)計的題目名稱及要求 22、 實驗設(shè)備 23、 設(shè)計思想、實施方案和硬件電路圖 24、 典型程序模塊及典型編程技巧分析 75、 課程設(shè)計中遇到的問題及解決方法 96、 實驗程序的流程圖 107、 程序清單及程序注釋 168、 收獲與體會 429、 參考文獻(xiàn) 42一、課程設(shè)計的題目名稱及要求設(shè)計題目:家用電扇控制實驗與驅(qū)動電路設(shè)計基本設(shè)計要求: 1. 編程語言為匯編語言和C語言; 2. 控制硬件電路基于80x86微機接口電路; 3. 驅(qū)動電路(主回路)僅需設(shè)計; 4. 控制器功能包括:按鈕三個,分別為風(fēng)速、類型和停止,LED指示燈六個,指示風(fēng)速強、中、弱,

2、類型為睡眠、自然和正常。指標(biāo)如下: 1) 電扇處于停轉(zhuǎn)狀態(tài)時,所有指示燈不亮,只有按下“風(fēng)速”鍵時,才會響應(yīng),進(jìn)入起始工作狀態(tài);電扇在任何狀態(tài),只要按停止鍵,則進(jìn)入停轉(zhuǎn)狀態(tài)。 2) 處于工作狀態(tài)時,有:初始狀態(tài)為:風(fēng)速-“弱”,類型-“正?!卑础帮L(fēng)速”鍵,其狀態(tài)由“弱”“中”“強” “弱” 往復(fù)循環(huán)改變,每按一下按鍵改變一次;按“類型”鍵,其狀態(tài)由“正?!薄八摺薄白匀弧薄罢!?往復(fù)循環(huán)改變;3) 風(fēng)速的弱、中、強對應(yīng)于電扇的轉(zhuǎn)動由慢到快。4) 類型的不同選擇,分別為:正常電扇連續(xù)運轉(zhuǎn);自然電扇模擬自然風(fēng),即轉(zhuǎn)4s,停8s;睡眠電扇慢轉(zhuǎn),產(chǎn)生輕柔的微風(fēng),運轉(zhuǎn) 8s,停轉(zhuǎn)8s;5) 按照風(fēng)速與

3、類型的設(shè)置輸出相應(yīng)的控制信號。附加功能擴展:根據(jù)控制性能要求,在“睡眠”和“自然”類型下仍可選擇不同的“風(fēng)速”,工作時總共有“3*3”種不同的模式,而且通過按鍵的分時復(fù)用可在“停止”與“工作”兩種狀態(tài)間反復(fù)切換而不必重載程序。 二、實驗設(shè)備PC機一臺(裝有TDPIT軟件)、唐都TD-Pit實驗箱。三、設(shè)計的思想和實施方案由于本次課程設(shè)計控制的對象是直流電機,在上個學(xué)期學(xué)習(xí)的電機與電力拖動時已知直流電機可通過改變給定電壓的大小調(diào)節(jié)其轉(zhuǎn)速,但實際測試時風(fēng)扇的轉(zhuǎn)速變化不夠明顯,故采用了兩種方案:1、 用匯編語言編寫的程序通過改變電壓控制直流電機的轉(zhuǎn)速。2、 用C語言編寫的程序采用PWM波控制直流電機

4、的轉(zhuǎn)速。方案1較容易實施,但由于對PWM波比較陌生,方案2需要搜索了一些PWM控制方式的相關(guān)資料,所得資料如下:PWM控制就是對脈沖的寬度進(jìn)行調(diào)制的技術(shù)。即通過對一系列脈沖的寬度進(jìn)行調(diào)制來等效地獲得所需要波形(含形狀和幅值)。在采樣控制理論中有一條重要的結(jié)論:沖量相等而形狀不同的窄脈沖加在具有慣性的環(huán)節(jié)上時,其效果基本相同,沖量即窄脈沖的面積。效果基本相同是指環(huán)節(jié)的輸出響應(yīng)波形基本相同。上述原理稱為面積等效原理。簡單點說,就是通過調(diào)節(jié)時間周期很小的方波的占空比就可以明顯地調(diào)節(jié)直流電機的轉(zhuǎn)速。 圖1、TD-PIT直流電機及驅(qū)動電路單元驅(qū)動電機的電壓由DA0832提供,DA0832的輸出OUT接驅(qū)

5、動電路的A端,驅(qū)動電路的12V和A端分別接直流電機的1端和2端。圖2、DA0832單元 解決了電機的控制問題后,課題要求有6個LED燈顯示相應(yīng)的風(fēng)速和類型以及3個按鍵做相應(yīng)的控制,于是本人想到了用一片8255做LED燈的驅(qū)動電路和小鍵盤的讀取接口。8255內(nèi)部包含3個8位的輸入輸出端口A、B和C,端口A和端口B都可以用作一個8位的輸入口或8位的輸出口,端口C既可以作為一個8位的輸入口或8位的輸出口,又可以作為兩個4位的輸入輸出口(C口上半部分和C口下半部分)使用,還可以配合A口和B口工作,分別用來產(chǎn)生A口和B口的輸出控制信號和輸入A口和B口的端口狀態(tài)信號。本次設(shè)計,我對8255的使用是這樣的:

6、8255工作于方式0,A口低四位接鍵盤及數(shù)碼管顯示單元的Y4-Y1;C口接LED及開關(guān)單元的LED燈D0-D7;B口和A口高四位懸空。選擇C口做LED燈的接口是因為C口能方便地通過編程置位和復(fù)位,從而方便的點亮和熄滅相應(yīng)的LED信號。圖3、8255單元鍵盤及數(shù)碼管顯示單元的X1接地,Y1對應(yīng)“風(fēng)速”,Y2對應(yīng)“類型”,Y3對應(yīng)“停止”,X2、X3、X4懸空。本次實驗未用到數(shù)碼管,故A、B、C、D、E、F、G、DP懸空。圖4、小鍵盤及數(shù)碼管顯示單元圖5、硬件電路總接線圖如上圖示:該圖涉及到系統(tǒng)總線、可編程外圍接口芯片8255、DA0832、鍵盤及數(shù)碼管顯示單元、直流電機及其驅(qū)動電路。8255和D

7、A0832的D0D7 依次接系統(tǒng)總線的XD0XD7,DA0832的A1和A0分別接系統(tǒng)總線的XA3和XA2;WR和RD 依次接系統(tǒng)總線上的XIOW和XIOR;8255的CS接系統(tǒng)總線的IOY0,DA0832的CS接系統(tǒng)總線的IOY1;DA0832的OUT接驅(qū)動電路的A端;8255的PC0-PC7接低八位LED。四、典型程序模塊及典型編程技巧分析1、C語言與匯編語言的共同典型模塊(1)主函數(shù)(或主程序)MAIN當(dāng)程序運行時,PC機屏幕上顯示提示菜單,完成硬件初始化電機不轉(zhuǎn)動且LED無顯示,8255工作方式0、A口輸入、C口輸入,并等待小鍵盤的輸入。若當(dāng)小鍵盤有鍵按下且鍵值是“110(Y3Y2Y1

8、)”時電機啟動,PC機屏幕顯示電機轉(zhuǎn)動的風(fēng)速強弱,LED顯示風(fēng)速和類型(低速、正常PC0和PC4為1); 若當(dāng)小鍵盤有鍵按下且鍵值為“011”時,退出程序。編程小技巧:將讀入的A口數(shù)據(jù)與07H“與”運算可屏蔽A口其他位對輸入信息的影響。(2)不帶鍵盤檢測的延時模塊DELLY用與鍵盤檢測時防抖。(3)小鍵盤檢測模塊KEY 當(dāng)小鍵盤無輸入時返回調(diào)用該模塊的下一條指令,如果有小鍵盤輸入則延時一定的時間(調(diào)用不帶鍵盤檢測的延時模塊),若輸入為“110”則改變風(fēng)速,若輸入為“101”則改變類型,若輸入為“011”則停止風(fēng)扇轉(zhuǎn)動并熄滅LED指示燈。(4)帶鍵盤檢測的延時模塊DELLY2 由于希望“睡眠”和

9、“自然”類型下風(fēng)扇能實時響應(yīng)小鍵盤的控制,所以在這兩種類型中的延遲用的是帶鍵盤檢測的延時模塊。2、C語言的特別模塊風(fēng)扇控制集成模塊WIND_MODE本模塊將風(fēng)扇的轉(zhuǎn)速和類型控制集于一體,先檢測風(fēng)速強弱的標(biāo)志FLAG,再檢測類型標(biāo)志FLAG2,從而對直流電機和LED燈進(jìn)行相應(yīng)的控制。在電機的運行過程中實時調(diào)用小鍵盤檢測模塊以及時響應(yīng)輸入。3、匯編語言的特別模塊匯編語言中的的風(fēng)速和類型控制并不作為獨立過程,而是用標(biāo)號標(biāo)示在主程序中,通過條件判斷和跳轉(zhuǎn)指令給DA0832相應(yīng)的電壓數(shù)字量和延時,用做標(biāo)志的是LIGHT1和LIGHT2,即通過燈控信號識別直流電機的控制信號。編程小技巧:由于燈控信號是通過

10、8255的C口輸出的,而C口可通過控制字進(jìn)行置位(1)和復(fù)位(0),如果要熄滅一盞已點亮的LED燈,可將該LED對應(yīng)的燈控信號(比如LIGHT1)與0EH“與”運算再輸出到8255的控制字。五、課程設(shè)計中遇到的問題及解決方法1、直流電機的控制方式:用哪種方式能改變直流電機的轉(zhuǎn)速,使其有明顯的轉(zhuǎn)速變化以區(qū)分“弱”、“中”、“強”三種風(fēng)速是最開始遇到的問題。通過查找資料,并在實驗室調(diào)節(jié)DA0832的輸出(占空比不變時改變電壓數(shù)字量、電壓不變時改變占空比)觀察風(fēng)扇的轉(zhuǎn)速變化,最終確定調(diào)節(jié)PWM波的占空比為有效的控制方式。2、小鍵盤檢測:由于采用的是軟件延時,小鍵盤的檢測究竟需要多久的延時才使程序在檢

11、測到一次按鍵時,剛好使風(fēng)速或者類型改變一次(而不是兩次或以上)是個很棘手的問題。為此曾多次調(diào)節(jié)鍵盤檢測延時的參數(shù),也多次由于延時不當(dāng)使程序執(zhí)行時造成死機。最后終于調(diào)出了合適的延時參數(shù)。3、自然和睡眠類型下風(fēng)扇需要轉(zhuǎn)一會停一會,如何在風(fēng)扇停轉(zhuǎn)的這段延時中使風(fēng)扇能實時響應(yīng)小鍵盤的輸入,這是又一個大問題。在多次調(diào)整程序的結(jié)構(gòu)覺得毫無作用的時候,本人想到了增加一個帶鍵盤檢測的延時模塊,從而輕松解決了該問題。4、當(dāng)按下小鍵盤的按鍵時X端和Y端的狀態(tài)是低電平還是高電平直接關(guān)系到輸入檢測問題。通過查詢TD-PIT實驗平臺用戶手冊和使用數(shù)字萬用表了解了X端和Y端在按鍵按下時的電平狀態(tài),據(jù)此可獲得所要檢測的數(shù)字

12、輸入信號。5、程序編譯連接沒通過,尤其是C語言,提示的錯誤不存在,很可能是因為函數(shù)的括號沒成對出現(xiàn)或者某個語句缺少分號結(jié)尾而產(chǎn)生?;蛘呤禽斎氲姆栍昧巳腔蛘咧形妮斎攵鴽]注意,這些通過養(yǎng)成良好的編程習(xí)慣可以很大程度地避免。6、程序在調(diào)試中沒問題,可是一運行就死機,這種問題經(jīng)常發(fā)生,有可能是硬件的問題,也可能是調(diào)試時不夠仔細(xì),沒調(diào)試完所有功能就急著運行了。這需要仔細(xì)耐心地把程序的所有功能都調(diào)試一遍,防止意外的執(zhí)行結(jié)果產(chǎn)生。六、實驗程序的流程圖流程圖1-1:MAIN函數(shù)流程圖流程圖1-2:風(fēng)扇運行模式特別說明:圓點線部分由于頁面大小無法全部畫出,該部分與風(fēng)速標(biāo)志值為“1”時只在風(fēng)速上有差別(分別為

13、3對應(yīng)強風(fēng),2對應(yīng)中風(fēng)),未畫出的兩個部分和中間的部分一起構(gòu)成三個分支。流程圖1-3:小鍵盤檢測流程圖1-4:帶鍵盤檢測的延時模塊流程圖1-5:不帶鍵盤檢測的延時模塊特別說明:匯編語言的程序流程和C語言的大同小異,只是標(biāo)志符號有所不同。七、程序清單及程序注釋1、C語言程序清單/使用芯片:08328255/家用風(fēng)扇控制#include #include #include #include #include void key(char *f_point,char *f2_point); void delay(long int time); /不帶鍵盤檢測的延時模塊void delay2(long

14、int time,char *f_point,char *f2_point); /帶鍵盤檢測的延時模塊void wind_mode(char,char);/*根據(jù)查看配置信息修改下列符號*#define IOY0 0xC400#define IOY1 0xC440/*#define MY8255_A IOY1 + 0x00*4#define MY8255_B IOY1 + 0x01*4#define MY8255_C IOY1 + 0x02*4#define MY8255_MODE IOY1 + 0x03*4/*#define DA0832 IOY0 + 0x00*4char ch1,flag

15、=1,flag2=1;void main()char f; outp(MY8255_MODE,0x90); outp(DA0832,0x00); printf(WELCOME TO USE IT!nCHOOSE 1 TO CHANGE SPEED!InCHOOSE 2 TO CHANGE TYPE!nCHOOSE 3 TO QUITE!n); while(1) loop1: f=inp(MY8255_A); f=f&0x07; if(f!=0x07) switch(f) case 0x06: wind_mode(flag,flag2);break; case 0x03: outp(DA0832

16、,0x00);flag=1;flag2=1;break; case 0x05: outp(DA0832,0x00);outp(MY8255_MODE,0x90);exit(0);break; /*風(fēng)速模式*void wind_mode(char f,char f2)long int a,b; char *f_point,*f2_point; f_point=&f; f2_point=&f2; switch(f) /*flag=1則設(shè)置風(fēng)速為弱,占空比1/3* case 1: printf(wind_weakt); outp(MY8255_MODE,0x01); /屏幕以及指示燈提示風(fēng)速 whi

17、le(f=1) switch(f2) case 1:outp(MY8255_MODE,0x0c); outp(MY8255_MODE,0x09); b=1; for(a=0;ab;a+) /flag2=1,正常模式 ch1 = 0x00; outp(DA0832, ch1); delay(0x200); ch1 = 0xff; outp(DA0832, ch1); delay(0x100); key(f_point,f2_point); break; case 2:outp(MY8255_MODE,0x08); outp(MY8255_MODE,0x0b); b=0x200000; for(a

18、=0;a(b/0x28);a+) /flag2=2,自然模式 ch1 = 0x00; outp(DA0832, ch1); delay(0x200); ch1 = 0xff; outp(DA0832, ch1); delay(0x100); key(f_point,f2_point); if(f2!=2|f!=1) break; if(f2!=2|f!=1) break; outp(DA0832,0x00); delay2(b,f_point,f2_point); break; case 3:outp(MY8255_MODE,0x0a); outp(MY8255_MODE,0x0d); b=0

19、x400000; for(a=0;a(b/0x50);a+) /flag2=3,睡眠模式 ch1 = 0x00; outp(DA0832, ch1); delay(0x100); ch1 = 0xff; outp(DA0832, ch1); delay(0x100); key(f_point,f2_point); if(f2!=3) /小鍵盤有輸入,跳出FOR循環(huán) f2=1;break; if(f!=1) break; if(f2!=3|f!=1) break; outp(DA0832,0x00); delay2(b,f_point,f2_point); if(f2!=3) f2=1; bre

20、ak; outp(MY8255_MODE,0x00); flag=f; flag2=f2; break; /* /*flag=2則風(fēng)速為中,占空比1/2* case 2: printf(wind_mediumt); /屏幕以及指示燈提示風(fēng)速 outp(MY8255_MODE,0x03); while(f=2) switch(f2) case 1:outp(MY8255_MODE,0x0c); outp(MY8255_MODE,0x09); b=1; for(a=0;ab;a+) /flag2=1,正常模式 ch1 = 0x00; outp(DA0832, ch1); delay(0x100);

21、 ch1 = 0xff; outp(DA0832, ch1); delay(0x100); key(f_point,f2_point); break; case 2:outp(MY8255_MODE,0x08); outp(MY8255_MODE,0x0b); b=0x200000; for(a=0;a(b/0x28);a+) /flag2=2,自然模式 ch1 = 0x00; outp(DA0832, ch1); delay(0x100); ch1 = 0xff; outp(DA0832, ch1); delay(0x100); key(f_point,f2_point); if(f2!=2

22、|f!=2) break; if(f2!=2|f!=2) break; outp(DA0832,0x00); delay2(b,f_point,f2_point); break; case 3:outp(MY8255_MODE,0x0a); outp(MY8255_MODE,0x0d); b=0x400000; for(a=0;a(b/0x50);a+) /flag2=3,睡眠模式 ch1 = 0x00; outp(DA0832, ch1); delay(0x100); ch1 = 0xff; outp(DA0832, ch1); delay(0x100); key(f_point,f2_po

23、int); if(f2!=3) /小鍵盤有輸入,跳出FOR循環(huán) f2=1;break; if(f!=2) break; if(f2!=3|f!=2) break; outp(DA0832,0x00); delay2(b,f_point,f2_point); if(f2!=3) f2=1; break; outp(MY8255_MODE,0x02); flag=f; flag2=f2; break; /* /*flag=3則風(fēng)速為強,占空比2/3* case 3: printf(wind_strongt); /屏幕以及指示燈提示風(fēng)速 outp(MY8255_MODE,0x05); while(f

24、=3) switch(f2) case 1:outp(MY8255_MODE,0x0c); outp(MY8255_MODE,0x09); b=1; for(a=0;ab;a+) /flag2=1,正常模式 ch1 = 0x00; outp(DA0832, ch1); delay(0x50); ch1 = 0xff; outp(DA0832, ch1); delay(0x100); key(f_point,f2_point); break; case 2:outp(MY8255_MODE,0x08); outp(MY8255_MODE,0x0b); b=0x200000; for(a=0;a(

25、b/0x28);a+) /flag2=2,自然模式 ch1 = 0x00; outp(DA0832, ch1); delay(0x50); ch1 = 0xff; outp(DA0832, ch1); delay(0x100); key(f_point,f2_point); if(f2!=2|f!=3) break; if(f2!=2|f!=3) break; outp(DA0832,0x00); delay2(b,f_point,f2_point); break; case 3:outp(MY8255_MODE,0x0a); outp(MY8255_MODE,0x0d); b=0x40000

26、0; for(a=0;a(b/0x50);a+) /flag2=3,睡眠模式 ch1 = 0x00; outp(DA0832, ch1); delay(0x50); ch1 = 0xff; outp(DA0832, ch1); delay(0x100); key(f_point,f2_point); if(f2!=3) f2=1;break; if(f!=3) break; if(f2!=3|f!=3) break; outp(DA0832,0x00); delay2(b,f_point,f2_point); if(f2!=3) f2=1;break; if(f!=3) break; brea

27、k; outp(MY8255_MODE,0x04); flag=1; flag2=f2; break; /* return; /*小鍵盤檢測*void key(char *f_point,char *f2_point) char C; C=inp(MY8255_A); C=C&0x07; if(C!=0x07)delay(0x10fff0); C=inp(MY8255_A); C=C&0x07; switch(C) case 0x06:(*f_point)+;break; case 0x05:(*f2_point)+;break; case 0x03:outp(DA0832,0x00);out

28、p(MY8255_MODE,0x90);(*f_point)+;break; return;/*/*不帶小鍵盤檢測的延時*void delay(long int time)long int i;int j;for(i=0;i=time;i+)for(j=0;j=0x100;j+) return;/*/*帶小鍵盤檢測的延時*void delay2(long int time,char *f_point,char *f2_point)long int i;int j;char f,f2;f=(*f_point);f2=(*f2_point);for(i=0;i=time;i+)for(j=0;j=

29、0x100;j+) key(f_point,f2_point); if(*f_point)!=f|(*f2_point)!=f2) return;return;/*2、匯編語言程序清單;*根據(jù)CHECK配置信息修改下列符號值* IOY0 EQU 0E400H ;片選IOY0對應(yīng)的端口始地址 IOY1 EQU 0E440H ;片選IOY1對應(yīng)的端口始地址;* MY8255_A EQU IOY1+00H*4 ;8255的A口地址 MY8255_B EQU IOY1+01H*4 ;8255的B口地址 MY8255_C EQU IOY1+02H*4 ;8255的C口地址 MY8255_MODE EQU IOY1+03

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論