久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 34433|回復: 18
打印 上一主題 下一主題
收起左側

基于51單片機的人體紅外模塊的自動門設計原理圖+程序

  [復制鏈接]
跳轉到指定樓層
樓主

資料包含:論文 + 程序源代碼 + PCB原理圖 + 芯片資料手冊

目錄

摘 要
一. 方案的選擇與論證
1.驅動電機
2. 電動機驅動模塊
3. 微處理器模塊
4. 人體檢測模塊
5. 故障檢測模塊
二. 系統硬件的具體設計與實現
1. 系統原理和框圖
2. 功能模塊的設計
2.1 單片機介紹
2.1.1 AT89C51管腳說明
2.1.2 AT89C51主要特性
2.1.3芯片擦除
2.2  熱釋電紅外傳感器介紹
2.3  BISS0001芯片介紹和典型電路
2.3.1 BISS0001的內部結構及特點
2.3.2 BISS001管腳圖及管腳說明:
2.3.3 BISS0001工作原理
2.4  步進電機
2.4.1 28BYJ48步進電機參數
2.4.2 28BYJ48步進電機驅動方式
2.4.3 步進電機驅動電路
三. 系統軟件設計
1. 程序描述與設計思路
(1)程序描述
(2)程序設計思路
2. 程序流程圖
(1)自動門控制主程序
(2)LED燈開關門控制編碼
(3)步進電機正反轉編碼
3. 程序
四. 總結
五. 致謝
六. 參考文獻
七.附錄
1.原理圖
2.主程序

摘 要
本系統以單片機AT89C51為核心,使用人體紅外線傳感器作為感應器,檢測到人體輻射的紅外線能量變化,將其轉化為電信號,觸發單片機中斷。再由單片機通過ULN2003驅動步進電機動作,電機的正反轉分別表示自動門的開啟和閉合,通過15個LED燈的逐次亮滅來模擬開關門狀態。

一. 方案的選擇與論證
根據設計要求目的,本系統可以劃分為若干個基本模塊。為了搭建性能穩定的外部電路及實現較高的性價比,使自動門達到真正的智能控制,針對各個模塊的功能要求,分別有以下一些不同的設計方案:
1.驅動電機
方案A:選擇步進電機作為自動門的引擎。步進電機最大的優點就是在距離上能夠得到較精確控制,在沒有行程開關作為電機停止的信號時,步進電機是最有選擇。
方案B:采用普通直流電機。該電機轉速快,針對本設計的情況,電機過快運轉會造成失去控制甚至出現夾人的缺陷,故此排除。
方案C:利用直流減速電機,該方案雖然能夠限制電機的速度在一定的方位內,但是由于沒有行程開關,而且電源帶載能力不穩定的情況下,電機很難在相同時間內走過相同的距離,這將無法達到準確開關門的目的。
因此采用第一種方案的步進電機電機來作為自動門的引擎。
2. 電動機驅動模塊
方案A:采用繼電器對電機的開或關進行開關的切換經行調整。這個方案簡單但是相應時間慢,機械結構容易損壞并且壽命不長。
方案B:利用電阻分壓原理,采用數字電位器調整電機的分壓,從而達到調速的目的。缺點是無法用大電流驅動,降低工作效率而且不易實現。
方案C:使用ULN2003驅動芯片。ULN2003 是高耐壓、大電流復合晶體管陣列,由七個硅NPN 復合晶體管組成,最大輸出電流可達500mA,用來驅動本設計中用到的四相步進電機非常適合。
因而擬用第三種方案。
3. 微處理器模塊
方案一:采用可編程邏輯器件CPLD。CPLD可以實現各種復雜的邏輯功能、規模大、密度高、IO資源豐富,適合作為大規?刂葡到y的控制核心。但本系統不需要復雜的邏輯功能,對數據的處理速度的要求也不是很高,且從使用及經濟的角度考慮,我們放棄了此方案。
方案二:采用51系列單片機。系統的要求不高,程序的編寫也比較簡單,需要用到的I/O口的數量用該系列的單片機來操作完全能夠實現,無需再擴展,充分的利用了單片機資源。另外,經典的51系列單片機的處理速度也能夠滿足系統要求,性價比相對CPLD器件更高。
綜合以上兩種方案,本系統選擇方案二,以AT89C51作為系統的微控制器。
4. 人體檢測模塊
方案一:微波感應器,又稱微波雷達,能對物體的移動進行反應,因而反應迅速比較快,適合用于行走速度正常的人員通過場所,它的缺點是一旦有人不想出門而靜止不動,雷達便不再反應,這時如果系統給出關門信號,那么自動門就會關閉,出現夾人現象。
方案二:人體紅外傳感器,能對物體的存在進行反應,不管人員是否移動,只要處于感應器的掃描范圍,它都會有反應,就能阻止自動門關閉,但是紅外感應器的反應比微波感應器略微慢一點。
綜上,出于安全問題的考慮,為了防止自動門出現夾人情況,第二種紅外傳感器比第一種微波傳感器更適合自動門的設計與使用。
5. 故障檢測模塊
方案一:采用霍爾電流傳感器來檢測流經電機的電流,再將采到的電流值轉換成電壓,經過AD轉換,送入單片機。該方案雖然性抗干擾能力強,但是相對于本系統來說,價格太貴,而且步進電機的電流范圍也比較小。
方案二:采用電阻采樣的方式。在電機電源輸入串入一個阻值為1歐姆的合金電阻,由于阻值足夠小,對電機的影響可以忽略不計,再由歐姆定律可知,電阻兩端的電壓為流過該電阻的電流乘以一,最后將該電壓送入電壓比較器的反向輸入端,與預設閥值作比較,當電流過大時,比較器輸出會產生一個邊沿跳變,此時觸發中斷,停止自動門動作。
綜合分析,方案二簡單可靠,比較適合應用在本系統設計中。

二. 系統硬件的具體設計與實現
1. 系統原理和框圖
人體紅外自動門控制系統的硬件組成如圖2-1所示。本系統主要由AT89C51單片機及其外圍電路、人體紅外檢測電路,步進電機控制電路、故障檢測電路、開關門狀態顯示電路等五部分組成。單片機循環檢測人體紅外檢測電路和故障檢測電路,據此產生步進電機控制信號,同時LED等作對應流動。當檢測到有人靠近時,步進電機正轉一圈,LED燈由中間向左右兩邊逐漸點亮;完全開門后等待三秒鐘,如果沒有人靠近,此時開始關門,步進電機反轉一圈,LED燈由兩邊向中間逐漸熄滅。自動門的開啟可以分為3個階段,首先是單片機在接受到傳感器的信號后給馬達一個快速開啟的信號,使馬達以比較快的速率工作,門迅速打開,然后再慢速工作,緩慢打開,最后保持禁止不動,相反,當自動門關閉時,是先加速后減速,再到停止的過程。

圖2-1 系統設計框圖


人體紅外模塊探測到有人靠近時,將脈沖信號傳給主控器,主控器判斷后通知步進電機運行,同時監控步進電機轉動角度,以便通知其在一定時候加力和進入慢行運行。步進電機在ULN2003芯片的下進行開關門,一個開門完整周期是電機順時針轉過360°,反之,關門則逆時針轉360°。若在關門過程中突然又有人靠近,此時單片機馬上相應中斷,停止電機關門,并在電機停止的位置又重新開門,經過3秒后,自動門才開始關閉,并啟動中斷。

2. 功能模塊的設計
2.1 單片機介紹
單片機是把微型計算機主要部分都集成在一個芯片上的單芯片微型計算機,即將運算器,控制器,輸入輸出接口,部分存儲器以及其他一些邏輯部件集成在一個芯片上,故可以把單片機看成是一個不帶外部設備的微型計算機,相當于一個沒有顯示器,沒有鍵盤,不帶監控程序的單板機。
由于單片計算機具有體積小,重量輕,耗電少,功能強和價格低等特點,又由于數據大多是在芯片內傳送處理,所以運行速度快,抗干擾能力強。單片機從七十年代問世以來,在二十多年的時間里,發展異常迅速,并已廣泛應用于各種領域。單片機具有通訊接口,用單片機進行接口的控制與管理,單片機與主機可并行工作,大大地提高了系統的運行速度,所以在網絡通訊領域也得到了越來越多的應用。
AT89C51是一種帶4K字節閃爍可編程可擦除只讀存儲器(FPEROM—Flash Programmable and Erasable Read Only Memory)的低電壓,高性能CMOS8位微處理器,俗稱單片機。AT89C2051是一種帶2K字節閃爍可編程可擦除只讀存儲器的單片機。單片機的可擦除只讀存儲器可以反復擦除100次。該器件采用ATMEL高密度非易失存儲器制造技術制造,與工業標準的MCS-51指令集和輸出管腳相兼容。由于將多功能8位CPU和閃爍存儲器組合在單個芯片中,ATMEL的AT89C51是一種高效微控制器,AT89C2051是它的一種精簡版本。AT89C51單片機為很多嵌入式控制系統提供了一種靈活性高且價廉的方案。

AT89C51外形及引腳排列如圖2-1所示。


圖2-1 AT89C51外形及引腳圖

2.1.1 AT89C51管腳說明
VCC:供電電壓。
GND:接地。
P0口:P0口為一個8位漏級開路雙向I/O口,每腳可吸收8TTL門電流。當P1口的管腳第一次寫1時,被定義為高阻輸入。P0能夠用于外部程序數據存儲器,它可以被定義為數據/地址的第八位。在FIASH編程時,P0口作為原碼輸入口,當FIASH進行校驗時,P0輸出原碼,此時P0外部必須被拉高。
P1口:P1口是一個內部提供上拉電阻的8位雙向I/O口,P1口緩沖器能接收輸出4TTL門電流P1口管腳寫入1后,被內部上拉為高,可用作輸入,P1口被外部下拉為低電平時,將輸出電流,這是由于內部上拉的緣故。在FLASH編程和校驗時,P1口作為第八位地址接收。
P2口:P2口為一個內部上拉電阻的8位雙向I/O口,P2口緩沖器可接收,輸出4個TTL門電流,當P2口被寫“1”時,其管腳被內部上拉電阻拉高,且作為輸入。并因此作為輸入時,P2口的管腳被外部拉低,將輸出電流。這是由于內部上拉的緣故。P2口當用于外部程序存儲器或16位地址外部數據存儲器進行存取時,P2口輸出地址的高八位。在給出地址“1”時,它利用內部上拉優勢,當對外部八位地址數據存儲器進行讀寫時,P2口輸出其特殊功能寄存器的內容。P2口在FLASH編程和校驗時接收高八位地址信號和控制信號。
P3口:P3口管腳是8個帶內部上拉電阻的雙向I/O口,可接收輸出4個TTL門電流。當P3口寫入“1”后,它們被內部上拉為高電平,并用作輸入。作為輸入,由于外部下拉為低電平,P3口將輸出電流(ILL)這是由于上拉的緣故。在實際應用中,大多數情況下都使用P3口的第二功能。
P3.0 —RXD:串行輸入口
P3.1 —TXD:串行輸出口
P3.2 —/INT0:外部中斷0
P3.3 —/INT1:外部中斷1
P3.4 —T0:記時器0外部輸入
P3.5 —T1:記時器1外部輸入
P3.6 —/WR:外部數據存儲器
P3.7 —/RD:外部數據存儲器
P3口同時為閃爍編程和編程校驗接收一些控制信號。
RST:復位輸入。當振蕩器復位器件時,要保持RST腳兩個機器周期的高電平時
ALE/PROG:當訪問外部存儲器時,地址鎖存允許的輸出電平用于鎖存地址的地位字節。在FLASH編程期間,此引腳用于輸入編程脈沖。在平時,ALE端以不變的頻率周期輸出正脈沖信號,此頻率為振蕩器頻率的1/6。因此它可用作對外部輸出的脈沖或用于定時目的。然而要注意的是:每當用作外部數據存儲器時,將跳過一個ALE脈沖。如想禁止ALE的輸出可在SFR8EH地址上置0。此時, ALE只有在執行MOVX,MOVC指令是ALE才起作用。另外,該引腳被略微拉高。如果微處理器在外部執行狀態ALE禁止,置位無效。
/PSEN:外部程序存儲器的選通信號。在由外部程序存儲器取指期間,每個機器周期兩次/PSEN有效。但在訪問外部數據存儲器時,這兩次有效的/PSEN信號將不出現。
EA/VPP:當/EA保持低電平時,則在此期間外部程序存儲器(0000H-FFFFH),不管是否有內部程序存儲器。注意加密方式1時,/EA將內部鎖定為RESET;當/EA端保持高電平時,此間內部程序存儲器。在FLASH編程期間,此引腳也用于施加12V編程電源(VPP)。
XTAL1:反向振蕩放大器的輸入及內部時鐘工作電路的輸入。
XTAL2:來自反向振蕩器的輸出。容并且凍結振蕩器,禁止所用其他芯片功能,直到下一個硬件復位為止。
2.1.2 AT89C51主要特性
* 與MCS-51 兼容
* 4K字節可編程閃爍存儲器
* 壽命:1000寫/擦循環
* 數據保留時間:10年
* 全靜態工作:0Hz-24Hz
* 三級程序存儲器鎖定
* 128*8位內部RAM
* 32可編程I/O線
* 兩個16位定時器/計數器
* 5個中斷源
* 可編程串行通道
* 低功耗的閑置和掉電模式
* 片內振蕩器和時鐘電路
2.1.3芯片擦除
整個PEROM陣列和三個鎖定位的電擦除可通過正確的控制信號組合,并保持ALE管腳處于低電平10ms 來完成。在芯片擦除操作中,代碼陣列全被寫“1”且在任何非空存儲字節被重復編程以前,該操作必須被執行。
此外,AT89C51設有穩態邏輯,可以在低到零頻率的條件下靜態邏輯,支持兩種軟件可選的掉電模式。在閑置模式下,CPU停止工作。但RAM,定時器,計數器,串口和中斷系統仍在工作。在掉電模式下,保存RAM的內容并且凍結振蕩器,禁止所用其他芯片功能,直到下一個硬件復位為止。
2.2 熱釋電紅外傳感器介紹
熱釋電紅外傳感器是一種能檢測人或動物發射的紅外線而輸出電信號的傳感器。早在1938年,有人提出過利用熱釋電效應探測紅外輻射,但并未受到重視,直到六十年代,隨著激光、紅外技術的迅速發展,才又推動了對熱釋電效應的研究和對熱釋電晶體的應用。熱釋電晶體已廣泛用于紅外光譜儀、紅外遙感以及熱輻射探測器,它可以作為紅外激光的一種較理想的探測器。它目標正在被廣泛的應用到各種自動化控制裝置中。除了在我們熟知的樓道自動開關、防盜報警上得到應用外,在更多的領域應用前景看好。比如:在房間無人時會自動停機的空調機、飲水機。電視機能判斷無人觀看或觀眾已經睡覺后自動關機的機構。開啟監視器或自動門鈴上的應用。結合攝影機或數碼照相機自動記錄動物或人的活動等等。
熱釋電效應同壓電效應類似,是指由于溫度的變化而引起晶體表面荷電的現象。熱釋電傳感器是對溫度敏感的傳感器。它由陶瓷氧化物或壓電晶體元件組成,在元件兩個表面做成電極,在傳感器監測范圍內溫度有ΔT的變化時,熱釋電效應會在兩個電極上會產生電荷ΔQ,即在兩電極之間產生一微弱的電壓ΔV。由于它的輸出阻抗極高,在傳感器中有一個場效應管進行阻抗變換。熱釋電效應所產生的電荷ΔQ會被空氣中的離子所結合而消失,即當環境溫度穩定不變時,ΔT=0,則傳感器無輸出。當人體進入檢測區,因人體溫度與環境溫度有差別,產生ΔT,則有ΔT輸出;若人體進入檢測區后不動,則溫度沒有變化,傳感器也沒有輸出了。所以這種傳感器檢測人體或者動物的活動傳感。 由實驗證明,傳感器不加光學透鏡(也稱菲涅爾透鏡),其檢測距離小于2m,而加上光學透鏡后,其檢測距離可大于7m。
2.3 BISS0001芯片介紹和典型電路
BISS0001是一款具有較高性能的傳感信號處理集成電路,它配以熱釋電紅外傳感器和少量外接元器件構成被動式的熱釋電紅外開關。它能自動快速開啟各類白熾燈、熒光燈、蜂鳴器、自動門、電風扇、烘干機和自動洗手池等裝置,特別適用于企業、賓館、商場、庫房及家庭的過道、走廊等敏感區域,或用于安全區域的自動燈光、照明和報警系統。它不僅能和熱釋電紅外傳感器的輸出良好地匹配,而且也能和其他多種傳感器進行匹配。它的內部是由運算放大器、電壓比較器、與門電路、狀態控制器、定時控制器、鎖定時間控制器和禁止電路等組成。
BISS0001采用16腳標準型塑料封裝結構。
1腳(A)為觸發方式控制端,當A=1時,電路可重復觸發;當A=0時,電路不可重復觸發。
2腳(V0)為控制信號輸出端,當有傳感信號輸人時,V0輸出高電平。
3腳(RX)和4腳(CX)為輸出定時控制器T,的外接元件端,定時時間為:TX=50×103RXCX。
5腳(Ri)和6腳Ci)為鎖定時間控制器Υi的外接元件,鎖定時間Ti=24RiCi。
7腳(VSS)為電源正端。
8腳(VRF)為參考電壓及復位端,使用時一般接VDD,若按ⅤSS,可使定時器復位。
9腳(Vc)為觸發禁止端,當VC<VR時禁止觸發;當VC>VR時,允許觸發,VR=0.2VDD.
10腳(IB)為偏置電流設置端,由外接電阻RB接ⅤSS端,RB一般取1MΩ的電阻。
11腳(VDD)為電源正、負端。
12腳(OUT2)為第二級運放的輸出端
13腳(IN2-)為第二級運放的反相輸人端。
14腳(IN1+)第一運放的同相輸入端。
15凈(IN1-)第一運放的反相輸入端。
16腳(OUT1)為第一運放的輸出端。
2.3.1 BISS0001的內部結構及特點
如圖2-3-1中,運算放大器OPl將熱釋電紅外傳感器的輸出信號作第一級放大,然后由C3耦合給運算放大器01:'2進行第二級放大,再經由電壓比較器COPl和ODP2構成的雙向鑒幅器處理后,檢出有效觸發信號VS去啟動延遲時間定時器,輸出信號VO經晶體管T1放大驅動繼電器去接通負載。

圖2-3-1 熱釋紅外傳感器處理芯片


BISS0001的特點:
*CMOS工藝,公耗低
*數;旌
*具有獨立的高輸入阻抗運算放大器
*內部的雙向鑒幅器可有效抑制干擾
*內設延遲時間定時器和封鎖時間定時器
*采用16腳DIP封裝
* 內置參考電源
    *工作電壓范圍寬(3V~5V)
2.3.2 BISS001管腳圖及管腳說明:

圖2-3-2 BISS001管腳圖

BISS001管腳說明:

表2-3-2  BISS0001管腳說明
引腳
名稱
I/O
功能說明
1
A
I
可重復觸發和不可重復觸發選擇端。當A為“1”時,允許重復觸發;反之,不可重復觸。
2

VO

O

控制信號輸出端。由VS的上跳變沿觸發,使Vo輸出從低電平跳變到高電平時視為有效觸發。在輸出延遲時間Tx之外和無VS的上跳變時,Vo保持低電平狀態。
3
RR1
--
輸出延遲時間Tx的調節端
4
RC1
--
輸出延遲時間Tx的調節端
5
RC2
--
觸發封鎖時間Ti的調節端
6
RR2
--
觸發封鎖時間Ti的調節端
7
VSS
--
工作電源負端
8
VRF
I
參考電壓及復位輸入端。通常接VDD,當接“0”時可使定時器復位
9
VC
I
觸發禁止端。當Vc<VR時禁止觸發;當Vc>VR時允許觸發
10
IB
--
運算放大器偏置電流設置端
11
VDD
--
工作電源正端
12
2OUT
O
第二級運算放大器的輸出端
13
2IN-
I
第二級運算放大器的反相輸入端
14
1IN+
I
第一級運算放大器的同相輸入端
15
1IN-
I
第一級運算放大器的反相輸入端
16
1OUT
O
第一級運算放大器的輸出端

2.3.3 BISS0001工作原理
BISS0001是由運算放大器、電壓比較器、狀態控制器、延遲時間定時器以及封鎖時間定時器等構成的數;旌蠈S眉呻娐。當熱釋電紅外傳感器接收到人體紅外輻射后輸出檢測信號,然后由14腳輸入BISS0001,經地內部電路處理,由2腳輸出探測信號(正向脈沖信號)。輸出脈沖信號的寬度由外接電阻R9和電容C6來決定。當 2腳輸出控制脈沖后,電子開關被接通,數字編碼電路和無線電發射電路由于得到電源而開始工作。電源變壓器為5W/15V,E為12V免維護蓄電池,供停電使用。S1為鎖控電源開關,可根據需要安裝在適當處所,用來接通工作電源,無必要時可取消設置。SCR采用1A的單向可控硅。HFC9301為軟封裝發聲電路,發聲為“嘀、嘀”聲。電路的調試主要是主機與各分機之間的統調。將發射電路和接收電路組裝好后,先將發射機中C10的調至適當位置后固定不動,接著調整接收機中的C1,使接收機能收到發射機發出的信號。若為“一對多”或“多對一”報警系統,應先將主機“一”(可以是發射機,也可以是接收機 )調好固定,然后調整各分機,使其與主機統調。BISS0001 應用線路圖如圖2-3-3-1所示。
圖2-3-3-1 BISS0001的熱釋電紅外開關應用電路圖

上圖中,R3為光敏電阻,用來檢測環境照度。當作為照明控制時,若環境較明亮,R3的電阻值會降低,使9腳的輸入保持為低電平,從而封鎖觸發信號Vs。SW1是工作方式選擇開關,當SW1與1端連通時,芯片處于可重復觸發工作方式;當SW1與2端連通時,芯片則處于不可重復觸發工作方式。圖中R6可以調節放大器增益的大小,原廠圖紙選10K,實際使用時可以用3K,可以提高電路增益改善電路性能。輸出延遲時間TX由外部的R9和C7的大小調整,觸發封鎖時間Ti由外部的R10和C6的大小調整,R9/R10可以用470歐姆,C6/C7可以選0.1U。在BISS0001的內電路中,運放A是一個獨立的放大器,由它放大后輸出的信號電壓通過.
    值得一提的是:本設計采用已封裝好的人體紅外檢測模塊,其基本原理與以上相同。模塊上有三個引腳,VCC接5V電源,GND接地,OUT接信號輸出,把信號引腳直接接到單片機INT0管腳,這可能會引起單片機的誤判斷,因為無人靠近時,信號輸出低電平,當有人靠近時,輸出跳變為高,而單片機外部中斷邊沿觸發的模式只能為下降沿,因此需要加入一個反向電路,即接入一個NPN型三極管,電路圖如2-3-3-2所示。

圖2-3-3-2 信號反向電路

   人體紅外模塊信號為低時,NPN三極管截止,輸出為高,當有人靠近時,人體紅外模塊的信號為高,此時三極管導通,輸出被拉低,即輸出低電平。這能保證單片機中斷的及時響應,保證系統的順暢。
2.4 步進電機2.4.1 28BYJ48步進電機參數
步進電動機是純粹的數字控制電動機:它將電脈沖信號轉變成角位移。即給一個脈沖信號,步進電動機就轉動一個角度.因此作常適合于單片機控制。設計中所用到的28BYJ48步進電機,電氣性能如下所示:
* 額定電壓:12VDC(另有電壓:5V、6V、24V)
* 相數:4
* 減速比:1/64(另有減速比:1/16、1/32)
* 步距角:5.625°/64
* 驅動方式:4相8拍
* 直流電阻:200Ω±7%(25℃)(按客戶要求而定:80、130歐姆)
* 空載牽入頻率:≥600Hz
* 空載牽出頻率:≥1000Hz
* 牽入轉矩:≥34.3mN.m(120Hz)
* 自定位轉矩:≥34.3mN.m
* 絕緣電阻:>10MΩ(500V)
* 絕緣介電強度:600VAC/1mA/1S
* 絕緣等級:A
* 溫升:<50K(120Hz)
* 噪音:<40dB(120Hz)
2.4.2 28BYJ48步進電機驅動方式
              該步進電機有兩種驅動方式,一種為一相勵磁,步進順序為:A-B-C-D-A,步距角為最小步距角的兩倍,即5.625°/64*2;另外一種稱為1-2相勵磁,步進順序為:A-AB-B-BC-C-CD-D-DA-A,步距角為5.625°/64。本設計用到第二種驅動方式,其分配順序如表2-4-2所示:

表2-4-2 步進電機驅動方式相序分配情況

只要按照分配順序,依次給該相高電平,電機就可以按照預定的方式旋轉。

2.4.3 步進電機驅動電路
ULN2003 是高耐壓、大電流復合晶體管陣列,由七個硅NPN 復合晶體管組成,最大輸出電流可達500mA,其內部結構如圖2-4-3-1所示:
圖2-4-3-1 ULN2003內部電路

其中第八腳接地,第九腳接VCC,只要將單片機IO口接入第一至七腳,就可以對應從第十至十六腳輸出較大電流的信號。由于本設計正用到的是四相電機,故只需要用到其中的四對接口即可,對應的電路圖如圖2-4-3-2所示:

圖2-4-3-2 步進電機驅動電路接線方式


三. 系統軟件設計
1. 程序描述與設計思路
(1)程序描述
程序中主要用到的知識點有:單片機外部中斷、定時器、步進電機的驅動方式和角度計算、LED燈的點亮熄滅等。其中,外部中斷尤為重要,如果單純把人體紅外模塊的檢測信號通過普通IO口檢測,這將會產生有人接近自動門反應遲鈍或夾人的嚴重后果。另外,計算步進電機走過的距離也是一個要點,需要精確計算才能確保電機在一個完成的開門或關門動作中剛好走過360°。  
(2)程序設計思路
人體紅外模塊一旦檢測到有人靠近,此時中斷觸發,程序進入外部中斷0,執行完整地一次開門信號,等待3秒后,程序跳出中斷服務程序,開始執行關門函數。若在關門過程中,又有人靠近的中斷信號出現,則關門程序被清除,再次執行中斷服務程序,并從關門的位置重新開啟,如此循環。
2. 程序流程圖
(1)自動門控制主程序



圖3-1 自動門控制主程序流程圖
(2)LED燈開關門控制編碼
根據硬件接口,低電平0表示點亮LED燈,高電平1表示熄滅LED燈,15個LED燈的流動方式如表3-2-2所示:

表3-2-2  LED燈的流動方式編碼表

注:燈從中間向左右逐漸點亮表示開門,燈從左右向中間逐漸熄滅表示關門。

(3)步進電機正反轉編碼
根據硬件電路接法,當該相高電平1時,所在線圈得電,電機轉動,步進電機轉動一個周期的順序編碼如表3-2-3所示:

表3-2-3 步進電機驅動順序編碼表

第一步
第二步
第三步
第四步
第五步
第六步
第七步
第八步
A相
1
1
0
0
0
0
0
1
B相
0
1
1
1
0
0
0
0
C相
0
0
0
1
1
1
0
0
D相
0
0
0
0
0
1
1
1
P0編碼
0x08
0x0c
0x04
0x06
0x02
0x03
0x01
0x09
    步進電機反轉則是將第八步變為第一步,第七步變為第二部,以此類推。
3. 程序
具體程序見附錄。

四. 總結
在此次有關自動門的控制系統的設計,讓我感覺到了單片機的復雜深度性,它很貼切我們的日常生活,無所不在,應用無處不有,它并不是想象中的那么簡單,也并非是無法克服的堡壘。
設計硬件之前,要首先收集好有關的基礎性資料,應備有良好的應用類參考書和專業類參考書。對于有關的科技期刊和專利文獻,也要經常閱讀以便了解最新的發展情況,借鑒現成的經驗,避免重復勞動。在設計中,要充分了解所用芯片的使用條件及輸入輸出的特性,這樣才能避免因使用錯誤而多走彎路。
電路設計部分應該有的精神就是廣集資料。只憑借自己頭腦中的知識是遠遠不夠的。哪里出現了問題,就要翻書本,或上網查資料。當然也要開動自己的腦筋怎樣使系統電路更完美。例如我的設計題目是基于單片機的自動門控制系統設計。有自動門,自然會用到電動機,每種電機都有不同的特性和功能,你就要進行選擇了。例如對電機的選擇,你就要選擇你所熟悉的,所了解的。
在電路設計時,應充分發揮單片機的記憶運算、判斷控制能力,避免采用復雜的、穩定性較差的模擬電路。
為了使微機控制系統各種硬件設備能夠正常運行,有效地實現電機各個控制環節的實時控制和管理,除了要設計合理的硬件電路,還必須要有高質量的軟件支持,兩者相輔相成,共同維持系統的正常運作。
最后我非常感謝學校和老師給我們這么好的學習機會,讓我親身去體會一個項目開發的艱難性,第一次站在一個設計者的角度去看,體會到了他們的艱辛,同時我也感受到了老師對我們的付出,對我們的精心指導,讓我順利完成這次學習任務。


七.附錄
1.原理圖
圖7-1 單片機控制自動門系統原理圖




單片機源程序如下:
  1. #include <reg51.h>
  2. #define uchar unsigned char
  3. #define uint unsigned int
  4. bit flag;
  5. int j;                                                //控制電機關門變量
  6. int n;                                                //控制電機開門變量
  7. unsigned code table[]={0x09,0x01,0x03,0x02,0x06,0x04,0x0c,0x08};   //1-2相勵磁方式 最小步距角
  8. //unsigned code table[]={0x80,0x40,0x20,0x10};                                           //1相勵磁方式         最小步距角*2
  9.                                           //紅線接電源,只要其中一相為高電平,該相導通,動作兩拍,轉過兩個步距角
  10. unsigned code OPEN_P0[]={0xff,0x7f,0x3f,0x1f,0x0f,0x07,0x03,0x01}; //LED燈
  11. unsigned code OPEN_P2[]={0x7f,0x3f,0x1f,0x0f,0x07,0x03,0x01,0x00}; //LED燈

  12. void delay(unsigned int t);
  13. void Delay_1s(uint y);
  14. void int0init(void);
  15. void Motor_GO(void);
  16. void Motor_BACK(void);

  17. void delay(unsigned int t)
  18. {
  19.         while(t--);
  20. }

  21. void Delay_1s(uint y)                                 //延時1s
  22. {
  23.         uint a;
  24.         for(a=0;a<200*y;a++)                         //200為1s
  25.         {
  26.                 TH1=(65536-50000)/256;
  27.                 TL1=(65536-50000)%256;
  28.                 TR1=1;
  29.                 while(!TF1);
  30.                 TF1=0;
  31.         }
  32. }
  33. void int0init(void)                                 //外部中斷0初始化
  34. {        
  35.         EA=1;                                                   //打開總中斷
  36.          EX0=1;                                                   //中斷允許位
  37.         IT0=1;                                                   //外部中斷0觸發方式為下降沿觸發
  38. }

  39. void Motor_GO(void)                                 //電機正轉函數,即開門
  40. {
  41.         uchar m;
  42.         while(n)         
  43.         {
  44.                 for(m=0;m<8;m++)
  45.                 {        
  46.                         n--;                          
  47.                         P1=table[m];
  48.                         if(n>2000)                        
  49.                         delay(280);                        //快速開門半圈
  50.                         if(n<=2000)
  51.                         delay(480);                        //慢速開門半圈
  52.                 }
  53.                 if((n<=4096)&(n>3800))        //LED燈提示
  54.                 {
  55.                         P0=OPEN_P0[0];
  56.                         P2=OPEN_P2[0];
  57.                 }
  58.                 if((n<=3800)&(n>3500))
  59.                 {
  60.                         P0=OPEN_P0[1];
  61.                         P2=OPEN_P2[1];
  62.                 }
  63.                 if((n<=3500)&(n>3200))
  64.                 {
  65.                         P0=OPEN_P0[2];
  66.                         P2=OPEN_P2[2];
  67.                 }
  68.                 if((n<=3200)&(n>2900))
  69.                 {
  70.                         P0=OPEN_P0[3];
  71.                         P2=OPEN_P2[3];
  72.                 }
  73.                 if((n<=2900)&(n>1950))
  74.                 {
  75.                         P0=OPEN_P0[4];
  76.                         P2=OPEN_P2[4];
  77.                 }
  78.                 if((n<=1950)&(n>1000))
  79.                 {
  80.                         P0=OPEN_P0[5];
  81.                         P2=OPEN_P2[5];
  82.                 }
  83.                 if((n<=1000)&(n>50))
  84.                 {
  85.                         P0=OPEN_P0[6];
  86.                         P2=OPEN_P2[6];
  87.                 }
  88.                 if((n<=50)&(n>=0))
  89.                 {
  90.                         P0=OPEN_P0[7];
  91.                         P2=OPEN_P2[7];                        
  92.                 }
  93.                
  94.                 if(n<0)
  95.                 {
  96.                         n=0;                                //跳出死循環
  97.                 }               
  98.         }
  99. }
  100. void Motor_BACK(void)                        //電機反轉函數,即關門
  101. {
  102.         uchar i;
  103.         while(j)         
  104.         {        
  105.                 for(i=0;i<8;i++)
  106.                 {        
  107.                         j--;                                 
  108.                         P1=table[7-i];
  109.                         if(j>2000)                        
  110.                         delay(280);                        //快速關門半圈
  111.                         if(j<=2000)
  112.                         delay(480);                        //慢速關門半圈                        
  113.                 }
  114.                 if((j<=4096)&(j>3800))        //LED燈提示
  115.                 {
  116.                         P0=OPEN_P0[7];
  117.                         P2=OPEN_P2[7];
  118.                 }
  119.                 if((j<=3800)&(j>3500))
  120.                    {
  121.                         P0=OPEN_P0[6];
  122.                         P2=OPEN_P2[6];
  123.                 }
  124.                 if((j<=3500)&(j>3200))
  125.                 {
  126.                         P0=OPEN_P0[5];
  127.                         P2=OPEN_P2[5];
  128.                 }
  129.                 if((j<=3200)&(j>2900))
  130.                 {
  131.                         P0=OPEN_P0[4];
  132.                         P2=OPEN_P2[4];
  133.                 }
  134.                 if((j<=2900)&(j>1950))
  135.                 {
  136.                         P0=OPEN_P0[3];
  137.                         P2=OPEN_P2[3];
  138.                 }
  139.                 if((j<=1950)&(j>1000))
  140.                 {
  141.                         P0=OPEN_P0[2];
  142.                         P2=OPEN_P2[2];
  143.                 }
  144.                 if((j<=1000)&(j>50))
  145.                 {
  146.                         P0=OPEN_P0[1];
  147.                         P2=OPEN_P2[1];
  148.                 }
  149.                 if((j<=50)&(j>=0))
  150.                 {
  151.                         P0=OPEN_P0[0];
  152.                         P2=OPEN_P2[0];                                 
  153.                 }               
  154.                 if(j<0)                                   //跳出死循環
  155.                 {
  156.                         j=0;
  157.                 }
  158.         }
  159. }

  160. void main()
  161. {        
  162. ……………………

  163. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼


所有資料51hei提供下載:
基于單片機的自動門控制系統.rar (549.71 KB, 下載次數: 555)


評分

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

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏27 分享淘帖 頂5 踩
回復

使用道具 舉報

沙發
ID:434005 發表于 2019-5-26 19:07 | 只看該作者
請問樓主可以分享一下詳細的元件清單嗎?方便準備一下器件,還有可以分享一下實物圖圖片嗎?謝謝樓主
回復

使用道具 舉報

板凳
ID:644149 發表于 2019-11-18 20:24 | 只看該作者
我什么時候才能怎么牛逼
回復

使用道具 舉報

地板
ID:636953 發表于 2019-11-22 19:36 來自手機 | 只看該作者
怎么沒有仿真圖?
回復

使用道具 舉報

5#
ID:546381 發表于 2019-11-25 17:08 | 只看該作者
請問樓主可以分享一下詳細的元件清單嗎?方便準備器件,實物圖有嗎?
回復

使用道具 舉報

6#
ID:658274 發表于 2019-12-11 18:33 | 只看該作者
有仿真圖嗎?
回復

使用道具 舉報

7#
ID:722671 發表于 2020-4-14 08:55 來自手機 | 只看該作者
樓主有零件圖嗎?
回復

使用道具 舉報

8#
ID:736231 發表于 2020-5-16 09:10 | 只看該作者
謝謝樓主
回復

使用道具 舉報

9#
ID:744853 發表于 2020-6-21 20:36 | 只看該作者
正想找紅外探測
回復

使用道具 舉報

10#
ID:774633 發表于 2020-6-22 08:44 | 只看該作者
下載來學習,謝謝
回復

使用道具 舉報

11#
ID:777587 發表于 2020-6-22 23:05 來自手機 | 只看該作者
好想找到能記錄進出人數的自動門控制系統
回復

使用道具 舉報

12#
ID:787536 發表于 2020-6-23 11:57 | 只看該作者
非常感謝 可以發一下仿真圖碼
回復

使用道具 舉報

13#
ID:510700 發表于 2021-5-21 18:46 | 只看該作者
樓主有實物圖嗎 能發一下嗎 感謝
回復

使用道具 舉報

14#
ID:988052 發表于 2022-1-1 13:57 | 只看該作者
我什么時候才能這么牛
回復

使用道具 舉報

15#
ID:1003871 發表于 2022-2-12 22:50 | 只看該作者
這個挺實用的
回復

使用道具 舉報

16#
ID:1011702 發表于 2022-3-24 14:02 來自手機 | 只看該作者
大佬文檔實在不會寫了,借鑒一下你的程序去寫文檔
回復

使用道具 舉報

17#
ID:1021925 發表于 2022-4-27 18:03 來自手機 | 只看該作者
有完整的電路圖嗎
回復

使用道具 舉報

18#
ID:1029682 發表于 2022-5-25 18:38 | 只看該作者
amazing
回復

使用道具 舉報

19#
ID:1080848 發表于 2023-5-31 09:52 | 只看該作者
請問樓主用的是keil嗎?
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 91精品国产一区二区三区蜜臀 | 日韩精品在线一区 | 亚洲天堂男人的天堂 | 手机av免费在线 | 成人av鲁丝片一区二区小说 | 欧美综合视频在线 | 亚洲日韩视频 | 成人一级黄色毛片 | 日韩欧美在线一区二区 | 日韩在线高清 | 午夜理伦三级理论三级在线观看 | 国产小视频在线观看 | 国产精品波多野结衣 | 国产精品一区二区三区在线 | 一级片成人| 国产精品伦理一区二区三区 | 国产精品夜夜夜一区二区三区尤 | 亚洲喷水 | 国产精品无 | 免费观看日韩av | 日韩精品视频在线免费观看 | 日韩欧美网| 亚洲一区二区久久 | 97操操| 91视视频在线观看入口直接观看 | 国产98色在线 | 日韩 | 欧美成人a∨高清免费观看 色999日韩 | 91玖玖 | 女人天堂av| 国产视频一区二区 | 男女免费在线观看视频 | 嫩草视频在线看 | 人人澡人人射 | 成人综合视频在线观看 | 日本免费一区二区三区 | 国产成人99久久亚洲综合精品 | 成人夜晚看av | 日日射影院 | 欧美日韩久久久 | 午夜爽爽男女免费观看hd | 国产综合欧美 |