崔國強(qiáng),詹 寧,羅德雨,易 漢,王玉花
(北方工業(yè)大學(xué) 信息學(xué)院,北京 100041)
電子秤的發(fā)展過程經(jīng)歷了由靜態(tài)稱量到動(dòng)態(tài)稱量、由模擬化到數(shù)字化、由低精度到高精度、由功能單一到功能多樣化的轉(zhuǎn)變。隨著單片機(jī)科技應(yīng)用迅猛的發(fā)展,在醫(yī)療設(shè)備、食品檢測(cè)、家用電器等方面向著更加精準(zhǔn)、更加便捷、更加智能、更加可靠的方向推進(jìn)[1]。
課題針對(duì)Analog Device 公司推出的模數(shù)轉(zhuǎn)換器AD7791 應(yīng)用于電子秤的設(shè)計(jì)實(shí)現(xiàn)。AD7791 是24 位Σ-Δ型ADC,精度高、穩(wěn)定性強(qiáng),可以滿足設(shè)計(jì)中對(duì)高精度數(shù)字電子秤的要求。該設(shè)計(jì)方案可以應(yīng)用于科學(xué)研究、食品藥品等領(lǐng)域需要較高精度的電子秤設(shè)計(jì)。
稱重傳感器的核心是電阻式應(yīng)變片,采用兩個(gè)零漂移放大器ADA4528-1 組成了前端差分放大電路,放大的電信號(hào)通過低通濾波器、差分濾波器限制進(jìn)入AD7791 的噪聲。STM32 單片機(jī)通過SPI 接口控制AD7791,將該模擬電信號(hào)進(jìn)行模數(shù)轉(zhuǎn)換,傳輸數(shù)據(jù)并運(yùn)算輸出到LED 顯示屏上。系統(tǒng)框圖如圖1 所示。

圖1 系統(tǒng)框圖Fig.1 System block diagram

圖2 前端處理電路仿真電路圖Fig.2 Front-end processing circuit simulation circuit diagram
根據(jù)設(shè)計(jì)的要求,決定選擇TCS-130 型電阻應(yīng)變式傳感器。TCS-130 的非線性誤差(傳感器輸出的電壓信號(hào)與被測(cè)物之間對(duì)應(yīng)關(guān)系程度的參數(shù))在0.02%左右,重復(fù)性誤差在0.015%左右,溫度影響在0.03%左右。此傳感器的內(nèi)部線路采用的是惠斯登電橋,因?yàn)榛菟沟请姌蚓哂泻芏鄡?yōu)點(diǎn),比如可以抑制干擾、抑制溫度過高或過低,從而降低對(duì)測(cè)量結(jié)果產(chǎn)生的影響,方便測(cè)量等。因此,此電阻應(yīng)變式傳感器也具有抑制溫度干擾、穩(wěn)定性高等優(yōu)點(diǎn)。TCS-130 型稱重傳感器的原理是當(dāng)重物作用于稱重板時(shí),電阻應(yīng)變片受力導(dǎo)致變形,從而其電阻也發(fā)生相應(yīng)改變,使電橋失去平衡,差動(dòng)信號(hào)隨之產(chǎn)生,以便于后續(xù)電路采集和處理這一重量數(shù)據(jù)。彈性體受力導(dǎo)致彈性體形變,任何微小的力都會(huì)導(dǎo)致稱重板發(fā)生形變[2]。
前端處理電路采用兩個(gè)超低噪聲的零漂移運(yùn)算放大器ADA4528-1、濾波器以及24 位ADCAD7791。
ADA4528-1 零漂移運(yùn)算放大器的優(yōu)點(diǎn)是具有超低噪聲,具有軌到軌輸入輸出擺幅,提供8 引腳MSOP 封裝。零漂移放大器的失調(diào)電壓漂移接近為零,額定溫度范圍為-40℃~+125℃,擴(kuò)展工業(yè)溫度范圍,放大器連續(xù)自行校正任何直流誤差,盡可能保持精確。除了低失調(diào)電壓和漂移外,零漂移放大器也沒有閃爍噪聲,這一特性對(duì)于電子秤在低頻或直流時(shí)進(jìn)行精確測(cè)量有極大的幫助。多用于醫(yī)療儀器、熱電偶、電子秤、稱重傳感器和橋式傳感器、手持式測(cè)試設(shè)備等精密儀器。ADA4528-1 的增益為1+2R5/R9,由圖2 中可得知R5 的值為11.3kΩ,R9 的值為60.4Ω。因此,可以求出此放大器的放大倍數(shù)為375 倍,也就說可以將稱重傳感器輸出放大375 倍。
兩片ADA4528-1 組成差分放大器,由應(yīng)變片組成的稱重傳感器輸出的電壓信號(hào)在輸入到ADA4528-1 放大器中放大,放大后的電信號(hào)分別通過電容C1、C2 和R5、R6 組成的低通濾波器,電容C5 和R7、R8 組成的差分濾波器,C3、C4 和R7、R8 一起構(gòu)成的共模濾波器進(jìn)行濾波,以此來抑制進(jìn)入AD7791 中的噪聲。該電路經(jīng)過載Multisin 軟件平臺(tái)上仿真電路如圖2 所示。
為了能仿真應(yīng)變片輸出的毫伏級(jí)微弱電壓信號(hào),將橋式電阻設(shè)置成圖2 中R1-R4 的值。放大后的電信號(hào)在經(jīng)過濾波后輸入到AD7791 中進(jìn)行模數(shù)轉(zhuǎn)換,將模擬信號(hào)轉(zhuǎn)化為數(shù)字信號(hào)。

圖3 單一轉(zhuǎn)換時(shí)序圖Fig.3 Single conversion timing diagram
AD7791 是ADI 推出的一款低功耗、完整的模擬前端,內(nèi)置24 位Σ-Δ 型低噪聲ADC、緩沖器和片內(nèi)數(shù)字濾波器。適用于測(cè)量寬動(dòng)態(tài)范圍,被廣泛應(yīng)用在低頻測(cè)量電路中。例如稱重秤、壓力測(cè)量、溫度測(cè)量、傳感器測(cè)量、智能變送器、電池應(yīng)用、便攜式儀器儀表等。AD7791 有3 種配置方式,分別是:?jiǎn)我晦D(zhuǎn)換方式、連續(xù)轉(zhuǎn)換方式和連續(xù)讀取方式。在單一轉(zhuǎn)換模式下,AD7791 會(huì)處于關(guān)斷模式。當(dāng)通過在模式寄存器中將MD1 設(shè)置為1,并將MD0 設(shè)置為0 來啟動(dòng)單次轉(zhuǎn)換時(shí),AD7791 會(huì)上電,執(zhí)行單次轉(zhuǎn)換,然后返回關(guān)斷模式。DOUT/ RDY 變?yōu)榈碗娖綍r(shí)表示轉(zhuǎn)換完成。從數(shù)據(jù)寄存器讀取數(shù)據(jù)時(shí),DOUT/RDY 將變高。如果CS 為低電平,DOUT/RDY 將會(huì)保持高電平,直到另一個(gè)轉(zhuǎn)換開始并完成。如果需要的話,即使DOUT/RDY 變高,也仍然可以多次讀取數(shù)據(jù)寄存器。單一轉(zhuǎn)換示意圖如圖3 所示。
由于一些默認(rèn)的設(shè)置滿足本設(shè)計(jì)的需求,所以在此不用配置。若想要控制AD7791,需要通過SPI 向AD7791 發(fā)送命令。同時(shí),如果要讀取ADC 采集的數(shù)據(jù),那么就要先發(fā)送0x38 命令給AD7791,這時(shí)再調(diào)用讀取數(shù)據(jù)的函數(shù),就可以得到采集值。
低電平信號(hào)在兩個(gè)零漂移放大器ADA4528-1 中進(jìn)行放大,又經(jīng)過低通濾波器、差分濾波器和共模濾波器對(duì)放大后的電信號(hào)的噪聲進(jìn)行抑制,最后將電信號(hào)輸入到ADCAD7791 中。
采用STM32 單片機(jī)控制器,通過SPI 接口對(duì)AD7791進(jìn)行數(shù)據(jù)讀取和數(shù)據(jù)處理。在本設(shè)計(jì)中,采用了GPIO 引腳模擬SPI 接口將數(shù)據(jù)傳輸?shù)組CU 中進(jìn)行處理。分別用GPIO 引 腳PA7、PA6、PA5、PA4 模 擬 了SPI 引 腳 中 的MOSI、MISO、SCK、NSS。
LCD 顯示模塊通過并行接口與STM32 相互連接。

圖4 主流程圖Fig.4 Main flow chart
STM32F103RBT6 作為主控芯片,它是ST 公司推出的增強(qiáng)型系列STM32F103 中的一員,具有高達(dá)1MB 的片上閃存,具有72MHZ 的最高主頻,豐富的外設(shè)(包括串口、定時(shí)器、蜂鳴器、LED、2.4 寸TFT-LCD 顯示屏、SD 卡接口、USART 接口、SPI 接口、擴(kuò)展接口等),還有USB、CAN 和集成電機(jī)控制模塊。Cortex-M3 采用32 位處理器內(nèi)核,擁有獨(dú)立的數(shù)據(jù)總線以及指令總線,共同分享一個(gè)4GB 的存儲(chǔ)器空間[4]。本次設(shè)計(jì)中用CT117E STM32 開發(fā)板,使用板上資源TFT-LCD、PA7、PA6、PA5、PA4 的GPIO 引腳模擬SPI 通信。
設(shè)計(jì)軟件部分主要包括以下3 個(gè)方面:ADCAD7791 的配置使用;基于SPI 通信協(xié)議建立STM32 與AD7791 的通信;對(duì)采集到的數(shù)據(jù)進(jìn)行處理后顯示到LCD 上。圖4 是設(shè)計(jì)流程圖。AD7791 采集SPI 核心代碼如下:
讀取ADC 采集值:
ad7791TimeCount = curTempData; //一定時(shí)間計(jì)算一次
CS_L; //拉低CS 值
SpiSendCom(0x38); //寫0X38 命令,進(jìn)行繼續(xù)讀模式
delay_us(20);
CS_L; //讀取數(shù)據(jù)
while(DI) //等待MISO 線變?yōu)楦唠娖?/p>
if(GetMs(curTempData) > 20)
SpiAnalogInitReset();
break; //如果超時(shí),則退出
readAd7791Data[readAd7791Count] = SpiReadData(); //獲得采集值

表1 采集數(shù)據(jù)Table 1 Collected data

圖5 比例關(guān)系Fig.5 Proportional relationship
將稱重傳感器放置于水平地面,將程序下載到開發(fā)板中調(diào)試。在接收到與施加重量成比例的電信號(hào)時(shí),將電信號(hào)與施加砝碼重量逐一記錄。記錄并找出數(shù)據(jù)中的比例關(guān)系,在保證溫度等外部環(huán)境保持不變的情況下,進(jìn)行多次測(cè)量。另外,為了使顯示結(jié)果更加精準(zhǔn),將比例函數(shù)分為兩段,在1g ~50g 時(shí)使用第1 個(gè)比例函數(shù),大于50g 的部分使用第2 個(gè)比例函數(shù)。采集到的數(shù)據(jù)表1 是20g ~160g的實(shí)際采集數(shù)據(jù)。
重量與采集信號(hào)電壓的比例函數(shù)關(guān)系圖如圖5 所示。
分段比例函數(shù):
if(adcVal > threshold)
weaghtVal = ((adcVal - b2)/k2); //如果大于50g,用系數(shù)2
else
weaghtVal = ((adcVal - b1)/k1); //小于50g,使用系數(shù)1
LCD 顯示:
static u32 uintPrice[2] = {20,20}; // 此數(shù)據(jù)為單價(jià)
static u32 weight[2] = {30,20};
//此數(shù)據(jù)為ADC 采集到的數(shù)據(jù),用于顯示在LCD 顯示屏上;需要ADC 傳入,實(shí)時(shí)改變。
static u32 TotalPrice[2] = {60,60}; // 此數(shù)據(jù)為總價(jià)格。
extern u32 readAverageVal; //此數(shù)據(jù)為求得的平均值。
利用AD7791 搭建精準(zhǔn)電子秤的設(shè)計(jì)與實(shí)現(xiàn)實(shí)驗(yàn)平臺(tái)。經(jīng)過測(cè)試:測(cè)量范圍在1g ~6KG 之間,測(cè)量范圍在10g 內(nèi)時(shí)測(cè)量精度能達(dá)到0.2g。