1.傳感器簡介
稱重系統在工業級日常生活中應用非常廣泛,從小型的電子稱到大型的地磅。其中傳感器大部分為電阻應變式壓力傳感器。一般由四個電阻應變片組成惠更斯電橋,安裝在彈性體上。當有壓力時,應變片隨彈性體發生形變,電阻產生變化,電橋產生不平衡電壓。一般壓力與電橋不平衡電壓成線性比例關系。傳感器的輸出電壓一般比較小,為mV級別。具體取決于激勵電壓和傳感器靈敏度。常見的靈敏度有1mV/V、2mV/V、3mV/V。對于2mV/V的傳感器,在激勵電壓為5V時,滿量程時輸出電壓為2mV/V*5V=10mV。
2.硬件設計
傳感器信號比較小,需要放大后再進行AD采集。目前有很多稱重系統專用的AD芯片,內部集成了放大器,大大簡化了硬件電路的設計。如TI的ADS1231,芯??萍嫉腃S1231、海芯科技的HX710等。這些芯片都是24位AD,且集成了128倍的放大器(部分芯片放大倍數可設置)。本文以HX710為例進行介紹。其電路圖如下:
查詢手冊可以看到芯片5V供電時的性能要優于3V供電。但需要注意的是HX710的AVDD不能大于DVDD,而目前大部分單片機為3.3V供電,所以這里都用3.3V供電。ADS1231是沒有這個限制的,即DVDD可以是3.3V,AVDD可以是5V。
芯片共模輸入電壓范圍為AGND+0.9V到AVDD-1.3V,這一點在其它應用時需要注意。芯片差分輸入電壓范圍為±0.5VREF/放大倍數(128)≈±12.89mV。對于3.3V激勵電壓,2mV/V靈敏度的傳感器,最大輸出電壓為±6.6mV,在芯片要求范圍內。兩個值相差近一倍,會損失約1位的分辨率。激勵電壓越大,傳感器輸出電壓越接近AD的輸入范圍,AD的分辨率就越能得到有效利用。但也要綜合考慮整個電源系統的設計。
另外,傳感器的激勵電壓盡量與芯片的VREF采用同一個電源,這樣可以抑制一些共模干擾。
3.軟件設計
芯片與單片機接口簡單,一個數據輸出引腳DOUT,一個時鐘引腳SCK。
當AD一次轉換完成后,DOUT由高電平變為低電平,此時SCK引腳輸入25~27個不等的時鐘脈沖,每個時鐘的上升沿從DOUT讀取數據。時序圖如下。其它芯片的讀取數據時序與此芯片基本相同。
程序編寫
int32_t ad_val=0;//AD值void Get_HX710(){ HX710_SCLK_CLR; if(READ_HX710_DOUT_PIN)return ;
for(i=0;i<24;i++) { HX710_SCLK_SET; ad_val=ad_val<<1; HX710_SCLK_CLR
傳感器校準
上面讀取的是AD原始值,轉換成重量前需要對傳感器進行校準。一般傳感器校準至少需要兩個點:零點和滿量程(當然,其它任意兩個點也可以,因為兩點確定一條直線)。對于一些要求高的場合,則需要多個點進行分段校準,甚至不同溫度區間進行校準。本文以兩個點的校準為例。校準數據包括零點校準值、零點AD值、滿量程校準值、滿量程AD值。
計算稱重值比較簡單,即在通過兩個校準點確定一條直線,找到該曲線上AD值對應的重量。程序如下:
int32_t CaliADCValue[2];//校準的AD值int32_t CaliSensorValue[2];//校準的傳感器值int32_t ZeroValue;//去皮AD值int32_t Sensor_Value = 0;//計算后的稱重值void CalcWeight(int32_t AD_Value){ int32_t TempCaliADCValue[2];//校準AD值
TempCaliADCValue[0] = CaliADCValue[0] + ZeroValue; TempCaliADCValue[1] = CaliADCValue[1] + ZeroValue;//去皮
if(AD_Value < TempCaliADCValue[0])//小于0點值 { Sensor_Value = 0; } else if(AD_Value > Temp
稱重系統的一個重要功能就是去皮。上面程序中包括了去皮的功能,去皮即在原來校準AD值的基礎上加上去皮AD值,作為新的校準AD值去計算。
AD去皮值=當前AD值-零點校準AD值。
ZeroValue = ad_val - CaliADCValue[0];
本文介紹的只是一種常見的稱重系統設計方案。在一些要求高的場合,可能需要對傳感器進行蠕變補償,采用交流激勵等方式。