一种经典适用的AD采样值进行滤波的方法

来源:本站
导读:目前正在解读《一种经典适用的AD采样值进行滤波的方法》的相关信息,《一种经典适用的AD采样值进行滤波的方法》是由用户自行发布的知识型内容!下面请观看由(电工技术网 - www.9ddd.net)用户发布《一种经典适用的AD采样值进行滤波的方法》的详细说明。
简介:在这里为大家介绍一种经典适用的AD采样值进行滤波的方法。

本节讲讲一种非常适用的采样AD值进行滤波的方法此滤波方法是把AD采样值经过两种处理:1 对当前三次AD采样值进行提取中间值处理在通常情况下,中值处理一次就够,但是必须的,因为AD偶尔会受到干扰导致采样到的值为0XFF或0X00,那么中值处理就可以滤掉这个干扰数据,否则你把这个干扰信号值即使累加后取平均,也会影响到整体的最终取值。2 对以上中间值进行累加取平均值处理累加次数看实际应用情况设定,一般8至64次足够,如果是做NTC温度采集的话建议把累加次数放大一些,这样温度不会跳得过于频繁。以下是一个采集电位器AD的实际应用//*************************************// 函数名称:Order_Byte// 函数功能:选择法对数组从小到大排序,返回中间数据// 入口参数:排序数据的首地址// 出口参数:无// 返 回 值:该列数据是的中间值 VC已验证//***************************************uint8 Order_Byte(uint8 *a) { uint8i,j,k;uint8tmp; uint8R_Tmp[3] ;uint8DataLong = 3 ;for(i=0;i<DataLong;i++,a++){R_Tmp[i] = *a ;}for(i=0;i<DataLong-1;i++){ k=i; /*给记号赋值*/ for(j=i+1;j<DataLong;j++) {if(R_Tmp[k]>R_Tmp[j]) k=j; /*是k总是指向最小元素*/ }if(i!=k){ /*当k!=i是才交换,否则a[i]即为最小*/ tmp=R_Tmp[i]; R_Tmp[i]=R_Tmp[k]; R_Tmp[k]=tmp; } } i = DataLong >> 1 ;return   R_Tmp[i] ;} //*************************************// 函数名称:CalculateAD// 函数功能:对所读的AD值进行滤波处理 得到稳定的AD值// 入口参数:无// 出口参数:无//***************************************void  CalculateAD(void) {static uint8 R_Save[3];//static uint8 R_Save2[3];static  uint16 R_SaveSum = 0 ;static uint8 Tcon = 0 ;uint8 Tmp,i ;/*第一次排序*/for(i=2;i>0;i--) {R_Save[i] = R_Save[i-1]}R_Save[0] = R_ADValue; //取AD值Tmp = Order_Byte(R_Save);// 排序 取中值/*第二次排序*//*for(i=2;i>0;i--) {R_Save2[i] = R_Save2[i-1]}R_Save2[0] = Tmp ; Tmp = Order_Byte(R_Save2);// 排序 取中值*/R_SaveSum += Tmp ;Tcon ++ ;if(Tcon >= (1<<4))  //16次累加{Tcon = 0 ; R_CuVr = (uint8)(R_SaveSum>>4) ;//取最终结果 10MS*16=160MS 出一次结果R_SaveSum = 0 ;}}//========================================void main(void){while(1){while(!F_10MS); //10MS 跑一次主程序F_10MS = 0 ;CalculateAD() ;//计算AD采样值}}

提醒:《一种经典适用的AD采样值进行滤波的方法》最后刷新时间 2024-03-14 00:58:03,本站为公益型个人网站,仅供个人学习和记录信息,不进行任何商业性质的盈利。如果内容、图片资源失效或内容涉及侵权,请反馈至,我们会及时处理。本站只保证内容的可读性,无法保证真实性,《一种经典适用的AD采样值进行滤波的方法》该内容的真实性请自行鉴别。