基于AVR單片機的溫度測量系統
1 引言
本文引用地址:http://www.j9360.com/article/90874.htm傳統溫度測量系統中,一般選用模擬式溫度傳感器。常用的模擬式溫度傳感器,其中一個共同特點是輸出為模擬量,因此在測量電路中必須經過A/D轉換才能成為計算機所能處理的數字量。數字式溫度傳感器將非電模擬量轉換到數字信號這一處理過程的多個環節集成在單芯片上,實現了在測量點將溫度值數字化,有效解決了傳統溫度傳感器外圍電路復雜,抗干擾能力差的弊病,降低了對系統的要求。
該系統以Atmel公司的ATmega8L單片機為控制中心,溫度測量使用DS18B20單總線數字溫度傳感器,采用1602字符型液晶顯示器作為溫度值的顯示輸出。編程使用CodeVision AVR C Compiler編譯器,該編譯軟件自帶了使用器件庫函數文件,省去了編寫器件驅動程序的步驟,為程序的編寫帶來了極大的方便。
2硬件設計
圖1給出系統電路圖。ATmega8L單片機的PB0口線連接DS18B20;PD口連接1602 LCD。DS18B20采用源端連接方式,LCD采用4位總線模式。其中,液晶顯示模塊的連接方式取決于編程軟件Code Vision AVR C Compiler的code wizard avr自動程序生成器的設置。采用這種方法,可直接調用庫函數實現對液晶顯示器的操作。
2.1 ATmega 8L單片機
Atmel公司的EEPROM電可擦除技術、閃速存儲器技術是最引人矚目的高質量和高可靠性生產技術。在CMOS器件生產領域,Atmel的設計水平、生產工藝及封裝技術一直處于世界領先地位。這些技術使單片機也具有優秀的品質,在結構、性能等方面具有明顯優勢。
ATmega8L單片機的特點是:8 KB的系統內可編程Flash,512字節EEPROM,1 KB SRAM,32個通用I/O口線,32個通用工作寄存器,3個具有比較模式的靈活的定時器/計數器,片內/外中斷,可編程串行USART,面向字節的兩線串行接口,10位6路A/D轉換器,具有片內振蕩器的可編程看門狗定時器,一個SPI串行端口,以及5種可以通過軟件進行選擇的省電模式。
2.2 DS18B20數字溫度傳感器
1-Wire是Dallas公司的一項專有技術,與目前多數標準串行數據通信方式,如SPI/I2C/MICROWIRE不同,它采用單根信號線,既傳輸時鐘,又傳輸數據,而且數據傳輸是雙向的,因此具有節省I/O口線資源、結構簡單、成本低廉、便于總線擴展和維護等諸多優點。
DS18B20的測量溫度范圍是-55~+125℃。該溫度傳感器的輸出溫度數據可與攝氏度校準,使用查找表或轉換規則就可計算溫度值。在溫度寄存器中溫度數據存儲格式為一個16位符號擴展的兩個單元,溫度寄存器格式如圖2所示。符號位S表示溫度的正負。S=0時為正;S=1時為負。當DS18B20的配置為12位分辨率時(測量精度是0.062 5℃),溫度寄存器的所有位數據都是有效的;當DS181320的配置為11位分辨率時(測量精度是0.125℃),bit0未定義;當DS181320的配置為10位分辨率時(測量精度是0.25℃),bit0和bit1未定義的;當DS181320的配置為9位分辨率時(測量精度是..5℃),bit0~bit2未定義。

2.3 1602液晶顯示器
1602液晶顯示器采用金鵬電子有限公司生產的OCM2×16A。字符點陣系列模塊是一類專門用于顯示字母、數字、符號等的點陣型液晶顯示模塊,分4位和8位數據傳輸方式,提供5×7點陣+光標的顯示模式,設置有顯示數據緩沖區DDRAM、字符發生器CGROM和字符發生器CGRAM。可以使用CGRAM來存儲自定義的最多8個5×8點陣的圖形字符的字模數據,并提供設置、清顯示、光標回原點、顯示開/關、光標開/關、顯示字符閃爍、光標移位、顯示移位等豐富的指令。此外,還提供了內部上電自動復位電路。當外加電源電壓超過+4.5 V時,可自動對模塊初始化操作,將模塊設置為默認的顯示工作狀態。
3軟件設計
3.1 Code Vision AVR C Compiler
Code Vision AVR是C交叉編譯器,具有為Atmel公司的AVR系列單片機所設計的集成開發環境和程序自動生成器。編譯后的coff目標文件可以用于C源代碼級調試,也可以使用AVR Studio調試器進行調試。
除了標準的C庫函數,Code Vision AVR C Compiler還具有其他器件的庫函數,如字母數字液晶顯示模塊、飛利浦I2C總線、NS公司的LM75溫度傳感器、飛利浦的PCF8563和PCF8583、Dallas公司的DS1302和DS1307實時時鐘器件、以及DS1820/DS1822溫度傳感器等。CodeVision AVR還包含了code wizard avr程序自動生成器,使用時只要添加相關器件的頭文件就可以在短短幾分鐘內生成初始化程序,并可以根據需要調用頭文件中包含的功能函數,以實現對外圍設備的操作。
3.2程序設計
圖3所示給出程序流程。編寫程序時,先要聲明哪些口線與外圍器件通訊,例如DS18B20單線總線與單片機PB0口線的連接聲明如下:
然后,把功能函數的頭文件包含到程序中才能調用頭文件中的功能函數,頭文件存放于"..INC"目錄下。該溫度測量系統用到的功能函數在"ds18b20.h"、"1WIRE.h"、"LCD.h"這3個頭文件中。
在調用功能函數對DS18B20進行操作時,由于每片DS18B20都有唯一的代碼(64位產品序列號),在多點溫度測控系統中,代碼是識別和操作DS18B20的基礎,無論讀取還是選擇對某一個傳感器進行操作,主機必須發送64位代碼。如果只有1個DS18B20,就不需要ROM碼,指針addr要設為NULL(0)。如果有多個器件,首先要讀ROM碼對每一個器件進行識別,然后才能在調用時對需要的器件通過ROM碼進行地址匹配。程序先對I/O口初始化操作,然后利用頭文件ds18b20.h中的函數floatds18b20_temperature(unsigned char*addr)讀取溫度值。由函數定義可知,該函數的返回值是浮點型數據,提取各個位的值時需要進行整除和取余操作。由于浮點型數據無法進行整除和取余操作,需要先轉化為長整型數據。浮點型數據轉化為長整型數據時,小數點后的值會丟失,為了保持小數點后的數值不會因為轉化為長整型后丟失,同時對浮點型數據乘以1 000,這樣就可以分離出百位、十位、個位、十分位、百分位、千分位的值。將分離出來的各個位的值分別轉化成LCD的字符碼,即可顯示將LCD的字符碼傳送到LCD,并顯示出來。
4實驗結果
為了檢測測量系統的準確性,進行了溫度測量實驗。由于鉑電阻溫度傳感器的精度高,穩定性好,應用溫度范圍廣,因此,作為一種常用的溫度檢測器,不僅廣泛用于工業測溫,而且被制成各種標準溫度計。這里,采用PT1000作為標準溫度計。將DS18B20和PT1000捆綁在一起放入高低溫箱中進行測試,通過改變高低溫箱的溫度,待箱中溫度穩定后,記錄在液晶顯示器上顯示溫度值;同時用高精度萬用表測PT1000鉑電阻的具體阻值,然后根據PT1000的分度表算出溫度值,將兩者數值對比即可算出系統的誤差。表1給出測試結果。可見,DS18B20與PT1000鉑電阻所測的溫度吻合得很好。這說明該溫度測量系統的測量準確可靠。
5結語
該溫度測量系統硬件設計簡單,充分利用編譯器CodeVisionAVR C Compiler的庫函數,省去編寫驅動程序的麻煩,大大縮短了開發周期,并且具有抗干擾能力強,擴展方便,廉價和適用的特點,可以擴展進行多點測量,而且同樣只占用一個I/O口,在溫度測量系統中具有廣泛的應用價值。
評論