欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3769|回復: 0
收起左側

51單片機自動窗簾Proteus仿真程序

[復制鏈接]
ID:449192 發表于 2020-3-27 14:49 | 顯示全部樓層 |閱讀模式
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
51hei.png

單片機源程序如下:
  1. #include<reg51.h>
  2. #define uchar unsigned char
  3. #define uint  unsigned int
  4. uchar code tab1[]={"Now_G: "};       
  5. uchar code tab5[]={0xfe,0xfc,0xfd,0xf9,0xfb,0xf3,0xff7,0xf6};  
  6. sbit k1 = P2^0;         
  7. sbit k2 = P2^1;         
  8. sbit k3 = P2^2;
  9. sbit k4 = P2^3;
  10. sbit k5 = P2^4;
  11. sbit k7 = P2^5;
  12. sbit led = P3^3;
  13. sbit k6 = P3^4;
  14. uchar i = 0;
  15. bit flag = 0;
  16. bit flag1 = 0;
  17. bit flag2 = 0;
  18. bit flag3 = 0;
  19. bit mode = 1;
  20. void delayxms(uint ms)                                          
  21. {
  22.     uint a,j;

  23.     for(a=0;a<ms;a++)
  24.           for(j=0;j<110;j++);

  25. }
  26. void key()
  27. {
  28.           if(k1==0)
  29.           {
  30.                      delayxms(5);
  31.                    while(k1==0);
  32.                    flag1 = 0; flag = 1;
  33.           }
  34.           if(k2==0)       
  35.           {
  36.                         delayxms(5);
  37.                         while(k2==0);
  38.                         flag1 = 1; flag = 1;
  39.           }
  40.           if(k3==0)       
  41.           {
  42.                         delayxms(5);
  43.                         while(k3==0);
  44.                         flag = 0;
  45.           }
  46. }

  47. void key1()
  48. {
  49.            if(k4==0)
  50.           {
  51.                      delayxms(5);
  52.                    while(k4==0);
  53.                    flag1 = 0; flag = 1;
  54.           }
  55.           if(k5==0)       
  56.           {
  57.                         delayxms(5);
  58.                         while(k5==0);
  59.                         flag1 = 1; flag = 1;
  60.           }
  61.           if(k3==0)       
  62.           {
  63.                         delayxms(5);
  64.                         while(k3==0);
  65.                         flag = 0;
  66.           }
  67. }
  68. void T0_init()
  69. {
  70.           TMOD=TMOD | 0x01;              
  71.           TH0=(65535-50000)/256;      
  72.           TL0=(65535-50000)%256;
  73.           EA=1;                                 
  74.           ET0=1;                     
  75.           //TR0=1;                     
  76. }

  77. void main()
  78. {
  79.   
  80.   T0_init();
  81.   while(1)
  82.   {
  83.                             
  84.                             if(k6==0)
  85.                                 {
  86.                                              delayxms(5);
  87.                                            while(k6==0);
  88.                                            mode = ~mode;
  89.                                 }
  90.                                 if(mode == 1)
  91.                                 {
  92.                                    key(); //按鍵檢測
  93.                                    if(flag == 0)
  94.                                    {TR0 = 0;}
  95.                                    else
  96.                                    {TR0 = 1;}
  97.                                    led = 1;
  98.                                 }
  99.                                 if(mode == 0)
  100.                                 {
  101.                                    key1(); //按鍵檢測
  102.                                    if(flag == 0)
  103.                                    {TR0 = 0;}
  104.                                    else
  105.                                    {TR0 = 1;}
  106.                                    led = 0;
  107.                                 }
  108.   }
  109. }
  110. void T0_time() interrupt 1   
  111. {
  112.           TR0 = 0;
  113.       TH0=(65535-50000)/256;      
  114.           TL0=(65535-50000)%256;     
  115.           if(i > 7)
  116.           {i = 0;}
  117.           if(flag1 == 0)
  118.           {P1 = tab5[i];} //正轉
  119.           else
  120.           {P1 = tab5[7-i];} //反轉
  121.           i += 1;
  122.           TR0 = 1;
  123. }
復制代碼

仿真工程51hei提供下載:
自動窗簾仿真.zip (94.33 KB, 下載次數: 65)

下面是文檔的無圖版(圖片不提供哦)

本設計主要由STC89C52單片機控制系統、電機驅動模塊、光敏檢測模塊、手動控制模塊與檢測模塊等組成。處于光敏智能模式時,光敏電阻檢測到光照強度的變化,將電阻變化轉化為電壓變化,并將該變化信號傳輸到單片機;正反轉處于遙控控制時,單片機通過檢測按鍵指令,作出相應的動作指令。單片機通過給驅動模塊下達指令來控制電機的正反轉,從而實現窗簾的打開和關閉,由此實現智能控制和手動遙控功能,使本設計更加方便和人性化,構成一個多功能自動窗簾控制系統,它將成為未來智能家居必不可少的一員。



一、綜合實訓任務
1.1 綜合實訓目的
21世紀是信息化的世紀,各種電信和互聯網新技術推動了人類文明的巨大進步。智能家居控制系統可以定義為一個過程或者一個系統。利用先進的計算機技術、網絡通訊技術、綜合布線技術、將與家居生活有關的各種子系統,有機地結合在一起,通過統籌管理,讓家居生活更加舒適、安全、有效。與普通家居相比,智能家居不僅具有傳統的居住功能,提供舒適安全、高品位且宜人的家庭生活空間。還將原來的被動靜止結構轉變為具有能動智慧的工具,提供全方位的信息交換功能,幫助家庭與外部保持信息交換暢通,優化人們的生活方式,幫助人們有效安排時間,增強家居生活的安全性,甚至為各種能源費用節約資金。系統的網絡化功能可以提供遙控、家電(空調,熱水器等)控制、照明控制、室內外遙控、窗簾自控、防盜報警、電話遠程控制、可編程定時控制及計算機控制等多種功能和手段。使生活更加舒適、便利和安全。因智能家居控制系統布線簡單、功能靈活,擴展容易而被人們廣泛接受和應用。
此次系統設計系統正是利用STC89C52 單片機的優點,順利的完成了本設計的要求。并且實現了學習型定時和自動控制功能,為控制家居設備提供了良好的基礎。
正是因為通信技術、計算機技術、網絡技術、控制技術的迅猛發展與提高,促使了家庭實現了生活現代化,居住環境舒適化、安全化。這些高科技已經影響到人們生活的方方面面,改變了人們生活習慣,提高了人們生活質量,家居智能化也正是在這種形勢下應運而生的。智能家居控制系統的主要功能包括通信、設備自動控制、安全防范三個方面。隨著新技術和自動化的發展,傳感器的使用數量越來越大,功能也越來越強,各種傳感器都已經標準化、模塊化,這給智能家居控制系統的設計提供極大方便。
1.2綜合實訓內容
為了能根據實際情況來實現對窗簾自動開合的控制,大致有三種方法:聲控、光控、手動,最后我們采用了光控和手動相結合的設計方案,其優點有:一是可以根據室外光線明暗自動調節;二是可以根據個人實際需求進行手動控制;三是根據元器件的選擇和后期的制作成本比較低。
設計要求:
(1)利用STC89C52單片機為核心來控制直流電機正反轉實現窗簾的開關。
(2)利用上下兩個限位開關實現最高點、最低點電機自動停止來防止窗簾的過卷,以達到防過卷功能。利用按鍵實現手動控制功能。
(3)實現智能化控制,窗簾的打開和關閉是通過光敏電阻檢測環境亮度自動完成的,光線暗并關閉,光線強就打開,不產生誤動作。
(4)利用按鍵實現手動控制功能。
(5)利用LED燈能夠指示運行狀態。
1.3 整體功能
本設計是由單片機控制系統、電源模塊、電機驅動模塊、自動光敏檢測模塊、手動遙控模塊等模塊組成。當處于自動模式下時,利用光敏電阻檢測光照強度的變化,通過光敏電阻阻值得變化轉化為電壓變化,并將電壓變化的信號送單片機,單片機通過電機驅動模塊控制著電機的正反轉實現窗簾的來回移動,構成一個多功能自動窗簾控制系統;當處于智能遙控模式時,通過遙控發射和接收模塊,單片機通過遙控指令控制電機的正反轉;當處于手動按鍵模式時,通過按鍵控制電機的正反轉來實現窗簾的打開與關閉。其中,光敏控制模塊室由光敏電阻和三極管組成的;電機驅動模塊是利用了三極管和繼電器的的通斷實現電機的正轉與反轉;單片機用C語言編程,通過仿真調試,基本達到了我們所期望的系統功能。

第二章 窗簾機械部分設計
本章節主要介紹本設計中機械部分的結構設計及傳動原理。進行綜合的對比考慮選擇最適合本設計的方案。
2.1 窗簾傳動方案的選擇
設計方案如圖所示:
圖2.1  手繪簡圖

通過市場調研、查閱資料以及小組討論我們初步擬定了以下方案,最終決定選用齒輪齒條傳動作為本設計的機械傳動裝置。齒輪齒條傳動由于傳動比可靠,適合遠距離傳動,所占空間小,造價較低,故適合。   
2.2 窗簾傳動示意圖
                  圖2.2  窗簾傳動示意圖(打開狀態)
2.2  窗簾傳動示意圖(打開狀態)
2.3 窗簾傳動示意圖(關閉狀態)
圖2.4  窗簾裝配圖齒輪齒條
2.2 傳動原理
如圖1.1和1.2所示,窗簾采用左右雙開的形式,通過單片機控制步進電機的正反轉來帶動齒輪的正反轉進而使與齒輪嚙合的兩個齒條左右反向移動來實現窗簾的打開與關閉。
窗簾一端固定不動,中間部分由圓環連接串在圓柱形橫桿上,另外一端通過“h”形卡扣固定在齒條的一端隨著齒條在橫桿上左右移動從而實現窗簾的打開與關閉。
在窗簾打開(關閉)到位時齒條所對應的位置安裝有限位開關,每當窗簾全開(全關)時都會觸發限位開關使步進電機停止轉動,防止窗簾過度打開(關閉)導致損壞。
2.3 齒輪、齒條的選擇2.3.1 選擇齒輪材料及精度等級

直齒圓柱齒輪選用45鋼調質,硬度為220HBW;矩形直齒齒條選用45鋼正火,硬度為170HBW;選擇8級精度 。詳細數據見零件圖
   
2.3.2 確定齒輪許用應力2.3.3 校核齒根彎曲疲勞強度
齒輪是長時間、高轉速、大載荷(大功率)傳動零件,對其承載能力計算方法有標準GB/T3480。齒輪齒條傳動,不存在高轉速、長時間工作條件(要求)。所以,就不存在輪齒彎曲疲勞強度、接觸疲勞(點蝕等)強度計算問題。(應力循環次數比齒輪傳動小的太多了)比起直齒輪傳動,齒輪齒條傳動的重合系數要高,每個齒承受的力相對要小。所以,對齒輪齒條傳動進行強度校核,只要通過輪齒受力分析(不考慮齒面摩擦,齒面作用力方向是固定的,等于壓力角“方向”),受力計算,滿足輪齒彎曲強度即可。
                    =21.1127002.651.59/(10428)=105.11MPa;
                       =105.112.2151.785/(2.651.59)=98.63MPa;
均小于許用應力,故符合強度要求。
2.4 窗簾“h”形卡扣
“h”形卡扣材料為鋁合金,具體尺寸見零件圖。
形狀如下:
圖2.7 “h”形卡扣
2.5 窗簾外殼

第三章 系統硬件方案選擇
本章節主要介紹系統所用到的器件的選擇,進行綜合的、考慮選擇出最適合本設計的、方案。
3.1 硬件方案的選擇
在硬件電路的搭建之前必須明確設計的方案,通過各個模塊之間進行比較選擇出最適合本設計的硬件,以發揮器件的最大功效。
3.1.1 主控芯片的選擇
采用STC89C52單片機作為主控芯片。STC89C52是宏晶科技公司生產的一款低功耗、高性能的八位CMOS微處理器,片內具有8k在線編程Flash存儲器。STC89C52單片機的內核采用的是MCS-51內核,指令完全兼容MCS-51,但是該單片機越做了升級使得芯片具有很多傳統的51單片機不具備的功能,例如該芯片還有4K的EEPROM存儲,在需要使用到掉電存儲數據的時候就可以直接使用單片機內部的存儲,不在需要在外接存儲芯片進行存儲。STC89C52單片機具有的開發簡單、可在線編程下載、成本低是非常不錯的選擇。
綜合上述的描述,考慮到資源的合理利用和成本以及開發的難易程度最終決定采用宏晶科技的STC89C52單片機作為主控芯片。
3.1.2 時鐘器件的選擇
采用單片機內部定時計數器作為計時。雖然定時器進行的計時精度有限,在短時間內精度還行,如果時間長了誤差累計的越來越多時間也就偏差多了。但是采用該方法可以節省電路的搭建也節省了成本。
3.1.3 步進電機驅動的選擇
選用ULN2003芯片。ULN2003是高耐壓、大電流復合晶體管IC。由七個硅NPN 復合晶體管組成,內部每一路達林頓都加入了基準電阻所以可以直接和TTL或者CMOS電路直接相連接。輸出還可以在高負載電流并行運行使用其驅動步進電機非常方便。
根據上述描述,最終選擇了方案ULN2003作為電機的驅動。
3.2系統總體方案
通過上述對各個模塊介紹,我們最終選擇了采用STC89C52作為的主控芯片,采用光敏電阻采集環境光強通過,通過獨立按鍵可以進行切換模式模式。同時具有兩個限位開關防止窗簾電機過度轉動而造成窗簾損壞。

第四章 系統硬件電路設計
本章節主要介紹本設計中各個部分電路的設計原理。通過各個模塊的功能描述了解其工作原理以及在設計的中作用。
4.1 STC89C52單片機系統設計4.1.1 STC89C52的概述
STC89C52是STC公司生產的一種低功耗、高性能CMOS8位微控制器,具有 8K 在系統可編程Flash存儲器。STC89C52使用經典的MCS-51內核,但做了很多的改進使得芯片具有傳統51單片機不具備的功能。在單芯片上,擁有靈巧的8 位CPU和在系統可編程Flash,使得STC89C52為眾多嵌入式控制應用系統提供高靈活、非常有效的解決方案。具有以下標準功能:8k字節Flash,512字節RAM,32位I/O口線,看門狗定時器,內置4KB EEPROM,MAX810復位電路,3個16位定時器/計數器,4個外部中斷,一個7向量4級中斷結構(兼容傳統51的5向量2級中斷結構),全雙工串行口。另外STC89X52 可降至0Hz 靜態邏輯操作,支持2種軟件可選擇節電模式。空閑模式下,CPU 停止工作,允許RAM、定時器/計數器、串口、中斷繼續工作。掉電保護方式下,RAM內容被保存,振蕩器被凍結,單片機一切工作停止,直到下一個中斷或硬件復位為止。最高運作頻率35MHz,6T/12T可選。
4.1.2 STC89C52單片機的最小系統
單片機最小系統說的通熟易懂的話就是以最少的元器件組成能讓單片機工作起來的系統,接下來開始介紹51單片機最小系統必備的器件及其作用。
首先電源這對于一個電子產品的話是必不可少,它提供能源給系統運作,在本設計中由于51單片機的工作電壓在4.5~5.5V之間都可以正常工作所以我們采用了USB電源線連接手機充電器插頭或者5V的移動電源給系統進行供電。
其次晶振電路,XTAL1和XTAL2 是獨立的輸入和輸出反相放大器,它們可以被配置為使用石英晶振的片內振蕩器,或者是器件直接由外部時鐘驅動。圖4.1中采用的是內時鐘模式,即采用利用芯片內部的振蕩電路,在XTAL1、XTAL2 的引腳上外接定時元件(一個石英晶體和兩個電容),內部振蕩器便能產生自激振蕩。一般來說晶振可以在1.2~12MHz 之間任選,甚至可以達到24MHz 或者更高,但是頻率越高功耗也就越大。在本實驗套件中采用的12M 的石英晶振。和晶振并聯的兩個電容的大小對振蕩頻率有微小影響,可以起到頻率微調作用。當采用石英晶振時,電容可以在20 ~40pF 之間選擇(本設計使用30pF);當采用陶瓷
諧振器件時,電容要適當地增大一些,在30~50pF 之間。通常選取30pF 的陶瓷電容就可以了。
圖4.1 晶振電路
再來就是復位電路,復位電路分為:上電自動復位和開關復位。圖4.2 中所示的復位電路就包括了這兩種復位方式。上電瞬間,電容兩端電壓不能突變,此時電容的負極和RESET 相連,電壓全部加在了電阻上,RESET 的輸入為高,芯片被復位。隨之+5V電源給電容充電,電阻上的電壓逐漸減小,最后約等于0,芯片正常工作。并聯在電容的兩端為復位按鍵,當復位按鍵沒有被按下的時候電路實現上電復位,在芯片正常工作后,通過按下按鍵使RST管腳出現高電平達到手動復位的效果。一般來說,只要RST 管腳上保持10ms 以上的高電平,就能使單片機有效的復位。圖中所示的復位電阻和電容為經典值,實際制作是可以用同一數量級的電阻和電容代替,讀者也可自行計算RC 充電時間或在工作環境實際測量,以確保單片機的復位電路可靠。
圖4.2 復位電路
完整的STC89C51單片機最小系統電路圖如圖4.3所示。
圖4.3 STC89C52單片機最小系統
4.2 步進電機原理構造
步進電機是一種將電脈沖轉化為角位移的執行機構。通俗的說:也就是當步進驅動器接收到一個脈沖信號,它就驅動步進電機按設定的方向轉動一個固定的角度(即步進角)。可以通過控制脈沖的個數來控制角位移量,從而達到準確定位的目的;同時可以通過控制脈沖的頻率來控制電機轉動的速度和加速度,從而做到調速的目的。
步進電機28BYJ48型四相八拍電機,工作電壓為:DC5V-DC12V。當對步進電機施加一系列連續不斷地控制脈沖時,它可以連續不斷轉動。每一個脈沖信號對應步進電機的某一相或兩相繞組的通電狀態改變一次,也就對應轉子轉過一定的角度(一個步距角)。當通電狀態的改變完成一個循環時,轉子轉過一個齒距。四相步進電機可以在不同的通電方式下運行,常見的通電方式有單四拍(單相繞組通電):A-B-C-D-A….,雙四拍(雙相繞組通電):AB-BC-CD-DA-AB…;八拍:A-AB-B-BC-C-CD-D-DA-A…。
其中四相八拍的驅動方式如下表4-3所示。
4.3 ULN2003硬件設計4.3.1 ULN2003的概述與特點
高耐壓、大電流復合晶體管IC—ULN2003,ULN2003 是高耐壓、大電流復合晶體管陣列,由七個硅NPN 復合晶體管組成。ULN2003是大電流驅動陣列,多用于單片機、智能儀表、PLC、數字量輸出卡等控制電路中。可直接驅動繼電器等負載。
ULN2003 的每一對達林頓都串聯一個2.7K 的基極電阻,在5V 的工作電壓下它能與TTL 和CMOS 電路直接相連,可以直接處理原先需要標準邏輯緩沖器來處理的數據。
ULN2003 工作電壓高,工作電流大,灌電流可達500mA,并且能夠在關態時承受50V 的電壓,輸出還可以在高負載電流并行運行。
4.3.2 ULN2003與單片機的連接
本設計中采用ULN2003驅動步進電機,設計中將單片機的P1.0~P1.3引腳分別接到ULN2003的R1~R4上,輸出端Q1~Q4接到28BYJ-48步進電機的藍、粉、黃、橙四根線上也就是ABCD四相上。如圖4.14所示。
圖4.14 ULN2003與單片機和步進電機的連接

第五章 系統軟件部分設計5.1 軟件開發環境的介紹
本設計采用 Keil μVision4進行編程實現。Keil C51是美國Keil Software公司出品的51系列兼容單片機C語言軟件開發系統,與匯編相比,C語言在功能上、結構性、可讀性、可維護性上有明顯的優勢,因而易學易用。Keil提供了包括C編譯器、宏匯編、連接器、庫管理和一個功能強大的仿真調試器等在內的完整開發方案,通過一個集成開發環境(uVision)將這些部分組合在一起。運行Keil軟件需要WIN98、NT、WIN2000、WINXP等操作系統。如果你使用C語言編程,那么Keil幾乎就是你的不二之選,即使不使用C語言而僅用匯編語言編程,其方便易用的集成環境、強大的軟件仿真調試工具也會令你事半功倍。
5.2 系統重要函數的介紹5.2.1 主函數的設計
主函數void main()是程序的入口函數,一個完整的程序必須要包含該函數。在該函數的開頭一般都是先對單片機和一些外圍器件需要進行初始化才能正常使用的器件進行初始化和重新賦值一些變量,初始化完后進去死循環,如果不進入死循環程序運行一次就會退出,如果加入死循環程序就會不斷地進行循環達到實時檢測執行的目的。在主程序的設計中需要注意的是主函數中不宜放過多的代碼,具體的代碼一般都是采用函數進行封裝然后在主函數進行調用,這樣也可以方便閱讀修改。具體流程圖如下5.1所示。
圖5.1 主函數流程圖
5.2.2 步進電機控制函數的設計
步進電機的控制在上一章節已經介紹過了采用四相八拍的方式,單片機I/O口每次發送一個脈沖信號對應步進電機的某一相或兩相繞組的通電狀態改變一次,也就對應轉子轉過一定的角度,在兩個脈沖信號之間添加一個延時可以調節步進電機轉動的快慢。步進電機正轉流程圖如圖5.5所示,反轉如圖5.6所示。
       5.3 系統軟件測試
測試所需的工具:Keil軟件、Proteus仿真等。
系統的軟件方面通過Keil軟件進行編寫,將編寫好的程序生成.HEX文件后通過Proteus下載到單片機中。通過觀察整個系統運行的狀態,然后進行反復的修改調試程序,最終得到一個完善的程序。
在系統軟件調試上主要遇到以下幾個問題:
(1)步進電機不會轉動。
解決方法:通過查閱資料四相八拍的控制方式和程序上的一致可是就是不會轉動但是步進電機會發送響聲,像是里面東西卡主轉動不起來的樣子。通過嘗試調大延時后發現電機可以轉動了,后又再次調大電機又不轉動了,后面發現步進電機的控制脈沖的頻率不能過快或過慢,過快過慢都會導致步進電機不工作。
(2)控制按鈕功能實現。
解決辦法:檢查引腳輸入是否正確,檢查程序邏輯是否行得通。最后通過師兄幫助,成功解決問題。

第六章 設計總結與展望
經過制作設計的這段時間的努力終于將本設計方案要求基本實現。由于時間、水平和經驗有限,設計的作品還存在著一些的不足之處。
對于這次設計來說既是一次機遇,又是一次挑戰。在這次的設計過程中,我們學到了很多東西,通過自己的實踐,增強了動手能力。通過實際工程的設計也使我們了解到書本知識和實際應用的差別。在實際應用中遇到很多的問題,這都需要我對問題進行具體的分析,并一步一步地去解決它。當然本設計也存在許多問題和不足,著也反映了自己能力不足,更加鞭策自己在以后的學習和生活中需要更加努力,需要多動手,多實踐,將理論和實踐相結合,已達到事半功倍的效果.

評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表