張 釗,孟紫騰,劉華宇,雷 遠
(北華航天工業(yè)學院,河北 廊坊 065000)
近年來,隨著電子技術的發(fā)展,科研人員對各種物理環(huán)境下數據采集的準確性和穩(wěn)定性都有了進一步要求,尤其是模擬信號的采集更是科研人員研究的重點,溫度信號就是一種常見的模擬信號。傳統(tǒng)的溫度計存在一定的缺陷,不能滿足電子實驗的要求。隨著單片機的發(fā)展,各種基于單片機的溫度采集系統(tǒng)逐漸代替了傳統(tǒng)溫度計。AD590溫度傳感器作為一種應用較為廣泛的電子溫度傳感器,其性能穩(wěn)定、精度較高、抗干擾能力強。除此之外,筆者采用了目前應用較為廣泛的STM32單片機,該單片機功能較為強大,外設資源豐富,且集成了較多的功能,可以滿足本實驗的設計要求。
溫度測量系統(tǒng)主要由主控電路、溫度采集電路、信號放大電路、溫度顯示電路組成。主控電路由STM32F103ZET6最小系統(tǒng)電路組成,是系統(tǒng)的核心部分。溫度傳感器AD590負責采集溫度信號,并將溫度信號轉換成電壓信號輸出,但是直接輸出的電壓信號含有較多的噪聲,需要經過OP467運算放大器濾波處理,以去除噪聲。處理過的電壓信號通過STM32單片機自帶的A/D轉換器轉換成溫度數據[1],最后顯示在LCD顯示屏上。系統(tǒng)的整體結構如圖1所示。
圖1 整體結構框架
STM32F103ZET6是一款基于CORTEX-M3內核的高性能、低成本的芯片。STM32單片機硬件資源極為豐富,擁有兩個串口、多個IO口用以擴展。同時,開發(fā)板自帶了許多例程可供參考,極大地方便了設計者的使用。本設計不需要使用整個開發(fā)板,只需要STM32的一個最小系統(tǒng)板。
STM32F103ZET6擁有的資源包括64KBSRAM、512KBFLASH,能夠充分滿足本設計的需要;還擁有8個定時器、1個USB、3個12位ADC以及112個通用IO口。STM32F103ZET6外設資源非常豐富,尤其是其自帶的12位ADC采樣[2],其采樣速度可達1μs,這是本設計選擇該單片機作為核心控制器的原因之一。
本設計所選用的溫度傳感器是美國亞德諾公司生產的AD590。相比一般溫度傳感器,AD590是一種輸出電流型溫度傳感器[3],其輸出電流與絕對溫度成比例,且輸出穩(wěn)定。其具體參數如表1所示。
AD590具有較好的耐壓性,其最大正向電壓可達44 V,因此電源異常或者引腳接錯時,器件不會損壞。
表1 AD590性能參數
AD590是一種已經芯片化的溫度傳感器,其工作原理是將溫度轉換為電流輸出,輸出電流以絕對溫度零度為基準,溫度升高1 ℃,其輸出電流就會升高1 μA。因此當溫度為常溫25 ℃時,其輸出電流為Iout=(273+25)=298 μA。
溫度采集電路如圖2所示。
圖2 溫度采集電路
在上述電路中,溫度傳感器的輸出電流I=(273+T)μA(T為此時環(huán)境溫度),因此電壓V=(273+T)μA×10K=(2.73+T/100)。在這里,電流I轉換成電壓待測量。為了測量電壓但又不讓輸出電流I分流,需要接入一個電壓跟隨器以保證待測量電持不變,即V2等于V。
上述電路中還有一個穩(wěn)壓二極管,可以有效濾除電源所帶的雜波,使輸出更加準確。
由一般的運算放大器運算公式得輸出Vo=(V2-V1)×(100K/10K)=T/10。即如果溫度傳感器測得的溫度是27 ℃,此時的輸出電壓就是2.7 V,接著將輸出電壓接單片機的ADC,經過單片機數據處理后輸出的值就和此時的攝氏溫度呈線性關系。
以上電壓跟隨器和差動放大器可以使用一個OP467搭建出來。OP467是一種四通道高速運算放大器,具有失調電壓低,單位增益穩(wěn)定且工作功耗較低的優(yōu)點,其寬帶寬為28 MHz,電源工作電壓為±5 V至±15 V,滿足本設計的需要。
如圖3(a)所示,測得OP467輸出端的電壓是2.986 V,溫度傳感器測得的溫度就是29.86 ℃。在TFTLCD顯示屏上,此時的溫度為29.79 ℃,在誤差允許范圍內。如圖3(b),當用手捏住溫度傳感器時,溫度升高,此時的溫度顯示是30.57 ℃。
溫度顯示電路采用TFTLCD顯示模塊,TFTLCD模塊采用16位的并行方式與外部連接。TFTLCD顯示屏具有320×240的分辨率,可以顯示彩色圖片。該顯示屏支持8080并行接口模式,分別如下。
CS:TFTLCD片選引腳,連PG12;WR:向TFTLCD寫入數據,連PD5;RD:從TFTLCD讀取數據,連PD4;RES:對TFTLCD進行復位操作,連PG0;D0-D15:是16位雙向數據線;DC:讀寫/命令數據標志(0代表命令,1代表數據)。
8080并口模式的具體讀寫過程:首先判斷要寫入或讀取的數據的類型,從而設置DC的高低,高為數據模式,低為命令模式;其次,拉低CS信號,設置SSD1306,然后根據實現設置的DC命令最終確定是“讀”還是“寫”。最后,在RD的上升沿,將數據存入到D0-D7數據鎖存器中;在WD的上升沿,將數據寫到SSD1306中。
圖3 溫度測量顯示
TFTLCD顯示模塊在8080模式下進行讀寫操作時,有時候需要加一個“讀”命令。因為在讀取真正的數據之前,往往需要將所讀到的第一個數據舍去不要,從第二個開始才是真正的數據,這樣才能使得頻率相匹配。
單片機程序首先需要進行GPIO口初始化配置,將PA1配置為ADC的第0個采樣通道,PG12,PD5,PD4和PG0為TFTLCD顯示屏配置,控制信號輸出。
在本設計中,軟件設計最主要的部分是ADC采集程序的編寫。首先選定ADC通道,STM32F103ZET6型號的單片機共有3個ADC通道(ADC123),筆者選擇了ADC1通道;其次,復位ADC1通道,接下來就是對ADC1通道的配置,分別選擇ADC1工作在獨立模式、選擇單通道單次轉換模式、選擇ADC數據右對齊、選擇規(guī)則轉換的ADC通道數目;這些基礎配置設置完畢后,還需要一個轉換函數ADC_RegularChannelConfig(ADC1, ch, 1, ADC_SampleTime_239Cycles5 ),即可完成對端口電壓的采集。最后對ADC1使能。
此外,為了保證采集的精度,筆者還編寫了一個函數 Get_Adc_Average(u8 ch,u8 times),可進行times次轉換,取平均值,以提高采集的精度。
本文的溫度傳感器為AD590,該溫度傳感器在測量溫度時可以將電流信號轉換成電壓信號,進而轉換成溫度值;同時以STM32F103ZET6為主控制芯片,STM32單片機自帶的A/D轉換器可以采集溫度信息經芯片處理輸出在LCD顯示屏上。該系統(tǒng)精度高、輸出穩(wěn)定,可以滿足日常工程實踐的需要。