找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

帖子
查看: 10121|回復(fù): 4
收起左側(cè)

門(mén)禁系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)

[復(fù)制鏈接]
ID:112317 發(fā)表于 2016-4-7 03:52 | 顯示全部樓層 |閱讀模式
前段時(shí)間玩了一下門(mén)禁系統(tǒng),現(xiàn)在整理整理資料,把東西發(fā)上來(lái)

設(shè)計(jì)要求:
基于單片機(jī),具有通話、振鈴、摘機(jī)、通話、開(kāi)鎖功能,還要有鍵盤(pán)和顯示電路

設(shè)計(jì)思路:
1、系統(tǒng)用到AD、UART、PWM、SPI,考慮成品的體積,采用arduino nano
2、語(yǔ)音采樣使用駐極體麥克風(fēng),經(jīng)200倍前置放大,再進(jìn)行8位AD采樣,采樣率8kHz,可達(dá)到電話音質(zhì),滿足需求
3、門(mén)禁系統(tǒng)通信的特點(diǎn)是多對(duì)一,距離10~100m,通信速率要滿足語(yǔ)音通信、控制信號(hào)傳輸,因此采用485通信,通信速率512Kbps
4、語(yǔ)音播放使用8位PWM,功放芯片采用常見(jiàn)的LM386
5、顯示屏采用Nokia5110,SPI通信
6、鍵盤(pán)采用10位ADC鍵盤(pán),16個(gè)按鍵
7、開(kāi)鎖電路使用繼電器實(shí)現(xiàn)

硬件設(shè)計(jì)

1、Arduino Nano
主控直接采用arduino nano,由于485通信和下載程序共用0、1腳,因此要通過(guò)撥碼開(kāi)關(guān)切換0、1腳功能
144756xizmi51h1hp567mi.jpg

2、電源電路
整個(gè)系統(tǒng)使用外部12v電源供電,用于驅(qū)動(dòng)繼電器和LM386,12v電源通過(guò)LM2940得到5v電源,Nokia5110顯示屏需要3.3v供電,直接采用nano上的3.3v電源
144757b4lacrz3144ay3zy.jpg

3、ADC鍵盤(pán)電路
由于arduino接口較少,直接采用ADC鍵盤(pán),一次掛載20個(gè)按鍵沒(méi)有問(wèn)題,每個(gè)分壓電阻使用1kΩ,線性度非常不錯(cuò)。
144758ouahust8dzuk9fbs.jpg

4、485通信電路
使用了兩片MAX485組成了全雙工通信,實(shí)際測(cè)試,10m網(wǎng)線,2Mbps,完全不丟包,另外測(cè)試過(guò)2m,2Mbps的串口通信,也是完全不丟包
144758lpkh04ro681arxov.jpg

5、麥克風(fēng)采樣電路
語(yǔ)音采樣,使用普通駐極體麥克風(fēng),經(jīng)過(guò)LM358的200倍放大后,送入ADC
144759yqwho9h3tg023mbt.jpg

6、功放電路
功放直接采用常見(jiàn)的LM386典型電路,PWM信號(hào)經(jīng)過(guò)積分電路,再送入LM386,為了提高音量,使用12v供電,實(shí)測(cè)效果不錯(cuò),5v供電時(shí),噪音非常大,稍微一大聲就失真
144800oygxoyq6nyxc4xyt.jpg

8、開(kāi)鎖電路
開(kāi)鎖功能可以通過(guò)電磁鎖實(shí)現(xiàn),這里只用了繼電器并留出了接線口,繼電器電流也不小,保險(xiǎn)起見(jiàn)使用了一個(gè)9014擴(kuò)流,并反向并聯(lián)一個(gè)二極管吸收反向電流
144801opk4omdit0y1cidm.jpg

畫(huà)好原理圖之后就是排版畫(huà)pcb了:
145131xseffq6w7qj6srje.jpg
檢查無(wú)誤后開(kāi)始做板子,既然要語(yǔ)音通信,那肯定是至少要做兩個(gè)啦:
145132omlaipihi28i3li1.jpg
145133nfby1bb2rn11zn56.jpg
145133fc135v9dz881fp8j.jpg
144938ig5fjjwzo61jj7jf.jpg
然后再焊接調(diào)試:
144938mwoc1en09j80w0th.jpg
145222w2op1dz7mfomd0c3.jpg
雖然做板前仔細(xì)檢查了很多遍,但還是出了幾個(gè)bug,還好是小問(wèn)題,兩根飛線解決

程序設(shè)計(jì)
整個(gè)系統(tǒng)包括了以下幾個(gè)程序文件:
EG_V0_3: 主程序,包括了功能定義、ADC初始化、定時(shí)器初始化、鍵盤(pán)輸入處理、顯示界面、數(shù)據(jù)通信處理、中斷采樣
ADC_KEY:按鍵識(shí)別,主要是建立10位ADC值和每個(gè)按鍵的映射關(guān)系,參考了馬潮老師的狀態(tài)機(jī)程序
CRC8:CRC校驗(yàn)程序,為了保證通信的正確性,必須使用數(shù)據(jù)校驗(yàn),crc8非常有效,不過(guò)實(shí)際測(cè)試,沒(méi)有crc校驗(yàn)的情況下好像數(shù)據(jù)幾乎沒(méi)有傳輸錯(cuò)誤??
Nokia5110:顯示屏驅(qū)動(dòng)程序,直接使用論壇里的代碼,具體哪個(gè)帖子忘了。。
rs485:包括485初始化、定時(shí)器1初始化、485通信協(xié)議、通信處理等
ringtone:實(shí)現(xiàn)呼叫、接聽(tīng)、振鈴功能

程序設(shè)計(jì)思路
本系統(tǒng)的核心就是語(yǔ)言采樣播放+485通信協(xié)議,由于處理的數(shù)據(jù)量比較大,所以很多地方?jīng)]有用到arduino提供的方法,比如analogread、analogwrite、serial等
語(yǔ)音采樣與播放:
人說(shuō)話的頻率為300HZ~3KHZ,根據(jù)采樣定理,采樣頻率應(yīng)該大于6KHZ,在這里取7.8KHZ(atmega直接分頻可得到),為了減少開(kāi)發(fā)難度,沒(méi)有使用音頻壓縮。Timer2開(kāi)啟溢出中斷,中斷頻率7.8KHZ,語(yǔ)音采樣、鍵盤(pán)值采樣、PWM更新都放在這里,同時(shí)使用Timer2的OCR2B作為PWM輸出。ADC工作在自動(dòng)連續(xù)轉(zhuǎn)換模式下,ADC工作頻率為76.9KHZ,測(cè)試過(guò)更高的頻率,200KHZ以上的采樣速度,誤差非常大,容易導(dǎo)致按鍵誤判和語(yǔ)音噪音。

485通信:
采用了兩片485芯片,一片工作在接收,一片工作在發(fā)送,語(yǔ)音采樣的數(shù)據(jù)量為8bit*8KHZ=64Kbps,由于需要同時(shí)傳輸?shù)刂贰⒄Z(yǔ)音數(shù)據(jù)、控制命令、校驗(yàn)碼,一次傳輸數(shù)據(jù)量為3~6字節(jié),因此波特率至少為192Kbps,保險(xiǎn)起見(jiàn),本系統(tǒng)采用了512KHZ。
由于需要傳輸多種數(shù)據(jù),所以必須要使用一種通信協(xié)議,基于485的通信協(xié)議為:
1、主機(jī)以廣播的方式向所有從機(jī)發(fā)送一個(gè)地址數(shù)據(jù),尋找此地址的從機(jī),該從機(jī)收到后發(fā)送應(yīng)答命令,之后建立通信,從機(jī)與從機(jī)不能進(jìn)行通信
2、從機(jī)不能主動(dòng)發(fā)起對(duì)話,只能等待主機(jī)發(fā)送數(shù)據(jù)
3、一個(gè)幀結(jié)構(gòu)如下:
  (1)[FUNCTION_VOICE,語(yǔ)音數(shù)據(jù),CRC校驗(yàn)],3個(gè)字節(jié)
  (2)[FUNCTION_COMMAND,COMMAND_XXX,CRC校驗(yàn)],3~6個(gè)字節(jié)
           其中COMMAND_XXX包括開(kāi)門(mén)、通話、地址校驗(yàn)等命令,具體請(qǐng)看代碼
每發(fā)完一幀必須空閑一段時(shí)間,作為一個(gè)幀的結(jié)束標(biāo)志,因此采用Timer1作為定時(shí)器,每接收到一個(gè)字符就重新計(jì)時(shí),如果計(jì)時(shí)超過(guò)設(shè)定的空閑時(shí)間,則認(rèn)為當(dāng)前已接收到一幀,立即對(duì)該幀進(jìn)行處理。需要注意的是,單片機(jī)需要一定的時(shí)間進(jìn)行協(xié)議的解析和數(shù)據(jù)處理,如果空閑時(shí)間太短,則當(dāng)期幀數(shù)據(jù)還沒(méi)處理完就來(lái)了下一幀數(shù)據(jù),肯定會(huì)出現(xiàn)混亂,如果空閑時(shí)間太長(zhǎng),又會(huì)降低通信速率,因此需要取一個(gè)合適的空閑值,經(jīng)過(guò)測(cè)試,協(xié)議解析的時(shí)間為72us,因此數(shù)據(jù)接收+空閑時(shí)間應(yīng)該大于72us,才能保證通信正常。
CRC校驗(yàn)資料:
循環(huán)冗余校驗(yàn)(CRC)算法入門(mén)引導(dǎo):http://www.torrancerestoration.com/bbs/dpj-47737-1.html
最通俗的CRC校驗(yàn)原理剖析:http://www.torrancerestoration.com/bbs/dpj-47736-1.html
CRC8校驗(yàn)分析:http://www.torrancerestoration.com/bbs/dpj-47738-1.html

ADC鍵盤(pán):
10位ad對(duì)16個(gè)按鍵進(jìn)行采樣,因此電壓與每個(gè)按鍵具有線性比例關(guān)系,1024/(16+1)=60.2,實(shí)際值是59,再通過(guò)映射關(guān)系將0-1024值轉(zhuǎn)換成按鍵值,公式:
key=key_table[(16-(val)/59)/4][(16-(val)/59)%4];
16個(gè)按鍵中,y代表yes,n代表n
a-d代表四個(gè)功能:通話,開(kāi)門(mén),設(shè)定地址,預(yù)留
144803s3h6ametmoh2z642.png

結(jié)果
經(jīng)過(guò)不斷的測(cè)試與完善,在12v供電情況下,語(yǔ)音通信清晰,聲音洪亮,基本無(wú)噪音,可改變從機(jī)地址,范圍為001~999,其他功能也基本實(shí)現(xiàn)了,如開(kāi)門(mén)、交互界面等等



電路、代碼、資料,打包:
原附件缺少部分代碼,現(xiàn)已補(bǔ)全并更新:

門(mén)禁1.rar (4.66 MB, 下載次數(shù): 42)
更新
在運(yùn)行以上程序之前,最好運(yùn)行485測(cè)試程序,以確保485通信正常,測(cè)試方法:主從機(jī)燒入測(cè)試程序,同時(shí)按下reset,之后測(cè)試程序會(huì)發(fā)送10萬(wàn)個(gè)數(shù)據(jù)并顯示接收到的數(shù)據(jù),觀察運(yùn)行結(jié)果是否正確。測(cè)試代碼如下
rs485_test1.rar (5.5 KB, 下載次數(shù): 17)

相關(guān)帖子

回復(fù)

使用道具 舉報(bào)

ID:137396 發(fā)表于 2016-8-23 15:35 | 顯示全部樓層
這也太猛了 不知道淘寶上有沒(méi)有賣
回復(fù)

使用道具 舉報(bào)

ID:156386 發(fā)表于 2016-12-20 21:52 | 顯示全部樓層
很好,學(xué)習(xí)了
回復(fù)

使用道具 舉報(bào)

ID:158740 發(fā)表于 2016-12-29 20:50 | 顯示全部樓層
厲害,我也要學(xué)習(xí)一個(gè)
回復(fù)

使用道具 舉報(bào)

ID:240472 發(fā)表于 2017-10-18 09:45 | 顯示全部樓層
感謝分享,太厲害啦
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表