桂林市房產檔案館 歐肇成
基于PIC單片機的檔案保存倉儲運輸領域的溫度記錄儀設計
桂林市房產檔案館 歐肇成
隨著大數據概念的提出,近年來,各類數據如何精確采集與處理,成為了熱點課題,在檔案保存、食品藥品的倉儲運輸等領域也不例外。在檔案保存、食品藥品領域,溫度數據是一個十分重要的數據,它直接影響著檔案防蟲、紙張變質、食品藥品的安全。因此開發出一種低成本,高精度,自由的設置記錄溫度時間間隔,且能快速方便的用計算機讀出數據的環境溫度記錄產品是很有必要的。而PIC單片機作為一種功能強,穩定,低功耗的單片機已經廣泛應用到了電子產品的設計當中,所以本設計以PIC單片機,LCD驅動,AD轉換,SPI協議,串口通信等技術為基礎的溫度記錄儀設計。
溫度記錄;PIC單片機;AD轉換;SPI協議
根據紙質檔案保存原則與查閱的便利性以及經過成本計算后,經常查閱的紙質檔案應當保存在溫度14℃-24℃之間,濕度在45%-60%。這一類溫度測試記錄,對精度要求不是特別高,而對測試長時間的穩定性,因為測試時間長,幾個月到幾年都有可能,如1小時差10秒,一年之后可能差1天,所以時間的精確度要求較高。為了真實準確的記錄面積較大檔案室中各個位置的數據,且能快速查看當前溫度要求測試儀體積小,帶LCD顯示。根據以上實際情況,制定以下技術規格:溫度測試范圍:-30℃~ 70℃。其中-20℃ ~ 40℃范圍內±0.5℃,其他±1.0℃。記錄數據最大量為:32000個。記錄間隔:10秒至24小時可設置,分辨率1秒。時間精度:每1000秒,±3秒。根據以上描初期設計的參數指標,經過一系列的方案驗證,為了實現集LCD驅動,AD轉換,SPI,串口通信各種功能于一體的的溫度記錄儀且體積小大小接近U盤。這里選用了PICLF1939單片機,這款單片機低功耗,自帶LCD驅動,片內64K EEPROM,10位AD轉換,有SPI接口和串口接口。完全滿足設計要求。此外,為了實現USB接口與電腦通訊,需要CH340USB串口翻譯芯片,512K的片外EEPROM M95512存儲溫度數據以及電源管理芯片等。
在溫度精度要求不高的情況下,這里采用負溫度系數的熱敏電阻,圖1是各個溫度的誤差百分比。從圖上不難看出,該熱敏電阻在-30℃-40℃誤差小,其中20℃左右誤差最小,是符合被測試環境要求的。

圖1
電路采用與10K高精度電阻串聯分壓后連接PICLF1939模擬輸入端,在熱敏電阻于GND之間并聯104電容,過濾干擾信號,PICLF1939的 模數轉換器可以將模擬輸入信號轉換為該信號的 10 位二進制表示。該器件使用模擬輸入,這些輸入通過多路開關連接到一個采樣保持電路。采樣保持電路的輸出與轉換器的輸入相連。該轉換器通過逐次逼近法生成 10 位二進制數并將轉換結果存儲到ADC 結果寄存器(ADRESH:ADRESL寄存器對)。與AD轉換相關的寄存器:TRISA:端口PORTA的方向寄存器,把被轉換的電壓連接的模擬輸入口設置為輸入。
ADCON0,

CHS<4:0>:模擬通道選擇,選擇通道0,00000 = AN0。
GO/DONW:1 = A/D轉換正在進行。將該位置 1 可啟動A/ D轉換周期。 當 A/D 轉換完成以后,該位由硬件自動清零。 0 = A/D轉換完成 /未進行。
ADON:ADC使能位,1=ADC被使能,0=ADC 被禁止且不消耗工作電流。為了節能,只用在AD轉換時才開啟。結束后關閉。
ADCON1,

ADFM:1 =右對齊。
ADCS<2:0>:AD轉換時鐘選擇位。本次選擇111=FRC由專用RC振蕩器提供時鐘。FRC在睡眠模式依然可以工作。
ADNREF:0 = VREF- 與VSS 連接。
ADPREF:00 = VREF+與VDD 連接。
ANSELA:PORTA 模擬選擇寄存器,設置為0x03把RA0,RA1設置為模擬輸入位。
這里在溫度采樣時,標準電壓與系統的電源和GND相連。因為計時與通訊模塊都需要用到中斷,而AD轉換是定時進行不存在不確定突發事件,所以本次INTCON PIE1 PIR1等寄存器關于AD轉換的中斷,全部關閉,采用查詢修改GO/DONW位來控制和判斷AD的狀態。
如下圖2所示阻值與溫度的關系,是非線性的,為了綜合考慮精確度和程序空間利用微分原理,把該曲線每5攝氏度分段,每段用一個直線方程表示。

圖2
程序中,把AD轉換的值轉換成電阻值代入直線方程救可得出溫度值。
例如:
11℃的中心阻值是19500Ω,15℃的中心阻值15600Ω。假設直線方程為Y=KX+B X=11,15;Y=19500,15600;計算結果不需要小數,所以放大10倍以后,得出的直線方程為:X=(30225-Y)/98
ADCON1=0b11110000;//右對齊,FRC為AD時鐘。
ADCON0=0b00000000;//模擬通道0;標準電壓連接電壓與GND。
FVRCON=0b00000000;//內部標準電壓關閉。
ANSELA = 0x03; //RA0,RA1,設為模擬通道
ADCON0bits.ADON=1; //使能AD轉換
DelayUs(100);
ADCON0bits.GO_nDONE=1;//GO_nDONE置1,AD開始
DelayUs(50);
if(!ADCON0bits.GO_nDONE)//查詢GO_nDONE,為0時AD轉換結束
{short Advaule;
unsigned long Adteko,Adfx;
gTestH=ADRES; //取出AD轉換的結果
Adteko=gTestH*10000;
Adteko=Adteko/(1023-gTestH);//還原阻值。
if((Adteko<19500)&&(Adteko>=15600))//例:還原阻值后,阻值代入直線方程
{ Adfx=30225-Adteko;
Advaule=Adfx/98;
Advaule+=gSet.Ver; //得出溫度值,加減校準值進一步調整
…… 以下省略
return Advaule; }
(1)根據《JJF 1366-2012溫度數據采集儀校準規范》標準的要求,選用標準恒溫箱與標準溫度計進行驗證,對實驗環境的要求如下:a) 環境溫度 (20 土 5)t;b) 相對濕度=不超過 85 Yo;c) 當電測儀器對環境條件另有要求時,應滿足其規定要求。
主要檢測設備
測溫設備:標準鉑電阻溫度計,技術要求二等;
恒溫設備:恒溫槽,溫度均勻性不超過 0.01 ℃,溫度波動性不超過 0.02 ℃/10 min;
專用恒溫箱:溫度范圍為( -50~+150)℃溫度均勻度不超過0.05 ℃,溫度波動度不超過士 0.02 ℃/10 min 。
把代校準待測試的溫度記錄儀和標準的鉑電阻溫度計的測溫部分一同放在專用恒溫箱中,用標準溫度計的讀書與溫度記錄儀的讀數作比較,經過多個產品多次測試校準,利用直方圖,散布圖以及工程能力計算等手段,把程序中各條溫度計算曲線調到最接近測試結果中心值的狀態。
(2)與保證時間精度一樣,因為每一個熱敏電阻都有個體誤差,為保證每個溫度記錄儀的溫度準確,需要在恒溫箱中,測出被測產品與標準溫度計某一點的溫差,再利用上位PC機把溫差換算成補償溫度值,由USB發給產品的單片機,單片機把補償值記錄在片內的EEPROM中,程序上每次測試溫度都要跳出補償值加在結果上。
因為溫度數據是一個-300至+700的有符號數據,所以每一個溫度數據都要2個字節保存,想要存到32000個數據片內EEPROM是不夠的,這里利用512Kbit的片外EEPROM M95512,不需要串口通信控制,利用SPI總線就可以進行數據讀寫。512Kbit 64K字節,符合32000個數據,保存空間需要64000個字節的要求的。SPI總線,SPI 總線可以允許有一個主器件和一個或多個從器件同時工作。這里單片機作為主器件,只需要一個從器件M95512就足夠保存數據了。M95512的工作方式,由主器件發出命令,從器件做出相應的回答,所以只用控制主器件的發射接收。控制方式主要有兩種第一種設置SSPCON1、SSPSTAT等寄存器,對SSPBUF進行讀寫來與從器件通訊。第二種不設置寄存器,可以用任何I/O口來實現S位選,SCK時鐘,SDO輸出數據,SDI輸入數據。發送方法如下:
for(tmp=0;tmp<8;tmp++)//根據發送長度,改變循環次數或調用次數
{if(cmd &0x80)// 把發送內容存入cmd
SDO_H; //判斷最高位,最高位為1輸出置1
Else
SDO_L; //最高位為0輸出置0
SCK_H; //時鐘高
DelayUS(1); //延時
SCK_L; //時鐘低把當前位數據發向從器件
cmd <<= 1; } //左移,判斷下一位
接收方法如下:
for(tmp=0;tmp<8;tmp++)
{ SCK_H; //時鐘高再低讀回一位數據
DelayUS(1);
SCK_L;
if(!SDI)
readout &= 0xFE;//輸入數據存入中間變量
else
readout |= 0x01;
if(tmp != 7) readout <<=1;}
return readout; //返回數據
例如要在0x0001地址中寫入 0x55數據,流程是片選S置0選中該存儲器,時鐘和輸出都置0,向存儲器發送0x06寫使能命令,再發送0x02寫操作命令,接下來先發地址0x0001,再發數據0x55,就把0x55寫入到了0x0001地址中。同樣為了節能SPI的片選使能都是平時關閉,要用時開啟。
PIC16LF1939器件中,該模塊最多能驅動 4 個公共端和 24段的面板。可以直接驅動液晶模塊不需要液晶自帶驅動和操作程序,這樣就大大降低的顯示的成本,原來幾十上百的液晶驅動模塊現在加上接觸用的斑馬條只需要2塊錢左右。通過設置LCDCON LCDCST LCDPS LCDREF LCDRL LCDSE等寄存器就可以驅動LCD,通過給LCDDATA賦值,就可改變LCD顯示。平時關閉LCDEN=0,以降低能耗。
把溫度記錄儀插上PC USB接口,可以立即讀取記錄儀的記錄數據,并生成時間溫度的曲線圖。還可以將數據用Execl文件形式導出。用戶界面中可以設置溫度測量的時間間隔,報警上下限延時啟動時間,同步時間等等。都是通過PC與單片機之間的自制串口協議進行通訊的。
在各種信息數據大爆炸的物聯網時代,人們更關心數據的多樣性與準確性,以及通過數據分析出的對生活生產有價值的結果。而單片機也在飛速發展,集成度越來越高,體積越來越小,專用通用的各種功能越來越強。因此單片機勢必會在數據采集的末端大放異彩。
[1]《PIC16F1939 data sheet》.
[2]《JJF 1366-2012溫度數據采集儀校準規范》.
[3]《M95512 data sheet》.
[4]《CH340 data sheet》.