龍順宇,傅啟才,楊偉,郝昕
(海南熱帶海洋學院海洋信息工程學院,海南三亞,572022)
稱重應用場景的多樣化需求促使市面上出現了諸如電子天平、電子桌稱、電子臺秤、電子吊秤、電子地磅(或稱“汽車衡”)等多種電子衡器[1-2]。不同場景對電子衡器有著不同的要求,比如對高價值商品而言,要求電子衡器計量精度高,對于低價值商品而言,主要考慮計量效率和響應時間[3-4]。研究電子衡器的組成和產品設計具有現實意義。本文基于廚房秤、超市稱、餐廳稱等應用場景提出了一種高精度電子秤設計方案,電子秤系統由微控制器單元、傳感器前端、人機交互單元、供電單元及通信接口等部分組成,設計實物具有低功耗、高性價比等優勢。
壓力傳感器是電子秤系統的感受前端,其選型直接影響了電子秤的量程范圍、功能適用、產品形態及測量精度[5-6]。市面上常見的壓力傳感器有電容式、壓電式和電阻應變電橋式等。不同類型的傳感器在電氣指標、適用場景、工作原理、量程范圍上差異較大[7-8],以下是常用壓力傳感器的原理及特點對比:
電容式壓力傳感器內部有兩個極板,主要用以存儲電荷類似于一個電容器,在極板上放置不同的被測重量會改變極板間距,從而導致電荷量變化,相當于利用可變電容器極板間的電荷量去間接量化重量。該類型傳感器常見于電子血壓計場景,該類型傳感器的優點是無需模數轉換器即可達到較高的分辨率,例如SENSOR101傳感器,在室溫環境下的測量范圍在0~40kPa/0~300mmHg,連線簡單、性價比較高。
壓電式壓力傳感器是利用壓電晶體的壓電效應制作而成,傳感器的輸出電壓與所測重量是呈正比的。通常會在傳感器的輸出添加IEPE前置信號調理電路,將傳感器輸出電荷信號放大為適合測量的電壓。該類型傳感器多用于測量壓縮、沖擊、反作用力與張力過程中的動態力和準靜態力。例如Dytran2300C6傳感器,靈敏度可達0.35pC/psi,量程可達10000psi。此類傳感器在使用前需要做校準和調零,實際使用時還要加裝外殼屏蔽和防塵/防水處理。
電阻應變電橋式壓力傳感器是利用彈性電阻應變片構成的電橋來感受重壓下的微小形變,放置重物后使得應變片阻值變化,最終影響電橋輸出電壓,該類型傳感器響應速度快、結構簡單且耐勞時間長,適合于常規廚房秤、體重秤的設計[9-10]。應變電阻一般取4個粘合在鋁合金骨架上構成平行梁式結構,傳感器結構如圖1(a)所示,電橋電路原理如圖1(b)所示。
分析圖1(b)電路,該電路是由R1至R4四個應變電阻構成的電橋。UI是激勵電壓源,在本文系統中取值為5V,UO是電橋的輸出電壓。根據分壓計算方法,電橋的A點電壓可表示為:

同理,電橋的C點電壓可表示為:


圖1 傳感器結構及電橋電路原理
容易得到電橋的輸出電壓UO為:

電橋中的4個應變電阻其實都是等值的(即R=R1=R2=R3=R4),從理論上分析,UA與UC的電位相對于UI而言是相等的,在數值上都等于二分之一的UI,故而UO應該為0V,也就是說電橋沒有產生因重力形變導致的電壓差,即空載狀態。當電橋上承載重物發生形變時,應變電阻阻值可重新表達為:R+ΔR1、R+ΔR2、R+ΔR3、R+ΔR4,那么此時電橋的輸出電壓UO應變為:

通過化簡可得:

根據式(5),電橋的輸出電壓UO與單側橋臂的電阻變化率代數和是成正比的。
結合應用場景,本文選用了電阻應變電橋式傳感器作為電子秤的感受前端,具體型號為10Kg稱重量程YZC-133型傳感器,該傳感器一般用于廚房秤,輸出靈敏度為1.0±0.15mv/V,非線性度最大為0.05%,輸出為4色線纜,紅色E+和黑色E-為激勵電壓輸入,綠色A+和白色A-為電橋電壓輸出。
本文設計的電子稱系統由電阻應變電橋式壓力傳感器、CS1237采集單元、STC8主控單元、系統供電單元、字符液晶單元、矩陣鍵盤單元及通信接口單元等7個子單元組成,整體框架如圖2所示。傳感器上放置待測重物,在壓力作用下電橋的輸出電壓會發生改變,此時CS1237芯片的內置放大器會將微弱電信號進行放大,然后量化電壓并進行濾波處理,處理后的電壓信號經過24位高分辨率模數轉換后成為數字信號,再與STC8主控單元進行對接。單片機主控將CS1237的數據進行處理,即可得到待測物體重量。整個系統由直流單5V供電,字符液晶為1602型液晶,矩陣鍵盤為4×4形式,這兩個單元構成了電子秤的人機交互部分。系統還預留了串口通信單元,可將量化數據傳送到PC機或者其他微處理器單元。

圖2 電子秤系統結構框圖
電子稱的硬件電路主要是CS1237電路及STC8單片機電路,其它的矩陣鍵盤電路、獨立按鍵電路和字符型1602液晶電路較為簡單,此處不做贅述。系統硬件的核心電路原理如圖3所示。
分析電路構成,CN1和CN2是排針,用于連接YZC-133型傳感器的4根輸出線。U1即為24位高分辨率低功耗的CS1237模數轉換芯片,C1、C2、C5和C6是濾波電容,主要用于平滑電源和旁路高頻干擾。傳感器的E+是激勵電源的正極,需要接到U1的1腳和8腳(需要說明的是:在沒有配置CS1237內部寄存器時,默認將芯片的參考電壓設定為與VDD相等的電壓),傳感器的E-直接到地(即為參考0V)。傳感器的A-和A+是輸出信號,該信號幅值僅為毫伏級別且容易波動,所以在CS1237芯片的AINN和AINP這對差分通道上分別做了兩級RC低通濾波器,即R1、C2和R2、C4,以確保輸入信號的穩定。R3和R4是通信線路的限流電阻,以限制其他通信器件與CS1237芯片之間在通信過程中產生較大的拉灌電流。
U2是STC8單片機,具體型號為STC8H3K64S4,該單片機是STC公司推出的增強型8051內核單片機,具備4個串口,引腳的利用率也很高。U2的引腳分配了P3.6和P3.7給CS1237芯片做兩線SPI通信,又分配了P1.0、P1.1、P1.2和P1.6做獨立按鍵,主要實現電子秤去皮、皮重、校準和累加功能。分配P4.1、P4.2和P4.3作為字符型1602液晶模塊的控制線,P2端口組則作為液晶模塊的8位并行數據線,P1端口組搭建出4×4矩陣鍵盤,P3.0和P3.1是UART通信接口。

圖3 電子秤系統核心電路原理圖
硬件搭建完畢后需編制軟件功能,軟件編寫有兩個重點部分即:CS1237芯片的通信與校準、稱重后的顯示、計價及功能體現。軟件部分的功能流程如圖4所示。單片機上電后開始執行相應功能的初始化,然后與CS1237進行通信,取回當前重量進行數值顯示,在整個過程中單片機會不斷檢測矩陣鍵盤和獨立按鍵,當有獨立按鍵按下時就會觸發去皮、皮重、校準和累加等功能,當矩陣鍵盤按下時可設定單價或者計量方法,最后把計算后的金額送到1602液晶上顯示。

圖4 電子秤系統功能流程圖
當CS1237芯片的DOUT引腳由高電平變為低電平且持續保持時說明系統進入了數據交換的準備狀態,此時若出現第一個SCLK時鐘輸入即可將最高位讀出,在經過24個SCLK時鐘脈沖后,CS1237芯片中的24位數據將全部讀出。若第25個SCLK時鐘到來且DOUT引腳為“1”時,則表明寄存器Config被寫入了新的值(若用戶將Config[7:0]配置為0x0C,則芯片的功能將設定為:使用內部REF作為參考電壓、輸出頻率為10Hz、通道PGA的增益為128倍、選擇通道A作為輸入)。第26個SCLK時鐘到來時的DOUT引腳應該一直為“0”,這個狀態是CS1237芯片的擴展保留位。當第27個SCLK時鐘到來時把DOUT拉高再拉低,表示新的數據已經準備好,此時可以重新進行下一次數據的轉換了。按照思路使用C語言編寫的CS1237初始化函數Init_CS1237()的源碼如下:
void Init_CS1237(void) //CS1237初始函數
{
Con_CS1237(); //配置CS1237
if(Read_CON() != CS_CON)
//如果讀取的ADC配置出錯,則重啟
for(i=0;i<3;i++)
//循環讀取CS1237芯片采樣值,獲取穩定數值
{AD_Res_Last = Read_CS1237(); }
//獲取CS1237電壓采樣值
}
完成對CS1237芯片的初始化配置之后需手動對采集線性度k值進行校準。校準過程為:首先系統自動獲取未放待測物(認定為0g)時CS1237芯片采集到的電壓Tare,然后通過按鍵獲取500克重物(一般采用標準砝碼校準電子秤)采集到的電壓Weight_500g,最后通過程序對線性度重新進行計算,可用C語言編寫線性度校準Weight_calibration()函數,其源碼如下:
void Weight_calibration(void) //校準函數
{
if(KEY1)
//校準按鍵按下
{
KEY1 = 0;LED1 = 0;
//鍵值清零且指示燈點亮,表示為正在校準
Weight_500g = Read_18Bit_AD();
//獲取500克重量采集電壓
Weight_Coe = Weight_500g - Tare;
//除去皮重的ADC數值
Weight_Coe = 500000 / Weight_Coe;
//放大1000倍的斜率k
Tare_Coe = Weight_Coe * Tare;
//皮重的重量,放大1000倍之后的
LED2 = 1; //指示燈熄滅,表示為校準完成
}
}
系統完成校準后會自動把線性度k值保存在單片機EEPROM單元之中,故而無需每次上電都做校準。校準后的電子秤就可以正常使用了,此時將被測物體放置于稱盤上,字符型1602液晶會實時顯示出重物WE,用戶可通過矩陣鍵盤可輸入價格PR,系統會自動計算出單價S,在多件物品的測量中還可以通過按鍵把每件物品的小計價格進行累加,最終顯示出總價T。該部分即為電子秤的計價功能體現,Display()函數的源碼如下:
void Display(void) //顯示函數
{
if(Work_Count == 2) //每100ms刷新一次顯示
{
Work_Count = 0; //標志位清零
Display_Weight(); //顯示重量
Getkeyboard(); //矩陣鍵盤輸入單價
money=Get_Weight*price/1000; //計算價格
Display_Money(); //顯示總價
if(KEY2) //累計總價按鍵按下
{
KEY2 = 0; //標志位清零
total_money += money; //計算累加后的總價
Display_Money(); //顯示總價
}
}
}
硬件設計完成后開始試制樣機并進入聯調階段,制作完成的樣機實物如圖5所示。樣機測試的第一個環節是稱重測試(實際測量了一卷焊錫絲,實測重量330g,與標準儀器所測結果一致)。斷電情況下先將電阻應變電橋式壓力傳感器正確連接到CS1237電路的輸入端子,再將字符型1602液晶模塊插接在系統上。檢查供電電壓是否為5V并正確連接到模塊上,此時開機應觀察到液晶上顯示出空載重量。用戶可以放500g砝碼重新校準系統,也可以直接對物品進行稱重測試。

圖5 電子秤系統樣機實物與測試圖
系統基礎功能正常后應進行一次校準,修正線性度k值,校準所用物品選取實驗室標準砝碼。本文選用的電阻應變電橋式傳感器的非線性度小于千分之五且CS1237的分辨率可達24位,所以理論上的測重誤差應在1g左右,為了驗證理論估算,本文進行了樣機實測,表1即為實測結果。

表1 電子秤樣機實測數據
經過樣機實測,本文設計的電子秤在10kg范圍內的最大誤差重量為2g,基本與理論估算一致,究其原因應該是在電阻應變電橋式傳感器的出廠均一度、CS1237芯片的供電電壓、電路干擾等方面存在差異,若需要嚴格控制在1g以內還需分段校準,在程序上加以補償。稱重測試完畢后通過矩陣鍵盤設置了物品單價,系統能自動計算價格,人機交互部分符合預期。
本文系統作為單片機類電子工藝實訓項目在研發實訓中取得了較好的成果,本文以應變電橋傳感器及CS1237模數轉換芯片為核心,結合STC8單片機和人機交互單元設計并實現了一款高精度電子秤系統。通過樣機測試驗證了系統功能,可滿足一般稱重需求,但還有較大的改進空間。比如完善數據濾波算法減少數據抖動、又如分段程序補償改善非線性度的誤差影響,或者在程序中設置常用單價表格以減少每次手動輸入的繁瑣,還可以設置微調按鍵,當壓力傳感器長時間使用后會有形變和本身誤差,可通過手動微調修正傳感器誤差等。在實際產品化的過程中還需考慮更多需求和環境適用,以確保電子秤的功能及性能。