11044|12

79

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

大家帮我看一下,AD采样值抖动严重,用什么办法解决? [复制链接]

现在出现的情况是AD的显示结果后两位老是闪烁,我试过隆低系统频,加大AD采样定时器的分频,但问题依旧,这种方法对吗?还有别的好方法吗?
程序如下:

#include <msp430x13x.h>
#define vref 3300

void clock_init(void)
{

DCOCTL = 0x00;
//XT2晶振开启,高频模式,ALCK分频系数为8分频,选择内部电阻频率为最高.
BCSCTL1 =XT2OFF+XTS+DIVA_0+DIVA_1+DIVA_2+DIVA_0+RSEL2+RSEL1+RSEL0;
//MCLK的时钟为低速晶振
BCSCTL2=SELM_1+SELM_0+DIVM_1+DIVM_0+SELS+DIVS_3+DIVS_2+DIVS_1+DIVS_0;
}

/*ADC初始华*/
void adc_init(void)
{
ADC12CTL0=ADC12ON+MSC;
ADC12CTL1 =SHP+CONSEQ_1;
ADC12MCTL0 = INCH_0;
ADC12MCTL1 = INCH_1;
ADC12MCTL2 = INCH_2;
ADC12MCTL3 = INCH_3;
ADC12MCTL4 = INCH_4;
ADC12MCTL5 = INCH_5;
ADC12MCTL6 = INCH_6;
ADC12MCTL7 = INCH_7+EOS;

ADC12IFG=0xff;
ADC12IE = 0x80;
ADC12CTL0 |= ENC;
ADC12CTL0 |= ADC12SC;
}

#pragma vector=ADC_VECTOR
__interrupt void ADC_ISR (void)
{
adc_rel0 = ADC12MEM0;
adc_rel1 = ADC12MEM1;
adc_rel2 = ADC12MEM2;
adc_rel3 = ADC12MEM3;
adc_rel4 = ADC12MEM4;
adc_rel5 = ADC12MEM5;
adc_rel6 = ADC12MEM6;
adc_rel7 = ADC12MEM7;

adc_rel0 = (unsigned int)(((unsigned long)((unsigned long)adc_rel0*vref))/0xfff);
adc_rel1 = (unsigned int)(((unsigned long)((unsigned long)adc_rel1*vref))/0xfff);
adc_rel2 = (unsigned int)(((unsigned long)((unsigned long)adc_rel2*vref))/0xfff);
adc_rel3 = (unsigned int)(((unsigned long)((unsigned long)adc_rel3*vref))/0xfff);
adc_rel4 = (unsigned int)(((unsigned long)((unsigned long)adc_rel4*vref))/0xfff);
adc_rel5 = (unsigned int)(((unsigned long)((unsigned long)adc_rel5*vref))/0xfff);
adc_rel6 = (unsigned int)(((unsigned long)((unsigned long)adc_rel6*vref))/0xfff);
adc_rel7 = (unsigned int)(((unsigned long)((unsigned long)adc_rel7*vref))/0xfff);

}

最新回复

电源的纹波一定要小才行。  详情 回复 发表于 2009-4-27 15:13
 
点赞 关注

回复
举报

60

帖子

0

TA的资源

一粒金砂(初级)

沙发
 

【讨论】

试试用平均值的方法
 
 

回复

83

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
hfglq 兄,能说详细一点吗?
 
 
 

回复

80

帖子

0

TA的资源

一粒金砂(初级)

4
 
unint mov_××(unint * p_a)
{
unchar i;
unint k;
for (i=0;i<5;i++)
{
*p_a=ADC10MEM;
*(p_a+1)=*p_a;
p_a++;
}
k=*p_a; //Middle varia××e k;
for(i=0;i<5;i++)
{
p_a--;
k=k+*p_a;
}
k=(unint)k/6; //result=××arage value ;
return(k);
}


返回的k就是经过处理ok的值。供参考。
 
 
 

回复

80

帖子

0

TA的资源

一粒金砂(初级)

5
 

【讨论】

取10个值,去掉max/min然后取平均值
 
 
 

回复

78

帖子

0

TA的资源

一粒金砂(初级)

6
 
采样之前的噪声怎么样?滤波没?
 
 
 

回复

66

帖子

0

TA的资源

一粒金砂(初级)

7
 
lonely88请问一下,k=(unint)k/6;这条语句是什么意思,谢谢!!!
 
 
 

回复

64

帖子

0

TA的资源

一粒金砂(初级)

8
 
//result=××arage value ;后面不是注解了么?
 
 
 

回复

73

帖子

0

TA的资源

一粒金砂(初级)

9
 
"后两位闪烁",精度要求多高?
 
 
 

回复

80

帖子

0

TA的资源

一粒金砂(初级)

10
 
引用:

"后两位闪烁",精度要求多高?
0.001v ~ 0.002v
 
 
 

回复

74

帖子

0

TA的资源

一粒金砂(初级)

11
 
ADC12配置不正确。SHP=1为使用内部采样定时器,还需要配置SHT0和SHT1来配合输入信号源的阻抗。
例如:
// 输入通道0-7采样时间设置为1024个ADC12时钟
ADC12CTL0 = ADC12ON+SHT0_15+REFON+REF2_5V;
// 使用内部采样定时器
ADC12CTL1 = SHP + ADC12SSEL_3 + CONSEQ_0;
//等待10ms,确保基准电压稳定(MCLK=4MHz)
__delay_cycles(40000);
 
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

12
 
我在做MSP430F448 A/D转换实验的时候,AD输入端引入电源电压,即0~5VDC,一开始的时候显示位设计为4位,整数一位,小数后3位。编写程序、烧录程序后,点阵液晶显示屏上显示的数字整数位稳定,小数点后第一位稳定,但最后两位不断变化,无论如何都找不到稳定点。究其原因应该有以下几点:
1、电源电压小幅波动;
2、电源电压有波纹,不纯净;
3、电源内阻太大,引起供电不稳定;
4、线路上存在干扰;
5、最根本的一点就是业余条件下设计的这个AD转换系统压根不适合测量到小数点后四位的精度,应该通过转换量程的方法来解决。v档可以设计到小数后一位;如果需要检测精确到小数点后2位以上,应该增加mv档甚至nv档转换。
 
 
 

回复

79

帖子

0

TA的资源

一粒金砂(中级)

13
 
电源的纹波一定要小才行。
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表