单片机程序处理问题

[复制链接]
 楼主| 1014291919 发表于 2014-7-18 14:45 | 显示全部楼层 |阅读模式
现在用单片机处理一程序,将5V分为6个档位,0~0.82V为1档,0.82~1.64V为2档,1.64~2.46V为3档,2.46~3.28V为4档,3.28~4.1V为5档,4.1~5V为6档。现在想通过AD采集来判断档位,但是档位如果打在分界线如0.82V处,如果电压抖动,就会在1档和2档之间跳动,这是不允许的,该怎么处理这个问题?
ayb_ice 发表于 2014-7-18 14:50 | 显示全部楼层
差动比较就可以了

也就是回滞比较
高丽棒子 发表于 2014-7-18 15:23 | 显示全部楼层
PWM 来调节?
弥勒开怀笑 发表于 2014-7-18 16:13 | 显示全部楼层
 楼主| 1014291919 发表于 2014-7-18 17:10 | 显示全部楼层
ayb_ice 发表于 2014-7-18 14:50
差动比较就可以了

也就是回滞比较

可不可以说的详细点,我现在比如AD采集的电压为0.81V,那儿就转去1档执行相应程序,但是电压波动一下又变成2档,转去2档执行相应程序,这样就会不停切换档位。现在想做的是如何让档位不跳动,在分界线锁定1档或是2档。
ayb_ice 发表于 2014-7-18 17:18 | 显示全部楼层
1014291919 发表于 2014-7-18 17:10
可不可以说的详细点,我现在比如AD采集的电压为0.81V,那儿就转去1档执行相应程序,但是电压波动一下又变 ...

比如:

A=0.82+0.05
B=0.82-0.05

大于A=量程1
小于B=量程0

在AB之间保持先前量程(可能是0,也可能是1)
ayb_ice 发表于 2014-7-18 17:19 | 显示全部楼层
可以根据需要修改差动量
 楼主| 1014291919 发表于 2014-7-18 17:34 | 显示全部楼层
ayb_ice 发表于 2014-7-18 17:19
可以根据需要修改差动量

你说的这个我想过,在AB之间保持先前量程,可以想象,如果先前是5档,切换到AB之间,那也保持5档不变么?这样貌似不合理,此时档位必须是1档或是2档,不可以保持不变的
lyjian 发表于 2014-7-18 22:57 来自手机 | 显示全部楼层
那就不要让电压波动
lyfly_away 发表于 2014-7-18 23:25 | 显示全部楼层
1014291919 发表于 2014-7-18 17:34
你说的这个我想过,在AB之间保持先前量程,可以想象,如果先前是5档,切换到AB之间,那也保持5档不变么? ...

1档2档有AB之间,4档5档有另一个AB之间
此AB之间非彼AB之间
ayb_ice 发表于 2014-7-19 08:33 | 显示全部楼层
这就是用软件实现斯密特触发器而已
wolension 发表于 2014-7-19 08:35 | 显示全部楼层
可以这样判断:
   static u8  result = 0;
   if (voltage>= 4.15)  result =  6;   
   else if(voltage >= 4.05)
   {
        if(result<5) result = 5;
        if(result >6) result = 6;
    }
   else if(voltage >= 3.33)  result = 5;
   else if(voltage >= 3.23)
   {
         if(result<4) result = 4;
         if(result >5) result = 5;
    }
   ........
   else if(voltage >=0.87) result = 2;
   else if(voltage >= 0.77)
  {
        if(result >2)  result = 2;
        if(result <1)  result = 1;
  }
  else result = 1;
cuitjxg 发表于 2014-7-19 09:02 | 显示全部楼层
如果单片查AD是12位的话,你10毫伏的分辨率,完全可以做到不跳动
0.81V就是0.81V,不会跳到0.82V
这个我是做过的
在数码管上显示电压,不会有跳动

不会有跳动,就很容易判断档位了
NWPU_CHEN 发表于 2014-7-19 09:15 | 显示全部楼层
wolension 发表于 2014-7-19 08:35
可以这样判断:
   static u8  result = 0;
   if (voltage>= 4.15)  result =  6;   

你这想法明显不行,自己取个临界电压算算就知道了
NWPU_CHEN 发表于 2014-7-19 09:52 | 显示全部楼层
还是采用高分辨率的采样芯片吧,你这个还是比较蛋疼的,软件处理可以以第一次采样数值作为基准比较,后边的检测参考第一次的档位,或者加个滤波吧
gx_huang 发表于 2014-7-19 14:17 | 显示全部楼层
这个就是回差的处理,任何高精度ADC都会有中间值,不处理都会有抖动导致的频繁切换。
这是位式控制的最基本原理,搞清楚了原理,就会明白各种状态下,都不会乱跳。
程序还得**上次的档位,这样就不会抖动输出了。
gxliu08 发表于 2014-7-19 20:23 | 显示全部楼层
学习学习,涨知识
qqcaiyin 发表于 2014-7-20 11:35 | 显示全部楼层
1014291919 发表于 2014-7-18 17:34
你说的这个我想过,在AB之间保持先前量程,可以想象,如果先前是5档,切换到AB之间,那也保持5档不变么? ...

判断电压是不是在AB之间,然后在1档,2档之间随便选个赋值
创隆电子 发表于 2014-7-23 22:22 | 显示全部楼层
可以采用多次比较+电容滤波+差值计算=一ing该没有问题了
创隆电子 发表于 2014-7-23 22:22 | 显示全部楼层
也就是说用软件滤波+硬件滤波+差值比较
您需要登录后才可以回帖 登录 | 注册

本版积分规则

34

主题

101

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部