陸正杰
(河池學(xué)院 物理與機(jī)電工程學(xué)院,廣西 宜州 546300)
AM2301是廣州奧松公司研發(fā)的一款單總線數(shù)字式溫濕度傳感器,其單總線數(shù)據(jù)傳輸協(xié)議簡(jiǎn)單有效,通信距離較遠(yuǎn),數(shù)據(jù)通信程序設(shè)計(jì)簡(jiǎn)單,非常適合在分布式溫濕度采集系統(tǒng)中應(yīng)用。將這種單總線協(xié)議應(yīng)用到分布式數(shù)據(jù)采集系統(tǒng)終端的設(shè)計(jì)中將大大簡(jiǎn)化采集網(wǎng)絡(luò)的設(shè)計(jì)。本文將設(shè)計(jì)一款模仿AM2301的單總線協(xié)議的數(shù)據(jù)采集系統(tǒng)。該系統(tǒng)可以把采集到的數(shù)據(jù)按照AM2301的數(shù)據(jù)格式對(duì)采集信號(hào)進(jìn)行處理,并能按照AM2301的單總線協(xié)議向主控設(shè)備傳送數(shù)據(jù)。在分布式數(shù)據(jù)采集網(wǎng)絡(luò)中具有廣泛的應(yīng)用前景。
單總線數(shù)據(jù)采集器設(shè)計(jì)為一個(gè)終端設(shè)備,主要用于采集兩路模擬信號(hào),然后按照單總線器件AM2301的數(shù)據(jù)格式存儲(chǔ),并能按AM2301的讀寫時(shí)序把采集到的數(shù)據(jù)與主控設(shè)備進(jìn)行通信。因此采集器的主要功能有:一是數(shù)據(jù)采集功能;二是數(shù)據(jù)處理及顯示功能;三是數(shù)據(jù)傳輸功能。
根據(jù)功能需求,單總線數(shù)據(jù)采集器方案設(shè)計(jì)如圖1所示。
圖1 數(shù)據(jù)采集器結(jié)構(gòu)圖
系統(tǒng)可以實(shí)時(shí)采集兩通道模擬信號(hào),然后進(jìn)行AD轉(zhuǎn)換,并把采集到的數(shù)據(jù)按AM2301的數(shù)據(jù)格式進(jìn)行處理、存儲(chǔ)和顯示。在主控設(shè)備請(qǐng)求數(shù)據(jù)時(shí),由單總線協(xié)議發(fā)生器負(fù)責(zé)把存儲(chǔ)的數(shù)據(jù)通過單總線傳送。
系統(tǒng)主要有數(shù)據(jù)采集和數(shù)據(jù)傳輸兩大部分,而數(shù)據(jù)傳輸主要依靠軟件來完成相關(guān)傳輸協(xié)議,將在軟件設(shè)計(jì)部分介紹。硬件部分主要由單片機(jī)最小系統(tǒng)控制ADC電路實(shí)現(xiàn)模擬信號(hào)的實(shí)時(shí)采集。根據(jù)設(shè)計(jì)方案,硬件電路如圖2所示。
圖2 單總線數(shù)據(jù)采集器硬件電路圖
控制核心采用AT89C52及其外圍電路構(gòu)成的最小系統(tǒng),用LCD1602實(shí)時(shí)顯示采集的數(shù)據(jù)。
數(shù)據(jù)采集電路采用雙通道高速16位ADC集成電路LTC1865,其串行數(shù)據(jù)輸出(SDO)引腳、串行同步時(shí)鐘(SCK)引腳、啟動(dòng)轉(zhuǎn)換控制(CONV)引腳和串行數(shù)據(jù)輸入(SDI)引腳分別連接到單片機(jī)的P1.4~P1.7。單片機(jī)通過SDI寫入命令選擇數(shù)據(jù)通道,然后通過CONV引腳控制ADC電路啟動(dòng)A/D轉(zhuǎn)換,從SDO引腳讀取串行數(shù)據(jù)即可采集到相應(yīng)通道的實(shí)時(shí)數(shù)據(jù)。
根據(jù)AM2301數(shù)據(jù)手冊(cè),主控設(shè)備與其通信時(shí)序表示及數(shù)據(jù)位時(shí)序表示分別如表1、表2所示。采集器的數(shù)據(jù)傳送協(xié)議時(shí)序采用AM2301時(shí)序的典型值,根據(jù)表1和表2所示的各種控制信號(hào)和數(shù)據(jù)位的時(shí)序信號(hào),采集器的數(shù)據(jù)傳送協(xié)議程序設(shè)計(jì)思路如下:
表1 AM2301數(shù)據(jù)通信時(shí)序
(1)數(shù)據(jù)采集器平時(shí)一直在監(jiān)視主控設(shè)備發(fā)起通信的起始信號(hào),即先把數(shù)據(jù)線SDA拉高,然后一直監(jiān)測(cè)數(shù)據(jù)線SDA的電平狀態(tài);
(2)監(jiān)測(cè)到SDA被主控設(shè)備拉低時(shí)計(jì)時(shí)(0.8~20 ms)確定是否為主控設(shè)備發(fā)起通信請(qǐng)求;
(3)主控設(shè)備發(fā)起通信請(qǐng)求低電平信號(hào)后,等待主控設(shè)備拉高釋放總路線約30 μs,然后拉低總線約80 μs作為應(yīng)答信號(hào);
(4)然后拉高釋放總線約80 μs后開始發(fā)送數(shù)據(jù)位;
(5)發(fā)送數(shù)據(jù)時(shí)每個(gè)數(shù)據(jù)位之間有一個(gè)50 μs的低電平時(shí)隙。數(shù)據(jù)從高位到低位移出數(shù)據(jù)位,然后進(jìn)行判斷:為0則在低電平時(shí)隙信號(hào)后把總線拉高26 μs,為1則在低電平時(shí)隙后把總線拉高70 μs;
(6)40位數(shù)據(jù)發(fā)送完畢,把總路線拉高;
(7)啟動(dòng)ADC電路采集一次數(shù)據(jù),并把數(shù)據(jù)保存到數(shù)據(jù)存儲(chǔ)單元替換掉舊的數(shù)據(jù)。協(xié)議時(shí)序如圖3所示。
表2 AM2301數(shù)據(jù)位的表示
圖3 協(xié)議發(fā)生器的時(shí)序圖
根據(jù)以上對(duì)協(xié)議發(fā)生器的工作過程和通信時(shí)序分析,程序從功能上可以劃分為主函數(shù)、數(shù)據(jù)采集函數(shù)、數(shù)據(jù)處理函數(shù)、顯示函數(shù)、數(shù)據(jù)傳送函數(shù)五大模塊。程序采用模塊化編程,分別用main.c,data_transfer.c,data_simple.c,data_proce.c,disp.c實(shí)現(xiàn)上述五大功能并建立相應(yīng)的接口文件(*.h)。其中,顯示函數(shù)針對(duì)LCD1602編程,主要實(shí)現(xiàn)在LCD1602指定位置(x,y)寫字符串和寫數(shù)據(jù)功能,功能函數(shù)分別為write_n_char(unsigned char x,unsigned char y,unsigned char*string)和 write_data(unsigned char x,unsigned char y,unsigned char date),作為常用函數(shù)模塊,不是本文討論的重點(diǎn)。
3.2.1 數(shù)據(jù)采集與數(shù)據(jù)處理
根據(jù)LTC1865數(shù)據(jù)手冊(cè),模擬信號(hào)的A/D轉(zhuǎn)換是由MCU向LTC1865發(fā)出轉(zhuǎn)換命令并按照時(shí)序采集轉(zhuǎn)換得到的測(cè)量值的數(shù)字量分別保存到數(shù)組conv_data[2]中。參考LTC1865數(shù)據(jù)手冊(cè),采集程序設(shè)計(jì)流程如圖4所示。
數(shù)據(jù)處理函數(shù)將采集的數(shù)字量conv_data[2]拆分為四個(gè)字節(jié)的無符號(hào)字符型數(shù)據(jù)并計(jì)算其CRC較驗(yàn)值,按照AM2301的數(shù)據(jù)格式保存在數(shù)據(jù)寄存器RT_Data[]中。
具體實(shí)現(xiàn)代碼為:
數(shù)據(jù)格式為:
較驗(yàn)值1通道高8位1通道低8位2通道高8位2通道低8位CRC
3.2.2 數(shù)據(jù)傳送函數(shù)的設(shè)計(jì)
根據(jù)圖3所示數(shù)據(jù)傳輸時(shí)序,數(shù)據(jù)傳輸程序主要是將需要傳輸?shù)臄?shù)據(jù)在單總線上構(gòu)建數(shù)據(jù)位低電平時(shí)隙和高電平數(shù)據(jù)位,程序設(shè)計(jì)流程如圖5所示。
圖4 LTC1865數(shù)據(jù)采集程序流程
圖5 數(shù)據(jù)傳送程序流程
將傳送過程設(shè)計(jì)成子函數(shù)的形式方便調(diào)用和程序的移植,子函數(shù)命名為data_tranfer(),實(shí)現(xiàn)代碼如下:
圖6 主函數(shù)流程圖
3.2.3 主程序的設(shè)計(jì)
主函數(shù)中,首先定義數(shù)據(jù)總線SDA及ADC的數(shù)據(jù)線SDO,時(shí)鐘線SCK和轉(zhuǎn)換控制線CONV并進(jìn)行初始化操作,然后一直監(jiān)測(cè)數(shù)據(jù)端口,根據(jù)圖2所示的協(xié)議時(shí)序,當(dāng)檢測(cè)到數(shù)據(jù)端口SDA被拉低后就開始計(jì)時(shí)判斷是否為主控設(shè)備發(fā)出的通信請(qǐng)求,是則調(diào)用數(shù)據(jù)傳送函數(shù)將保存在數(shù)據(jù)器寄存器中的40位數(shù)據(jù)按協(xié)議移位傳送。然后進(jìn)行一次數(shù)據(jù)采集和處理,將新的數(shù)據(jù)保存到數(shù)據(jù)寄存器中,程序流程如圖6所示。
根據(jù)設(shè)計(jì)目的,系統(tǒng)的測(cè)試主要包括兩個(gè)方面,一是系統(tǒng)能否正確采集信號(hào)并顯示出來;二是系統(tǒng)能否按照設(shè)計(jì)的協(xié)議將采集到的信號(hào)傳送給主控設(shè)備。
在protues中設(shè)計(jì)測(cè)試電路,如圖7所示,用兩個(gè)電位計(jì)RV1和RV2產(chǎn)生和改變兩路輸入電壓,通過電壓探針可觀察兩路輸入電壓的大小及其變化情況。單片機(jī)控制ADC電路采集數(shù)據(jù)并處理后,將在顯示器顯示當(dāng)前值,測(cè)試結(jié)果如圖8所示,通過比對(duì),圖8中兩處虛線框處,電壓探針顯示的輸入信號(hào)電壓與采集系統(tǒng)采集顯示的信號(hào)大小一致,表明電路實(shí)現(xiàn)了兩路模擬信號(hào)的采集并進(jìn)行數(shù)據(jù)處理的功能。
測(cè)試實(shí)驗(yàn)過程示意圖如圖9所示。
測(cè)試時(shí)在Protues中設(shè)計(jì)一單片機(jī)系統(tǒng)作為主控設(shè)備,按設(shè)計(jì)的協(xié)議向單總線數(shù)據(jù)采集系統(tǒng)請(qǐng)求數(shù)據(jù)并顯示出來。
具體測(cè)試電路和測(cè)試結(jié)果如圖10所示,通過對(duì)比圖中虛線框處數(shù)據(jù),主控設(shè)備顯示的接收數(shù)據(jù)和采集系統(tǒng)實(shí)時(shí)顯示的數(shù)據(jù)一致,表明本文設(shè)計(jì)的系統(tǒng)能按照設(shè)計(jì)的協(xié)議正確傳輸數(shù)據(jù),實(shí)現(xiàn)了預(yù)期的功能。
本文討論設(shè)計(jì)的基于AM2301的單總線協(xié)議的數(shù)據(jù)采集系統(tǒng),硬件系統(tǒng)簡(jiǎn)潔明了,可擴(kuò)展性較好,在分布式電壓型模擬信號(hào)采集系統(tǒng)中有很好的優(yōu)勢(shì)。系統(tǒng)通過Protues仿真測(cè)試,達(dá)到預(yù)期的功能。
圖7 數(shù)據(jù)采集功能測(cè)試電路圖
圖8 數(shù)據(jù)采集功能測(cè)試結(jié)果
圖9 數(shù)據(jù)傳輸功能測(cè)試方法示意圖
圖10 數(shù)據(jù)傳輸測(cè)試結(jié)果
[1]濟(jì)南聯(lián)誠(chéng)創(chuàng)發(fā)科技有限公司.數(shù)字溫濕度傳感器DHT21(AM2301)[Z],2003.
[2]陶凌,聶惠娟.基于RS-485總線的蠶種催青控制系統(tǒng)[J].微計(jì)算機(jī)信息,2008(4):23-25.
[3]許才銓.蠶種催青室控制系統(tǒng)的研制與應(yīng)用[J].蠶桑通報(bào),2003(4):39-40.
[4]曾慶波,何一楠,辛春紅.單片機(jī)應(yīng)用技術(shù)[M].哈爾濱:哈爾濱工業(yè)大學(xué)出版社,2012.
[5]深圳奧松傳感器科技有限公司.數(shù)字溫濕度傳感器AM23XX使用說明[Z],2010.
[6]LINEAR TECHNOLOGY CORPORATION.LTC1864/LTC1865 μPower,16 - Bit,250ksps 1 - and 2 - Channel ADCs in MSOP[Z],2001.
[7]李富偉,翟守忠,何萬平,等.基于LTC1865和McBSP的高速串行數(shù)據(jù)采集系統(tǒng)設(shè)計(jì)[J].信息化縱橫,2009(13):18-21.