王春玲,王美紅,寧崇森,薛長忠
(泰山學院物理與電子工程學院,山東泰安 271021)
溫度是最常見的測量和控制對象.常規溫度測控系統一般采用熱電阻、熱電偶等傳感器元件,輸出信號是模擬信號,需要經過A/D轉換、放大等信號處理后,送入單片機、DSP等微控制器中進行相應數據處理,并通過軟件設計實現針對控制對象特征的控制算法,再經D/A轉換后輸出溫度控制驅動信號,實現溫度控制.這種溫度測控系統結構的缺陷,首先是硬件組成元件較多,成本較高;其次,信號在處理過程中抗干擾能力較差,容易失真,造成測控精度偏低;第三,針對不同控制對象,在元器件選用、算法設計上都需要單獨進行,設計通用性差,難以在線升級.在我們設計的小環境溫控系統中,我們采用并使用FPGA器件替代單片機進行控制,大大簡化了外圍電路的設計,同時保證了測量的準確性,便于功能擴展和升級.本文主要闡述FPGA+DS18B20的測溫控制設計實現方法.
小環境溫控系統面向便攜式設備需要進行設計,采用直流開關電源和熱電制冷器件實現恒溫控制,控制要求較復雜,對精度和速度要求較高,用戶要求功能可裁剪和升級.為此,我們利用FPGA器件集成度高、體系結構和邏輯單元豐富、靈活、系統功能和結構可重構等特點,選取了Altera公司高性價比的颶風系列FPGA器件Cyclone EP1C6,其工作電壓為3.3V,內核電壓1.5V,內嵌兩個鎖相環電路,工作頻率高達200MHz,以簡化設計,降低成本,并可實現軟件移植和設計升級.
由于空間狹小,溫度場均勻,選用一只DS18B20測溫即可[1].DS18B20是美國DALLAS公司生產的單線數字溫度傳感器,價格低廉,體積小.其與控制器之間通信只需一根數據線,測量溫度范圍為-55℃到125℃,精度為±0.5℃.與傳統溫度傳感器不同的是,它的溫度轉換精度9-12位可編程,直接將溫度轉換值以二進制碼的方式串行輸出;同時,芯片內部將模擬信號轉換為12位數字量的時間最大為750ms,對于一般溫控系統,完全可以滿足實時性需要.
相應的硬件電路方案如圖1所示,DS18B20的三個引腳中,引腳VDD通過濾波電容接3.3V TTL電平,對傳感器供電.引腳DQ是數據傳輸線,即一線總線,FPGA通過該引腳控制DS18B20采集溫度.通過一個4.7KΩ的上拉電阻,使得數據線在空閑狀態下能自動上拉為高電平.GND為公共地.

圖1 DS18B20與FPGA的連接電路圖
DS18B20作為單總線數字測溫器件,其硬件連接簡單,相對地控制過程比較復雜,時序要求非常嚴格.通過對DS18B20功能的分析可知,單片DS18B20的工作流程相對多片系統可以適當簡化,其工作流程如圖2所示.

圖2 單片DS18B20的工作控制流程示意圖
由圖2可見,DS18B20的工作流程具有顯著的順序控制和循環工作特點;一個完整的工作周期分為溫度檢測轉換和數據傳輸兩大階段;兩個階段均以初始化開始,并通過主(控)設備(此處是FPGA)向其(從設備)發送ROM命令和功能命令,實現其工作循環.
ROM命令和功能命令均為字節型命令.在只有一片DS18B20的情況下,ROM命令只有一個,即跳過ROM命令(SKIP ROM,代碼是CCH),其功能是使主設備判斷該芯片存在并可以工作.功能命令包括溫度轉換指令(CONVERT CMD,代碼是44H)和讀暫存器指令(READ RESULT,代碼是4EH),分別用于啟動溫度轉換和讀取DS18B20暫存的溫度數據.
由于DS18B20的單線通信特征,所有操作必須分時完成,時隙(Time slot,即完成一位傳輸所用的時間)是其操作時序的重要特征和基本時間單位.主要操作時隙包括初始化、應答、主機寫0、主機寫1、主機讀0、主機讀1等.除應答時隙外,所有時隙都由主設備發出同步信號,并且發送所有的命令和數據都是字節的低位在前(這一點與多數串行通信一般字節高位在前的格式是不同的).兩個時隙之間最小的時間間隔是1μs.

圖3 為DS18B20的讀寫時隙
對DS18B20進行讀操作時,FPGA先將數據線從高電平拉至低電平,進入讀時間隙.FPGA保持低電平1μs以上,然后釋放總線.在讀時隙的下降沿后15μs之內,DS18B20會將數據送到總線上.FPGA必須在這15μs之內完成讀數.在讀取數據結束時,I/O引腳應拉回到高電平.對于主設備master而言,無論讀入數據是1還是0,其本身的操作及時序相同.
對DS18B20進行寫操作時,FPGA先將數據線從高電平拉至低電平,進入寫時間隙.15μs之內,FPGA應將數據送到總線上,DS18B20在15~60μs內對總線采樣.低電平則寫入0,高電平則寫入1,連續寫入數據位的間隙應大于1μs.
輸入時鐘頻率取1MHz,即周期為1μs時,1個時隙至少需要60μs,且兩個時隙間最小間隔1μs.故可以設定基本時隙時間為70μs,具體如圖3所示.
DS18B20的工作周期和操作時隙具有顯著的順序控制特征,適于用有限狀態機(FSM)實現[2].實現DS18B20測溫控制的有限狀態機DS18B20_CTRL的狀態轉換圖如圖4所示.

圖4 DS18B20_CTRL的狀態圖
3.2.1 DS18B20測溫控制狀態機DS18B20_CTRL的程序設計
DS18B20_CTRL狀態圖中,定義了11個狀態,如表1所示.

表1 DS18B20_CTRL狀態定義
我們用硬件描述語言VHDL編寫該狀態機程序.編譯后的原理圖元件符號如圖5所示.其中clk1μs和rst端口分別是1MHz時鐘信號和系統復位輸入端;dq是與DS18B20單總線的連接線,定義為雙向(INPUT)端口[3];temp_h和temp_l兩個8位寄存器分別用于存儲接收到的溫度數據高低字節.

圖5 DS18B20_CTRL的元件圖
DS18B20_CTRL狀態機的設計關鍵有兩點:初始化狀態和三個8位字節型命令的執行狀態的設計.
初始化狀態根據其時序要求,利用一個計數器cnt控制其進程.在490μs復位脈沖后釋放總線(輸出高阻),然后占用190μs以確定DS18B20器件是否存在,并根據DS18B20器件存在與否決定返回初始化還是進入后續狀態.核心程序段如下:

三個8位命令即CMD_CC、CMD_44和CMD_BE的執行共同點在于均為8位寫入,所以在進入其中某一狀態后均需要轉入字節寫狀態.并且由于寫1和寫0的區別,需對將要寫入數據位的數據進行判斷,以確定進入WRITE_LOW還是WRITE_HIGH狀態.其次,需要設置一個寫字節位數計數器WRITE_BYTE_CNT來控制字節寫狀態的結束.并且考慮到在圖2所示的一個完整的工作周期中共需要順序執行四次8位命令,所以設置了字節寫標志WRITE_BYTE_FLAG用來控制三個8位命令的狀態轉換次序.具體程序段如下:


3.2.2 DS18B20測溫控制狀態機的仿真結果分析
選用ALTERA公司EP1C6Q240C8芯片,在QuartusII平臺上編譯仿真DS18B20_CTRL的結果如圖6所示.

圖6 DS18B20_CTRL程序仿真結果
圖6中給出了系統復位后DS18B20一個基本完整的工作周期.第一個初始化狀態(state.reset=0)后,字節寫標志WRITE_BYTE_FLAG依次從0、1、2加到3,完成四次8位命令的寫入,依次是CMD_CC→CMD_44→CMD_CC→CMD_BE,完成溫度采集與轉換;然后,即可讀入測得溫度數據,經過12個位讀狀態(GET_TMP_CNT從1遞增至12),將12位溫度數據格式轉換后存入兩個字節型寄存器temp_l和temp_h.注意圖中4個8位命令字均為從低位到高位的格式寫入,作為總線輸出寄存器的dq_result以粗實線表示高阻態.
本文在對單總線數字溫度傳感器DS18B20進行時序分析的基礎上,完成了利用FPGA控制DS18B20實現溫度數據采集的軟硬件設計,重點剖析了采用有限狀態機方法進行程序設計的關鍵點,仿真結果驗證了設計的可行性.考慮到本設計采用的狀態個數達11個,可以進一步采用層次狀態機的方法對其加以改進.
[1]袁偉亭,周潤景.FPGA與DS18B20組成的測溫系統的設計[J].內蒙古大學學報(自然科學版),2006,37(7):459-463.
[2]王曉磊,李宏生.基于有限狀態機的數字溫度傳感器控制系統設計[J].艦船電子工程,2010,30(12):182-185.
[3]穆振海.基于FPGA的智能溫度采集控制器[J].微計算機信息(嵌入式與 SOC),2008,7(20):225-243.