标题: 单片机AD结果送数码管显示,相邻的数字来回跳动显示,如何处理? [打印本页]

作者: zhth1979    时间: 2022-3-5 12:16
标题: 单片机AD结果送数码管显示,相邻的数字来回跳动显示,如何处理?
例如将0-1.25v电压送单片机的AD,数码管显示在两个数的临界点上时(如:在7-8的临界点上,数码管显示7或8 ,来回跳动),怎样处理跳动,使其显示几就是几,不再跳动!AD结果我试过求平均法并通过查表法显示,还是有跳动!

作者: 18701931930    时间: 2022-3-5 16:04
进行数字滤波,常用冒泡排序法
作者: tatachaoren    时间: 2022-3-5 20:14
1、最终的AD值采用平均值,比如采集32次相加,最后取平均值。
2、软件上设置一个跳动余量,当前的AD平均值和上次的AD平均值对比,如果差值小于自己的设定的跳动余量,则不刷新AD值
3、设置数码管刷新时间,比如0.5秒刷新一次数码管。
总之有很多方法可以限制数码管频繁跳动,我一般都是把三种方式一起用
作者: 188610329    时间: 2022-3-5 21:44
AD采样,必然是有跳动的,
但是,如果你认为他是稳定的,比如通过ADC测量室温,通常温度不会频繁变化。
此时,可以设置一个策略,比如: 17,18 度反复跳变 超过5次,则进入“迟钝状态”(即温度假想为 18 度,不再变动)只有当温度超过19,或者低于16,才再次进入“敏锐”状态。
作者: Y_G_G    时间: 2022-3-5 22:42
ADC是一定会跳动的,这是绝对的,ADC本身就是有一个上下浮动的误差
2#已经给出正确的方法了
我这个代码你参考一下,是参考,不是照抄        float Bat_Voltage,i;
        Bat_Voltage=(float)1.19*1024/ADC_data_bat;                                                                //STC8G的内部参考电压为1.19V
        i=Bat_Voltage-Last_Voltage;                         //本次电压值和上次电压进行比较,Last_Voltage为全局变量
        i=fabs(i);
        if(i>0.05)                                                                                                                                //电压变化值超过0.05V才进行处理
        {
                Last_Voltage=Bat_Voltage;

处理;
}

作者: zhth1979    时间: 2022-3-8 16:27
Y_G_G 发表于 2022-3-5 22:42
ADC是一定会跳动的,这是绝对的,ADC本身就是有一个上下浮动的误差
2#已经给出正确的方法了
我这个代码你参 ...

Bat_Voltage=(float)1.19*1024/ADC_data_bat; 这个应该是反了吧?应该ADC数据/1024吧?Bat_Voltage=(float)1.19*ADC_data_bat/1024;
作者: 2936566371    时间: 2022-3-8 16:33
很多原因会产生跳动啊
作者: Y_G_G    时间: 2022-3-8 18:29
zhth1979 发表于 2022-3-8 16:27
Bat_Voltage=(float)1.19*1024/ADC_data_bat; 这个应该是反了吧?应该ADC数据/1024吧?Bat_Voltage=(floa ...

大哥,我不是说参考,不要照抄了吗?
我这个是通过内部参考电压来计算电源电源的,不是计算IO端口的电压呀
只想给你看一下怎么处理而已
要是我有话,我是不可能等上那么多天的,这几天的时间,我至少上网找相关资料一百遍了,至少改代码100次以上了
作者: hei512020    时间: 2022-3-10 15:08
我这里说明一下我做AD采集时候的思路,你可以设置一个需要AD数据的间隔时间,时间越长,跳动越小,当然AD采集就不及时了,所以个时间可以根据实际情况而定;因为现在AD单次转换的速度都是比较快的,这样就是每一次想要AD数据的时候,在很短的时间内可以连续采集N次AD值,然后去掉最大值和最小值,然后再取平均数值,然后在和余量值比较(这个值可以自己多试几次,看看效果,取一个数就行),在余量之内,就不更新AD数据;超过余量值,就更新AD数据;
作者: 路过羊圈的狼    时间: 2022-3-10 15:57
跳动是必然的,不过可以提高分辨率,例如提高采样结果到1.456,你只显示1.45,可以减少跳动出现。
作者: hkhu    时间: 2022-3-10 16:22
四舍五入?不要让范围波动?
作者: wojiaoguogai    时间: 2022-3-10 16:47
窗口,在临界值附近时,变化必须大于多少才能显示
作者: zhxiufan    时间: 2022-3-10 18:10
出现跳动是因为你AD检测的结果前后两次不同所致。要灵敏度,跳动是无法避免的,除非牺牲灵敏度。




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1