陸正杰
(河池學院 物理與機電工程學院,廣西 宜州 546300)
AM2301是廣州奧松公司研發的一款單總線數字式溫濕度傳感器,其單總線數據傳輸協議簡單有效,通信距離較遠,數據通信程序設計簡單,非常適合在分布式溫濕度采集系統中應用。將這種單總線協議應用到分布式數據采集系統終端的設計中將大大簡化采集網絡的設計。本文將設計一款模仿AM2301的單總線協議的數據采集系統。該系統可以把采集到的數據按照AM2301的數據格式對采集信號進行處理,并能按照AM2301的單總線協議向主控設備傳送數據。在分布式數據采集網絡中具有廣泛的應用前景。
單總線數據采集器設計為一個終端設備,主要用于采集兩路模擬信號,然后按照單總線器件AM2301的數據格式存儲,并能按AM2301的讀寫時序把采集到的數據與主控設備進行通信。因此采集器的主要功能有:一是數據采集功能;二是數據處理及顯示功能;三是數據傳輸功能。
根據功能需求,單總線數據采集器方案設計如圖1所示。

圖1 數據采集器結構圖
系統可以實時采集兩通道模擬信號,然后進行AD轉換,并把采集到的數據按AM2301的數據格式進行處理、存儲和顯示。在主控設備請求數據時,由單總線協議發生器負責把存儲的數據通過單總線傳送。
系統主要有數據采集和數據傳輸兩大部分,而數據傳輸主要依靠軟件來完成相關傳輸協議,將在軟件設計部分介紹。硬件部分主要由單片機最小系統控制ADC電路實現模擬信號的實時采集。根據設計方案,硬件電路如圖2所示。

圖2 單總線數據采集器硬件電路圖
控制核心采用AT89C52及其外圍電路構成的最小系統,用LCD1602實時顯示采集的數據。
數據采集電路采用雙通道高速16位ADC集成電路LTC1865,其串行數據輸出(SDO)引腳、串行同步時鐘(SCK)引腳、啟動轉換控制(CONV)引腳和串行數據輸入(SDI)引腳分別連接到單片機的P1.4~P1.7。單片機通過SDI寫入命令選擇數據通道,然后通過CONV引腳控制ADC電路啟動A/D轉換,從SDO引腳讀取串行數據即可采集到相應通道的實時數據。
根據AM2301數據手冊,主控設備與其通信時序表示及數據位時序表示分別如表1、表2所示。采集器的數據傳送協議時序采用AM2301時序的典型值,根據表1和表2所示的各種控制信號和數據位的時序信號,采集器的數據傳送協議程序設計思路如下:

表1 AM2301數據通信時序
(1)數據采集器平時一直在監視主控設備發起通信的起始信號,即先把數據線SDA拉高,然后一直監測數據線SDA的電平狀態;
(2)監測到SDA被主控設備拉低時計時(0.8~20 ms)確定是否為主控設備發起通信請求;
(3)主控設備發起通信請求低電平信號后,等待主控設備拉高釋放總路線約30 μs,然后拉低總線約80 μs作為應答信號;
(4)然后拉高釋放總線約80 μs后開始發送數據位;
(5)發送數據時每個數據位之間有一個50 μs的低電平時隙。數據從高位到低位移出數據位,然后進行判斷:為0則在低電平時隙信號后把總線拉高26 μs,為1則在低電平時隙后把總線拉高70 μs;
(6)40位數據發送完畢,把總路線拉高;
(7)啟動ADC電路采集一次數據,并把數據保存到數據存儲單元替換掉舊的數據。協議時序如圖3所示。

表2 AM2301數據位的表示

圖3 協議發生器的時序圖
根據以上對協議發生器的工作過程和通信時序分析,程序從功能上可以劃分為主函數、數據采集函數、數據處理函數、顯示函數、數據傳送函數五大模塊。程序采用模塊化編程,分別用main.c,data_transfer.c,data_simple.c,data_proce.c,disp.c實現上述五大功能并建立相應的接口文件(*.h)。其中,顯示函數針對LCD1602編程,主要實現在LCD1602指定位置(x,y)寫字符串和寫數據功能,功能函數分別為write_n_char(unsigned char x,unsigned char y,unsigned char*string)和 write_data(unsigned char x,unsigned char y,unsigned char date),作為常用函數模塊,不是本文討論的重點。
3.2.1 數據采集與數據處理
根據LTC1865數據手冊,模擬信號的A/D轉換是由MCU向LTC1865發出轉換命令并按照時序采集轉換得到的測量值的數字量分別保存到數組conv_data[2]中。參考LTC1865數據手冊,采集程序設計流程如圖4所示。
數據處理函數將采集的數字量conv_data[2]拆分為四個字節的無符號字符型數據并計算其CRC較驗值,按照AM2301的數據格式保存在數據寄存器RT_Data[]中。
具體實現代碼為:

數據格式為:

較驗值1通道高8位1通道低8位2通道高8位2通道低8位CRC
3.2.2 數據傳送函數的設計
根據圖3所示數據傳輸時序,數據傳輸程序主要是將需要傳輸的數據在單總線上構建數據位低電平時隙和高電平數據位,程序設計流程如圖5所示。

圖4 LTC1865數據采集程序流程

圖5 數據傳送程序流程
將傳送過程設計成子函數的形式方便調用和程序的移植,子函數命名為data_tranfer(),實現代碼如下:


圖6 主函數流程圖
3.2.3 主程序的設計
主函數中,首先定義數據總線SDA及ADC的數據線SDO,時鐘線SCK和轉換控制線CONV并進行初始化操作,然后一直監測數據端口,根據圖2所示的協議時序,當檢測到數據端口SDA被拉低后就開始計時判斷是否為主控設備發出的通信請求,是則調用數據傳送函數將保存在數據器寄存器中的40位數據按協議移位傳送。然后進行一次數據采集和處理,將新的數據保存到數據寄存器中,程序流程如圖6所示。
根據設計目的,系統的測試主要包括兩個方面,一是系統能否正確采集信號并顯示出來;二是系統能否按照設計的協議將采集到的信號傳送給主控設備。
在protues中設計測試電路,如圖7所示,用兩個電位計RV1和RV2產生和改變兩路輸入電壓,通過電壓探針可觀察兩路輸入電壓的大小及其變化情況。單片機控制ADC電路采集數據并處理后,將在顯示器顯示當前值,測試結果如圖8所示,通過比對,圖8中兩處虛線框處,電壓探針顯示的輸入信號電壓與采集系統采集顯示的信號大小一致,表明電路實現了兩路模擬信號的采集并進行數據處理的功能。
測試實驗過程示意圖如圖9所示。
測試時在Protues中設計一單片機系統作為主控設備,按設計的協議向單總線數據采集系統請求數據并顯示出來。
具體測試電路和測試結果如圖10所示,通過對比圖中虛線框處數據,主控設備顯示的接收數據和采集系統實時顯示的數據一致,表明本文設計的系統能按照設計的協議正確傳輸數據,實現了預期的功能。
本文討論設計的基于AM2301的單總線協議的數據采集系統,硬件系統簡潔明了,可擴展性較好,在分布式電壓型模擬信號采集系統中有很好的優勢。系統通過Protues仿真測試,達到預期的功能。

圖7 數據采集功能測試電路圖

圖8 數據采集功能測試結果

圖9 數據傳輸功能測試方法示意圖

圖10 數據傳輸測試結果
[1]濟南聯誠創發科技有限公司.數字溫濕度傳感器DHT21(AM2301)[Z],2003.
[2]陶凌,聶惠娟.基于RS-485總線的蠶種催青控制系統[J].微計算機信息,2008(4):23-25.
[3]許才銓.蠶種催青室控制系統的研制與應用[J].蠶桑通報,2003(4):39-40.
[4]曾慶波,何一楠,辛春紅.單片機應用技術[M].哈爾濱:哈爾濱工業大學出版社,2012.
[5]深圳奧松傳感器科技有限公司.數字溫濕度傳感器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的高速串行數據采集系統設計[J].信息化縱橫,2009(13):18-21.