原创 AD虑波的处理

2009-11-25 17:23 2064 8 8 分类: MCU/ 嵌入式

当然N>=3.而且最好N>3为好.N很大时就见其优点了.
例如: 3中取1,4中取2,5中取3...10中取8...252中取"二百五"~~~
全部只用这4个寄存器~~~,当然要考虑累加越界类型选择的问题.
注意: N最好取4, 6, 10, 34, 66, 130等等~~~!!!!!!!!!!!!!!

/*-----------------------------------------------------------
ADC转换电压
------------------------------------------------------------*/
AdcResult = ADC & 0x3ff;//
ADC转换电压结果
/*-----------------------------------------------------------
  
求累加和
------------------------------------------------------------*/
AdcSum += AdcResult;//
存累加和
/*-----------------------------------------------------------
  
求最大值
------------------------------------------------------------*/
if (AdcResult > AdcMax)
{
  AdcMax = AdcResult;//
最大值
}
/*-----------------------------------------------------------
  
求最小值
------------------------------------------------------------*/
if (AdcResult < AdcMin)//
注意:千万不敢写成else if ()...
{
  AdcMin = AdcResult;//
存最小值
}
AdcCount ++;//
计数1
/*-----------------------------------------------------------
  10
中取8("跳水评分算法---去掉一个最高分,去掉...最后得分...")
------------------------------------------------------------*/
if (AdcCount >= 10)//
每次滤波10
{
/*-----------------------------------------------------------
  
求平均值
------------------------------------------------------------*/
  val = AdcSum - AdcMax - AdcMin;//
自然做到了N-2,以下除法变移位
  val *= AdcGain;//
乘增益(一定要先乘后除!!!否则精度丢失!!!)
  val >>= 13;//10
中取8后除以1024.(直接得到10进制的mV)
  AdcVal = val;//
得到跳水队员分数~~~
/*-----------------------------------------------------------
  
下一轮初始化(也是ADC的初始化,这里原本是调用函数的~~~)
------------------------------------------------------------*/
  AdcSum = 0;//
一定清0
  AdcMax = 0;//
一定取最小值
  AdcMin = 0x3ff;//10
ADC,一定取最大值
  AdcCount = 0;//
重新开始
}

哈哈~~~有时间再灌灌它与排序的不同和优缺点~~~

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
我要评论
0
8
关闭 站长推荐上一条 /3 下一条