一 課程設計任務
1.1 設計內容及功能要求1.用步進電機控制窗簾(L298N);
- 用光敏傳感器實現自動控制;
- 實現窗簾全開,全關,部分開;
- 用三個獨立按鍵設置打開,關閉,停止方式。
本組設計的自動光控窗簾可以通過周圍環境的光照變化來控制電壓變化,從而控制直流電機的正轉和反轉。當周圍光照降低到某一數值時,電機開始正轉,數秒后停止。此時電機處于停止狀態。當周圍光照上升到某一數值時,電機開始反轉,數秒后停止。這一個來回的過程就達到了自動光控窗簾的效果了。
1.2 元器件清單元器件 數量
光敏電阻 1
普通電阻 1
PCF8591 1
MCS-8051 1
L298N 1
二極管 9
直流電機 1
運算放大器 1
其他元件 若干
二 整體設計方案
2.1 設計思路本課題的設計思路是由光敏電阻與一個電阻串聯構成分壓電路,當光照強度改變時,光敏電阻電阻值改變,電壓也會改變,由此構成了變化的輸入電壓信號。信號經PCF8591進行A/D轉換,將信號送入單片機MCS-8051中,用來控制2個輸出端的電平高低,這2個輸出端與芯片L298N的輸入相連,用于控制電機的正反轉,這就實現了自動光控窗簾的效果了
2.2 整體框圖2.3 各模塊簡介- 光照采集模塊:由光敏電阻阻值的改變來實現輸入電壓的變化。
光敏電阻器又稱光導管。
結構:通常由光敏層、玻璃基片和電極等組成的。
特性:無光照射時呈高阻狀態;有光照射時其阻值迅速減小。
- A/D轉換模塊:將光敏電阻與普通電阻分壓進來的電壓轉換成單片機需要的信號。本設計中采用PCF8591,是單片、單電源低功耗8位CMOS數據采集器,具有四個模擬輸入、一個輸出和一個串行I^2C總線接口。3個地址引腳A0、A1、和A2用于編程硬件地址,允許將最多8個器件連接至I^2C總接線而不需要額外硬件。器件地址、控制和數據通道通過兩線雙向I^2C總線傳輸。

a、內部結構編輯:
如圖所示:
- AIN0~AIN3:模擬信號輸入量。
- A0~A2:引腳地址端。
- VDD、VSS:電源端。(2.5~6V)
- SDA、SCL:I2C總線的數據線、時鐘線。
- OSC:外部時鐘輸入端,內部時鐘輸出端。
- EXT:內部、外部時鐘選擇線,使用內部時鐘時EXT接地。
- AGND:模擬信號地。
- AOUT:D/A轉換輸出端。
- VREF:基準電源端。
b、工作過程編輯首先輸入3位地址,并使ALE=1,將地址存入地址鎖存器中。此地址經譯碼選通8路模擬輸入之一到比較器。START上升沿將逐次逼近寄存器復位。下降沿啟動 A/D轉換,之后EOC輸出信號變低,指示轉換正在進行。直到A/D轉換完成,EOC變為高電平,指示A/D轉換結束,結果數據已存入鎖存器,這個信號可用作中斷申請。當OE輸入高電平 時,輸出三態門打開,轉換結果的數字量輸出到數據總線上。轉換數據的傳送A/D轉換后得到的數據應及時傳送給單片機進行處理。數據傳送的關鍵問題是如何確認A/D轉換的完成,因為只有確認完成后,才能進行傳送。為此可采用下述三種方式。
(1)定時傳送方式
對于一種A/D轉換器來說,轉換時間作為一項技術指標是已知的和固定的。。可據此設計一個延時子程序,A/D轉換啟動后即調用此子程序,延遲時間一到,轉換肯定已經完成了,接著就可進行數據傳送。
(2)查詢方式
A/D轉換芯片有表明轉換完成的狀態信號,因此可以用查詢方式,測試EOC的狀態,即可確認轉換是否完成,并接著進行數據傳送。
(3)中斷方式
把表明轉換完成的狀態信號(EOC)作為中斷請求信號,以中斷方式進行數據傳送。
不管使用上述哪種方式,只要一旦確定轉換完成,即可通過指令進行數據傳送。首先送出口地址并以信號有效時,OE信號即有效,把轉換數據送上數據總線,供單片機接受。
單片微型計算機簡稱為單片機,是一種超大規模集成電路芯片,是集成CPU、RAM、ROM、I/O接口和中斷系統于同一硅片上的器件。
MCS-51是標準的40引腳雙列直插式集成電路芯片:
單片機口線分布:
P0:作為輸入口,接收PCF8591送出的信號
P1:控制ADC0809的ALE、OE、START、OEC端口
P2:作為輸出口,發送控制信號給L298N,從而控制直流電機正反轉
其余Vcc、Gnd、Rst、XTAL等端口與經典電路接法相同。
l P0.0~P0.7 P0口8位雙向口線(在引腳的39~32號端子)。
l P1.0~P1.7 P1口8位雙向口線(在引腳的1~8號端子)。
l P2.0~P2.7 P2口8位雙向口線(在引腳的21~28號端子)。
l P3.0~P3.7 P3口8位雙向口線(在引腳的10~17號端子
- 電機正反轉控制模塊:由輸入信號控制直流電機的正轉和反轉。
恒壓恒流橋式2A驅動芯片L298N 是15 腳 Multiwatt 封裝的 L298N,內部包含4信道邏輯驅動電路,是一種二相和四相步進電機的專用驅動器,可同時驅動2個二相或1個四相步進電機. 內含二個H-Bridge 的高電壓、大電流雙全橋式驅動器,接收標準TTL邏輯準位信號,可驅動46V、2A以下的步進電機,可以直接透過電源來調節輸出電壓;此芯片可直接由單片機的IO端口來提供模擬時序信號,L298N 之接腳如圖所示:
L298N可接受的標準TTL邏輯電平信號Vss,Vss可接4.5~7V電壓。4腳VS可接電源電壓。VS電壓范圍VIH為+2.5~46V。輸出電流可達2.5A,可驅動電感性負載。1腳和15腳下管的發射極分別單獨引出以便接入電流采樣電阻,形成電流傳感信號。L298N可驅動兩個電動機,out1,out2和out3,out4之間可分別接電動機。5,7,10,12腳接輸入控制電平,控制電機的正反轉。
三 硬件電路設計3.1 光照采集模塊硬件電路a、電路圖:
b、設計原理:由光敏電阻和一個普通電阻串聯構成分壓電路,當周圍環境的光照強度改變時光敏電阻阻值改變,從而改變了輸入電壓
3.2 A/D轉換模塊硬件電路
a、電路圖:
b、設計原理:將采集的電壓信號送入芯片PCF8591中,由芯片內部對數據進行鎖存、譯碼、轉換、比較等步驟,從而得到單片機MCS-8051所需要的信號。
3.3 電機正反轉控制模塊硬件電路a、電路圖:
b、設計原理:
單片機2個輸出端口連接L298N的2個輸入控制端,IN1和IN2。單片機收到ADC0809的輸入信號后判斷此時的電壓值,如果小于某一數值,輸出端P2.1和P2.2此時為1和0,信號送到正反轉控制芯片L298N后控制端IN1和IN2控制電機正轉,數秒后停止;如果大于某一數值,輸出端變為0和1,經L298N控制電機反轉。
四 控制軟件設計4.1 光照采集模塊軟件設計a、功能:用光敏電阻和一個普通電阻構成分壓電路,當光照強度改變時光敏電阻阻值改變,電壓改變,從而改變輸入電壓的大小。
b、流程圖

4.2 A/D轉換模塊軟件設計a、功能:電壓輸入信號送入芯片PCF8591后進行轉換,將采集信號轉換成單片機89C51所需要的信號。
b、流程圖:
4.3 電機正反轉控制模塊軟件設計a、功能:由單片機2個輸出端口控制L298N的2個輸入控制端,IN1和IN2。當IN1=1且IN2=0時控制電機正轉;當IN1=0且IN2=1時控制電機反轉。
b、流程圖:
五 PCB圖和3D效果圖
總結
為期一個月的單片機課程設計結束了,在這一個月的時間里,我們為課程設計規劃好了思路和流程,研究這些東西是如何結合在一起實現一個功能的,然后畫好了一張完整的電路圖。在做好了資料的準備后,我們就開始了忙碌的設計過程。
整個的課程設計過程是充滿艱辛的,有很多能困擾我們的問題,更有些是絞盡腦汁也沒有克服的,但樂趣和意義就在這之中。我發現遇到了問題要不斷地想問題是從何而來的,要想的廣泛,而且要多關心別人做的同類型的東西,因為可能只需要點撥一下,只要一個靈感就能聯想到很多東西,問題的答案也許就在其中。
我們不僅學習到了很多單片機的知識,并且了解了AD,異步電機等程序的錄入和運行,而且還暴露出來很多學習上的問題,這些問題的發現將為我們以后的學習和工作找明道路,查漏補缺為進一步學習作好準備!本次實驗我們組做的課題是《智能窗簾控制系統設計》,這是一個實用性質非常強的題目。首先,它非常聯系我們日常生活,每個人家里都有窗簾,有的人喜歡屋里偏暗,如果他裝上了光控窗簾,則能通過光照強度來實現窗簾的自動收放功能 其次,光控窗簾是涉及到單片機、電路、信號、數學數字運算等多學科的一門綜合性應用非常強的課題,這個課題的成功實踐必將在一定程度上極大地激發我們在這些相關學科的學習興趣,也會促使我們去向多學科綜合應用的方面發展,這也是當今科學科技領域一個顯著的特點。從這一點上來說這個課題的選取對所有參加這個課題研究的同學們來說都是一個非常好的鍛煉。 其次也培養了我們每個人在對待科學問題上孜孜不倦、嚴謹求實的科學作風,這對我們每個人來說都是相當有益的!當然,通過做這個課題,也暴露出來了很多問題值得我們去探討解決和克服:第一,時間利用問題。由于課題難度較大,再一個有關時間的問題就是時間利用率太低。第二,課題研究不夠深刻。課題研究總是浮于表面文章,對程序對最后結果研究不夠造成雖然某一塊地方做的比較好但是在大腦中沒有一個總體的印象,無法理論聯系實際,研究成果的應用嚴重背離實際現實,影響使用。
我且先總結到這里。這些問題的發現,有助于提高我們在以后的工作和學習中對此類問題的認識,確保不在同一問題上再次犯錯。 最后,衷心感謝黃老師給我們提供了這次難得的實訓機會,給了我們這么深刻的人生體會,這對我們來說是受益終身的!
單片機源程序如下:
- #include<reg51.h>
- #define uchar unsigned char
- unsigned char flag ;
- unsigned int count;
- sbit start=P1^5;
- sbit oe=P1^6;
- sbit eoc=P1^7;
- sbit in1=P1^1;
- sbit in2=P2^2;
- int rx;
- int i;
- float v;
- uchar d;
- int abc();
- void display();
- main()
- {
- in1=0;
- in2=0;0;
- start =0;
- oe =0;
- IE=0; //關閉所有中斷
- while(1)
- {
- d=adc(); //調用A/D轉換函數
- display(); //控制輸出信號
- }
- }
- int adc()
- {
- start =1;
- for(i=0;i<200;i++)
- start=0;
- while(eoc==0) //等待轉換結束
- oe=1; //轉換結束,設置讀允許
- d=P0; //讀采集信號值
- oe=0; //關閉讀允許
- return d; //返回電壓值
- }
- void display()
- {
- if(d<105) //輸入電阻小于2V
- {
- in1=1;
- in2=0; //直流電機正轉
- if(d<240) //輸入電壓大于4.6V
- {in1=0;in2=1;} //直流電機反轉
- }
- else
- {in1=0;
- in2=0;} //正常狀態直流電機停止
- ……………………
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
0.png (47.43 KB, 下載次數: 39)
下載附件
2018-7-1 04:08 上傳
所有資料51hei提供下載:
單片機智能窗簾.rar
(1.78 MB, 下載次數: 184)
2018-7-1 04:11 上傳
點擊文件名下載附件
下載積分: 黑幣 -5