桂林市房產(chǎn)檔案館 歐肇成
基于PIC單片機(jī)的檔案保存?zhèn)}儲(chǔ)運(yùn)輸領(lǐng)域的溫度記錄儀設(shè)計(jì)
桂林市房產(chǎn)檔案館 歐肇成
隨著大數(shù)據(jù)概念的提出,近年來(lái),各類(lèi)數(shù)據(jù)如何精確采集與處理,成為了熱點(diǎn)課題,在檔案保存、食品藥品的倉(cāng)儲(chǔ)運(yùn)輸?shù)阮I(lǐng)域也不例外。在檔案保存、食品藥品領(lǐng)域,溫度數(shù)據(jù)是一個(gè)十分重要的數(shù)據(jù),它直接影響著檔案防蟲(chóng)、紙張變質(zhì)、食品藥品的安全。因此開(kāi)發(fā)出一種低成本,高精度,自由的設(shè)置記錄溫度時(shí)間間隔,且能快速方便的用計(jì)算機(jī)讀出數(shù)據(jù)的環(huán)境溫度記錄產(chǎn)品是很有必要的。而PIC單片機(jī)作為一種功能強(qiáng),穩(wěn)定,低功耗的單片機(jī)已經(jīng)廣泛應(yīng)用到了電子產(chǎn)品的設(shè)計(jì)當(dāng)中,所以本設(shè)計(jì)以PIC單片機(jī),LCD驅(qū)動(dòng),AD轉(zhuǎn)換,SPI協(xié)議,串口通信等技術(shù)為基礎(chǔ)的溫度記錄儀設(shè)計(jì)。
溫度記錄;PIC單片機(jī);AD轉(zhuǎn)換;SPI協(xié)議
根據(jù)紙質(zhì)檔案保存原則與查閱的便利性以及經(jīng)過(guò)成本計(jì)算后,經(jīng)常查閱的紙質(zhì)檔案應(yīng)當(dāng)保存在溫度14℃-24℃之間,濕度在45%-60%。這一類(lèi)溫度測(cè)試記錄,對(duì)精度要求不是特別高,而對(duì)測(cè)試長(zhǎng)時(shí)間的穩(wěn)定性,因?yàn)闇y(cè)試時(shí)間長(zhǎng),幾個(gè)月到幾年都有可能,如1小時(shí)差10秒,一年之后可能差1天,所以時(shí)間的精確度要求較高。為了真實(shí)準(zhǔn)確的記錄面積較大檔案室中各個(gè)位置的數(shù)據(jù),且能快速查看當(dāng)前溫度要求測(cè)試儀體積小,帶LCD顯示。根據(jù)以上實(shí)際情況,制定以下技術(shù)規(guī)格:溫度測(cè)試范圍:-30℃~ 70℃。其中-20℃ ~ 40℃范圍內(nèi)±0.5℃,其他±1.0℃。記錄數(shù)據(jù)最大量為:32000個(gè)。記錄間隔:10秒至24小時(shí)可設(shè)置,分辨率1秒。時(shí)間精度:每1000秒,±3秒。根據(jù)以上描初期設(shè)計(jì)的參數(shù)指標(biāo),經(jīng)過(guò)一系列的方案驗(yàn)證,為了實(shí)現(xiàn)集LCD驅(qū)動(dòng),AD轉(zhuǎn)換,SPI,串口通信各種功能于一體的的溫度記錄儀且體積小大小接近U盤(pán)。這里選用了PICLF1939單片機(jī),這款單片機(jī)低功耗,自帶LCD驅(qū)動(dòng),片內(nèi)64K EEPROM,10位AD轉(zhuǎn)換,有SPI接口和串口接口。完全滿足設(shè)計(jì)要求。此外,為了實(shí)現(xiàn)USB接口與電腦通訊,需要CH340USB串口翻譯芯片,512K的片外EEPROM M95512存儲(chǔ)溫度數(shù)據(jù)以及電源管理芯片等。
在溫度精度要求不高的情況下,這里采用負(fù)溫度系數(shù)的熱敏電阻,圖1是各個(gè)溫度的誤差百分比。從圖上不難看出,該熱敏電阻在-30℃-40℃誤差小,其中20℃左右誤差最小,是符合被測(cè)試環(huán)境要求的。
圖1
電路采用與10K高精度電阻串聯(lián)分壓后連接PICLF1939模擬輸入端,在熱敏電阻于GND之間并聯(lián)104電容,過(guò)濾干擾信號(hào),PICLF1939的 模數(shù)轉(zhuǎn)換器可以將模擬輸入信號(hào)轉(zhuǎn)換為該信號(hào)的 10 位二進(jìn)制表示。該器件使用模擬輸入,這些輸入通過(guò)多路開(kāi)關(guān)連接到一個(gè)采樣保持電路。采樣保持電路的輸出與轉(zhuǎn)換器的輸入相連。該轉(zhuǎn)換器通過(guò)逐次逼近法生成 10 位二進(jìn)制數(shù)并將轉(zhuǎn)換結(jié)果存儲(chǔ)到ADC 結(jié)果寄存器(ADRESH:ADRESL寄存器對(duì))。與AD轉(zhuǎn)換相關(guān)的寄存器:TRISA:端口PORTA的方向寄存器,把被轉(zhuǎn)換的電壓連接的模擬輸入口設(shè)置為輸入。
ADCON0,
CHS<4:0>:模擬通道選擇,選擇通道0,00000 = AN0。
GO/DONW:1 = A/D轉(zhuǎn)換正在進(jìn)行。將該位置 1 可啟動(dòng)A/ D轉(zhuǎn)換周期。 當(dāng) A/D 轉(zhuǎn)換完成以后,該位由硬件自動(dòng)清零。 0 = A/D轉(zhuǎn)換完成 /未進(jìn)行。
ADON:ADC使能位,1=ADC被使能,0=ADC 被禁止且不消耗工作電流。為了節(jié)能,只用在AD轉(zhuǎn)換時(shí)才開(kāi)啟。結(jié)束后關(guān)閉。
ADCON1,
ADFM:1 =右對(duì)齊。
ADCS<2:0>:AD轉(zhuǎn)換時(shí)鐘選擇位。本次選擇111=FRC由專(zhuān)用RC振蕩器提供時(shí)鐘。FRC在睡眠模式依然可以工作。
ADNREF:0 = VREF- 與VSS 連接。
ADPREF:00 = VREF+與VDD 連接。
ANSELA:PORTA 模擬選擇寄存器,設(shè)置為0x03把RA0,RA1設(shè)置為模擬輸入位。
這里在溫度采樣時(shí),標(biāo)準(zhǔn)電壓與系統(tǒng)的電源和GND相連。因?yàn)橛?jì)時(shí)與通訊模塊都需要用到中斷,而AD轉(zhuǎn)換是定時(shí)進(jìn)行不存在不確定突發(fā)事件,所以本次INTCON PIE1 PIR1等寄存器關(guān)于AD轉(zhuǎn)換的中斷,全部關(guān)閉,采用查詢修改GO/DONW位來(lái)控制和判斷AD的狀態(tài)。
如下圖2所示阻值與溫度的關(guān)系,是非線性的,為了綜合考慮精確度和程序空間利用微分原理,把該曲線每5攝氏度分段,每段用一個(gè)直線方程表示。
圖2
程序中,把AD轉(zhuǎn)換的值轉(zhuǎn)換成電阻值代入直線方程救可得出溫度值。
例如:
11℃的中心阻值是19500Ω,15℃的中心阻值15600Ω。假設(shè)直線方程為Y=KX+B X=11,15;Y=19500,15600;計(jì)算結(jié)果不需要小數(shù),所以放大10倍以后,得出的直線方程為:X=(30225-Y)/98
ADCON1=0b11110000;//右對(duì)齊,F(xiàn)RC為AD時(shí)鐘。
ADCON0=0b00000000;//模擬通道0;標(biāo)準(zhǔn)電壓連接電壓與GND。
FVRCON=0b00000000;//內(nèi)部標(biāo)準(zhǔn)電壓關(guān)閉。
ANSELA = 0x03; //RA0,RA1,設(shè)為模擬通道
ADCON0bits.ADON=1; //使能AD轉(zhuǎn)換
DelayUs(100);
ADCON0bits.GO_nDONE=1;//GO_nDONE置1,AD開(kāi)始
DelayUs(50);
if(!ADCON0bits.GO_nDONE)//查詢GO_nDONE,為0時(shí)AD轉(zhuǎn)換結(jié)束
{short Advaule;
unsigned long Adteko,Adfx;
gTestH=ADRES; //取出AD轉(zhuǎn)換的結(jié)果
Adteko=gTestH*10000;
Adteko=Adteko/(1023-gTestH);//還原阻值。
if((Adteko<19500)&&(Adteko>=15600))//例:還原阻值后,阻值代入直線方程
{ Adfx=30225-Adteko;
Advaule=Adfx/98;
Advaule+=gSet.Ver; //得出溫度值,加減校準(zhǔn)值進(jìn)一步調(diào)整
…… 以下省略
return Advaule; }
(1)根據(jù)《JJF 1366-2012溫度數(shù)據(jù)采集儀校準(zhǔn)規(guī)范》標(biāo)準(zhǔn)的要求,選用標(biāo)準(zhǔn)恒溫箱與標(biāo)準(zhǔn)溫度計(jì)進(jìn)行驗(yàn)證,對(duì)實(shí)驗(yàn)環(huán)境的要求如下:a) 環(huán)境溫度 (20 土 5)t;b) 相對(duì)濕度=不超過(guò) 85 Yo;c) 當(dāng)電測(cè)儀器對(duì)環(huán)境條件另有要求時(shí),應(yīng)滿足其規(guī)定要求。
主要檢測(cè)設(shè)備
測(cè)溫設(shè)備:標(biāo)準(zhǔn)鉑電阻溫度計(jì),技術(shù)要求二等;
恒溫設(shè)備:恒溫槽,溫度均勻性不超過(guò) 0.01 ℃,溫度波動(dòng)性不超過(guò) 0.02 ℃/10 min;
專(zhuān)用恒溫箱:溫度范圍為( -50~+150)℃溫度均勻度不超過(guò)0.05 ℃,溫度波動(dòng)度不超過(guò)士 0.02 ℃/10 min 。
把代校準(zhǔn)待測(cè)試的溫度記錄儀和標(biāo)準(zhǔn)的鉑電阻溫度計(jì)的測(cè)溫部分一同放在專(zhuān)用恒溫箱中,用標(biāo)準(zhǔn)溫度計(jì)的讀書(shū)與溫度記錄儀的讀數(shù)作比較,經(jīng)過(guò)多個(gè)產(chǎn)品多次測(cè)試校準(zhǔn),利用直方圖,散布圖以及工程能力計(jì)算等手段,把程序中各條溫度計(jì)算曲線調(diào)到最接近測(cè)試結(jié)果中心值的狀態(tài)。
(2)與保證時(shí)間精度一樣,因?yàn)槊恳粋€(gè)熱敏電阻都有個(gè)體誤差,為保證每個(gè)溫度記錄儀的溫度準(zhǔn)確,需要在恒溫箱中,測(cè)出被測(cè)產(chǎn)品與標(biāo)準(zhǔn)溫度計(jì)某一點(diǎn)的溫差,再利用上位PC機(jī)把溫差換算成補(bǔ)償溫度值,由USB發(fā)給產(chǎn)品的單片機(jī),單片機(jī)把補(bǔ)償值記錄在片內(nèi)的EEPROM中,程序上每次測(cè)試溫度都要跳出補(bǔ)償值加在結(jié)果上。
因?yàn)闇囟葦?shù)據(jù)是一個(gè)-300至+700的有符號(hào)數(shù)據(jù),所以每一個(gè)溫度數(shù)據(jù)都要2個(gè)字節(jié)保存,想要存到32000個(gè)數(shù)據(jù)片內(nèi)EEPROM是不夠的,這里利用512Kbit的片外EEPROM M95512,不需要串口通信控制,利用SPI總線就可以進(jìn)行數(shù)據(jù)讀寫(xiě)。512Kbit 64K字節(jié),符合32000個(gè)數(shù)據(jù),保存空間需要64000個(gè)字節(jié)的要求的。SPI總線,SPI 總線可以允許有一個(gè)主器件和一個(gè)或多個(gè)從器件同時(shí)工作。這里單片機(jī)作為主器件,只需要一個(gè)從器件M95512就足夠保存數(shù)據(jù)了。M95512的工作方式,由主器件發(fā)出命令,從器件做出相應(yīng)的回答,所以只用控制主器件的發(fā)射接收??刂品绞街饕袃煞N第一種設(shè)置SSPCON1、SSPSTAT等寄存器,對(duì)SSPBUF進(jìn)行讀寫(xiě)來(lái)與從器件通訊。第二種不設(shè)置寄存器,可以用任何I/O口來(lái)實(shí)現(xiàn)S位選,SCK時(shí)鐘,SDO輸出數(shù)據(jù),SDI輸入數(shù)據(jù)。發(fā)送方法如下:
for(tmp=0;tmp<8;tmp++)//根據(jù)發(fā)送長(zhǎng)度,改變循環(huán)次數(shù)或調(diào)用次數(shù)
{if(cmd &0x80)// 把發(fā)送內(nèi)容存入cmd
SDO_H; //判斷最高位,最高位為1輸出置1
Else
SDO_L; //最高位為0輸出置0
SCK_H; //時(shí)鐘高
DelayUS(1); //延時(shí)
SCK_L; //時(shí)鐘低把當(dāng)前位數(shù)據(jù)發(fā)向從器件
cmd <<= 1; } //左移,判斷下一位
接收方法如下:
for(tmp=0;tmp<8;tmp++)
{ SCK_H; //時(shí)鐘高再低讀回一位數(shù)據(jù)
DelayUS(1);
SCK_L;
if(!SDI)
readout &= 0xFE;//輸入數(shù)據(jù)存入中間變量
else
readout |= 0x01;
if(tmp != 7) readout <<=1;}
return readout; //返回?cái)?shù)據(jù)
例如要在0x0001地址中寫(xiě)入 0x55數(shù)據(jù),流程是片選S置0選中該存儲(chǔ)器,時(shí)鐘和輸出都置0,向存儲(chǔ)器發(fā)送0x06寫(xiě)使能命令,再發(fā)送0x02寫(xiě)操作命令,接下來(lái)先發(fā)地址0x0001,再發(fā)數(shù)據(jù)0x55,就把0x55寫(xiě)入到了0x0001地址中。同樣為了節(jié)能SPI的片選使能都是平時(shí)關(guān)閉,要用時(shí)開(kāi)啟。
PIC16LF1939器件中,該模塊最多能驅(qū)動(dòng) 4 個(gè)公共端和 24段的面板??梢灾苯域?qū)動(dòng)液晶模塊不需要液晶自帶驅(qū)動(dòng)和操作程序,這樣就大大降低的顯示的成本,原來(lái)幾十上百的液晶驅(qū)動(dòng)模塊現(xiàn)在加上接觸用的斑馬條只需要2塊錢(qián)左右。通過(guò)設(shè)置LCDCON LCDCST LCDPS LCDREF LCDRL LCDSE等寄存器就可以驅(qū)動(dòng)LCD,通過(guò)給LCDDATA賦值,就可改變LCD顯示。平時(shí)關(guān)閉LCDEN=0,以降低能耗。
把溫度記錄儀插上PC USB接口,可以立即讀取記錄儀的記錄數(shù)據(jù),并生成時(shí)間溫度的曲線圖。還可以將數(shù)據(jù)用Execl文件形式導(dǎo)出。用戶界面中可以設(shè)置溫度測(cè)量的時(shí)間間隔,報(bào)警上下限延時(shí)啟動(dòng)時(shí)間,同步時(shí)間等等。都是通過(guò)PC與單片機(jī)之間的自制串口協(xié)議進(jìn)行通訊的。
在各種信息數(shù)據(jù)大爆炸的物聯(lián)網(wǎng)時(shí)代,人們更關(guān)心數(shù)據(jù)的多樣性與準(zhǔn)確性,以及通過(guò)數(shù)據(jù)分析出的對(duì)生活生產(chǎn)有價(jià)值的結(jié)果。而單片機(jī)也在飛速發(fā)展,集成度越來(lái)越高,體積越來(lái)越小,專(zhuān)用通用的各種功能越來(lái)越強(qiáng)。因此單片機(jī)勢(shì)必會(huì)在數(shù)據(jù)采集的末端大放異彩。
[1]《PIC16F1939 data sheet》.
[2]《JJF 1366-2012溫度數(shù)據(jù)采集儀校準(zhǔn)規(guī)范》.
[3]《M95512 data sheet》.
[4]《CH340 data sheet》.