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