打印

关于AD问题

[复制链接]
2574|15
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
jwwhy|  楼主 | 2011-8-31 19:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
大家好,我现在用 79F082的 ,用10位的 AD ,然后我想采样得到的结果先加起来,放在一起,然后多次采样求平均,不知道这样对不对?
INT16U average ;
   EA = 0;
   EADC = 0;
    ADCON &=0XBE;                 //ADCIF = go= 0

    average = ADDL + ADDH<<2
if(++g == 4)
{
  retuslt = average/4;
  average = 0;
}

4次采样求平均,不知道对不对 ,感觉ADDH是8位,左移2位不是不对了 ??
沙发
neyo.zhong| | 2011-9-1 10:20 | 只看该作者
本帖最后由 neyo.zhong 于 2011-9-1 16:36 编辑

这种方法不推荐,原因是当被测电压出现毛刺波动时,前后两次测量的结果会有较大波动。

推荐两种方式:

一.冒泡排序、中间值取平均数法:采集一定次数的AD数据,比如说6次,将6次数据进行排序。
    使用冒泡法进行排序,相邻的两个进行比较,第一轮是6与5、5与4、4与3、3与2、2与1,大的排在高位,小的在低位;经过第一轮后,虽然最大数无法求出,但是最小数已经得出。从第二轮开始,不需要将最小数加入比较,只需6与5、5与4、4与3、3与2即可,第二轮完成后可以得到第二小数。以此类推。。。。假设有X个数,需要比较X-1轮,每一轮比较的次数依次减少。
    完成排序后,去除最大和最小数,再将中间数据相加再求平均值。

二.类堆栈法:此处说的堆栈,并非真的是使用堆栈来进行采样求值,而是说工作原理同堆栈类似。
    此方法中,使用数组来存放采集的数据,我以6个数据为一个数组来说明。首次计算,先一次性采集一定次数的AD数据,每采集1个数据就移入数组,最早采集的数据位于数组底部,而最新采集到得数据位于数组顶部。采样6次后进行第一次求平均值,这样就完成了第一次的AD去抖求稳定值了。之后每次进行AD去抖求稳定值,只需要采集一次AD值,将前一次去抖求稳定值数组中最底层的数据推出,再将新采集得到的AD值移入数组并求平均值即可。
    简单的说,就是第1次计算采集6次,第2次计算采集1次,第3次计算采集1次。。。。。。第N次计算采集1次。

使用特权

评论回复
板凳
huwr| | 2011-9-1 15:34 | 只看该作者
版主好耐心啊

使用特权

评论回复
地板
jwwhy|  楼主 | 2011-9-1 17:31 | 只看该作者
谢谢!
写了个冒泡排序,不知道对不对?
void maopao(INT8U r[],n)
{
       INT8U i,j;
        INT8U temp;

        for(i=1;i<n,i++)
               {
                     j = 7;
              for(j=j-i;j=0;j--)
                        {
                                 if(r[j]<r[j-1])
                                {
                              
                                        temp = r[j];
                                          r[j] = r[j-1];                                        
                                          r[j-1] = temp;
                                }
                       
              }  
              
   
            }


}

对INT8U r[6]的6个数据排序,正确吗 ??

使用特权

评论回复
5
tian111| | 2011-9-1 21:16 | 只看该作者
非常规做法啊。呵呵

使用特权

评论回复
6
jwwhy|  楼主 | 2011-9-2 08:41 | 只看该作者
楼上的  那里有问题  ,请指教

使用特权

评论回复
7
jwwhy|  楼主 | 2011-9-2 08:42 | 只看该作者
average = ADDL + ADDH<<2

另外ADDH是8位的,左移2位 感觉不对 ??

使用特权

评论回复
8
jwwhy|  楼主 | 2011-9-7 18:32 | 只看该作者
怎么就没有人回复了 ??

使用特权

评论回复
9
wyp1984| | 2011-9-13 16:28 | 只看该作者
adl=ADDL&0x03;
              adh=ADDH*4;
              adc_result1=(adh+adl);

使用特权

评论回复
10
bananarer| | 2011-9-14 08:45 | 只看该作者
average = ADDL + ADDH<<2
jwwhy 发表于 2011-9-2 08:42


这个,你在keil里面试试看就知道了。
我觉得不一定行。ADDH<<2好像会溢出的

使用特权

评论回复
11
tt1989| | 2011-12-6 11:03 | 只看该作者
不错的帖子

使用特权

评论回复
12
fjzzclc| | 2011-12-6 15:56 | 只看该作者
学习一下

使用特权

评论回复
13
jamie-ma| | 2011-12-22 11:09 | 只看该作者
路过的,观望

使用特权

评论回复
14
parkdom| | 2011-12-23 15:41 | 只看该作者
:)

使用特权

评论回复
15
elec921| | 2011-12-26 08:22 | 只看该作者
滑动滤波,谢谢~!

使用特权

评论回复
16
abcsmile| | 2012-3-28 15:30 | 只看该作者
不错耶

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

83

主题

281

帖子

0

粉丝