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

圖1 系統框圖Fig.1 System block diagram

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

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

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

表1 采集數據Table 1 Collected data

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