本文介紹基于FPGA控制的溫度檢測無線發射接收系統。本系統采甩EPlKl000C208-3作為控制核心,系統比較溫度是否超出人體最佳溫度范圍,如果過高則發出降溫信號,如果過低則發出升溫信號;得出需要加溫還是降溫的信號后通過無線將信號發射到接收電路,接收電路接收到編碼過的信號后對信號解碼,最終再得到加溫還是降溫信號,再將此信號加上驅動放大后則可以驅動步進電機等(本設計用發光二極管代替步進電機)。本設計應用了FPGA技術、溫度傳感技術、無線發射和接收技術,具有集成度高,測量數據精度高、性價比高等特點。具有較強的實用價值和廣闊的市場前景。 隨著社會節能環保意識的增強,人們越來越重視能源的利用效率。傳統的暖氣控制都是利用鍋爐燒出蒸汽或熱水,通過管道輸送到建筑物內的散熱器中,散出熱量,使室溫增高。但是這種設備控制中心和客戶端不在同一個地方,這樣就存在著一種控制中心不了解客戶的情況。存在著暖氣開得過大或者過小,從而導致客戶溫度過低或過高而浪費了能源! 以前大多溫度控制系統都是用單片機控制的,但是隨著FPGA的迅速發展,應用也越來越廣。本人將設計出一套由FPGA獨立控制的、智能化的遠程溫度控制系統。由一個放置于客戶端的溫度采集系統采集到客戶端溫度(可排除工程中熱損失),當大于或小于人體最佳溫度區時發出報警信號,由控制端去控制是應該加溫還是降溫,從而達到節能的作用。 1 數字溫度傳感技術 1.1 數字溫度傳感器原理 數字溫度傳感器LM75A是一個使用了內置帶隙溫度傳感器和∑-△模數轉換技術的溫度-數字轉換器。簡化框圖如圖1所示。 它也是一個溫度檢測器,可提供一個過熱檢測輸出。LM75A包含許多數據寄存器:配置寄存器(Conf),用來存儲器件的某些配置,如器件的工作模式、OS工作模式、OS極性和0S故障隊列等;溫度寄存器(Temp),用來存儲讀取的數字溫度,器件通過2線的串行I2C總線接口與控制器通信。 LM75A還包含一個開漏輸出(OS),當溫度超過編程限制的值時該輸出有效。LM75A有3個可選的邏輯地址管腳,使得同一總線上可同時連接8個器件而不發生地址沖突。 LM75A可配置成不同的工作條件。它可設置成在正常工作模式下周期性地對環境溫度進行監控或進入關斷模式來將器件功耗降至最低。OS輸出有2 種可選的工作模式:OS比較器模式和OS中斷模式。OS輸出可選擇高電平或低電平有效。故障隊列和設定點限制可編程,為了激活OS輸出,故障隊列定義了許多連續的故障。 溫度寄存器通常存放著一個11位的二進制數的補碼,用來實現0.125℃的精度。這個高精度在需要精確地測量溫度偏移或超出限制范圍的應用中非常有用。 正常工作模式下,當器件上電時,OS工作在比較器模式,溫度閾值為80℃,滯后75℃,這時,LM75A就可用作一個具有以上預定義溫度設定點的獨立的溫度控制器。 1.2 溫度傳感器控制原理 如果將溫度傳感器設定為正常工作模式,那么首先要向配置寄存器寫入控制字告訴器件的工作模式。寫配置寄存器時序如圖2所示。 寫配置寄存器首先要選擇器件的地址,即A0-A2設置與硬件地址A0-A2一樣。然后是寫入配置寄存器地址指針,配置寄存器指針為”0000-000l”。等待器件應答一個SCL周期,再寫入工作模式控制字。如果設置在正常工作模式下,OS設置為比較輸出,那么配置數據字應寫入”00000000”。 寫入配置寄存器控制字”00000000”后溫度傳感器工作在正常工作模式下,即每一段時間溫度傳感器將溫度轉換成數字信號存放在溫度寄存器里,所以只需要將溫度寄存器的數據讀出再加以計算即可以得到溫度數據。讀取溫度寄存器的時序如圖3所示。 讀取溫度寄存器時首先是選中器件,地址信號應該與硬件設置地址一致。第二段是選擇溫度寄存器,溫度寄存器指針地址P1-P0寫入”0-0”,表示下次操作的默認寄存器為器件的溫度寄存器。重新起始后再次選中器件并讀取溫度寄存器的十六位的溫度數據,并將十六位的數據的有效數據前十一位提取出,即可得到有效的溫度數據。將溫度數據與預設的溫度比較后得出升溫或降溫信號,連接到無線發射模塊的KEYl、KEY2上發射到接收端。接收端接收到信號后再經過放大后便可驅動步進電機等。 2 時序的實現方法 FPGA與其它邏輯語言的運行有很大區別,最大的區別就是FPGA是硬件語言,而不是類似于c語言的程序。VHDL下載后生成的是邏輯硬件電路,不是控制器控制執行的邏輯語句。VHDL語言每個進程之間是并行運行的,但是進程內部的語句卻又是順序執行的。而且每個信號的傳輸都是在所在進程結束的時候進行的。這點很重要,比如你對一個信號前后兩次賦值,哪怕你中間有很多運算最終的結果還是最后一次賦值的結果,前一次賦值將是無效的,且會在報告中彈出一個警告。每個process的運行是靠敏感信號觸發的,敏感信號放在process后面的括號中。所以對于VHDL語言來說循環語句不是很必要的,因為每次敏感信號變化該進程將從程序的第一句開始重新運行一次。意味著一個進程本來就是一個循環,只有變化的部分的信號才能得到改變。這一點與普通邏輯語言有很大的區別。 對于時序的實現有很多方法,可以用case語句實現,也可以用if語句實現。但是最有效和合乎邏輯的方法是用狀態機實現。以下是狀態機的模型。 狀態機邏輯清晰,在每個對應的狀態下將每個信號應該進行的操作放在對應的狀態機程序中,嚴格控制各個信號的時序要求則可精確地實現高速控制。而且比單片機具有更高的速度。 3 無線收發模塊 3.1 無線收發硬件原理 如圖4所示,無線發射模塊PT2262將來自10-13管腳的按鍵信號編碼后在17管腳上輸出。PT2262的17管腳的信號由同步碼、地址碼、數據碼組成。17管腳輸出信號經過R315A芯片AM調制后輸出到天線上。每組數碼連續發射四次,只有兩次得到的數碼一樣以后才把相應數據位輸出高電平。為了保護高頻設備,本設計采用間歇發射的方式,即每3s發射一下信號,然后停止1s。目的是為了保護高頻設備,避免其一直處于一種工作狀態而降低其壽命。 接收電路如圖5所示,接收端將天線接收到信號經過兩級三極管放大以后再經過一級同向放大,最后將放大信號經過比較以后,輸出到PT2272芯片的14管腳,如果沒有受到外部干擾,PT2272的14管腳的信號與PT2262的17管腳的信號是一致的。PT2272內部將接收到的信號解碼后得出數據碼,并在相對應的輸出管腳輸出高電平。如果輸出的信號有效,那么在2272的17管腳將輸出一個高電平有效的信號,表示輸出信號是有效的。 4.2 無線發射信號原理 發射數據分為三部分,第一部分是地址碼,第二部分是數據碼,最后一部分是同步碼。即在每一段數據后邊都有一個定位信息。每個AD碼為占32a。地址碼和數據碼都用寬度不同的脈沖來表示,兩個窄脈沖表示”O”;兩個寬脈沖表示”1”;一個窄脈沖和一個寬脈沖表示”F-”,也就是地址碼的”懸空”。 發射的數據是一個字碼由12位AD碼(地址碼加數據碼,比如8位地址碼加4位數據碼)組成。2262每次發射時至少發射4組字碼,2272只有在連續兩次檢測到相同的地址碼加數據碼才會把數據碼中的”1”驅動相應的數據輸出端為高電平和驅動VT端同步為高電平。 因為無線發射的特點,第一組字碼非常容易受零電平干擾,往往會產生誤碼,所以程序可以丟棄處理。接收端接收到升溫或者降溫信號后可以控制步進電機等驅動電路工作去控制暖氣系統升溫和降溫。 |