如何利用稱重傳感器和微控制器建立稱重秤
在這個項目中,使用C8051微控制器開發套件、稱重傳感器和Simplicity Studio IDE制作一個稱重秤。測量的重量將顯示在LCD屏幕上。
液晶顯示器該項目中使用的液晶顯示器是硅實驗室的一部分CP2400丹麥克朗開發工具包

圖1Silicon Labs CP2400DK開發套件(C8051微控制器和LCD控制器)。圖片由數字鍵.
LCD設備本身的制造商零件號(圖2)為VIM-878-DP-RC-S-LV. 如果您包括小數點和撇號(每個數字),這個“14段”LCD顯示器將變成16段顯示。當把8位數的16段相加時,我們看到總共128段。這種128段顯示器要求使用128段驅動程序,硅實驗室決定使用驅動程序p/nCP2400型(圖3)

圖2液晶屏,8位數字各有16段(共128段)。圖片由數字鍵.

圖3128段LCD驅動程序。圖片由硅實驗室(第1頁和第22頁)。
我選擇使用的稱重傳感器是由 Uxcell公司,型號# a14071900ux0057 .

圖4稱重傳感器。圖片由亞馬遜.
這種特殊的稱重傳感器通常稱為直桿式稱重傳感器或平行梁式稱重傳感器。通常情況下,此類負載為額定負載;本項目中使用的最大重量為10公斤(或22磅)。其廣告額定輸出為1±0.15mV/V。這意味著,當稱重傳感器施加其最大額定重量(本例中為10kg)時,每1V施加在稱重傳感器勵磁上的輸出電壓為1mV(±0.15mV)(見下圖)。當我說電壓是“施加在測壓元件上”時,電壓實際上是施加在惠斯通電橋應變計的勵磁引線上。同樣的,這就是惠斯通應變計產生輸出電壓(見下圖)。

圖5稱重傳感器的惠斯通電橋應變計示意圖。
對于這個項目,我將采用5V作為勵磁;因此,當向稱重傳感器施加10kg負載時,其輸出將為5.0mV(±0.75mV)。因為5.0mV是一個很小的電壓,它需要在被發送到微控制器之前被放大。
旁注:一些微控制器不是在這個項目中使用的有差分ADC輸入;單端輸入被認為是大多數微控制器的標準輸入。當使用帶有單端ADC輸入的微控制器時,當傳感器提供差分輸出信號時,一個差分放大器必須利用。這種類型的放大器將差分信號轉換為單端信號,可使用標準單端ADC進行測量。
儀表放大器我選擇使用的差分放大器實際上被稱為儀表放大器,或安培。我用INA126PA公司輸入安培數德州儀器-我買了這個裝置從Digi Key3.15美元。但是,當它不能像廣告中所說的那樣運行時,經過大約一個小時的故障排除,我決定轉移到B計劃:使用AD627型(來自模擬設備),我也買了。我買了這個零件鈥數量一-從Digi Key以一個驚人的價格 $8.45! 我不知道這些安培表要花這么多錢!幸運的是,這個裝置工作正常。因此,我想我將來會使用模擬設備中的in-amp器件,而不是TI部件,盡管一般來說,我是TI部件和價格的粉絲。設置這兩個單位的增益很簡單:只需要一個外部電阻。此外,TI和模擬設備部分都被宣傳為單電源或雙電源設備,我更喜歡使用單電源。

項目# | 描述/來源 | 成本(每個) | 其他信息 |
1 | C2400DK開發套件 | $148.75 | 用戶指南 |
2 | 試驗板 | $8.98 | 或同等產品 |
3 | 跨接導線套件 | $6.20 | 或同等產品 |
4 | 10kg稱重傳感器 | $8.14 | 或同等產品 |
5 | 儀表放大器 | $8.45 | 數據表 |
6 | 1 kΩ電位計 | $2.41 | 數據表 |
7 | 機螺釘(M4-0.7 x 25mm)。 | $0.76 | 或同等產品 |
8 | 機用螺釘(M5-0.8 x 25mm)。 | $0.76 | 或同等產品 |
微控制器使用SPI公司用于與LCD驅動程序通信的接口(SPI通道1)如下圖7所示,Simplicity Studio的硬件配置GUI顯示了如何配置C8051的SPI。

圖7SPI接口配置
如前所述,施加在稱重傳感器上的勵磁電壓為5.0VDC,將產生5mV的輸出電壓(滿載22 lbs)。雖然微控制器的ADC的輸入范圍是0到3.3V,但我希望3V對應于全負荷(22磅)。這將為稱重傳感器的過載提供一些凈空,即滿載的120%,或26磅。在這些條件下,我可以計算出所需的放大器增益,然后選擇適當的增益電阻值(RG ).
5mV?Gain=3000mV
Gain=3000mV/5mV=600
RG公式(perAN627產品介紹第22頁):
RG=200kΩ Gain?5
RG=336Ω

圖8連接圖。重要的是去耦電容器(Cone)盡可能靠近AD627的電源插腳
在給微控制器開發套件通電之前,在完成所有連接后,請確保按如下方式配置:
跳線:
J11:VBAT到GND
J12:VDD到VIO
J17:VBAT_引腳到VBAT
開關:
SW4:設為“2單元”
電源開關(SW5)置于“關閉”位置
電纜:
將帶狀電纜調試適配器連接到J9
將USB調試適配器連接到電腦。
向接頭P2施加5.0 VDC電壓。
令我驚訝的是,測壓元件本身有螺紋孔。這使得在將稱重傳感器連接到底板時非常方便。再一次,令我驚訝的是,一組洞比另一組大。嗯,我不知道制造商為什么這么做,但是,盡管如此,我還是在當地的五金店找到了合適的螺絲。
數量2:機械螺釘,M4-0.7 x 25mm
數量2:機用螺釘,M5-0.8 x 25mm
注:這四個螺釘(25毫米)的長度取決于墊片和底板本身的厚度。

圖9稱重傳感器安裝在底板上。
類似于我的另一個項目(在轉速表和速度表上增加LCD和鍵盤),在這個項目中,我充分利用了Silicon Lab的示例LCD項目(CP240x_LCD_example),這使我的固件編寫任務更加容易。
輸入放大器的輸出連接到端口0.6,這是微控制器ADC的輸入。下面是我在固件中加入的特性/優點的列表:
固件在將數據發送到LCD屏幕之前,采集并平均200個測量電壓的樣本。
如果施加的負載大于或等于23磅,LCD將顯示“過載”
當系統首次通電時,固件將顯示皮重(即啟動時的重量變為零重量)。
LCD配置為在小數點后顯示一位數字。
//---------------------------------- // Main Application Loop //---------------------------------- while (1) { //----------------------------------------------------------------------- // Measure Analog Value //----------------------------------------------------------------------- // // Take ADC conversion. // // Initiate a Conversion AD0INT = 0; // clear ADC0 conv. complete flag AD0WINT = 0; // clear window detector flag AD0BUSY = 1; // initiate conversion // Wait for conversion to complete while(!AD0INT); // Vref (mV) // measurement (mV) = --------------- * result (bits) // (2^10)-1 (bits) mV = ADC0; mV *= VREF; mV /= 1023; lbs = (float) (mV * 22.0 / 300.0); // The multiplying factor is actually 22lbs/3000mV, but 300 // is used for displaying one digit after the decimal point. if(zero_scale == 0) // Used for zeroing the scale during power-up. { zero_offset = lbs; zero_scale = 1; } lbs = (lbs - zero_offset); AverageAccumulator += lbs; // Add the current lbs measurement to the accumulator. AverageMeasurements--; // Decrement the measurement counter. if(AverageMeasurements == 0) { // Calculate the average value: divide the summed AverageAccumulator by the // number of measurements. lbsAverage = (AverageAccumulator / 200.0); AverageAccumulator = 0; // Reset AverageMeasurements = 200; // Reset if(lbsAverage >= 230) // If the measured weight is greater than equal to // 23.0 lbs, then display "OVERLOAD" on the LCD screen. // The load cell is rated at 10kg (or 22 lbs), with // safe overload of 120%, or 12kg (26 lbs). { sprintf(display_string, "OVERLOAD"); } else sprintf(display_string, "d lbs ", (unsigned int) lbsAverage); } //----------------------------------------------------------------------- // Update LCD //----------------------------------------------------------------------- // // Update the LCD Display // LCD_OutString(display_string); }
這個項目的所有代碼都可以從下面的鏈接下載。
生成并加載代碼,并驗證刻度的準確性稱重稱重秤
在下載、構建和加載代碼之后,我使用廚房秤作為測量體重的參考/比較。如視頻(下圖)所示,我放置了各種重量樣本(我大學時的舊課本!)首先是廚房秤,然后是稱重傳感器系統。正如你所觀察到的,兩個刻度在顯示的測量值上非常接近。
制造真正產品的下一步如果您或我決定使用定制的PCB設計基于此項目制作一個實際的重量測量系統,請務必遵循中所述的接地和布局建議數據表(第20頁)。此外,用金屬板代替木制底板將增加物理設計的穩定性和穩健性。
稱重快樂!
*博客內容為網友個人發布,僅代表博主個人觀點,如有侵權請聯系工作人員刪除。