OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4642|回复: 6

AD采样求助

[复制链接]

10

主题

31

帖子

0

精华

初级会员

Rank: 2

积分
91
金钱
91
注册时间
2013-3-6
在线时间
0 小时
发表于 2013-4-23 08:51:50 | 显示全部楼层 |阅读模式

我打算利用定时器,每定时200us顺序采样8路AD的通道,发现最后采集来的结果和通道的数据对应不上,我减小AD的通道数,发现当只有3路通道的时候是正常的,当有第四路的时候就出现问题了。9M的AD时钟,单次采样,中断程序如下,求各位指点一二
void TIM3_IRQHandler(void)

 if ( TIM_GetITStatus(TIM3 , TIM_IT_Update) != RESET )
 { 
  TIM_ClearITPendingBit(TIM3 , TIM_FLAG_Update);   

  ADC_RegularChannelConfig(ADC1, ADC_Channel_0, 1, ADC_SampleTime_1Cycles5);
  delay_us(2);
  ADC_SoftwareStartConvCmd(ADC1, ENABLE);  
  while(!ADC_GetFlagStatus(ADC1,ADC_FLAG_EOC));    
  AD_value[0][yangdian]=ADC_GetConversionValue(ADC1);
    
  ADC_RegularChannelConfig(ADC1, ADC_Channel_1, 1, ADC_SampleTime_1Cycles5);
  delay_us(2);
  ADC_SoftwareStartConvCmd(ADC1, ENABLE);  
  while(!ADC_GetFlagStatus(ADC1,ADC_FLAG_EOC));    
  AD_value[1][yangdian]=ADC_GetConversionValue(ADC1);
  
  ADC_RegularChannelConfig(ADC1, ADC_Channel_2, 1, ADC_SampleTime_1Cycles5);
  delay_us(2);
  ADC_SoftwareStartConvCmd(ADC1, ENABLE);  
  while(!ADC_GetFlagStatus(ADC1,ADC_FLAG_EOC));    
  AD_value[2][yangdian]=ADC_GetConversionValue(ADC1);
    
  ADC_RegularChannelConfig(ADC1, ADC_Channel_3, 1, ADC_SampleTime_1Cycles5);
  delay_us(2);
  ADC_SoftwareStartConvCmd(ADC1, ENABLE);  
  while(!ADC_GetFlagStatus(ADC1,ADC_FLAG_EOC));    
  AD_value[3][yangdian]=ADC_GetConversionValue(ADC1);
}

心中无我,眼中无钱,念中无他,朝中无人,学无止境。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-4-23 10:00:48 | 显示全部楼层
是不是IO没设置为模拟输入?
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

10

主题

31

帖子

0

精华

初级会员

Rank: 2

积分
91
金钱
91
注册时间
2013-3-6
在线时间
0 小时
 楼主| 发表于 2013-4-23 10:48:06 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
是设置模拟输入的
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7;    
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN; 
GPIO_Init(GPIOA, &GPIO_InitStructure);
心中无我,眼中无钱,念中无他,朝中无人,学无止境。
回复 支持 反对

使用道具 举报

10

主题

31

帖子

0

精华

初级会员

Rank: 2

积分
91
金钱
91
注册时间
2013-3-6
在线时间
0 小时
 楼主| 发表于 2013-4-23 11:32:08 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
我再解释的详细点,现在三路也是不行的。。。
我将0、1通道接到同一个信号源,将2通道接地,出来结果是0通道数据显示的是2通道的,1通道数据显示的是0通道的,2通道数据显示的是1通道的。当我把2通道接地给去掉(悬空),他会正确显示信号源的数据。
心中无我,眼中无钱,念中无他,朝中无人,学无止境。
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
21
金钱
21
注册时间
2013-4-23
在线时间
0 小时
发表于 2013-4-23 14:44:27 | 显示全部楼层

TIM_ClearITPendingBit(TIM3 , TIM_FLAG_Update);
这段代码放到最后面的括号前边试试
回复 支持 反对

使用道具 举报

10

主题

31

帖子

0

精华

初级会员

Rank: 2

积分
91
金钱
91
注册时间
2013-3-6
在线时间
0 小时
 楼主| 发表于 2013-4-23 15:23:28 | 显示全部楼层
回复【5楼】sololey:
---------------------------------
试过了,不行。。。
心中无我,眼中无钱,念中无他,朝中无人,学无止境。
回复 支持 反对

使用道具 举报

10

主题

31

帖子

0

精华

初级会员

Rank: 2

积分
91
金钱
91
注册时间
2013-3-6
在线时间
0 小时
 楼主| 发表于 2013-4-24 09:41:51 | 显示全部楼层
改成连续采样的就可以了,好奇怪啊,这单次的除了每次采样前要打开触发位,也没什么差别吧,搞不懂哎。。。
心中无我,眼中无钱,念中无他,朝中无人,学无止境。
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-7-21 02:09

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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