OpenEdv-开源电子网

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

使用ADC+DMA会影响PWM的产生么?

[复制链接]

77

主题

198

帖子

0

精华

高级会员

Rank: 4

积分
526
金钱
526
注册时间
2013-11-25
在线时间
0 小时
发表于 2014-8-4 15:59:46 | 显示全部楼层 |阅读模式
5金钱
当只使用定时器产生PWM时,我能够得到符合程序的波形,如下图所示


我要求得到的PWM波如上,是:A/B/C三路波形占空比相同,彼此高电平时间不重叠

但是当我在程序中加入ADC+DMA采样程序后(无中断程序),得到的三路PWM波占空比不再相同,C相时间会更长一些。此外,有时会出现三路波形同时为0的情况。
难道是使用ADC+DMA会影响PWM的产生么?

附上ADC+DMA的配置:
[mw_shl_code=c,true] DMA_DeInit(DMA1_Channel1); DMA_InitStructure.DMA_PeripheralBaseAddr=(u32)&(ADC1->DR); DMA_InitStructure.DMA_MemoryBaseAddr=(u32)&ADC_ConvertedValue; DMA_InitStructure.DMA_DIR=DMA_DIR_PeripheralSRC; DMA_InitStructure.DMA_BufferSize=M; DMA_InitStructure.DMA_PeripheralInc=DMA_PeripheralInc_Disable; DMA_InitStructure.DMA_MemoryInc=DMA_MemoryInc_Enable; DMA_InitStructure.DMA_PeripheralDataSize=DMA_PeripheralDataSize_HalfWord; DMA_InitStructure.DMA_MemoryDataSize=DMA_MemoryDataSize_HalfWord; DMA_InitStructure.DMA_Mode=DMA_Mode_Circular; DMA_InitStructure.DMA_Priority=DMA_Priority_High; DMA_InitStructure.DMA_M2M=DMA_M2M_Disable; DMA_Init(DMA1_Channel1,&DMA_InitStructure); DMA_Cmd(DMA1_Channel1,ENABLE); ADC_DeInit(ADC1); ADC_InitStructure.ADC_Mode = ADC_Mode_Independent; ADC_InitStructure.ADC_ScanConvMode=ENABLE; ADC_InitStructure.ADC_ContinuousConvMode=ENABLE; ADC_InitStructure.ADC_ExternalTrigConv=ADC_ExternalTrigConv_None; ADC_InitStructure.ADC_DataAlign=ADC_DataAlign_Right; ADC_InitStructure.ADC_NbrOfChannel=M; ADC_Init(ADC1, &ADC_InitStructure); ADC_RegularChannelConfig(ADC1, ADC_Channel_4,1,ADC_SampleTime_239Cycles5); ADC_RegularChannelConfig(ADC1, ADC_Channel_5,2,ADC_SampleTime_239Cycles5); ADC_RegularChannelConfig(ADC1, ADC_Channel_6,3,ADC_SampleTime_239Cycles5); ADC_DMACmd(ADC1, ENABLE); ADC_Cmd(ADC1, ENABLE); [/mw_shl_code]

最佳答案

查看完整内容[请看2#楼]

百度到了 :// ***注意*** //TIM3时钟和SPI1时钟不能同时打开,否则TIM3的CH1、CH2不能输出PWM,但CH3、CH4能输出 //APB1ENR最好全部打开,否则TIM1在极偶尔情况下会不工作 另外,STM32中很多的IO都是复用,对于具备多个复用功能的IO要尤其小心
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

9

主题

32

帖子

0

精华

初级会员

Rank: 2

积分
64
金钱
64
注册时间
2018-7-14
在线时间
17 小时
发表于 2014-8-4 15:59:47 | 显示全部楼层
百度到了
:// ***注意*** //TIM3时钟和SPI1时钟不能同时打开,否则TIM3的CH1、CH2不能输出PWM,但CH3、CH4能输出 //APB1ENR最好全部打开,否则TIM1在极偶尔情况下会不工作 另外,STM32中很多的IO都是复用,对于具备多个复用功能的IO要尤其小心
回复

使用道具 举报

48

主题

537

帖子

2

精华

金牌会员

Rank: 6Rank: 6

积分
1367
金钱
1367
注册时间
2014-2-13
在线时间
169 小时
发表于 2014-8-4 18:54:16 | 显示全部楼层
问题应该在 DMA上,DMA不占用CPU但是占用时钟总线,当时钟总线被DMA占用是单片机是不工作的,当然DMA是不可能一直占用时钟总线,隔几个指令周期就要交替让单片机工作下,具体还的看你DMA的使用频率,DMA搬运数据很快,也担不住你使用频率高。
回复

使用道具 举报

77

主题

198

帖子

0

精华

高级会员

Rank: 4

积分
526
金钱
526
注册时间
2013-11-25
在线时间
0 小时
 楼主| 发表于 2014-8-5 09:26:08 | 显示全部楼层
回复【2楼】solo:
---------------------------------
但是我需要一边产生PWM一边进行采样,而且必须同时采样三组不同的数据,必须一直使用DMA呀。。这要怎么办呢?
回复

使用道具 举报

48

主题

537

帖子

2

精华

金牌会员

Rank: 6Rank: 6

积分
1367
金钱
1367
注册时间
2014-2-13
在线时间
169 小时
发表于 2014-8-5 11:00:43 | 显示全部楼层
回复【3楼】馨馨泡沫:
---------------------------------
鱼与熊掌不可兼得,看你的需求进行合理的调配了。
回复

使用道具 举报

3

主题

5

帖子

0

精华

初级会员

Rank: 2

积分
66
金钱
66
注册时间
2013-5-3
在线时间
8 小时
发表于 2015-4-6 17:26:43 | 显示全部楼层
回复【4楼】solo:
---------------------------------
请问,你的问题解决了吗?我也碰到这样的问题了,是DMA的影响吗?
回复

使用道具 举报

164

主题

1230

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1476
金钱
1476
注册时间
2014-5-21
在线时间
342 小时
发表于 2015-4-6 21:08:10 | 显示全部楼层
回复【5楼】寒泪无痕:
---------------------------------
我也遇到这样了问题,不知道算不算设计缺陷,不知道兆易创新GD32会不会这样。单路没问题,就是多路,哎,,,搞好了分享分享方法啊
彼高丽者,边夷贱类,不足待以仁义,不可责以常礼。古来以鱼鳖畜之,宜从阔略。若必欲绝其种类,恐兽穷则搏。
回复

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
21
金钱
21
注册时间
2015-4-1
在线时间
0 小时
发表于 2015-5-17 12:02:18 | 显示全部楼层
我也是 DMA与ADC一起用没问题   一加PWM 就发现PWM 会出问题 楼主解决了 一定不要忘了分享啊
回复

使用道具 举报

6

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
147
金钱
147
注册时间
2016-12-12
在线时间
41 小时
发表于 2017-5-4 22:50:16 | 显示全部楼层
我也遇到了同样的问题,我现在使用ADC1和ADC2同步采样(DMA传输,TIM3触发),TIM1产生一个PWM(PWM2模式),在使用软件触发ADC时,PWM输出的脉宽正确,但是只要一加上,PWM脉宽变的很宽,跟反向了一样,求原子哥指点指点!!!
回复

使用道具 举报

9

主题

32

帖子

0

精华

初级会员

Rank: 2

积分
64
金钱
64
注册时间
2018-7-14
在线时间
17 小时
发表于 2018-8-11 21:07:33 | 显示全部楼层
第N个遇到这个问题的人
回复

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
4
金钱
4
注册时间
2021-6-11
在线时间
0 小时
发表于 2022-3-24 23:52:39 | 显示全部楼层
楼上各位这个问题找到解决方案了么?小白最近在弄一个ADC采集传感器电压,电压超过报警值后 PWM 驱动蜂鸣器报警的小系统的时候也碰到了这个问题,单使用 DMA+ADC 双通道循环采集电池和传感器电压时,采样值正常;单使用 PWM 驱动蜂鸣器时也正常,放到主函数一起后,就不正常了,蜂鸣器好像哑火了的一样,声音不够亮。
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-2-27 21:05

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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