UVC 光电池 ADC采集经验之谈

做一个消毒灯检测项目,用UVC的光电池采集紫外光强度。
发现采集的AD值会上下波动,很有规律,当时就很纳闷,难道我的AD值有问题(如下图)
这里写图片描述
然后就用上万用表,发现万用表的电压值很稳定,电压稳定上涨,不会上下周期性波动。
当时就懵逼了,越发的怀疑我的AD采集程序有问题。
反复验证无果后,经过高人大神指点后,用上示波器,一看,果真电压上下波动。
这里写图片描述
经过反复确定,是光源有波动,接下来然后就是数字滤波了。选用中位值平均滤波法(又称防脉冲干扰平均滤法)

//AD采集数据
void GetUVC(void)
{   
  uint16 i,j,temp;
  uint32 sum=0;

  for(i=0;i<uvc.N;i++)
  {
    uvc.value_buf[i]=HalAdcRead(HAL_ADC_CHANNEL_6, HAL_ADC_RESOLUTION_14);    
    Onboard_wait(300);
  }

  for(j=0;j<uvc.N-1;j++)
  {
    for(i=0;i<uvc.N-j-1;i++)
    {
      if(uvc.value_buf[i]>uvc.value_buf[i+1])
      {
        temp=uvc.value_buf[i];
        uvc.value_buf[i]=uvc.value_buf[i+1];
        uvc.value_buf[i+1]=temp;
      }
    }
  }

  sum=0;
  for(i=3;i<uvc.N-3;i++)
    sum+=uvc.value_buf[i];

  uvc.value=sum*1.0/(uvc.N-6);
  UpdateUVC();
}

经过反复调整采集数据长度和采集时间间隔,最终滤出的波形如下(一次比一次好~~~)
这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

猜你喜欢

转载自blog.csdn.net/kangweijian/article/details/79996676