查看: 1730|回复: 4

[求助] 求助关于KEA8 ADC的奇怪问题

[复制链接]

该用户从未签到

4

主题

23

帖子

0

注册会员

Rank: 2

积分
139
最后登录
1970-1-1
发表于 2015-8-12 20:37:36 | 显示全部楼层 |阅读模式
各位FSL的大神,请帮忙给小弟看下我调试过程中遇到的这个奇怪问题。
我ADC配置成如下工作方式
12位精度,4级FIFO模式,连续转换,每次完成转换后,在中断函数里取回转换结果并存到数组里。
但是我发现这种工作方式下,如果我主函数里不写任何操作,只运行while(1)的话,转换结果很稳定,比如转换的内部带隙基准,只有1~2个LSB的跳动。
但是,如果我在主函数中运行任何代码的话,比如对某变量自加1或者判断某变量的话,转换结果就会有很严重的波动。带隙基准采样的结果大概上下会有40mV左右的波动范围。
这个现象太奇怪了,能帮忙给一些参考建议吗?
附初始化代码如下:
void ADC_Init(void)                                                                                                                       
{
        PMC->SPMSC1 |= PMC_SPMSC1_BGBE_MASK ;                                       
        SIM->SCGC |= SIM_SCGC_ADC_MASK;                                               
        ADC->SC3 |= ADC_SC3_ADICLK(CLOCK_SOURCE_ADACK) ;       
        ADC->SC3 |= ADC_SC3_ADIV(ADC_ADIV_DIVIDE_4) ;               
        ADC->SC3 |= ADC_SC3_MODE(ADC_MODE_12BIT) ;                       
        ADC->SC4 |= ADC_SC4_AFDEP(ADC_FIFO_LEVEL4) ;               
        ADC->SC1 |= ADC_SC1_ADCO_MASK ;                                                                       
        ADC->SC1 |= ADC_SC1_AIEN_MASK ;                                                                       
        ADC->SC3 |= ADC_SC3_ADLSMP_MASK ;                                                               
}

我知道答案 目前已有4人回答

评分

参与人数 1NXP金币 +3 收起 理由
小七 + 3

查看全部评分

回复

使用道具 举报

该用户从未签到

145

主题

4926

帖子

0

金牌会员

Rank: 6Rank: 6

积分
9267
最后登录
1970-1-1
发表于 2015-8-13 09:56:11 | 显示全部楼层
楼主中断函数中是怎么处理的?
把代码贴出来看看。
回复 支持 反对

使用道具 举报

该用户从未签到

4

主题

23

帖子

0

注册会员

Rank: 2

积分
139
最后登录
1970-1-1
 楼主| 发表于 2015-8-13 15:40:45 | 显示全部楼层
FSL_TICS_ZJJ 发表于 2015-8-13 09:56
楼主中断函数中是怎么处理的?
把代码贴出来看看。

如下是中断代码,而且我今天试验发现的新现象是,如果在启动转换后,通过WFI把MCU休眠掉,等ADC中断唤醒MCU,这个现象就会有很大改善,这跟PCB设计有关系吗?如果内核会对AD引入噪声,那到车上就更蛋疼了啊!
void ADC0_IRQHandler(void)
{
        Cnt_Adc ++ ;
        if(Cnt_Adc >= 4)
                Cnt_Adc = 0 ;
       
        ADCR_B[Cnt_Adc]  = ADC->R ;
        ADCR_BG[Cnt_Adc] = ADC->R ;
        ADCR_F[Cnt_Adc]  = ADC->R ;
        ADCR_T[Cnt_Adc]  = ADC->R ;

}

回复 支持 反对

使用道具 举报

该用户从未签到

145

主题

4926

帖子

0

金牌会员

Rank: 6Rank: 6

积分
9267
最后登录
1970-1-1
发表于 2015-8-13 16:26:41 | 显示全部楼层
123123-359596 发表于 2015-8-13 15:40
如下是中断代码,而且我今天试验发现的新现象是,如果在启动转换后,通过WFI把MCU休眠掉,等ADC中断唤醒M ...

你有没有试过不加FIFO,你那边连续采样,然后按照一楼条件测试,效果好点吗?
回复 支持 反对

使用道具 举报

该用户从未签到

145

主题

4926

帖子

0

金牌会员

Rank: 6Rank: 6

积分
9267
最后登录
1970-1-1
发表于 2015-8-14 12:19:36 | 显示全部楼层
楼主你好!
你选择的ADC通道是bandgap吧?
有没有试过测试其他的,比如VREFH,TEMP等。
我这边也试了,bandgap测试的确是有浮动,不过关于bandgap,datasheet规定了范围,大概就有40mV的间隙,这个不是准确的1V,范围是1.14到1.18V。
回复 支持 反对

使用道具 举报

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

本版积分规则

关闭

站长推荐上一条 /3 下一条

Archiver|手机版|小黑屋|恩智浦技术社区

GMT+8, 2025-7-28 07:31 , Processed in 0.097626 second(s), 26 queries , MemCache On.

Powered by Discuz! X3.4

Copyright © 2001-2024, Tencent Cloud.

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