称重系统设计

1.传感器简介

称重系统在工业级日常生活中应用非常广泛,从小型的电子称到大型的地磅。其中传感器大部分为电阻应变式压力传感器。一般由四个电阻应变片组成惠更斯电桥,安装在弹性体上。当有压力时,应变片随弹性体发生形变,电阻产生变化,电桥产生不平衡电压。一般压力与电桥不平衡电压成线性比例关系。

       传感器的输出电压一般比较小,为mV级别。具体取决于激励电压和传感器灵敏度。常见的灵敏度有1mV/V、2mV/V、3mV/V。对于2mV/V的传感器,在激励电压为5V时,满量程时输出电压为2mV/V*5V=10mV。

2.硬件设计

传感器信号比较小,需要放大后再进行AD采集。目前有很多称重系统专用的AD芯片,内部集成了放大器,大大简化了硬件电路的设计。如TI的ADS1231,芯海科技的CS1231、海芯科技的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;         if(READ_HX710_DOUT_PIN)           ad_val++;  }  HX710_SCLK_SET;  if(ad_val&0x800000)ad_val|=0xFF000000;  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 > TempCaliADCValue[1])//大于最大校准值    {        Sensor_Value = CaliSensorValue[1] + (float)(AD_Value - TempCaliADCValue[1])/(float)(TempCaliADCValue[1] - TempCaliADCValue[0]) * (float)(CaliSensorValue[1] - CaliSensorValue[0]);    }    else//在校准范围内    {        Sensor_Value = CaliSensorValue[0] + (float)(AD_Value - TempCaliADCValue[0])/(float)(TempCaliADCValue[1] - TempCaliADCValue[0]) * (float)(CaliSensorValue[1] - CaliSensorValue[0]);    }}

称重系统的一个重要功能就是去皮。上面程序中包括了去皮的功能,去皮即在原来校准AD值的基础上加上去皮AD值,作为新的校准AD值去计算。

AD去皮值=当前AD值-零点校准AD值。

 ZeroValue = ad_val - CaliADCValue[0];

本文介绍的只是一种常见的称重系统设计方案。在一些要求高的场合,可能需要对传感器进行蠕变补偿,采用交流激励等方式。

欢迎关注公众号"嵌入式技术开发",大家可以后台给我留言沟通交流。如果觉得该公众号对你有所帮助,也欢迎推荐分享给其他人。

  • 3
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值