二元一次方程式解决零点漂移

今天看到同事写的一个算法,在这里和大家分享一下:

针对压力传感器的零点漂移,AD采样值在零点附近来回波动,这样的AD值根本没办法使用,但是如果直接限制幅度,会造成正压起始点和负压起始点抬高,又要显示从0开始,这就需要在限制幅度的基础上增加AD值平均分散法(自己乱命名的)。

优点:解决显示和输出非常稳定。(将波动值限制了,基本上用户用不到这样靠近零点的压力)

缺点:被做了算法的这段压力段与实际压力有微小的差异,接着看。

 

假如:输入压力的AD值范围是-1000~1000 , 但是在 -50<0<50这一段非常不稳定,其他的段就是线性的;然后-200<0<200是客户不用的(要用也没关系)。

int Display_number;

if(-200<ADC_Value<200)

{

      if(-50<ADC_Value<50) Display_number = 0;                                 //          1

     if(50<=ADC_Value<100)Display_number=ADC_Value-50;            //           2

     if(-50<=ADC_Value<-100)Display_number=ADC_Value+50;         //           3

     if(100<=ADC_Value<200)Display_number=ADC_Value*X+Y;        //           4

     if(-100<=ADC_Value<-200)Display_number=ADC_Value*X+Y;      //           5

}

第一句 就是将跳动的ADC值-50<ADC_Value<50直接不要,丢掉。

第二句 就是往正压方向的<100的ADC值范围50-100的显示为0-50

第三句 就是往负压方向的<-100的ADC值范围-500~-100显示为0~-50

第四句和第五句就是关键了;先讲第四句,第五句和第四句差不多。 简单屡一下就是输入量ADC_Value是100~<200,输出量就是Display_number是60~200,这里觉得有点迷糊的同学自己先屡屡;现在列出二元一次方程:

100X+Y=60;

200X+Y=200;

我们用代入消元法,将第一句变形 Y= 60 -100X;带入第二句:

200X + 60 - 100X = 200;   X=1.4;  将X带入第一句,得出Y= -80;

这样子就在200的时候输入和输出对应上了。

就相当于把<50的设为0 , 把50-<100的设为0-<50 , 把100-<200的设为60-<200 ;

把最后一段的压力100个点平均分散给140个点,是不是AD值平均分散法。还可以将这个总数个数拉长或缩短,视情况而定。

 

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值