单片机滤波的2种算法2021-12-08

单片机滤波的2种算法,亲测好使!

第一种如下:

static void P01_Filter_thread_entry(void *parameter)

{

 float  filtered_val=0;//滤波后的值

  while(1)

  {

  Res1_content1=Read_Results_32Bit_Opcode(0x40, 2, 21);//获取AD值

filtered_val = ( filtered_val*(64-1) +Res1_content1 ) /64; //等价滤波公式 sum = sum - sum/n + val;

  Res1_content1=0;//清空AD值

  rt_thread_mdelay(30); 

  }

}

第二种如下:

static float ADC_Filter_Result()

{

float ADC_min,ADC_max,ADC_temp,ADC_result,ADC_return;

uint8_t  i,j;

ADC_return = 0;

for(i=0;i<16;i++)

{

ADC_result = 0;

ADC_min = ADC_max = Read_Results_32Bit_Opcode(0x40, 2, 21);

//第一次运行把获取AD值 赋值给ADC_min ADC_max 最大值 最小值

for(j=0;j<16;j++)

{

ADC_temp = Read_Results_32Bit_Opcode(0x40, 2, 21);

if(ADC_temp < ADC_min)

{

ADC_result += ADC_min;

ADC_min = ADC_temp;

}

else if(ADC_temp > ADC_max)

{

ADC_result += ADC_max;

ADC_max = ADC_temp;

}

else

{

ADC_result += ADC_temp;

}

rt_thread_mdelay(5);

ADC_temp=0;

}

ADC_result /= 16;

ADC_return += ADC_result;

}

ADC_return /= 16;

return ADC_return;

}

你可能感兴趣的:(单片机滤波的2种算法2021-12-08)