崔國強,詹 寧,羅德雨,易 漢,王玉花
(北方工業(yè)大學(xué) 信息學(xué)院,北京 100041)
電子秤的發(fā)展過程經(jīng)歷了由靜態(tài)稱量到動態(tài)稱量、由模擬化到數(shù)字化、由低精度到高精度、由功能單一到功能多樣化的轉(zhuǎn)變。隨著單片機科技應(yīng)用迅猛的發(fā)展,在醫(yī)療設(shè)備、食品檢測、家用電器等方面向著更加精準(zhǔn)、更加便捷、更加智能、更加可靠的方向推進[1]。
課題針對Analog Device 公司推出的模數(shù)轉(zhuǎn)換器AD7791 應(yīng)用于電子秤的設(shè)計實現(xiàn)。AD7791 是24 位Σ-Δ型ADC,精度高、穩(wěn)定性強,可以滿足設(shè)計中對高精度數(shù)字電子秤的要求。該設(shè)計方案可以應(yīng)用于科學(xué)研究、食品藥品等領(lǐng)域需要較高精度的電子秤設(shè)計。
稱重傳感器的核心是電阻式應(yīng)變片,采用兩個零漂移放大器ADA4528-1 組成了前端差分放大電路,放大的電信號通過低通濾波器、差分濾波器限制進入AD7791 的噪聲。STM32 單片機通過SPI 接口控制AD7791,將該模擬電信號進行模數(shù)轉(zhuǎn)換,傳輸數(shù)據(jù)并運算輸出到LED 顯示屏上。系統(tǒng)框圖如圖1 所示。
圖1 系統(tǒng)框圖Fig.1 System block diagram
圖2 前端處理電路仿真電路圖Fig.2 Front-end processing circuit simulation circuit diagram
根據(jù)設(shè)計的要求,決定選擇TCS-130 型電阻應(yīng)變式傳感器。TCS-130 的非線性誤差(傳感器輸出的電壓信號與被測物之間對應(yīng)關(guān)系程度的參數(shù))在0.02%左右,重復(fù)性誤差在0.015%左右,溫度影響在0.03%左右。此傳感器的內(nèi)部線路采用的是惠斯登電橋,因為惠斯登電橋具有很多優(yōu)點,比如可以抑制干擾、抑制溫度過高或過低,從而降低對測量結(jié)果產(chǎn)生的影響,方便測量等。因此,此電阻應(yīng)變式傳感器也具有抑制溫度干擾、穩(wěn)定性高等優(yōu)點。TCS-130 型稱重傳感器的原理是當(dāng)重物作用于稱重板時,電阻應(yīng)變片受力導(dǎo)致變形,從而其電阻也發(fā)生相應(yīng)改變,使電橋失去平衡,差動信號隨之產(chǎn)生,以便于后續(xù)電路采集和處理這一重量數(shù)據(jù)。彈性體受力導(dǎo)致彈性體形變,任何微小的力都會導(dǎo)致稱重板發(fā)生形變[2]。
前端處理電路采用兩個超低噪聲的零漂移運算放大器ADA4528-1、濾波器以及24 位ADCAD7791。
ADA4528-1 零漂移運算放大器的優(yōu)點是具有超低噪聲,具有軌到軌輸入輸出擺幅,提供8 引腳MSOP 封裝。零漂移放大器的失調(diào)電壓漂移接近為零,額定溫度范圍為-40℃~+125℃,擴展工業(yè)溫度范圍,放大器連續(xù)自行校正任何直流誤差,盡可能保持精確。除了低失調(diào)電壓和漂移外,零漂移放大器也沒有閃爍噪聲,這一特性對于電子秤在低頻或直流時進行精確測量有極大的幫助。多用于醫(yī)療儀器、熱電偶、電子秤、稱重傳感器和橋式傳感器、手持式測試設(shè)備等精密儀器。ADA4528-1 的增益為1+2R5/R9,由圖2 中可得知R5 的值為11.3kΩ,R9 的值為60.4Ω。因此,可以求出此放大器的放大倍數(shù)為375 倍,也就說可以將稱重傳感器輸出放大375 倍。
兩片ADA4528-1 組成差分放大器,由應(yīng)變片組成的稱重傳感器輸出的電壓信號在輸入到ADA4528-1 放大器中放大,放大后的電信號分別通過電容C1、C2 和R5、R6 組成的低通濾波器,電容C5 和R7、R8 組成的差分濾波器,C3、C4 和R7、R8 一起構(gòu)成的共模濾波器進行濾波,以此來抑制進入AD7791 中的噪聲。該電路經(jīng)過載Multisin 軟件平臺上仿真電路如圖2 所示。
為了能仿真應(yīng)變片輸出的毫伏級微弱電壓信號,將橋式電阻設(shè)置成圖2 中R1-R4 的值。放大后的電信號在經(jīng)過濾波后輸入到AD7791 中進行模數(shù)轉(zhuǎn)換,將模擬信號轉(zhuǎn)化為數(shù)字信號。
圖3 單一轉(zhuǎn)換時序圖Fig.3 Single conversion timing diagram
AD7791 是ADI 推出的一款低功耗、完整的模擬前端,內(nèi)置24 位Σ-Δ 型低噪聲ADC、緩沖器和片內(nèi)數(shù)字濾波器。適用于測量寬動態(tài)范圍,被廣泛應(yīng)用在低頻測量電路中。例如稱重秤、壓力測量、溫度測量、傳感器測量、智能變送器、電池應(yīng)用、便攜式儀器儀表等。AD7791 有3 種配置方式,分別是:單一轉(zhuǎn)換方式、連續(xù)轉(zhuǎn)換方式和連續(xù)讀取方式。在單一轉(zhuǎn)換模式下,AD7791 會處于關(guān)斷模式。當(dāng)通過在模式寄存器中將MD1 設(shè)置為1,并將MD0 設(shè)置為0 來啟動單次轉(zhuǎn)換時,AD7791 會上電,執(zhí)行單次轉(zhuǎn)換,然后返回關(guān)斷模式。DOUT/ RDY 變?yōu)榈碗娖綍r表示轉(zhuǎn)換完成。從數(shù)據(jù)寄存器讀取數(shù)據(jù)時,DOUT/RDY 將變高。如果CS 為低電平,DOUT/RDY 將會保持高電平,直到另一個轉(zhuǎn)換開始并完成。如果需要的話,即使DOUT/RDY 變高,也仍然可以多次讀取數(shù)據(jù)寄存器。單一轉(zhuǎn)換示意圖如圖3 所示。
由于一些默認(rèn)的設(shè)置滿足本設(shè)計的需求,所以在此不用配置。若想要控制AD7791,需要通過SPI 向AD7791 發(fā)送命令。同時,如果要讀取ADC 采集的數(shù)據(jù),那么就要先發(fā)送0x38 命令給AD7791,這時再調(diào)用讀取數(shù)據(jù)的函數(shù),就可以得到采集值。
低電平信號在兩個零漂移放大器ADA4528-1 中進行放大,又經(jīng)過低通濾波器、差分濾波器和共模濾波器對放大后的電信號的噪聲進行抑制,最后將電信號輸入到ADCAD7791 中。
采用STM32 單片機控制器,通過SPI 接口對AD7791進行數(shù)據(jù)讀取和數(shù)據(jù)處理。在本設(shè)計中,采用了GPIO 引腳模擬SPI 接口將數(shù)據(jù)傳輸?shù)組CU 中進行處理。分別用GPIO 引 腳PA7、PA6、PA5、PA4 模 擬 了SPI 引 腳 中 的MOSI、MISO、SCK、NSS。
LCD 顯示模塊通過并行接口與STM32 相互連接。
圖4 主流程圖Fig.4 Main flow chart
STM32F103RBT6 作為主控芯片,它是ST 公司推出的增強型系列STM32F103 中的一員,具有高達(dá)1MB 的片上閃存,具有72MHZ 的最高主頻,豐富的外設(shè)(包括串口、定時器、蜂鳴器、LED、2.4 寸TFT-LCD 顯示屏、SD 卡接口、USART 接口、SPI 接口、擴展接口等),還有USB、CAN 和集成電機控制模塊。Cortex-M3 采用32 位處理器內(nèi)核,擁有獨立的數(shù)據(jù)總線以及指令總線,共同分享一個4GB 的存儲器空間[4]。本次設(shè)計中用CT117E STM32 開發(fā)板,使用板上資源TFT-LCD、PA7、PA6、PA5、PA4 的GPIO 引腳模擬SPI 通信。
設(shè)計軟件部分主要包括以下3 個方面:ADCAD7791 的配置使用;基于SPI 通信協(xié)議建立STM32 與AD7791 的通信;對采集到的數(shù)據(jù)進行處理后顯示到LCD 上。圖4 是設(shè)計流程圖。AD7791 采集SPI 核心代碼如下:
讀取ADC 采集值:
ad7791TimeCount = curTempData; //一定時間計算一次
CS_L; //拉低CS 值
SpiSendCom(0x38); //寫0X38 命令,進行繼續(xù)讀模式
delay_us(20);
CS_L; //讀取數(shù)據(jù)
while(DI) //等待MISO 線變?yōu)楦唠娖?/p>
if(GetMs(curTempData) > 20)
SpiAnalogInitReset();
break; //如果超時,則退出
readAd7791Data[readAd7791Count] = SpiReadData(); //獲得采集值
表1 采集數(shù)據(jù)Table 1 Collected data
圖5 比例關(guān)系Fig.5 Proportional relationship
將稱重傳感器放置于水平地面,將程序下載到開發(fā)板中調(diào)試。在接收到與施加重量成比例的電信號時,將電信號與施加砝碼重量逐一記錄。記錄并找出數(shù)據(jù)中的比例關(guān)系,在保證溫度等外部環(huán)境保持不變的情況下,進行多次測量。另外,為了使顯示結(jié)果更加精準(zhǔn),將比例函數(shù)分為兩段,在1g ~50g 時使用第1 個比例函數(shù),大于50g 的部分使用第2 個比例函數(shù)。采集到的數(shù)據(jù)表1 是20g ~160g的實際采集數(shù)據(jù)。
重量與采集信號電壓的比例函數(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ù)為單價
static u32 weight[2] = {30,20};
//此數(shù)據(jù)為ADC 采集到的數(shù)據(jù),用于顯示在LCD 顯示屏上;需要ADC 傳入,實時改變。
static u32 TotalPrice[2] = {60,60}; // 此數(shù)據(jù)為總價格。
extern u32 readAverageVal; //此數(shù)據(jù)為求得的平均值。
利用AD7791 搭建精準(zhǔn)電子秤的設(shè)計與實現(xiàn)實驗平臺。經(jīng)過測試:測量范圍在1g ~6KG 之間,測量范圍在10g 內(nèi)時測量精度能達(dá)到0.2g。