打印

单片机程序处理问题

[复制链接]
2520|27
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
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 | 只看该作者

使用特权

评论回复
5
1014291919|  楼主 | 2014-7-18 17:10 | 只看该作者
ayb_ice 发表于 2014-7-18 14:50
差动比较就可以了

也就是回滞比较

可不可以说的详细点,我现在比如AD采集的电压为0.81V,那儿就转去1档执行相应程序,但是电压波动一下又变成2档,转去2档执行相应程序,这样就会不停切换档位。现在想做的是如何让档位不跳动,在分界线锁定1档或是2档。

使用特权

评论回复
6
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)

使用特权

评论回复
7
ayb_ice| | 2014-7-18 17:19 | 只看该作者
可以根据需要修改差动量

使用特权

评论回复
8
1014291919|  楼主 | 2014-7-18 17:34 | 只看该作者
ayb_ice 发表于 2014-7-18 17:19
可以根据需要修改差动量

你说的这个我想过,在AB之间保持先前量程,可以想象,如果先前是5档,切换到AB之间,那也保持5档不变么?这样貌似不合理,此时档位必须是1档或是2档,不可以保持不变的

使用特权

评论回复
9
lyjian| | 2014-7-18 22:57 | 只看该作者
那就不要让电压波动

使用特权

评论回复
10
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之间

使用特权

评论回复
11
ayb_ice| | 2014-7-19 08:33 | 只看该作者
这就是用软件实现斯密特触发器而已

使用特权

评论回复
12
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;

使用特权

评论回复
13
cuitjxg| | 2014-7-19 09:02 | 只看该作者
如果单片查AD是12位的话,你10毫伏的分辨率,完全可以做到不跳动
0.81V就是0.81V,不会跳到0.82V
这个我是做过的
在数码管上显示电压,不会有跳动

不会有跳动,就很容易判断档位了

使用特权

评论回复
14
NWPU_CHEN| | 2014-7-19 09:15 | 只看该作者
wolension 发表于 2014-7-19 08:35
可以这样判断:
   static u8  result = 0;
   if (voltage>= 4.15)  result =  6;   

你这想法明显不行,自己取个临界电压算算就知道了

使用特权

评论回复
15
NWPU_CHEN| | 2014-7-19 09:52 | 只看该作者
还是采用高分辨率的采样芯片吧,你这个还是比较蛋疼的,软件处理可以以第一次采样数值作为基准比较,后边的检测参考第一次的档位,或者加个滤波吧

使用特权

评论回复
16
gx_huang| | 2014-7-19 14:17 | 只看该作者
这个就是回差的处理,任何高精度ADC都会有中间值,不处理都会有抖动导致的频繁切换。
这是位式控制的最基本原理,搞清楚了原理,就会明白各种状态下,都不会乱跳。
程序还得**上次的档位,这样就不会抖动输出了。

使用特权

评论回复
17
gxliu08| | 2014-7-19 20:23 | 只看该作者
学习学习,涨知识

使用特权

评论回复
18
qqcaiyin| | 2014-7-20 11:35 | 只看该作者
1014291919 发表于 2014-7-18 17:34
你说的这个我想过,在AB之间保持先前量程,可以想象,如果先前是5档,切换到AB之间,那也保持5档不变么? ...

判断电压是不是在AB之间,然后在1档,2档之间随便选个赋值

使用特权

评论回复
19
创隆电子| | 2014-7-23 22:22 | 只看该作者
可以采用多次比较+电容滤波+差值计算=一ing该没有问题了

使用特权

评论回复
20
创隆电子| | 2014-7-23 22:22 | 只看该作者
也就是说用软件滤波+硬件滤波+差值比较

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

34

主题

101

帖子

2

粉丝