关于A/D采样值 ->送显示平滑处理思想求助?

2020-02-09 11:29发布

我使用的单片机是dspic30f2012 A/D产考基准采样的是MC1403 -> 2.5V 在电力系统中有1.2倍过载也就是X * 1.2 = 2.5v 单片机A/D最高被限定在2V。但单片机采样不了负极性,加1V偏移。12Bit A/D采样满度值就变成了±1638;如果想显示满度值866.0W  有:1638*21655>>12; ≈8659.8 这样处理是因为单片机内部含有16bit乘法器。处理除法要稍慢些。有此系数带来的就是A/D每变化一个字,显示值就变化了5个字!相对误差为0.6‰虽然可以达到技术要求但是5个字的蹦字看着难看!软件滤波方法不用说(采样频率6.4K,采样128点去掉一个最大值一个最小值平均,1s输出5次结果);我的问题来了,有什么样的思想可以稍微牺牲点响应速度,让显示值为一个字蹦字的假象!在输入信号不变的情况下,显示值尾数是±1为变化的范围还是5。要不然我也不会问这样的问题,刚在市场上买了一块表。也是用12位A/D的单片机处理的。回来测试,加上信号源。显示却很平滑。跳字范围也是5个字,但是他是以±1的循环变化。虽然响应速度有所下降,但是这种低价位的表,对于使用者来说没什么。希望处理过的同志给点思想!

前级采样的是时分割乘法器

(原文件名:plx.png)
Proteus仿真

(原文件名:dspic33fj32gp204.png)
Altium PCB

(原文件名:754.png)
硬件已经固定

(原文件名:752.png)
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
22条回答
my2009
1楼-- · 2020-02-09 13:05
设一个数组(比如32个整数), 保存最后的32个显示值(不是AD值), 然后显示(n0+n2..n31)/32, 不知可否?
NJ8888
2楼-- · 2020-02-09 13:43
滑动平均
wangqh1983
3楼-- · 2020-02-09 15:03
回复【1楼】my2009
-----------------------------------------------------------------------

保存最后的32个显示值(不是AD值)

1S设定出5次结果。6.4k的采样频率采样128点最多1S可以出50个结果;20ms就能完成128次采样。保持32个显示值时间应该没问题,思路没太理解,好像还是在滤波。并不能解决比如8660与8655两个数之间蹦字!可能我没叙述清楚,比如显示值当前显示的是8655对应AD值3275,当AD值为3276时显示直接就蹦到8660.虽然可以达到技术指标,但是对于用户来讲看着难看,我想牺牲点显示响应时间。采样速度不变,每秒钟输出显示结果最多可大50次。我用的是定时采样。1S出5次显示值,有800ms时间AD在休息。我在市场买的那块表说明书写着,消除临界值跳字,不知道指的是不是这个。我用标准源检那块表如8655 - 8660之间 他是8655、8656、8657、8658、8659、8660变化,只要给定输入值不变,这几个数在不定期变化,变化并不快,大概在500ms左右,上升一会,又落下!而我设计的表虽然很稳,但是是8655、8660两个数之间蹦。我用安捷伦监视AD输入信号有<0.6mv的临界值变化,蹦字跨度大我知道这是由于我乘的系数导致。且是正常的;12bitAD也就能做到这样了。我想弄成±1且变化,范围还是5个字的范围,我不知道这能不能说是用软件造出类似把AD位数提高的假象!似乎我买的那块表的软件设计者实现了。让显示变化更平滑一些。不想看到如显示尾数2、7/3、8这么蹦。
wangqh1983
4楼-- · 2020-02-09 20:54
回复【2楼】888888888888
-----------------------------------------------------------------------

可能你这个词更贴切!但方法是怎样的呢?希望能提供可行思想!
118139
5楼-- · 2020-02-10 02:15
 精彩回答 2  元偷偷看……
hcmsun
6楼-- · 2020-02-10 04:56
过采样

一周热门 更多>