OpenEdv-开源电子网

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

急!!!!ADC采用TIM1触发采样问题

[复制链接]

10

主题

30

帖子

0

精华

初级会员

Rank: 2

积分
92
金钱
92
注册时间
2012-6-7
在线时间
0 小时
发表于 2014-1-3 10:50:00 | 显示全部楼层 |阅读模式
我用TIM1产生PWM波形,频率3KHz,来触发3个通道的ADC转换,采用DMA来接收数据,但是我测出来实际转换频率是1.5KHz,不清楚是怎么回事?请各位大侠指点~~~
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-1-3 11:12:59 | 显示全部楼层
估计是你配置有问题吧.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

17

主题

470

帖子

1

精华

高级会员

Rank: 4

积分
718
金钱
718
注册时间
2013-11-23
在线时间
0 小时
发表于 2014-1-3 11:12:59 | 显示全部楼层
贴代码看看
回复 支持 反对

使用道具 举报

10

主题

30

帖子

0

精华

初级会员

Rank: 2

积分
92
金钱
92
注册时间
2012-6-7
在线时间
0 小时
 楼主| 发表于 2014-1-6 20:30:30 | 显示全部楼层
DMA内存长度设错了,谢谢原子哥
回复 支持 反对

使用道具 举报

10

主题

30

帖子

0

精华

初级会员

Rank: 2

积分
92
金钱
92
注册时间
2012-6-7
在线时间
0 小时
 楼主| 发表于 2014-1-8 14:18:13 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
请问原子哥,用TIM1产生PWM波形来触发3个通道的ADC转换,每个通道的采样率不同,如何设置TIM1?
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-1-8 18:22:51 | 显示全部楼层
你这个要求比较复杂,呵呵.
试试这个方式:
你要用3个通道,每个通道采样率不同,我的理解你就应该用3个ADC,刚好大容量的STM32有3个ADC.
那么你每个ADC用一个通道.
然后用定时器1的CCx触发,去触发这三个ADC.
然后定时器1设置为输出比较模式,以输出不同频率,从而控制你的采样率.
思路大概就是这样,具体实现,得您自己慢慢研究了.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

4

主题

39

帖子

0

精华

初级会员

Rank: 2

积分
75
金钱
75
注册时间
2014-4-24
在线时间
0 小时
发表于 2014-7-22 16:19:31 | 显示全部楼层
回复【6楼】正点原子:
---------------------------------
原子哥,我用TIM2_CC2触发ADC1是可行的,在原程序的基础上改成TIM1_CC2触发就不行了,程序一直停在判断AD转换是否结束,下面是改过的定时器配置,请原子哥帮忙看一下问题出在哪里了,谢谢!
void TIM1_Configuration(void)
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
TIM_OCInitTypeDef TIM_OCInitStructure;

RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE); 

TIM_TimeBaseStructure.TIM_Period = 7199;
TIM_TimeBaseStructure.TIM_Prescaler = 999;
TIM_TimeBaseStructure.TIM_ClockDivision = 0x0;
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseInit(TIM1,&TIM_TimeBaseStructure);

TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2;
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
TIM_OCInitStructure.TIM_Pulse = 400;
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
TIM_OC2Init(TIM1, & TIM_OCInitStructure); 

TIM_ARRPreloadConfig(TIM1,ENABLE); 
TIM_Cmd(TIM1, ENABLE); 

TIM_InternalClockConfig(TIM1);
TIM_OC2PreloadConfig(TIM1, TIM_OCPreload_Enable); 
TIM_UpdateDisableConfig(TIM1, DISABLE);  
}

AD转换触发方式选择的是TIM1_CC2触发:ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_T1_CC2;
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-7-23 00:15:01 | 显示全部楼层
回复【7楼】小崔:
---------------------------------
时能MOE试试。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

3

主题

11

帖子

0

精华

初级会员

Rank: 2

积分
74
金钱
74
注册时间
2017-4-25
在线时间
13 小时
发表于 2017-4-25 12:08:05 | 显示全部楼层
正点原子 发表于 2014-1-8 18:22
你这个要求比较复杂,呵呵.
试试这个方式:
你要用3个通道,每个通道采样率不同,我的理解你就应该用3个ADC,刚 ...

原子哥,您好,目前我的四路PWM(对应IO是PC6789)是由TIM3产生,且用的是中央对齐模式,我想在定时器上溢更新事件的时候促发ADC采样,这样就可以做到在PWM低电平的时候采集ADC的值,但是我看TIM3在中央对齐模式下,更新事件是上溢和下溢都产生更新事件,所以如果我ADC设置为用TIM3的更新事件触发的话,在pwm高电平和低电平都会采集,我用探索者开发板测试也的确如此,而我的本意是只在PWM低电平期间采样,请问原子哥,有什么解决方法?
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-8-21 21:00

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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