龍順宇,傅啟才,楊偉,郝昕
(海南熱帶海洋學(xué)院海洋信息工程學(xué)院,海南三亞,572022)
稱重應(yīng)用場(chǎng)景的多樣化需求促使市面上出現(xiàn)了諸如電子天平、電子桌稱、電子臺(tái)秤、電子吊秤、電子地磅(或稱“汽車衡”)等多種電子衡器[1-2]。不同場(chǎng)景對(duì)電子衡器有著不同的要求,比如對(duì)高價(jià)值商品而言,要求電子衡器計(jì)量精度高,對(duì)于低價(jià)值商品而言,主要考慮計(jì)量效率和響應(yīng)時(shí)間[3-4]。研究電子衡器的組成和產(chǎn)品設(shè)計(jì)具有現(xiàn)實(shí)意義。本文基于廚房秤、超市稱、餐廳稱等應(yīng)用場(chǎng)景提出了一種高精度電子秤設(shè)計(jì)方案,電子秤系統(tǒng)由微控制器單元、傳感器前端、人機(jī)交互單元、供電單元及通信接口等部分組成,設(shè)計(jì)實(shí)物具有低功耗、高性價(jià)比等優(yōu)勢(shì)。
壓力傳感器是電子秤系統(tǒng)的感受前端,其選型直接影響了電子秤的量程范圍、功能適用、產(chǎn)品形態(tài)及測(cè)量精度[5-6]。市面上常見的壓力傳感器有電容式、壓電式和電阻應(yīng)變電橋式等。不同類型的傳感器在電氣指標(biāo)、適用場(chǎng)景、工作原理、量程范圍上差異較大[7-8],以下是常用壓力傳感器的原理及特點(diǎn)對(duì)比:
電容式壓力傳感器內(nèi)部有兩個(gè)極板,主要用以存儲(chǔ)電荷類似于一個(gè)電容器,在極板上放置不同的被測(cè)重量會(huì)改變極板間距,從而導(dǎo)致電荷量變化,相當(dāng)于利用可變電容器極板間的電荷量去間接量化重量。該類型傳感器常見于電子血壓計(jì)場(chǎng)景,該類型傳感器的優(yōu)點(diǎn)是無(wú)需模數(shù)轉(zhuǎn)換器即可達(dá)到較高的分辨率,例如SENSOR101傳感器,在室溫環(huán)境下的測(cè)量范圍在0~40kPa/0~300mmHg,連線簡(jiǎn)單、性價(jià)比較高。
壓電式壓力傳感器是利用壓電晶體的壓電效應(yīng)制作而成,傳感器的輸出電壓與所測(cè)重量是呈正比的。通常會(huì)在傳感器的輸出添加IEPE前置信號(hào)調(diào)理電路,將傳感器輸出電荷信號(hào)放大為適合測(cè)量的電壓。該類型傳感器多用于測(cè)量壓縮、沖擊、反作用力與張力過(guò)程中的動(dòng)態(tài)力和準(zhǔn)靜態(tài)力。例如Dytran2300C6傳感器,靈敏度可達(dá)0.35pC/psi,量程可達(dá)10000psi。此類傳感器在使用前需要做校準(zhǔn)和調(diào)零,實(shí)際使用時(shí)還要加裝外殼屏蔽和防塵/防水處理。
電阻應(yīng)變電橋式壓力傳感器是利用彈性電阻應(yīng)變片構(gòu)成的電橋來(lái)感受重壓下的微小形變,放置重物后使得應(yīng)變片阻值變化,最終影響電橋輸出電壓,該類型傳感器響應(yīng)速度快、結(jié)構(gòu)簡(jiǎn)單且耐勞時(shí)間長(zhǎng),適合于常規(guī)廚房秤、體重秤的設(shè)計(jì)[9-10]。應(yīng)變電阻一般取4個(gè)粘合在鋁合金骨架上構(gòu)成平行梁式結(jié)構(gòu),傳感器結(jié)構(gòu)如圖1(a)所示,電橋電路原理如圖1(b)所示。
分析圖1(b)電路,該電路是由R1至R4四個(gè)應(yīng)變電阻構(gòu)成的電橋。UI是激勵(lì)電壓源,在本文系統(tǒng)中取值為5V,UO是電橋的輸出電壓。根據(jù)分壓計(jì)算方法,電橋的A點(diǎn)電壓可表示為:
同理,電橋的C點(diǎn)電壓可表示為:
圖1 傳感器結(jié)構(gòu)及電橋電路原理
容易得到電橋的輸出電壓UO為:
電橋中的4個(gè)應(yīng)變電阻其實(shí)都是等值的(即R=R1=R2=R3=R4),從理論上分析,UA與UC的電位相對(duì)于UI而言是相等的,在數(shù)值上都等于二分之一的UI,故而UO應(yīng)該為0V,也就是說(shuō)電橋沒(méi)有產(chǎn)生因重力形變導(dǎo)致的電壓差,即空載狀態(tài)。當(dāng)電橋上承載重物發(fā)生形變時(shí),應(yīng)變電阻阻值可重新表達(dá)為:R+ΔR1、R+ΔR2、R+ΔR3、R+ΔR4,那么此時(shí)電橋的輸出電壓UO應(yīng)變?yōu)椋?/p>
通過(guò)化簡(jiǎn)可得:
根據(jù)式(5),電橋的輸出電壓UO與單側(cè)橋臂的電阻變化率代數(shù)和是成正比的。
結(jié)合應(yīng)用場(chǎng)景,本文選用了電阻應(yīng)變電橋式傳感器作為電子秤的感受前端,具體型號(hào)為10Kg稱重量程YZC-133型傳感器,該傳感器一般用于廚房秤,輸出靈敏度為1.0±0.15mv/V,非線性度最大為0.05%,輸出為4色線纜,紅色E+和黑色E-為激勵(lì)電壓輸入,綠色A+和白色A-為電橋電壓輸出。
本文設(shè)計(jì)的電子稱系統(tǒng)由電阻應(yīng)變電橋式壓力傳感器、CS1237采集單元、STC8主控單元、系統(tǒng)供電單元、字符液晶單元、矩陣鍵盤單元及通信接口單元等7個(gè)子單元組成,整體框架如圖2所示。傳感器上放置待測(cè)重物,在壓力作用下電橋的輸出電壓會(huì)發(fā)生改變,此時(shí)CS1237芯片的內(nèi)置放大器會(huì)將微弱電信號(hào)進(jìn)行放大,然后量化電壓并進(jìn)行濾波處理,處理后的電壓信號(hào)經(jīng)過(guò)24位高分辨率模數(shù)轉(zhuǎn)換后成為數(shù)字信號(hào),再與STC8主控單元進(jìn)行對(duì)接。單片機(jī)主控將CS1237的數(shù)據(jù)進(jìn)行處理,即可得到待測(cè)物體重量。整個(gè)系統(tǒng)由直流單5V供電,字符液晶為1602型液晶,矩陣鍵盤為4×4形式,這兩個(gè)單元構(gòu)成了電子秤的人機(jī)交互部分。系統(tǒng)還預(yù)留了串口通信單元,可將量化數(shù)據(jù)傳送到PC機(jī)或者其他微處理器單元。
圖2 電子秤系統(tǒng)結(jié)構(gòu)框圖
電子稱的硬件電路主要是CS1237電路及STC8單片機(jī)電路,其它的矩陣鍵盤電路、獨(dú)立按鍵電路和字符型1602液晶電路較為簡(jiǎn)單,此處不做贅述。系統(tǒng)硬件的核心電路原理如圖3所示。
分析電路構(gòu)成,CN1和CN2是排針,用于連接YZC-133型傳感器的4根輸出線。U1即為24位高分辨率低功耗的CS1237模數(shù)轉(zhuǎn)換芯片,C1、C2、C5和C6是濾波電容,主要用于平滑電源和旁路高頻干擾。傳感器的E+是激勵(lì)電源的正極,需要接到U1的1腳和8腳(需要說(shuō)明的是:在沒(méi)有配置CS1237內(nèi)部寄存器時(shí),默認(rèn)將芯片的參考電壓設(shè)定為與VDD相等的電壓),傳感器的E-直接到地(即為參考0V)。傳感器的A-和A+是輸出信號(hào),該信號(hào)幅值僅為毫伏級(jí)別且容易波動(dòng),所以在CS1237芯片的AINN和AINP這對(duì)差分通道上分別做了兩級(jí)RC低通濾波器,即R1、C2和R2、C4,以確保輸入信號(hào)的穩(wěn)定。R3和R4是通信線路的限流電阻,以限制其他通信器件與CS1237芯片之間在通信過(guò)程中產(chǎn)生較大的拉灌電流。
U2是STC8單片機(jī),具體型號(hào)為STC8H3K64S4,該單片機(jī)是STC公司推出的增強(qiáng)型8051內(nèi)核單片機(jī),具備4個(gè)串口,引腳的利用率也很高。U2的引腳分配了P3.6和P3.7給CS1237芯片做兩線SPI通信,又分配了P1.0、P1.1、P1.2和P1.6做獨(dú)立按鍵,主要實(shí)現(xiàn)電子秤去皮、皮重、校準(zhǔn)和累加功能。分配P4.1、P4.2和P4.3作為字符型1602液晶模塊的控制線,P2端口組則作為液晶模塊的8位并行數(shù)據(jù)線,P1端口組搭建出4×4矩陣鍵盤,P3.0和P3.1是UART通信接口。
圖3 電子秤系統(tǒng)核心電路原理圖
硬件搭建完畢后需編制軟件功能,軟件編寫有兩個(gè)重點(diǎn)部分即:CS1237芯片的通信與校準(zhǔn)、稱重后的顯示、計(jì)價(jià)及功能體現(xiàn)。軟件部分的功能流程如圖4所示。單片機(jī)上電后開始執(zhí)行相應(yīng)功能的初始化,然后與CS1237進(jìn)行通信,取回當(dāng)前重量進(jìn)行數(shù)值顯示,在整個(gè)過(guò)程中單片機(jī)會(huì)不斷檢測(cè)矩陣鍵盤和獨(dú)立按鍵,當(dāng)有獨(dú)立按鍵按下時(shí)就會(huì)觸發(fā)去皮、皮重、校準(zhǔn)和累加等功能,當(dāng)矩陣鍵盤按下時(shí)可設(shè)定單價(jià)或者計(jì)量方法,最后把計(jì)算后的金額送到1602液晶上顯示。
圖4 電子秤系統(tǒng)功能流程圖
當(dāng)CS1237芯片的DOUT引腳由高電平變?yōu)榈碗娖角页掷m(xù)保持時(shí)說(shuō)明系統(tǒng)進(jìn)入了數(shù)據(jù)交換的準(zhǔn)備狀態(tài),此時(shí)若出現(xiàn)第一個(gè)SCLK時(shí)鐘輸入即可將最高位讀出,在經(jīng)過(guò)24個(gè)SCLK時(shí)鐘脈沖后,CS1237芯片中的24位數(shù)據(jù)將全部讀出。若第25個(gè)SCLK時(shí)鐘到來(lái)且DOUT引腳為“1”時(shí),則表明寄存器Config被寫入了新的值(若用戶將Config[7:0]配置為0x0C,則芯片的功能將設(shè)定為:使用內(nèi)部REF作為參考電壓、輸出頻率為10Hz、通道PGA的增益為128倍、選擇通道A作為輸入)。第26個(gè)SCLK時(shí)鐘到來(lái)時(shí)的DOUT引腳應(yīng)該一直為“0”,這個(gè)狀態(tài)是CS1237芯片的擴(kuò)展保留位。當(dāng)?shù)?7個(gè)SCLK時(shí)鐘到來(lái)時(shí)把DOUT拉高再拉低,表示新的數(shù)據(jù)已經(jīng)準(zhǔn)備好,此時(shí)可以重新進(jìn)行下一次數(shù)據(jù)的轉(zhuǎn)換了。按照思路使用C語(yǔ)言編寫的CS1237初始化函數(shù)Init_CS1237()的源碼如下:
void Init_CS1237(void) //CS1237初始函數(shù)
{
Con_CS1237(); //配置CS1237
if(Read_CON() != CS_CON)
//如果讀取的ADC配置出錯(cuò),則重啟
for(i=0;i<3;i++)
//循環(huán)讀取CS1237芯片采樣值,獲取穩(wěn)定數(shù)值
{AD_Res_Last = Read_CS1237(); }
//獲取CS1237電壓采樣值
}
完成對(duì)CS1237芯片的初始化配置之后需手動(dòng)對(duì)采集線性度k值進(jìn)行校準(zhǔn)。校準(zhǔn)過(guò)程為:首先系統(tǒng)自動(dòng)獲取未放待測(cè)物(認(rèn)定為0g)時(shí)CS1237芯片采集到的電壓Tare,然后通過(guò)按鍵獲取500克重物(一般采用標(biāo)準(zhǔn)砝碼校準(zhǔn)電子秤)采集到的電壓Weight_500g,最后通過(guò)程序?qū)€性度重新進(jìn)行計(jì)算,可用C語(yǔ)言編寫線性度校準(zhǔn)Weight_calibration()函數(shù),其源碼如下:
void Weight_calibration(void) //校準(zhǔn)函數(shù)
{
if(KEY1)
//校準(zhǔn)按鍵按下
{
KEY1 = 0;LED1 = 0;
//鍵值清零且指示燈點(diǎn)亮,表示為正在校準(zhǔn)
Weight_500g = Read_18Bit_AD();
//獲取500克重量采集電壓
Weight_Coe = Weight_500g - Tare;
//除去皮重的ADC數(shù)值
Weight_Coe = 500000 / Weight_Coe;
//放大1000倍的斜率k
Tare_Coe = Weight_Coe * Tare;
//皮重的重量,放大1000倍之后的
LED2 = 1; //指示燈熄滅,表示為校準(zhǔn)完成
}
}
系統(tǒng)完成校準(zhǔn)后會(huì)自動(dòng)把線性度k值保存在單片機(jī)EEPROM單元之中,故而無(wú)需每次上電都做校準(zhǔn)。校準(zhǔn)后的電子秤就可以正常使用了,此時(shí)將被測(cè)物體放置于稱盤上,字符型1602液晶會(huì)實(shí)時(shí)顯示出重物WE,用戶可通過(guò)矩陣鍵盤可輸入價(jià)格PR,系統(tǒng)會(huì)自動(dòng)計(jì)算出單價(jià)S,在多件物品的測(cè)量中還可以通過(guò)按鍵把每件物品的小計(jì)價(jià)格進(jìn)行累加,最終顯示出總價(jià)T。該部分即為電子秤的計(jì)價(jià)功能體現(xiàn),Display()函數(shù)的源碼如下:
void Display(void) //顯示函數(shù)
{
if(Work_Count == 2) //每100ms刷新一次顯示
{
Work_Count = 0; //標(biāo)志位清零
Display_Weight(); //顯示重量
Getkeyboard(); //矩陣鍵盤輸入單價(jià)
money=Get_Weight*price/1000; //計(jì)算價(jià)格
Display_Money(); //顯示總價(jià)
if(KEY2) //累計(jì)總價(jià)按鍵按下
{
KEY2 = 0; //標(biāo)志位清零
total_money += money; //計(jì)算累加后的總價(jià)
Display_Money(); //顯示總價(jià)
}
}
}
硬件設(shè)計(jì)完成后開始試制樣機(jī)并進(jìn)入聯(lián)調(diào)階段,制作完成的樣機(jī)實(shí)物如圖5所示。樣機(jī)測(cè)試的第一個(gè)環(huán)節(jié)是稱重測(cè)試(實(shí)際測(cè)量了一卷焊錫絲,實(shí)測(cè)重量330g,與標(biāo)準(zhǔn)儀器所測(cè)結(jié)果一致)。斷電情況下先將電阻應(yīng)變電橋式壓力傳感器正確連接到CS1237電路的輸入端子,再將字符型1602液晶模塊插接在系統(tǒng)上。檢查供電電壓是否為5V并正確連接到模塊上,此時(shí)開機(jī)應(yīng)觀察到液晶上顯示出空載重量。用戶可以放500g砝碼重新校準(zhǔn)系統(tǒng),也可以直接對(duì)物品進(jìn)行稱重測(cè)試。
圖5 電子秤系統(tǒng)樣機(jī)實(shí)物與測(cè)試圖
系統(tǒng)基礎(chǔ)功能正常后應(yīng)進(jìn)行一次校準(zhǔn),修正線性度k值,校準(zhǔn)所用物品選取實(shí)驗(yàn)室標(biāo)準(zhǔn)砝碼。本文選用的電阻應(yīng)變電橋式傳感器的非線性度小于千分之五且CS1237的分辨率可達(dá)24位,所以理論上的測(cè)重誤差應(yīng)在1g左右,為了驗(yàn)證理論估算,本文進(jìn)行了樣機(jī)實(shí)測(cè),表1即為實(shí)測(cè)結(jié)果。
表1 電子秤樣機(jī)實(shí)測(cè)數(shù)據(jù)
經(jīng)過(guò)樣機(jī)實(shí)測(cè),本文設(shè)計(jì)的電子秤在10kg范圍內(nèi)的最大誤差重量為2g,基本與理論估算一致,究其原因應(yīng)該是在電阻應(yīng)變電橋式傳感器的出廠均一度、CS1237芯片的供電電壓、電路干擾等方面存在差異,若需要嚴(yán)格控制在1g以內(nèi)還需分段校準(zhǔn),在程序上加以補(bǔ)償。稱重測(cè)試完畢后通過(guò)矩陣鍵盤設(shè)置了物品單價(jià),系統(tǒng)能自動(dòng)計(jì)算價(jià)格,人機(jī)交互部分符合預(yù)期。
本文系統(tǒng)作為單片機(jī)類電子工藝實(shí)訓(xùn)項(xiàng)目在研發(fā)實(shí)訓(xùn)中取得了較好的成果,本文以應(yīng)變電橋傳感器及CS1237模數(shù)轉(zhuǎn)換芯片為核心,結(jié)合STC8單片機(jī)和人機(jī)交互單元設(shè)計(jì)并實(shí)現(xiàn)了一款高精度電子秤系統(tǒng)。通過(guò)樣機(jī)測(cè)試驗(yàn)證了系統(tǒng)功能,可滿足一般稱重需求,但還有較大的改進(jìn)空間。比如完善數(shù)據(jù)濾波算法減少數(shù)據(jù)抖動(dòng)、又如分段程序補(bǔ)償改善非線性度的誤差影響,或者在程序中設(shè)置常用單價(jià)表格以減少每次手動(dòng)輸入的繁瑣,還可以設(shè)置微調(diào)按鍵,當(dāng)壓力傳感器長(zhǎng)時(shí)間使用后會(huì)有形變和本身誤差,可通過(guò)手動(dòng)微調(diào)修正傳感器誤差等。在實(shí)際產(chǎn)品化的過(guò)程中還需考慮更多需求和環(huán)境適用,以確保電子秤的功能及性能。