logo资料库

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

第1页 / 共2页
第2页 / 共2页
资料共2页,全文预览结束
一种经典适用的AD采样值进行滤波的方法 一种经典适用的 采样值进行滤波的方法 在这里为大家介绍一种经典适用的AD采样值进行滤波的方法。 本节讲讲一种非常适用的采样AD值进行滤波的方法 此滤波方法是把AD采样值经过两种处理: 1 对当前三次AD采样值进行提取中间值处理 在通常情况下,中值处理一次就够,但是必须的,因为AD偶尔会受到干扰导致 采样到的值为0XFF或0X00,那么中值处理就可以滤掉这个干扰数据,否则你把 这个干扰信号值即使累加后取平均,也会影响到整体的最终取值。 2 对以上中间值进行累加取平均值处理 累加次数看实际应用情况设定,一般8至64次足够,如果是做NTC温度采集的话 建议把累加次数放大一些,这样温度不会跳得过于频繁。 以下是一个采集电位器AD的实际应用 //************************************* // 函数名称:Order_Byte // 函数功能:选择法对数组从小到大排序,返回中间数据 // 入口参数:排序数据的首地址 // 出口参数:无 // 返 回 值:该列数据是的中间值 VC已验证 //*************************************** uint8 Order_Byte(uint8 *a) { uint8 i,j,k; uint8 tmp; uint8 R_Tmp[3] ; uint8 DataLong = 3 ; for(i=0;iR_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采样值 } }
分享到:
收藏