一乐电子

 找回密码
 请使用微信账号登录和注册会员

QQ登录

只需一步,快速开始

微信扫码登录

手机号码,快捷登录

手机号码,快捷登录

搜索
查看: 3985|回复: 17

[其他综合] 请教单片机采集电压数字滤波怎么弄的

  [复制链接]
发表于 2012-5-30 12:46 | 显示全部楼层 |阅读模式
我想是这样,先把采集到的10次数据加起来,然后在除以10。
可是想了半天也不知道怎么个写法,请高手指定一下。谢谢了
发表于 2012-5-30 13:16 | 显示全部楼层
可以10次连加啊, AD=AD+AD_NEW;
采用掐头去尾然后 求和、取平均更好;

比如采集10个数据,舍弃一个最大值和一个最小值,中间的8个求和,取平均
回复

使用道具 举报

 楼主| 发表于 2012-5-30 14:12 | 显示全部楼层
可以10次连加啊, AD=AD+AD_NEW;
采用掐头去尾然后 求和、取平均更好;

比如采集10个数据,舍弃一个最 ...
wandy 发表于 2012-5-30 13:16 https://www.yleee.com.cn/images/common/back.gif


    AD_NEW=ad;//这个ad是每次采集到的
    AD=AD+AD_NEW;   //这样可以加到每次新采集的ad吧?
adnum++;

if(adnum==10)
{
ADC=AD/10;   //ADC送出去
adnum=0;
}

这样可以吗?

冒泡太复杂了,跳的也不是很厉害。
回复

使用道具 举报

发表于 2012-5-30 19:26 | 显示全部楼层
变量名改一下不要重名就可以了
回复

使用道具 举报

发表于 2012-5-30 22:31 | 显示全部楼层
AD_NEW=ad;//这个ad是每次采集到的
    AD=AD+AD_NEW;   //这样可以加到每次新采集的ad吧?
adn ...
gw168sh 发表于 2012-5-30 14:12 https://www.yleee.com.cn/images/common/back.gif



    掐头去尾还是比较简单的,10个数从头比一遍就能找到最大值和最小值。
回复

使用道具 举报

发表于 2012-5-31 00:49 | 显示全部楼层
本帖最后由 天行健 于 2012-5-31 01:06 编辑

掐头去尾很简单啊,一个循环一过,N-1次完成,不过内部其实进行了2次比较,所以实际运行是2N-1

  1. #include <stdio.h>

  2. int a[20]={34,543,13,65,876,98,453,34,6,199,
  3. 33,46,84,87,977,60,49,22,234,40};

  4. int main()  {
  5.     int i,j,max,min;
  6.     max=a[0];min=a[0];
  7.     for(i=1;i<20;i++)
  8.    {
  9.        j=a[i] ;   
  10.        if(j>max) max=j;
  11.        if(j<min) min=j;
  12.     }
  13.     printf("max=%d\nmin=%d\n",max,min);  //到这里已经有最大和最小了
  14.     return 0;
  15. }
复制代码

单片机运算的话,建议采用数组指针来代替a[20],基本上各种类型单片机,运行效率都会比直接用a[20]高。
回复

使用道具 举报

发表于 2012-5-31 09:19 | 显示全部楼层
我是设三个变量.
value,max.min.
value一直累加
当前值比max大,则当前值赋给max
当前值比min小,则当前值赋给min

我一般采集8或16次,然后求平均,因为这样直接移位就可以了,程序简单
回复

使用道具 举报

 楼主| 发表于 2012-5-31 12:43 | 显示全部楼层
好的,我试试看。
谢谢楼上的几位朋友。
回复

使用道具 举报

发表于 2012-6-2 09:53 | 显示全部楼层
我是设三个变量.
value,max.min.
value一直累加
当前值比max大,则当前值赋给max
当前值比min小,则当前值 ...
yanjian 发表于 2012-5-31 09:19 https://www.yleee.com.cn/images/common/back.gif



    采集10次,掐头去尾,留8个数据求和然后用移位做除以8运算;

或采集18次。。。。
回复

使用道具 举报

发表于 2012-6-2 09:59 | 显示全部楼层
我是设三个变量.
value,max.min.
value一直累加
当前值比max大,则当前值赋给max
当前值比min小,则当前值 ...
yanjian 发表于 2012-5-31 09:19 https://www.yleee.com.cn/images/common/back.gif



    value当前值比max大就与max交换数值;比min小就与min交换数值;交换后的value参与求和运算;

完成一个循环的运算后(例如做了10次采样),正好把最大采样值丢给了max,最小采样值丢给了min,中间的都被累加(8个值求和)

交换数值很重要,否则就丢数据了
回复

使用道具 举报

本版积分规则

QQ|一淘宝店|手机版|商店|一乐电子 ( 粤ICP备09076165号 ) 公安备案粤公网安备 44522102000183号

GMT+8, 2025-11-4 20:02 , Processed in 0.029266 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表