请问一下,我用PIC单片机的AD转换来测直流电压(0~5V),然后用数码管来显示(三位)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了请问一下,我用PIC单片机的AD转换来测直流电压(0~5V),然后用数码管来显示(三位)相关的知识,希望对你有一定的参考价值。

出现的问题是,数码管最后一位值在不挺的变化,我推测应该是AD每次的转换值不一样导致的结果,因为我把第一次和第二次转换之间加上延时的话数码管最后一位的变化速度就和延时的时间差不多,不知道该怎么解决啊?
请高手帮忙一下

加个数字滤波程序,理论就是:采AD值N次(如20次),存在内存里,然后程序将这20个数从低到高排列,取中间一位作为算出的AD值,每0.5s(或其它延时时间)进行一次数字滤波,这样得出的AD值就稳定了,这是中值滤波法,当然还有限幅滤波(就是设电压上下限)、平均数(去最大值和最小值,再求平均值)等数字滤波法,单片机做检测电压值一般都要用数字滤波。
给你个C语言的中值滤波法:
#define N 10
typedef unsigned int u16;

u16 voltage_filter(void)

char count,i,j;
static u16 value_buf[N];
u16 sum=0,temp;
for(count=0;count<N;count++)

value_buf[count] = GetADCValue(5);

for(j=0;j<N-1;j++)

for(i=0;i<N-j;i++)

if(value_buf[i]>value_buf[i+1])

temp = value_buf[i];
value_buf[i]=value_buf[i+1];
value_buf[i+1]=temp;



for(count=1;count<N-1;count++)
sum+=value_buf[count];
return (sum/(N-2));
参考技术A 明显是“AD每次的转换值不一样导致的结果”,可以用多次采样平均的简单的办法解决,就是不要每采一次都显示,可以采8、16、32、64次相加后平均再输出显示,这样就不会抖了,而且多次采样平均也符合统计学原则。(采8、16、32、64次是为了平均时方便用右移3、4、5、6位方式实现,速度快)追问

你说的这个应该就是中位值滤波法是吧?
,还有就是你说的“(采8、16、32、64次是为了平均时方便用右移3、4、5、6位方式实现,速度快) ”
我不是很明白,我刚学单片机,你能说清楚一点吗?
谢谢

本回答被提问者采纳
参考技术B 变化很正常,可能是电压本身就在变化,可以加一个判断,就是判断最后一个数码管显示的数值如果发生了多大的变化,你才更新它显示的内容,否则不更新最后一个数码管现实的内容。 参考技术C 你发个电路图看看

以上是关于请问一下,我用PIC单片机的AD转换来测直流电压(0~5V),然后用数码管来显示(三位)的主要内容,如果未能解决你的问题,请参考以下文章

请问;如何把0-10V电压信号变换成4-20mA电流信号?

如何将3V的电压转换成单片机管脚所需的5V电压?

微弱直流电压/电流信号的采样电路

5V带AD转换单片机的基准电压是不是能超过5V 也就是说5V单片机是不是能测量超过5V的电压?求赐教

谁能告诉我直流 电路 采集电压和电流的方法(最好有详细电路图)

单片机AD采集回来的数值如何能显示为对应的电压值?