你的位置:首页 > 操作系统

[操作系统]2016电子设计比赛【简易电子秤】的设计


                                                                        文:  小波/QQ463431476  

今年暑假参加了电子设计比赛,4天3夜(2016/7/25---7/29)选了个电子秤,所以想说说一点心得分享一下。秤可以测量,用了滤波和一个线性的方程。

         硬件部分主要焊接4个电阻应变片搭建一个全桥电路,然后经过放大器,将电压信号放大,HX711拥有一个24位 AD    来采集电压值,经过数字量与重量值得转换(拟合方程) ,得到最终的真实重量值。

            介绍一下电阻应变片,就是可以发生形变的电阻,电阻值改变电压或者电流就可以改变。(图一)

           

                                     (图一电阻应变片)

            然后就是利用这个电阻应变片搭建电路来测受力后发生的形变量,那为什么搭建全桥电路呢?

 应变式传感器常用的测量电路有单臂电桥、差动半桥和差动全桥,其中差动全桥可提高电桥的灵敏度,消除电桥的非线性误差,并可消除温度误差等共模干扰。 

 一般在测量中都使用4片应变片组成差动全桥,本设计所采用的传感器就是全桥测量电路。 桥式测量电路有四个电阻,其中任何一个都可以是电阻应变片电阻,电桥的一个对角线接入工作电压U,另一个对角线位输出电压U0。当四个桥臂电阻达到相应关系时,电桥输出为零,或则就有电压输出,可用灵敏检流计来测量,所以电桥能够精确地测量微小的电阻变化。应变电阻作为桥臂电阻接在电桥电路中。无压力时,电桥平衡,输出电压为零;有压力时,电桥的桥臂电阻值发生变化,电桥失去平衡。 全桥测量电路中,将受力性质相同的两片应变片接入电桥对边。其输出灵敏度比半桥提高了一倍,非线性误差和温度误差均得到了改善。

                                                                            (图2 放置位置)

                                                                        (图 3 全桥电路)

              然后将采集信号放大,AD转换,用了HX711.

              HX711是一款专为高精度称重传感器而设计的24位A/D转换器芯片。 所有控制信号由管脚驱动, 输入选择开关可任意选取通道A或通道B,与其内部的低噪声可编程放大器相连。通道A的可编程增益为128或64,通道B则为固定的64增益,用于系统参数检测。芯片内提供的稳压电源可以直接向外部传感器和芯片内的A/D转换器提供电源,芯片内的时钟振荡器不需要任何外接部件.

 

                                                                   (图4 HX711)

 

然后对数据的处理采用了一种滤波方式,也算是自己改编的滤波方式,所谓滤波就是求平均值,让数值稳定下来。采用了一种滑动滤波,先进先出的原则,数据比较平滑。

看这个算法,先看看我以前的一道C语言题吧!

就是8个评委打分,去掉一个最低和一个最高分,其余求平均值。aver = (sum - a[max]-a[min])/6

6.png

 

所以就采用了这种思想。然后将最后一个数组元素值赋值给前一个元素值。a[i]=a[i+1]

 
 递推平均滤波法(又称滑动平均滤波法)
把连续取得的N个采样值看成一个队列,队列的长度固定为N,
每次采样到一个新数据放入队尾,并扔掉原来队首的一次数据(先进先出原则),
把队列中的N个数据进行算术平均运算,获得新的滤波结果。
N值的选取:流量,N=12;压力,N=4;液面,N=4-12;温度,N=1-4。
 优点:
对周期性干扰有良好的抑制作用,平滑度高;
适用于高频振荡的系统。
 缺点:
灵敏度低,对偶然出现的脉冲性干扰的抑制作用较差;
不易消除由于脉冲干扰所引起的采样值偏差;
不适用于脉冲干扰比较严重的场合;
比较浪费RAM。
 

[cpp] view plain copy


  1.      while(1)  
  2.     {  
  3.            float filter_sum = 0;  
  4.            float sum =0 ;  
  5.        int i;  
  6.        sum  = Read_HX711();  
  7.        sum = sum/1000;   
  8.            filter_buf[FILTER_N] = sum;  
  9. for(i = 0; i < FILTER_N; i++)   
  10. {  
  11. filter_buf[i] = filter_buf[i + 1];   
  12. if(filter_buf[i]>filter_buf[max])  
  13. {  
  14.     max = i;  
  15. }     
  16. if(filter_buf[i]<filter_buf[min])  
  17. {  
  18.      min = i;  
  19. }  
  20. filter_sum += filter_buf[i];  
  21. }  
  22.     filter_sum = filter_sum - filter_buf[max] - filter_buf[min];  
  23.   
  24.     sum = filter_sum / FILTER_N-2 ;     
  25. http://www.cnblogs.com/xiaobo-Linux/  QQ463431476

最后是自己做一下拟合方程,将数字量转成重量。

可以用matlab,我们不会就没用。。。。(>﹏<),,,

根据电阻应变片的形变量(数字量)与所放标准砝码存在一定的线性比例关系。当未放任何物品时,电阻应变片的形变数字量为262.5,也就是形变量的漂移差值,然后根据50g、100g、150g所放砝码产生的形变量的差值,得出一元一次方程并呈现上升的趋势,所得线性方程为

sum = (sum*(50/16.3) -((2619*5)/16.3))。

做了滤波数据还是比较稳定的,就是6g左右误差为1左右,50g以上误差0.5以内。

设计照片留念:

可以交流哟~下面留言吧~~~QQ463431476