版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
自動化084班劉連鵬資料收集基于單片機的LED路燈模擬限制系統(tǒng)的設計與實現(xiàn)0引言LED照明系統(tǒng)具有省電、靈巧、壽命長、高耐久性等特征,近年來已經(jīng)越來越多地應用于路燈照明系統(tǒng)中,其趨勢是取代目前廣泛采納的高壓汞燈的路燈照明。針對目前比較先進的LED路燈限制系統(tǒng)進行了模擬路燈限制系統(tǒng)設計,實現(xiàn)了整條支路的LED路燈定時限制開關燈、自動開關燈、獨立限制開關燈及故障報警等多項功能。對1WLED路燈單元可調恒流驅動電源,可以依據(jù)設定要求調整LED輸出功率大小,實現(xiàn)調光功能。1系統(tǒng)硬件設計1.10引言
LED照明系統(tǒng)具有省電、靈巧、壽命長、高耐久性等特征,近年來已經(jīng)越來越多地應用于路燈照明系統(tǒng)中,其趨勢是取代目前廣泛采納的高壓汞燈的路燈照明。
針對目前比較先進的LED路燈限制系統(tǒng)進行了模擬路燈限制系統(tǒng)設計,實現(xiàn)了整條支路的LED路燈定時限制開關燈、自動開關燈、獨立限制開關燈及故障報警等多項功能。對1WLED路燈單元可調恒流驅動電源,可以依據(jù)設定要求調整LED輸出功率大小,實現(xiàn)調光功能。
1系統(tǒng)硬件設計
1.1系統(tǒng)總體設計
為了能夠真實地模擬實際LED路燈的限制,設計了模擬路燈限制系統(tǒng)。限制系統(tǒng)結構如圖1所示,該系統(tǒng)主要由輸入顯示裝置、支路限制器和2個單元限制器模塊組成。支路限制器主要用來對整個模擬LED路燈支路進行限制;對于輸入顯示裝置,當按鍵時輸入限制信息,LCD顯示相關的限制信息;2個單元限制器受支路限制器限制LED1和LED2的電源供電和功率的輸出。
1.2支路限制器
模擬LED路燈限制系統(tǒng)的重點在支路限制器,其電路框圖如圖2所示。AT89S52單片機作為限制核心,時鐘電路將時鐘信息送顯示和時鐘存儲;光敏檢測主要用來檢測光線的強度是否應當開關路燈;在路燈出現(xiàn)故障(斷路)時將產(chǎn)生聲光報警,并指示那一路發(fā)生故障。
1.2.1時鐘電路
基于DS1302的時鐘電路設計采納24h計時方式,時、分、秒并用LCD顯示。采納AT89S52單片機和DS1302實時時鐘芯片,運用5V電源供電,采納按鍵限制,可以進行時間校正,并且可對LED燈的開關時間進行限制和調整。DS1302的VCC2加入3V鋰可充電電池實現(xiàn)時鐘掉電愛護。通過AT24C02存儲時鐘信息實現(xiàn)程序掉電愛護功能。
1.2.2光敏檢測電路
光敏檢測主要檢測光線的強度是否應當開關路燈。光敏檢測電路主要利用光敏電阻的感光特性進行工作。光敏檢測電路如圖3所示,當白天光照耀到光敏電阻時,光敏電阻的阻值降低,反向輸入端電壓隨之降低,當?shù)陀诜聪嗥?4HC04的門檻電壓時,反相器發(fā)生翻轉,供應應單片機一高電平,限制LED燈關閉。當弱光或無光照時(晚上),由于光敏電阻的暗電阻很大,反向輸入端電壓較高,使得反相器輸出為低電平,單片機限制LED燈的自動開啟。
1.2.3故障檢測及聲光報警
聲光報警裝置是支路限制器中單片機限制蜂鳴器和發(fā)光二極管發(fā)出聲光報警的電路裝置。當系統(tǒng)中某一支路出現(xiàn)故障(如燈不亮),正常狀況是LED路燈應當點亮的時候,此時推斷為路燈出現(xiàn)故障,系統(tǒng)中采納以光敏檢測的方法來檢測LED路燈是否點亮或者滅,從而判別是否有故障。當有故障時在支路限制器中,單片機限制蜂鳴器和發(fā)光二極管發(fā)出聲光報警信號,并通過LCD顯示器顯示當前故障路燈的地址編號,實現(xiàn)故障報警顯示功能。
1.3輸入及顯示裝置
圖4所示為鍵盤輸入和液晶顯示電路。K1為菜單功能鍵,相對應的菜單有時間校正、設定LED燈整條支路開關,獨立限制每只路燈開關時間和功率調整的調光功能;K2為移位鍵;K3為加減鍵;K4為確認鍵。LCD數(shù)據(jù)線與單片機P1口相連;RS寄存器選擇信號端與P2.0相連;RW讀寫端與P2.1相連;E使能端與P2.2相連。
1.4單元限制器
單元限制電路的工作是由單片機限制D/A轉換器輸出電壓,從而限制可調恒流源驅動電路。可調恒流源驅動電路由運放LM358、繼電器、大功率管TIP41和開關管9013等組成,如圖5所示。單片機P3.0限制口輸出凹凸電平信號限制繼電器開關,給恒流源電路供應+12V電壓,恒流源電路驅動LED發(fā)光。當輸出高電平,繼電器導通,給恒流源電路供應+12V電壓,否則相反。單片機通過限制TLC5615D/A輸出電壓信號來調整恒流源的大小。
LED燈選用獨立1W藍光發(fā)光二極管,正向電壓為3.0~4.0V,正向電流為350mA,D/A輸出電壓為0.5~2.4V,調整流過LED的電流,從而可調整1W的LED燈,輸出功率在20%~100%。經(jīng)過實測,恒流源輸入Vi與LED輸出功率(P=UI)的關系如表1所示。
2系統(tǒng)軟件設計
程序總流程圖如圖6所示。系統(tǒng)啟動后在沒有任何按鍵按下的狀況下顯示當前日期和時間,選擇路燈的工作模式。系統(tǒng)默認的工作模式為檢測亮暗開關模式,依據(jù)環(huán)境光線推斷是否打開路燈。當通過按鍵進行設定的時候,進入設定的模式,包括:LED路燈輸出功率的設定,設定范圍在20%~100%;當前日期和時間的修改和設定;路燈工作模式的設定;路燈故障的檢測及對應單元故障的顯示。
3測試結果
(1)在液晶屏幕上能夠顯示時鐘、顯示菜單。設定、顯示開關燈時間,限制整條支路(測試用早上6:00關燈,晚上7:OO開燈)或獨立限制LED1及LED2的開燈和關燈。
(2)環(huán)境明暗變更自動開關燈的模擬測試。當環(huán)境的光照度小于0.1lx(用手遮擋光敏電阻),自動點亮LED燈,手松開自動關閉LED燈。
(3)路燈故障報警測試。設置LED1燈故障,系統(tǒng)紅色發(fā)光二極管閃耀,蜂鳴器發(fā)出響聲,液晶顯示屏顯示相應故障地址RD1;設置LED2燈故障,聲光報警相同,液晶顯示屏顯示相應故障地址RD2。
(4)測試出LED1,LED2燈的功率能在20%~100%范圍內調整,從而實現(xiàn)調光和調整輸出功率功能;
通過整機調試,液晶顯示功率數(shù)值與實際測量LED1,LED2燈的功率(P=UI)數(shù)值誤差小于等于1.8%。
4結語
具體講解并描述了系統(tǒng)設計方案,并給出了相關程序流程。本設計模擬實際大功率LED路燈限制系統(tǒng),有較強的應用價值??梢詫⑵湓O計思路和方法應用在馬路LED路燈、小區(qū)LED路燈和景區(qū)亮化工程等。應用本設計可以大幅節(jié)約能源消耗,降低成本,實現(xiàn)路燈亮化的智能限制。另外,假如把本設計方案擴展加上上位機,則可以實現(xiàn)遠程中心路燈監(jiān)控系統(tǒng),將具有更大的應用價值。
本設計的創(chuàng)新點在于具體設計了基于單片機AT89252模擬路燈限制的系統(tǒng),通過對功率參數(shù)的實際測量,達到精確限制LED路燈的輸出功率;能夠依據(jù)光線強弱自動開關路燈;還能夠依據(jù)限制設定定時開關路燈;能自動檢測故障路燈并顯示故障位置。多種限制方式起到節(jié)能和智能限制作用。所設計程序已經(jīng)在模擬LED路燈限制系統(tǒng)硬件平臺上勝利運行。模擬路燈限制系統(tǒng)的設計摘要本系統(tǒng)以AVR低功耗單片機系列ATMEGA16L為核心組成支路限制系統(tǒng),采納專用時鐘芯片實現(xiàn)精確的時鐘功能,設定并顯示開關燈時間。該限制系統(tǒng)能依據(jù)環(huán)境明暗變更自動開燈和關燈,以達到節(jié)能要求。ATMEGA16L是一款高性能、低功耗的8位AVR微處理器,使系統(tǒng)在低功耗的狀態(tài)下穩(wěn)定工作。系統(tǒng)采納線路簡潔、體積小的專用時鐘芯片DS1302,DS1302工作時功耗很低,保持數(shù)據(jù)和時鐘信息時功率小于1mW。運用DS1302不但使電路功耗降低,而且節(jié)約IO口資源。采納低功耗的字符型液晶作為顯示器件,顯示更為直觀。運用光敏電阻來檢測環(huán)境明暗的變更,光敏電阻在不同光強下電阻值會發(fā)生明顯變更,單片機內部AD采集電阻值的變更量達到檢測目的。采納對射式收發(fā)一體光電傳感器檢測物體的運動,運用靈敏光電傳感器更有效地實現(xiàn)在物體運動過程中路燈的自動限制,達到節(jié)能的要求。當路燈電路出現(xiàn)故障時,單片機采集路燈電路采樣點的電壓后處理采集到的數(shù)據(jù),實現(xiàn)自動報警功能。該系統(tǒng)基于牢靠的硬件設計和穩(wěn)定的軟件算法實現(xiàn)題目基本要求。關鍵詞:ATMEGA16L功耗節(jié)能光電傳感器目錄一、設計任務 -2-1.1任務 -2-1.2要求 -2-二、方案論證與比較 -3-三、總體設計方案 -3-1.支路限制系統(tǒng)設計 -4-(1) 時鐘模塊 -4-(2) 信號采集模塊的設計 -5-(3) 顯示、按鍵模塊 -6-(4) 路燈限制模塊 -6-(5)聲光報警模塊 -6-(6)電源模塊 -7-2.軟件設計 -13-四、結果分析 -13-五、結論 -14-六、參考文獻 -14-附錄1系統(tǒng)原理圖 -15-附錄2程序清單 -16-一、設計任務1.1任務設計并制作一套模擬路燈限制系統(tǒng)。限制系統(tǒng)結構如圖1所示,路燈布置如圖2所示。
圖1路燈限制系統(tǒng)示意圖圖2路燈布置示意圖(單位:cm)1.2要求1.基本要求(1)支路限制器有時鐘功能,能設定、顯示開關燈時間,并限制整條支路按時開燈和關燈。(2)支路限制器應能依據(jù)環(huán)境明暗變更,自動開燈和關燈。(3)支路限制器應能依據(jù)交通狀況自動調整亮燈狀態(tài):當可移動物體M(在物體前端標出定位點,由定位點確定物體位置)由左至右到達S點時(見圖2),燈1亮;當物體M到達B點時,燈1滅,燈2亮;若物體M由右至左移動時,則亮燈次序與上相反。(4)支路限制器能分別獨立限制每只路燈的開燈和關燈時間。(5)當路燈出現(xiàn)故障時(燈不亮),支路限制器應發(fā)出聲光報警信號,并顯示有故障路燈的地址編號。2.發(fā)揮部分(1)自制單元限制器中的LED燈恒流驅動電源。(2)單元限制器具有調光功能,路燈驅動電源輸出功率能在規(guī)定時間按設定要求自動減小,該功率應能在20%~100%范圍內設定并調整,調整誤差≤2%。(3)其它(性價比等)。二、方案論證與比較方案一:題目要求設計一個模擬路燈限制系統(tǒng),實現(xiàn)支路限制器對單元限制器的有效限制。本系統(tǒng)采納ATMEGA16L單片機為主控芯片,采納對射式收發(fā)一體的光電傳感器采集由于物體運動所產(chǎn)生的信號,再由支路限制器系統(tǒng)對信號進行處理實現(xiàn)對路燈的合理限制,以達到題目要求。支路限制器的時鐘采納精確的時鐘芯片并由字符型液晶作為顯示,利用按鍵設定、修改開關燈時間。系統(tǒng)采納光敏電阻分壓的方式感應四周環(huán)境明暗的變更,支路限制系統(tǒng)采集分壓值經(jīng)單片機處理后來限制路燈的變更。當路燈出現(xiàn)故障后路燈電路中采樣點的電壓值會發(fā)生變更,單片機依據(jù)變更量進行相應的處理?;谠O計思路在設計過程中選擇合適的元器件,運用合適的單元電路模塊,更有效的達到設計要求。方案二:與方案一不同的是方案二選用AT89S52芯片,采納紅外對管對物體的移動進行檢測,時鐘由單片機定時器實現(xiàn)。方案比較:與AT89S52相比,ATMEGA16L在性能上具有明顯的優(yōu)勢,若采納紅外對管則給元件的安裝帶來不便,且不易調試;由單片機定時器實現(xiàn)的時鐘不精確,故采納方案一。三、總體設計方案本系統(tǒng)以ATMEGA16L為限制核心。整個系統(tǒng)硬件框圖如圖1所示:圖3系統(tǒng)框圖1.支路限制系統(tǒng)設計圖4最小系統(tǒng)支路限制系統(tǒng)是模擬路燈限制系統(tǒng)的核心,該系統(tǒng)采納ATMEL公司的ATMEGA16L單片機作為主限制芯片來實現(xiàn)對受控對象的限制。與AT89S52相比,ATMEGA16L是一款高性能、低功耗的8位AVR微處理器,具有速度快、輸出電流大、工作電壓范圍寬、成本低等優(yōu)點,是一款性價比很高的單片機。時鐘模塊圖5時鐘電路為實現(xiàn)精確的時鐘功能并節(jié)約單片機IO口資源,該設計運用專用的接口方式為串行的時鐘芯片DS1302,該芯片線路簡潔、體積小,易于操作,且價格低廉。DS1302是美國DALLAS公司推出的一種高性能、低功耗、帶RAM的實時時鐘電路,它可以對年、月、日、周日、時、分、秒進行計時,具有閏年補償功能,工作電壓為2.5V~5.5V。采納三線接口與CPU進行同步通信,并可采納突發(fā)方式一次傳送多個字節(jié)的時鐘信號或RAM數(shù)據(jù)。DS1302內部有一個31×8的用于臨時性存放數(shù)據(jù)的RAM寄存器。DS1302是DS1202的升級產(chǎn)品,與DS1202兼容,但增加了主電源/后背電源雙電源引腳,同時供應了對后背電源進行涓細電流充電的實力。另外該芯片有備份電源引腳,可以在斷電后仍能工作,以保證時鐘的精確性。DS1302與單片機之間能簡潔的采納同步串行方式進行通信,僅需用到三個口線:(1)RES(復位),(2)I/O(數(shù)據(jù)線),(3)SCLK(串行時鐘)。X1和X2是振蕩源,外接32.768kHz晶振。RST是復位/片選線,通過把RST輸入驅動置高電平來啟動全部的數(shù)據(jù)傳送。RST輸入有兩種功能:首先,RST接通限制邏輯,允許地址/吩咐序列送入移位寄存器;其次,RST供應終止單字節(jié)或多字節(jié)數(shù)據(jù)的傳送手段。當RST為高電平常,全部的數(shù)據(jù)傳送被初始化,允許對DS1302進行操作。假如在傳送過程中RST置為低電平,則會終止此次數(shù)據(jù)傳送,I/O引腳變?yōu)楦咦钁B(tài)。上電運行時,在Vcc>2.0V之前,RST必需保持低電平。只有在SCLK為低電平常,才能將RST置為高電平。DS1302存在時鐘精度不高,易受環(huán)境影響,出現(xiàn)時鐘混亂等缺點。DS1302可以用于數(shù)據(jù)記錄,特殊是對某些具有特殊意義的數(shù)據(jù)點的記錄,能實現(xiàn)數(shù)據(jù)與出現(xiàn)該數(shù)據(jù)的時間同時記錄。這種記錄對長時間的連續(xù)測控系統(tǒng)結果的分析及對異樣數(shù)據(jù)出現(xiàn)的緣由的查找具有重要意義。傳統(tǒng)的數(shù)據(jù)記錄方式是隔時采樣或定時采樣,沒有具體的時間記錄,因此,只能記錄數(shù)據(jù)而無法精確記錄其出現(xiàn)的時間;若采納單片機計時,一方面須要采納計數(shù)器,占用硬件資源,另一方面須要設置中斷、查詢等,同樣耗費單片機的資源,而且,某些測控系統(tǒng)可能不允許。但是,假如在系統(tǒng)中采納時鐘芯片DS1302,則能很好地解決這個問題。DS1302工作時功耗很低,保持數(shù)據(jù)和時鐘信息時功率小于1mW。信號采集模塊的設計圖6采樣電路信號采集模塊包括物體檢測模塊和環(huán)境明暗檢測模塊,兩者功能如下:物體檢測模塊:該模塊須要檢測小車的移動,并依據(jù)小車的移動進行路燈開關的自動限制?;诖四康牟杉{探測距離遠、靈敏度高的反射式光電傳感器進行檢測,當傳感器檢測到小車時,傳感器給單片機一個信號,然后單片機對路燈進行合理限制,達到題目要求。環(huán)境明暗檢測模塊:該模塊須要檢測環(huán)境光的變更,依據(jù)環(huán)境光的明暗進行路燈開關的自動限制?;诖艘蟛杉{由光敏電阻組成的分壓電路進行檢測。光敏電阻器又稱光導管,特性是在特定光的照耀下,其阻值快速減小,可用于檢測可見光。在不同的光強下,光敏電阻的電阻值會發(fā)生明顯變更,光敏電阻器是利用半導體的光電效應制成的一種電阻值隨入射光的強弱而變更的電阻器;入射光強,電阻減小,入射光通過檢測不同光強下電阻值的變更量來限制路燈的開和關。顯示、按鍵模塊圖71602顯示及按鍵電路通過按鍵可以調整和設定路燈的開關時間,限制整條支路按時開燈和關燈,并在字符液晶上顯示出來。字符型液晶因具有體積小、功耗低、壽命長、價格低、接口限制便利及顯示操作簡潔等優(yōu)點而被廣泛應用。我們這里用到的是1602液晶,1602液晶為5V電壓驅動,帶背光,可顯示2行,每行16個字符,不能顯示漢字,內置128個字符的ASCII字符集庫,只有并口接口,無串口接口。路燈限制模塊圖8路燈限制電路該模塊采納節(jié)能的1WLED燈,當電路出現(xiàn)故障時,單片機通過內部AD采集電路采樣點的電壓變更量后對數(shù)據(jù)進行處理。(5)聲光報警模塊圖9聲光報警電路當系統(tǒng)出現(xiàn)故障時,蜂鳴器會發(fā)出警報聲,同時報警指示燈也會點亮。(6)電源模塊圖105V穩(wěn)壓電路電源是系統(tǒng)中最重要的模塊之一,輸入電源經(jīng)穩(wěn)壓塊后輸出穩(wěn)定的+5V電源,用以驅動整個系統(tǒng)。(7)恒流源模塊1.原理介紹:恒流源是輸出電流保持不變的電流源,而志向的恒流源為:
a)不因負載(輸出電壓)變更而變更。
b)不因環(huán)境溫度變更而變更。
c)內阻為無限大。
(3-1)
恒流源之電路符號:
志向的恒流源
實際的流源圖11恒流源
志向的恒流源,其內阻為無限大,使其電流可以全部流出外面。實際的恒流源皆有內阻R。
2.三極管的恒流特性:
圖12三極管恒流特性
從三極管特性曲線可見,工作區(qū)內的IC受IB影響,而VCE對IC的影響很微。
因此,只要IB值固定,IC亦都可以固定。
輸出電流IO即是流經(jīng)負載的IC。
(3-2)
電流鏡電路Current
Mirror:
電流鏡是一個輸入電流IS與輸出電流IO相等的電路:
圖13電流鏡電路
Q1和Q2的特性相同,即VBE1
=
VBE2,β1
=
β2。
(3-3)
三極管之β受溫度的影響,但利用電流鏡像恒流源,不受β影響,主要依靠外接電阻R經(jīng)
Q2去確定輸出電流IO(IC2
=
IO)。
方案1:
圖14恒流源電路
從左邊看起:基極偏壓(3-4)
所以VE=VB
-
0.6=1.0V(3-5)
又因為射極電阻是1K,流經(jīng)射極電阻的電流是
(3-6)
所以流經(jīng)負載的電流就就是穩(wěn)定的1mA
方案2.
圖15恒流源電路
這是個利用穩(wěn)壓二極管供應基極偏壓5.6V,VE=VB
-
0.6=0.5V,流經(jīng)負載的電流
(3-7)
方案3.
圖16恒流源電路
這個有一點不同:利用PNP三極管供應電流給負載電路.首先,利用二極管0.6
V的壓降,供應8.2
V基極偏壓(10
–
3
x
0.6
=
8.2).
4.7
K電阻只是用來形成通路,而且不希望(也不會)有許多電流流經(jīng)這個電阻。
VE=VB
+
0.6=8.8V,PNP晶體的560歐姆電阻兩端電位差是1.2V,
所以電流是2mA。
假如只用一個三極管不能滿意需求,可以用兩個三極管架成:
圖17恒流源
或是
圖18恒流源
方案4.電路圖如下所示:圖19恒流源電路圖中的第一組運放電路是跟隨器,對輸入的電壓取樣電路進行阻抗變換。最前面的雙向開關負責將正負12V電壓接入,這個電壓是運放的供電電壓,并供應應其他線路作為電源輸入,C24和C25電容是運放正負電源端的濾波電容,緊靠運放電源引腳。R11和電位器RW4組成了一個電壓取樣電路,通過變更電位器RW4滑動端的位置取出不同的電壓值,同時這個取出的電壓值也是輸出電流的正比例限制值,電位器滑動頭的電壓就依據(jù)串聯(lián)分壓的方式計算得出,后端的R15和電容C20作為取出電壓信號的阻容濾波電路,因為后端接的是運放的正端,電位器的滑動頭不輸出電流。運放的1腳輸出的電壓等于3腳的電壓,既是電位器滑動端的電壓值。運放上面的R12和D9是供電電源12V的指示電路,12V通過開關供應后D9發(fā)光指示電壓正常。后面的一組運放是實現(xiàn)電壓到恒流的轉換,電路中有正反饋也有負反饋,但線路是穩(wěn)定的狀態(tài),計算的時候運放也是依據(jù)虛短和虛斷的分析方式,C21是電壓信號的濾波電容,假設第一組運放1腳輸出的電壓是V,其次組運放5腳正端的電壓是V1,那么電阻RS1左端的電壓值為2V1,因為電阻R16和R18是相同的數(shù)值。電阻RS1右端的電壓依據(jù)R13和R14分壓電路計算的話數(shù)值是V1-(V-V1)=2V1-V,這樣我們就可以計算出RS1兩端的電壓是V,所以流過RS1電阻的電流是恒定的,另外考慮到RX1和R13相對RS1和負載的阻值不在同一個數(shù)量級,比他們大好多倍,因此流過RS1的電流基本都流向負載,很少量的電流流向R13和RX1,所以輸出的電流基本是恒定的。在以上的計算中V1的數(shù)值是不確定的,他是依據(jù)負載的大小變更的,但是不論V1的數(shù)值怎么變更,通過計算可以知道流過電阻RS1的電流是不變的,以為它兩端的電壓是V,而V這個電壓值是第一組運放的輸出,在電位器不調整的時候V的數(shù)值是固定的,流過RS1的電流不變,所以輸出電流也不變,實現(xiàn)恒流限制。后面一組運放電路中Q4三極管的作用時增大運放的電流輸出實力,因為負載比較小,運放驅動實力可能不夠,R19基本沒有作用在電路中,RX1可能是負載或者假負載,比如輸出不接任何負載,電流基本都流過RX1,假如不接RX1,在沒有負載的狀況下輸出就是電壓最大值接近12V,在這種電壓輸出下,運放的正負端會有較大的壓差,有可能會損壞運放358。同時在線路的設計上也要保證負載流過恒定電流產(chǎn)生的電壓值不能超過12V,假如超過電源供電電壓,不能實現(xiàn)恒流工作性能。RX1不取吧,估計也沒事,取小了對負載不好,要比負載大10倍以上啊,要忽視流過他的電流本系統(tǒng)采納方案四的恒流源電路,以實現(xiàn)系統(tǒng)的功能。2.軟件設計系統(tǒng)流程圖如下:起先起先初始化推斷環(huán)境在明暗推斷移動小車位置推斷LED燈好壞設置實時時間、開關燈時間顯示并輸出相應動作圖10流程圖C語言表達實力和運算實力比較強,且具有很好的可移植性和硬件限制實力。采納ICCAVR編譯器。ICCAVR是眾多AVR單片機應用開發(fā)軟件中的優(yōu)秀軟件之一,界面友好,易學易用。四、結果分析該系統(tǒng)能完成基本功能部分,傳感器檢測物體運動的最大誤差為正負1cm,光敏電阻在正常光照狀況下電阻值為2K,在強光下電阻值為200歐姆,在黑暗狀況下2M.。路燈電路正常時采樣點電壓為3V左右,在開路故障時電壓為0V。五、結論硬件設計和軟件設計是電子設計中不行缺少的內容,為了滿意設計的功能和指標的要求,我們必需在起先設計時就考慮到硬件與軟件的協(xié)調;不然會增加軟件實現(xiàn)時困難和困難程度,有時即使硬件和軟件單獨能用,卻不能使他們組成的系統(tǒng)工作,故在設計的過程中必需考慮軟硬件的處理實力以及它們的接口是否兼容,實現(xiàn)軟硬件的信號過渡。六、參考文獻高祥瑞.全國高校生電子設計競賽系列教程【M】.北京:電子工業(yè)出版社.2007張志良.模擬電子技術【M】.北京:機械工業(yè)出版社.2006何小艇.電子系統(tǒng)設計【M】.杭州:浙江高校出版社.2004胡斌.元器件及好用電路解說【M】.北京:電子工業(yè)出版社.2007刁鳴.常用電路模塊分析與設計指導【M】.北京:清華高校出版社.2008唐競新.數(shù)字電路基礎【M】.北京:清華高校出版社.2003附錄1系統(tǒng)原理圖附錄2程序清單/******************************************/#include<iom16v.h> //包含型號頭文件#include<macros.h> //包含"位"操作頭文件#include"b.c"#defineucharunsignedchar#defineuintunsignedint/***************1602限制位的宏定義**************************/#defineLCD_OUTDDRC=0XFF//數(shù)據(jù)端設為輸出#defineLCD_C_DDRDDRD|=0XE0//限制端設為輸出#defineLCD_DATAPORTC//發(fā)送數(shù)據(jù)端#defineLCD_RS_HPORTD|=BIT(PD5); //操作的是吩咐#defineLCD_RS_LPORTD&=~BIT(PD5); //操作的是數(shù)據(jù)#defineLCD_RW_HPORTD|=BIT(PD6); //從1602讀#defineLCD_RW_LPORTD&=~BIT(PD6);//向1602寫#defineLCD_OE_HPORTD|=BIT(PD7); //1602使能#defineLCD_OE_LPORTD&=~BIT(PD7);//1602不使能#defineLCDa_CURON 0x0E //顯示光標#defineLCDa_CURFLA 0x0F //打開光標閃耀/******************RTC常量******************/ #defineRTC_CLK PB7#defineRTC_DATA PB5#defineRTC_CS PC7#defineRD 0x01#defineWR 0x00#defineC_SEC 0x80 //秒#defineC_MIN 0x82 //分#defineC_HR 0x84 //時#defineC_WP 0x8E //限制(寫愛護)#defineC_BURST 0xBE //時鐘多字節(jié)#defineCLK_HALT 0x80 //停止時鐘限制位#defineCLK_START 0x00 //啟動時鐘#definePROTECT 0x80 //寫愛護限制位#defineUPROTECT 0x00 //寫愛護限制位/***************按鍵常量限制位的宏定義**************************/#defineKEY_OUTDDRA|=0XF8 //按鍵方向定義輸出#defineKEY_INDDRA&=0X07 //按鍵方向定義輸入#defineKEY_DATAPINA //讀按鍵端口#defineKEY_OUT_HPORTA|=0XF8 //按鍵端口輸出高電平#pragmadata:codeconstuchartable[]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38, 0x39};/************************全局變量宏定義**********/ucharhour,hourshi,hourge,minute,minuteshi,minutege,second,secondshi,secondge,haomiao,haomiaoshi,haomiaoge;ucharchucun[];//存儲設置時間時的當前值voiddelayns(uintUS) {uinti;US=US*5/4; //5/4是在8MHz晶振下,通過軟件仿真反復試驗得到的數(shù)值for(i=0;i<US;i++);}voiddelay(uintMS) {uinti,j;for(i=0;i<MS;i++)for(j=0;j<1141;j++); //1141是在8MHz晶振下,通過軟件仿真反復試驗得到的數(shù)值}/*******************************************函數(shù)名稱:LCD1602_write_com(ucharcom)功能:向1602液晶寫入一個字節(jié)指令參數(shù):com是指令返回值:無/********************************************/voidLCD1602_write_com(ucharcom){LCD_RS_L; LCD_RW_L; LCD_DATA=com; delay(5); LCD_OE_H; delay(5); LCD_OE_L;}/*******************************************函數(shù)名稱:LCD1602_write_dat(uchardat)功能:向1602液晶寫入一個字節(jié)數(shù)據(jù)參數(shù):dat是數(shù)據(jù)返回值:無/**********************************************/voidLCD1602_write_dat(uchardat){LCD_RS_H; LCD_RW_L; LCD_DATA=dat; delay(5); LCD_OE_H; delay(5); LCD_OE_L;}/*******************************************函數(shù)名稱:LCD1602_init()功能:初始化1602液晶參數(shù):無返回值:無/**********************************************/voidLCD1602_init(){LCD_OUT;LCD_C_DDR;LCD_OE_L;LCD1602_write_com(0X38);//設置16*2顯示,5*7點陣,8位數(shù)據(jù)接口delay(5);LCD1602_write_com(0X0C);//設置開顯示,不顯示光標delay(5);LCD1602_write_com(0X01);//顯示清0,數(shù)據(jù)指針清0delay(5);LCD1602_write_com(0X06);//寫一個字符后地址指針加1delay(5);//LCD1602_write_com(0X80+0x0f);//將數(shù)據(jù)指針定位到第一行第一個字處:LCD1602_write_com(0X80)///delay(5);//寫其次行時要重新定位數(shù)據(jù)指針 //write_com(0X80+0x40)}/*******************************************函數(shù)名稱:DS1302_init功能:初始化DS1302的數(shù)據(jù)接口參數(shù):無返回值:無/********************************************/voidDS1302_portinit(void) {DDRB|=BIT(RTC_CLK)|BIT(RTC_DATA)|BIT(RTC_CS);//將時鐘端(RTC_CLK)數(shù)據(jù)端(RTC_DATA)片選端(RTC_CS)設置為輸出DS1302_writeD(C_WP|WR,UPROTECT); //寫入寫允許吩咐DS1302_writeD(C_SEC|WR,CLK_START); //啟動振蕩器,DS1302起先工作DS1302_writeD(C_WP|WR,PROTECT); //限制吩咐,WP位為1,不允許寫操作}/*******************************************函數(shù)名稱:DS1302_writeB功能:向DS1302寫入一個字節(jié)數(shù)據(jù)(沒有RST操作)參數(shù):byte--要寫入的數(shù)據(jù)返回值:無/********************************************/voidDS1302_writeB(ucharbyte){uchari;for(i=0;i<8;i++) //8位數(shù)據(jù)計數(shù){PORTB&=~BIT(RTC_CLK); //拉低時鐘端if(byte&0x01) //當前位是否是1{PORTB|=BIT(RTC_DATA); //當前位是1,拉高數(shù)據(jù)端}else {PORTB&=~BIT(RTC_DATA); //當前位是0,拉低數(shù)據(jù)端}delayns(10); //調整時鐘和脈沖寬度PORTB|=BIT(RTC_CLK); //時鐘上升沿(DS1302采樣數(shù)據(jù))byte>>=1; //數(shù)據(jù)右移1位,為送出新數(shù)據(jù)位做打算}}/*******************************************函數(shù)名稱:DS1302_writeD功能:向DS1302的某個地址寫入一個字節(jié)數(shù)據(jù)參數(shù):addr--地址值(寄存器或RAM) data--要寫入的地址返回值:無/********************************************/voidDS1302_writeD(ucharaddr,uchardata){PORTC&=~BIT(RTC_CS); //拉低片選端PORTB&=~BIT(RTC_CLK); //拉低時鐘端delayns(10);PORTC|=BIT(RTC_CS); //拉高片選端delayns(10); //調整片選脈沖DS1302_writeB(addr); //寫入操作吩咐(地址)delayns(10);PORTB&=~BIT(RTC_CLK); //拉低時鐘端delayns(10);DS1302_writeB(data); //寫入數(shù)據(jù)PORTB&=~BIT(RTC_CLK); //拉低時鐘端delayns(10); //調整片選脈沖PORTC&=~BIT(RTC_CS); //拉低片選端}/*******************************************函數(shù)名稱:DS1302_setT功能:設置DS1302的時間參數(shù):ptTimeD--設置時間數(shù)組指針返回值:無/********************************************/voidDS1302_setT(ucharptTimeD[]){uchari;ucharaddr=0x80; //寫入地址從秒寄存器起先DS1302_writeD(C_WP|WR,UPROTECT);//限制吩咐,WP位為0,允許寫操作 delay(5);for(i=0;i<7;i++){DS1302_writeD(addr|WR,ptTimeD[i]);//秒分時日月星期年addr+=2; delay(1);}DS1302_writeD(C_WP|WR,PROTECT); //限制吩咐,WP位為1,不允許寫操作}/*******************************************函數(shù)名稱:DS1302_readB功能:從DS1302讀出一個字節(jié)數(shù)據(jù)(沒有RST操作)參數(shù):無返回值:byte--讀出的數(shù)據(jù)/********************************************/ucharDS1302_readB(void){uchari,byte=0;DDRB&=~BIT(RTC_DATA); //將數(shù)據(jù)端口設置為輸入 PORTB&=~BIT(RTC_DATA); //無上拉電阻for(i=0;i<8;i++) //8位數(shù)據(jù)計數(shù){byte>>=1; //保存讀入的數(shù)據(jù)位PORTB|=BIT(RTC_CLK); //時鐘上升沿delayns(10); //延時,調整時鐘脈沖寬度PORTB&=~BIT(RTC_CLK); //時鐘下降沿,DS1302輸出數(shù)據(jù)位delayns(10); //等待數(shù)據(jù)變更(MEGA16太快,必需等待DS1302的數(shù)據(jù)位輸出,否則不能正確讀出)if(PINB&BIT(RTC_DATA)) //當前位是否是高電平{byte|=BIT(PB7); //是高電平就將返回數(shù)據(jù)的當前位置1}else{byte&=~BIT(PB7); //是低電平就將返回數(shù)據(jù)的當前位置0}}DDRB|=BIT(RTC_DATA); //最終將數(shù)據(jù)端口設置為輸出returnbyte; //返回讀出的數(shù)據(jù)}/*******************************************函數(shù)名稱:DS1302_readD功能:從DS1302的某個地址讀出一個字節(jié)數(shù)據(jù)參數(shù):addr--地址值(寄存器或RAM)返回值:data--讀出的數(shù)據(jù)/********************************************/ucharDS1302_readD(ucharaddr){uchardata;PORTC&=~BIT(RTC_CS); //拉低片選端PORTB&=~BIT(RTC_CLK); //拉低時鐘端delayns(10);PORTC|=BIT(RTC_CS); //拉高片選端delayns(10); //調整片選脈沖DS1302_writeB(addr); //寫入操作吩咐(地址)delayns(10);data=DS1302_readB(); //讀出數(shù)據(jù)delayns(10);PORTB&=~BIT(RTC_CLK); //拉低時鐘端PORTC&=~BIT(RTC_CS); //拉低片選端returndata; //返回讀出的數(shù)據(jù)}/*******************************************函數(shù)名稱:DS1302_getT功能:讀取DS1302的當前時間參數(shù):time[]--讀取的時間數(shù)組返回值:無/********************************************/voidDS1302_getT(uchartime[]){uchari;delayns(10);PORTC|=BIT(RTC_CS); //拉高片選端delayns(10); //調整片選脈沖 DS1302_writeB(0xbf);//0xbf:時鐘多字節(jié)讀取吩咐for(i=0;i<8;i++)//時間數(shù)據(jù)的存放格式是:{//秒,分,時,日,月,星期,年,限制time[i]=DS1302_readB();//【7個數(shù)據(jù)(BCD格式)+1個限制】} PORTC&=~BIT(RTC_CS); //拉低片選端PORTB&=~BIT(RTC_CLK); //拉低時鐘端(時鐘端在不操作時為低)}/*******************************************函數(shù)名稱:display功能:讀取DS1302的當前時間參數(shù):time[]--讀取的時間數(shù)組返回值:無/********************************************/voiddisplay(ucharadd,uchardat){LCD1602_write_com(add);delay(2);LCD1602_write_dat(dat);delay(2);}/*******************************************函數(shù)名稱:key_press功能:檢測是否有鍵按下參數(shù):無返回值:鍵按下時為1,否則為0/********************************************/ucharkey_press(){uchartemp; KEY_OUT; KEY_OUT_H; KEY_IN; temp=KEY_DATA; temp&=0XF8; if(temp==0XF8) { return0; } else { return1; }}/*******************************************函數(shù)名稱:key_scan功能:檢測是哪個鍵按下參數(shù):無返回值:key/********************************************/ucharkey_scan(){ucharkey;delay(10); if(key_press()) { key=KEY_DATA; key&=0XF8; switch(key) { case0X78: key=0x0; break; case0XB8: key=0x1; break; case0XD8: key=0x2; break; case0XE8: key=0x3; PORTB&=~BIT(4);PORTB&=~BIT(6); break; case0XF0: key=0x4; break; default: key=16; }while(key_press()); } else { key=16; } returnkey;}/************************主函數(shù)************************/voidmain(){uchari=1,j,k,shezhi,a=1,b;ucharsettime[7]={0x50,0x59,0x23,0x01,0x01,0x06,0x07};//設置的秒,分,時uchargettime[7]={0x00,0x00,0x00,0x00,0x00,0x00,0x00};DDRB|=0x50;LCD1602_init();DS1302_portinit();DS1302_setT(settime);display(0x80+0x46,':');display(0x80+0x49,':');for(b=0;b<3;b++)chucun[b]=settime[b];while(1){kaishi:DS1302_getT(gettime);kongzhi();if(shezhi==1){if(chucun[0]==gettime[0])k=1;if(chucun[1]==gettime[1])k=2;if(chucun[2]==gettime[2])k=3;if(k==3){shezhi=0;k=0;PORTB|=BIT(4);PORTB|=BIT(6);}}display(0x80+0x44,table[gettime[2]/16]);display(0x80+0x45,table[gettime[2]%16]);display(0x80+0x47,table[gettime[1]/16]);display(0x80+0x48,table[gettime[1]%16]);display(0x80+0x4a,table[gettime[0]/16]);display(0x80+0x4b,table[gettime[0]%16]);if(key_press()){if(key_scan()==0x0){DS1302_getT(gettime);//讀回當前時間的值LCD1602_write_com(0x80+0x44);delay(1);LCD1602_write_com(LCDa_CURFLA);while(1){if(key_press()){switch(key_scan())//步進加一{case0x0:{i=0;DS1302_setT(gettime);DS1302_writeD(C_SEC|WR,CLK_START);gotokaishi;} break;case0x1:i++; break; case0X2://小時、分鐘的步進加一 { switch(i) { case1:{gettime[2]+=0x0F;if(gettime[2]/16>2)gettime[2]&=0x0F;display(0x80+0x44,table[gettime[2]/16]);} break; case2:{gettime[2]+=0x01;if(gettime[2]%16>3)gettime[2]&=0xF0;display(0x80+0x45,table[gettime[2]%16]);} break; case3:{gettime[1]+=0x0F;if(gettime[1]/16>5)gettime[1]&=0x0F;display(0x80+0x47,table[gettime[1]/16]);} break; case4:{gettime[1]+=0x01;if(gettime[1]%16>9)gettime[1]&=0xF0;display(0x80+0x48,table[gettime[1]%16]);} break; case5:{gettime[0]+=0x0F;if(gettime[0]/16>5)gettime[0]&=0x0F;display(0x80+0x4A,table[gettime[0]/16]);} break; case6:{gettime[0]+=0x01;if(gettime[0]%16>9)gettime[0]&=0xF0;display(0x80+0x4B,table[gettime[0]%16]);} break; } } break; }switch(i)//右移一位{ case1:{LCD1602_write_com(0x80+0x44);} break; case2:{LCD1602_write_com(0x80+0x45);} break; case3:{LCD1602_write_com(0x80+0x47);} break; case4:{LCD1602_write_com(0x80+0x48);} break; case5:{LCD1602_write_com(0x80+0x4a);} break; case6:{LCD1602_write_com(0x80+0x4b);} break;}}}}}if(error==1){display(0x80+0x04,'e');display(0x80+0x05,'r');display(0x80+0x06,'r');display(0x80+0x07,'o');display(0x80+0x08,'r');display(0x80+0x09,'');display(0x80+0x0a,':');display(0x80+0x0b,'');display(0x80+0x0c,'1');}if(error==2){display(0x80+0x04,'e');display(0x80+0x05,'r');display(0x80+0x06,'r');display(0x80+0x07,'o');display(0x80+0x08,'r');display(0x80+0x09,'');display(0x80+0x0a,':');display(0x80+0x0b,'');display(0x80+0x0c,'2');}delay(5);}}//b.c程序清單#defineucharunsignedchar#defineuintunsignedint/***************傳感器常量限制位的宏定義**************************/#defineKEY_outDDRB|=0X07 //傳感器方向定義輸出#defineKEY_inDDRB&=0XF8 //傳感器方向定義輸入#defineKEY_dataPINB //傳感器鍵端口ucharturn,turn1=1,error;/*******************************************函數(shù)名稱:AD_init()功能:AD轉換的初始化參數(shù):無返回值:無/********************************************/voidAD_init(){ADMUX|=BIT(5);ADCSRA|=BIT(7);//ADC使能位}/*******************************************函數(shù)名稱:begin_AD()功能:ADC轉換函數(shù)參數(shù):無返回值:無/**********************************************/voidbegin_AD(){ucharAD0,AD1,AD2;ADMUX=0X20;//外部參考電壓AVCC,選通AD0路ADCSRA|=BIT(6);//ADC轉換起先delay(1);AD0=ADCH;delay(1);ADMUX=0X21;////外部參考電壓AVCC,選通AD1路ADCSRA|=BIT(6);//ADC轉換起先delay(1);AD1=ADCH;ADMUX=0X22;////外部參考電壓AVCC,選通AD2路ADCSRA|=BIT(6);//ADC轉換起先delay(1);AD2=ADCH;if(AD0<=20)//光敏{PORTB|=BIT(6);PORTB|
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年中國熱風熱軋無紡布市場調查研究報告
- 工廠供電課程設計-20210924014100
- 工程機械課程設計周記
- 云南省昆明一中2025屆高三上物理期中經(jīng)典模擬試題含解析
- 2025屆吉林省高中學校高三物理第一學期期末調研試題含解析
- 浙江省五校2025屆物理高二上期末學業(yè)質量監(jiān)測模擬試題含解析
- 新疆克拉瑪依市北師大克拉瑪依附中2025屆物理高一上期中復習檢測試題含解析
- 2025屆湖北省七市教科研協(xié)作體高一物理第一學期期中質量檢測模擬試題含解析
- 廣東省新興第一中學2025屆物理高三上期末教學質量檢測試題含解析
- 2025屆安徽省安大附中高三上物理期中復習檢測試題含解析
- 護理文獻檢索步驟
- 2024年有子女無財產(chǎn)離婚協(xié)議參考范文(四篇)
- 2024欠款還款協(xié)議書
- 阿米巴巴長知識競賽考試題庫(含答案)
- 2024-2025學年部編版(2024)七年級歷史上冊知識點提綱
- 2024至2030年中國雞蛋行業(yè)市場發(fā)展現(xiàn)狀及投資規(guī)劃建議報告
- 小學三年級下一字多義(答案)
- 六年級上冊道德與法治全冊教學課件
- XX集團內部審計人才庫管理辦法(專業(yè)完整格式模板)
- 《鑄牢中華民族共同體意識》課件
- 創(chuàng)新創(chuàng)業(yè)通論(第三版)課件 第十章 企業(yè)創(chuàng)立與管理
評論
0/150
提交評論