基于AVR單片機(jī)的溫度測量系統(tǒng)
1 引言
本文引用地址:http://2s4d.com/article/90874.htm傳統(tǒng)溫度測量系統(tǒng)中,一般選用模擬式溫度傳感器。常用的模擬式溫度傳感器,其中一個(gè)共同特點(diǎn)是輸出為模擬量,因此在測量電路中必須經(jīng)過A/D轉(zhuǎn)換才能成為計(jì)算機(jī)所能處理的數(shù)字量。數(shù)字式溫度傳感器將非電模擬量轉(zhuǎn)換到數(shù)字信號這一處理過程的多個(gè)環(huán)節(jié)集成在單芯片上,實(shí)現(xiàn)了在測量點(diǎn)將溫度值數(shù)字化,有效解決了傳統(tǒng)溫度傳感器外圍電路復(fù)雜,抗干擾能力差的弊病,降低了對系統(tǒng)的要求。
該系統(tǒng)以Atmel公司的ATmega8L單片機(jī)為控制中心,溫度測量使用DS18B20單總線數(shù)字溫度傳感器,采用1602字符型液晶顯示器作為溫度值的顯示輸出。編程使用CodeVision AVR C Compiler編譯器,該編譯軟件自帶了使用器件庫函數(shù)文件,省去了編寫器件驅(qū)動(dòng)程序的步驟,為程序的編寫帶來了極大的方便。
2硬件設(shè)計(jì)
圖1給出系統(tǒng)電路圖。ATmega8L單片機(jī)的PB0口線連接DS18B20;PD口連接1602 LCD。DS18B20采用源端連接方式,LCD采用4位總線模式。其中,液晶顯示模塊的連接方式取決于編程軟件Code Vision AVR C Compiler的code wizard avr自動(dòng)程序生成器的設(shè)置。采用這種方法,可直接調(diào)用庫函數(shù)實(shí)現(xiàn)對液晶顯示器的操作。
2.1 ATmega 8L單片機(jī)
Atmel公司的EEPROM電可擦除技術(shù)、閃速存儲(chǔ)器技術(shù)是最引人矚目的高質(zhì)量和高可靠性生產(chǎn)技術(shù)。在CMOS器件生產(chǎn)領(lǐng)域,Atmel的設(shè)計(jì)水平、生產(chǎn)工藝及封裝技術(shù)一直處于世界領(lǐng)先地位。這些技術(shù)使單片機(jī)也具有優(yōu)秀的品質(zhì),在結(jié)構(gòu)、性能等方面具有明顯優(yōu)勢。
ATmega8L單片機(jī)的特點(diǎn)是:8 KB的系統(tǒng)內(nèi)可編程Flash,512字節(jié)EEPROM,1 KB SRAM,32個(gè)通用I/O口線,32個(gè)通用工作寄存器,3個(gè)具有比較模式的靈活的定時(shí)器/計(jì)數(shù)器,片內(nèi)/外中斷,可編程串行USART,面向字節(jié)的兩線串行接口,10位6路A/D轉(zhuǎn)換器,具有片內(nèi)振蕩器的可編程看門狗定時(shí)器,一個(gè)SPI串行端口,以及5種可以通過軟件進(jìn)行選擇的省電模式。
2.2 DS18B20數(shù)字溫度傳感器
1-Wire是Dallas公司的一項(xiàng)專有技術(shù),與目前多數(shù)標(biāo)準(zhǔn)串行數(shù)據(jù)通信方式,如SPI/I2C/MICROWIRE不同,它采用單根信號線,既傳輸時(shí)鐘,又傳輸數(shù)據(jù),而且數(shù)據(jù)傳輸是雙向的,因此具有節(jié)省I/O口線資源、結(jié)構(gòu)簡單、成本低廉、便于總線擴(kuò)展和維護(hù)等諸多優(yōu)點(diǎn)。
DS18B20的測量溫度范圍是-55~+125℃。該溫度傳感器的輸出溫度數(shù)據(jù)可與攝氏度校準(zhǔn),使用查找表或轉(zhuǎn)換規(guī)則就可計(jì)算溫度值。在溫度寄存器中溫度數(shù)據(jù)存儲(chǔ)格式為一個(gè)16位符號擴(kuò)展的兩個(gè)單元,溫度寄存器格式如圖2所示。符號位S表示溫度的正負(fù)。S=0時(shí)為正;S=1時(shí)為負(fù)。當(dāng)DS18B20的配置為12位分辨率時(shí)(測量精度是0.062 5℃),溫度寄存器的所有位數(shù)據(jù)都是有效的;當(dāng)DS181320的配置為11位分辨率時(shí)(測量精度是0.125℃),bit0未定義;當(dāng)DS181320的配置為10位分辨率時(shí)(測量精度是0.25℃),bit0和bit1未定義的;當(dāng)DS181320的配置為9位分辨率時(shí)(測量精度是..5℃),bit0~bit2未定義。
2.3 1602液晶顯示器
1602液晶顯示器采用金鵬電子有限公司生產(chǎn)的OCM2×16A。字符點(diǎn)陣系列模塊是一類專門用于顯示字母、數(shù)字、符號等的點(diǎn)陣型液晶顯示模塊,分4位和8位數(shù)據(jù)傳輸方式,提供5×7點(diǎn)陣+光標(biāo)的顯示模式,設(shè)置有顯示數(shù)據(jù)緩沖區(qū)DDRAM、字符發(fā)生器CGROM和字符發(fā)生器CGRAM??梢允褂肅GRAM來存儲(chǔ)自定義的最多8個(gè)5×8點(diǎn)陣的圖形字符的字模數(shù)據(jù),并提供設(shè)置、清顯示、光標(biāo)回原點(diǎn)、顯示開/關(guān)、光標(biāo)開/關(guān)、顯示字符閃爍、光標(biāo)移位、顯示移位等豐富的指令。此外,還提供了內(nèi)部上電自動(dòng)復(fù)位電路。當(dāng)外加電源電壓超過+4.5 V時(shí),可自動(dòng)對模塊初始化操作,將模塊設(shè)置為默認(rèn)的顯示工作狀態(tài)。
3軟件設(shè)計(jì)
3.1 Code Vision AVR C Compiler
Code Vision AVR是C交叉編譯器,具有為Atmel公司的AVR系列單片機(jī)所設(shè)計(jì)的集成開發(fā)環(huán)境和程序自動(dòng)生成器。編譯后的coff目標(biāo)文件可以用于C源代碼級調(diào)試,也可以使用AVR Studio調(diào)試器進(jìn)行調(diào)試。
除了標(biāo)準(zhǔn)的C庫函數(shù),Code Vision AVR C Compiler還具有其他器件的庫函數(shù),如字母數(shù)字液晶顯示模塊、飛利浦I2C總線、NS公司的LM75溫度傳感器、飛利浦的PCF8563和PCF8583、Dallas公司的DS1302和DS1307實(shí)時(shí)時(shí)鐘器件、以及DS1820/DS1822溫度傳感器等。CodeVision AVR還包含了code wizard avr程序自動(dòng)生成器,使用時(shí)只要添加相關(guān)器件的頭文件就可以在短短幾分鐘內(nèi)生成初始化程序,并可以根據(jù)需要調(diào)用頭文件中包含的功能函數(shù),以實(shí)現(xiàn)對外圍設(shè)備的操作。
3.2程序設(shè)計(jì)
圖3所示給出程序流程。編寫程序時(shí),先要聲明哪些口線與外圍器件通訊,例如DS18B20單線總線與單片機(jī)PB0口線的連接聲明如下:
然后,把功能函數(shù)的頭文件包含到程序中才能調(diào)用頭文件中的功能函數(shù),頭文件存放于"..INC"目錄下。該溫度測量系統(tǒng)用到的功能函數(shù)在"ds18b20.h"、"1WIRE.h"、"LCD.h"這3個(gè)頭文件中。
在調(diào)用功能函數(shù)對DS18B20進(jìn)行操作時(shí),由于每片DS18B20都有唯一的代碼(64位產(chǎn)品序列號),在多點(diǎn)溫度測控系統(tǒng)中,代碼是識(shí)別和操作DS18B20的基礎(chǔ),無論讀取還是選擇對某一個(gè)傳感器進(jìn)行操作,主機(jī)必須發(fā)送64位代碼。如果只有1個(gè)DS18B20,就不需要ROM碼,指針addr要設(shè)為NULL(0)。如果有多個(gè)器件,首先要讀ROM碼對每一個(gè)器件進(jìn)行識(shí)別,然后才能在調(diào)用時(shí)對需要的器件通過ROM碼進(jìn)行地址匹配。程序先對I/O口初始化操作,然后利用頭文件ds18b20.h中的函數(shù)floatds18b20_temperature(unsigned char*addr)讀取溫度值。由函數(shù)定義可知,該函數(shù)的返回值是浮點(diǎn)型數(shù)據(jù),提取各個(gè)位的值時(shí)需要進(jìn)行整除和取余操作。由于浮點(diǎn)型數(shù)據(jù)無法進(jìn)行整除和取余操作,需要先轉(zhuǎn)化為長整型數(shù)據(jù)。浮點(diǎn)型數(shù)據(jù)轉(zhuǎn)化為長整型數(shù)據(jù)時(shí),小數(shù)點(diǎn)后的值會(huì)丟失,為了保持小數(shù)點(diǎn)后的數(shù)值不會(huì)因?yàn)檗D(zhuǎn)化為長整型后丟失,同時(shí)對浮點(diǎn)型數(shù)據(jù)乘以1 000,這樣就可以分離出百位、十位、個(gè)位、十分位、百分位、千分位的值。將分離出來的各個(gè)位的值分別轉(zhuǎn)化成LCD的字符碼,即可顯示將LCD的字符碼傳送到LCD,并顯示出來。
4實(shí)驗(yàn)結(jié)果
為了檢測測量系統(tǒng)的準(zhǔn)確性,進(jìn)行了溫度測量實(shí)驗(yàn)。由于鉑電阻溫度傳感器的精度高,穩(wěn)定性好,應(yīng)用溫度范圍廣,因此,作為一種常用的溫度檢測器,不僅廣泛用于工業(yè)測溫,而且被制成各種標(biāo)準(zhǔn)溫度計(jì)。這里,采用PT1000作為標(biāo)準(zhǔn)溫度計(jì)。將DS18B20和PT1000捆綁在一起放入高低溫箱中進(jìn)行測試,通過改變高低溫箱的溫度,待箱中溫度穩(wěn)定后,記錄在液晶顯示器上顯示溫度值;同時(shí)用高精度萬用表測PT1000鉑電阻的具體阻值,然后根據(jù)PT1000的分度表算出溫度值,將兩者數(shù)值對比即可算出系統(tǒng)的誤差。表1給出測試結(jié)果??梢?,DS18B20與PT1000鉑電阻所測的溫度吻合得很好。這說明該溫度測量系統(tǒng)的測量準(zhǔn)確可靠。
5結(jié)語
該溫度測量系統(tǒng)硬件設(shè)計(jì)簡單,充分利用編譯器CodeVisionAVR C Compiler的庫函數(shù),省去編寫驅(qū)動(dòng)程序的麻煩,大大縮短了開發(fā)周期,并且具有抗干擾能力強(qiáng),擴(kuò)展方便,廉價(jià)和適用的特點(diǎn),可以擴(kuò)展進(jìn)行多點(diǎn)測量,而且同樣只占用一個(gè)I/O口,在溫度測量系統(tǒng)中具有廣泛的應(yīng)用價(jià)值。
評論