引 言
??? ADT75是ADI公司生產的集溫度傳感器、12位A/D轉換器、可編程的溫度過限報警器和SMBus/I2C總線接口于一體的新型數字溫度傳感器。其額定工作溫度范圍為-55~+125℃,能準確、靈敏地檢測數字化溫度,溫度誤差最大為±1℃,測溫分辨率可達0.062 5℃;工作電壓范圍為3~5.5 V,3.3 V時典型的功耗為79μW,在關斷模式下其典型工作電流值僅為3μA。
1 ADT75的引腳及結構原理
??? ADT75的引腳排列如圖1所示,引腳說明如表1所列。
??? ADT75采用8引腳的MOSP和SOIC封裝,其內部結構如圖2所示。
??? ADT75的工作過程為:片上的溫度傳感器采集溫度后,產生一個與絕對溫度成比例的精確電壓,并與內部參考電壓進行比較;然后輸入到精確的數字式調節器中,轉換為有效精度為12位的數據。將該數據與限定值比較,如果測量值超限,則OS/ALERT引腳輸出超限信息。
??? 在正常模式下,溫度轉換需要60 ms,然后模擬轉換電路自動關閉,40 ms后模擬電路上電,開始下一個溫度值的轉換。所以一次溫度轉換周期為100 ms。
2 ADT75的寄存器結構
??? ADT75包含6個寄存器:1個地址指針寄存器,4個數據寄存器和1個單步模式寄存器。數據寄存器中,配置寄存器是唯一的8位寄存器,其他3個都是16位;溫度值寄存器是唯一的只讀寄存器,其他3個都是可讀寫的。單步模式寄存器也是可讀寫的。上電后,地址指針寄存器的初始值為0x00,指針指向溫度值寄存器。ADT75的寄存器描述如表2所列。
??? (1)地址指針寄存器
??? 該8位只讀寄存器存放指向某個數據寄存器的地址,可以選擇單步模式。P0位和P1位選擇要讀/寫數據的數據寄存器,向P0、P1和P2位中寫入0x04來選擇單步模式。地址指針寄存器的其余位都為0。寄存器的地址選擇如表3所列。
?
??? (2)溫度值寄存器
??? 該16位只讀寄存器存儲由芯片內部溫度傳感器測得的溫度值。溫度以二進制補碼形式存儲,最高位為符號位。讀該寄存器時,先讀高8位,后讀低8位。
??? (3)配置寄存器
??? 該8位可讀寫寄存器為ADT75提供了多種配置模式:關斷、過溫中斷、單步、SMBus報警使能、OS/ALERT引腳極性和過溫錯誤隊列。
??? (4)THYST定值寄存器
??? 該16位可讀寫寄存器為2個中斷模式存放溫度滯后限定值。這個限定值以二進制補碼形式存儲,最高位是溫度值符號位。讀該寄存器時,先讀高8位,后讀低8位。限定值THYST的默認值為+75℃。
??? (5)TOS定值寄存器
??? 該16位可讀寫寄存器為2個中斷模式存放過溫限定值。這個溫度限定值以二進制補碼形式存儲,最高位是溫度值符號位。讀該寄存器時,先讀高8位,后讀低8位。限定值TOS的默認值為+80℃。
3 ADT75的應用實例
3.1 硬件設計
??? 在外界溫度場作用下,光纖延遲線系統中光纖長度、橫截面結構、光纖纖芯和包層的折射率分布特性會發生變化,因此在光纖中傳播的光載波信號的相位和模式雙折射特性就會隨溫度的改變而變化,從而影響最終解調出的微波信號的延時。為減小溫度變化對微波信號延時的影響,需要設計一個溫度控制系統,用來控制系統的溫度。
??? 硬件設計電路主要包括2部分:數字信號處理器TMS320F2812和數字溫度傳感器ADT75。
??? 采用TI公司推出的TMS320F2812作為核心控制芯片。其外部晶振頻率為30 MHz,通過片內的PLL進行倍頻,最高主頻可達150 MHz;運行速度快,可以對采集的溫度信號進行實時處理。
??? TMS320F2812沒有設計I2C總線,但是有56個GPIO口,所以采用GPIO口模擬I2C總線時序來控制ADT75。這種硬件電路結構簡單,功耗較低,實用性強。ADT75與TMS320F2812的接口電路如圖3所示。
??? TMS320F2812的GPIOB0引腳用作I2C總線的時鐘信號線,GPIOB1引腳用作I2C總線的串行數據線。供電電壓為5 V,10 kΩ電阻為開漏極的上拉電阻,0.1μF電容起去耦作用。本設計僅實時采集光纖延遲線系統的溫度,不需要過溫報警,所以OS/ALERT引腳保留。ADT75的地址為7位,高4位為1001,低3位由地址引腳A0~A2決定。由于只有一片ADT75,故可將其3個地址引腳全部接地,則芯片地址可確定為1001000。溫控系統根據測得的溫度在TMS320F2812內部進行PID運算,然后通過外部的溫度控制裝置對光纖延遲線內部溫度進行調節,使其穩定在某個設定的范圍內。
3.2 軟件設計
??? 利用死循環等待函數while(1)中的ReadDevice()函數從ADT75中讀取溫度值。每隔250 ms讀取一次溫度值,從而實現對系統溫度的實時監控。
??? ReadDevice()函數包括以下函數:Start(),Stop(),SendAddress(),ReadAck(),ReceiveData(),Mack(),MNack()。讀取溫度的流程如圖4所示,讀取溫度的時序如圖5所示。
??? (1)啟動數據傳輸
??? 在頭文件中對TMS320F2812的GPIOB口進行配置。定義GPIOB0為SCL,輸出;GPIOB1為SDA,輸出。Start()函數模擬I2C總線的起始條件:
???
??? 至此,完成了I2C總線的啟動。
(2)傳送ADT75地址
??? 在讀取溫度值之前必須向從器件發送地址。ADT75的7位地址為0x48。由于是讀數據(讀/寫位為1),所以傳送的8位地址命令為0x91。在傳送數據時,當SCL為0時,才允許SDA上的數據變化;為1時,SDA上的數據保持不變。8位地址傳送結束后,主機釋放SDA(令SDA=1),等待從機的應答信號。
??? (3)檢測ADT75的應答位
??? I2C總線傳輸完8位數據后由從機給主機一個低電平的應答信號,表示從機正常工作并可以接收下一個字節的數據。檢測ADT75的應答位時,應注意把GPIOB1口設置為輸入。
??? EALLOW:
??? GpioMuxRegs.GPBDIR.bit.GPIOB1=0;
??? EDIS;
??? 如果SDA=0,則TMSS20F2812開始從ADT75中讀取數據的高字節;SDA=1,表示ADT75忙或者損壞,結束數據讀取。
??? (4)讀取數據
??? 當檢測到ADT75的應答信號為0時,開始讀取溫度值。I2C總線的數據傳輸是以字節為單位的,首先讀取溫度值的高字節(溫度值的整數部分,最高位為符號位),讀取的數據存放在retc中。每接收1位數據,retc左移1位。若SDA=1,retc加1;SDA=0,retc不變。
???
??? 高8位數據傳輸完后,TMS320F2812傳給ADT75一個低電平的應答信號,由Mack()函數完成。此時,需要將GPIOB1端口的數據傳輸方向改為輸出:
??? EALLOW:
??? GpioMuxRegs.GPBDIR.bit.GPIOB1=1;
??? EDIS:
??? 然后開始接收溫度值的低字節(溫度值的小數部分),讀取成功后由TMS320F2812發送一個非應答位,表示本次溫度值的讀取結束,進入停止狀態。
??? (5)結束數據傳輸
??? 結束數據傳輸由Stop()函數完成,結束條件如下:
???
??? Delay(50);
??? 至此,讀取一個溫度值的全過程結束。在程序調試過程中發現,當設置斷點單步運行時,無法檢測到ADT75發出的低電平應答信號,應答信號始終為1;若不設斷點連續執行時,則可以檢測到低電平應答信號。這點是ADT75和其他I2C總線器件(如E2PROM芯片AT24C256)的不同之處,在調試程序的過程中要注意該細節。
??? ADT75的溫度轉換周期為100 ms。在本設計中,每隔大約250 ms讀取一次溫度值,可以實現監測光纖延遲線系統溫度的變化。
結 語
??? 在光纖延遲線系統的硬件設計中,ADT75完全能夠滿足實時溫度采集的要求,而且測溫準確,靈敏度高。由于使用了I2C總線接口,所以溫度檢測電路結構簡單,占用空間小,串行接口占用TMS320F2812的資源少,可靠性高,功耗低,不易受環境干擾。實驗證明,設計和運行都達到了令人滿意的效果。
評論