我使用的单片机是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)
* buf[pi++]=disp_x, pi&=0x1f;
这种缓冲累计方法,似乎只适合2的整数幂。 8 16 32 ……
----------------------------------------
缓冲区的长度, 肯定选2的整数幂, 并非是指针的问题,
if (++pi>=20) pi=0 ---> 这样可以解决指针问题, 应该比 pi %= 20 效果好
但求平均值呢?
平均值1 = (n0+n1+...n19)/20 ------------ 这个可够费时的
平均值2 = (n0+n1+...n31) >> 5 ------------ 简单
一周热门 更多>