[其它应用]

左移2位不是不对了 ?

[复制链接]
796|15
手机看帖
扫描二维码
随时随地手机跟帖
bqyj|  楼主 | 2019-9-15 13:22 | 显示全部楼层 |阅读模式

大家好,我现在用 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位不是不对了 ??

使用特权

评论回复
wenfen| | 2019-9-15 13:25 | 显示全部楼层
不推荐

使用特权

评论回复
bqyj|  楼主 | 2019-9-15 13:28 | 显示全部楼层
为什么啊

使用特权

评论回复
wenfen| | 2019-9-15 13:34 | 显示全部楼层

当被测电压出现毛刺波动时,前后两次测量的结果会有较大波动。

使用特权

评论回复
bqyj|  楼主 | 2019-9-15 13:37 | 显示全部楼层
有什么好的办法

使用特权

评论回复
wenfen| | 2019-9-15 13:40 | 显示全部楼层
冒泡排序、中间值取平均数法

使用特权

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

使用特权

评论回复
zhuhuis| | 2019-9-15 13:50 | 显示全部楼层

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

使用特权

评论回复
zhuhuis| | 2019-9-15 13:53 | 显示全部楼层
    简单的说,就是第1次计算采集6次,第2次计算采集1次,第3次计算采集1次。。。。。。第N次计算采集1次。

使用特权

评论回复
bqyj|  楼主 | 2019-9-15 13:55 | 显示全部楼层
写了个冒泡排序,不知道对不对?
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个数据排序,正确吗 ??

使用特权

评论回复
tian111| | 2019-9-15 13:58 | 显示全部楼层

非常规做法啊。呵呵

使用特权

评论回复
bqyj|  楼主 | 2019-9-15 14:01 | 显示全部楼层

average = ADDL + ADDH<<2

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

使用特权

评论回复
bqyj|  楼主 | 2019-9-15 14:09 | 显示全部楼层

adl=ADDL&0x03;
               adh=ADDH*4;
               adc_result1=(adh+adl);

使用特权

评论回复
chenho| | 2019-9-15 14:13 | 显示全部楼层
这个,你在keil里面试试看就知道了。

使用特权

评论回复
chenho| | 2019-9-15 14:16 | 显示全部楼层

我觉得不一定行。ADDH<<2好像会溢出的

使用特权

评论回复
bqyj|  楼主 | 2019-9-15 14:19 | 显示全部楼层
结贴了,多谢大家讨论这么多哈,呵呵

使用特权

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

本版积分规则

390

主题

4526

帖子

2

粉丝