关于ADC+DMA中断的问题,想请教一下各位。

2019-07-21 04:18发布

本帖最后由 BUGMAN 于 2019-3-14 19:42 编辑

时序图 时序图
ICG为25HZ的PWM信号,下降沿触发产生信号A,信号A为500K的PWM脉冲,脉冲持续3700个后,变为低电平。

想要这样的脉冲是想要用来触发AD转换,然后后面多出来的时间用来USB传输数据到上位机。
目前我设想的方案是,ICG信号(TIM3产生)通过主从模式让其下降沿使能启动A信号(TIM4产生),A信号上升沿触发启动AD转换,AD转换再触发DMA将数据转移到前面设好的数组里,采集3700个数据后进入中断,关闭TIM4同时USB_USART_SendData()函数传输数据。在SH下一个下降沿到来前完成中断,SH下一个下降沿到来时又会使能TIM4。

目前的问题就是不知道如何在采集3700个数字后进入中断。
之前我以为将DMA设置里的DMA_BufferSize设为3700,在将DMA设为循环模式,AD转换一次传一个数据,传3700个数据之后就能进入传输完成中断了。结果发现并不是我预料的那样。


DMA与ADC设置代码 DMA与ADC设置代码





求各位指点一下,真的感谢!

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
26条回答
BUGMAN
1楼-- · 2019-07-22 15:33
BUGMAN 发表于 2019-3-15 11:53
哦哦,是这样的,我想要的并不是采集PWM的信号,而是想用PWM来触发ADC1来采集别的波形,采集3700个点后进 ...

你期望在这3700个点, 是什么数据?

比如说第一个PWM的占空比是50%, 你期望这采样数据是什么? 是0X400?
edmund1234
2楼-- · 2019-07-22 17:04
edmund1234 发表于 2019-3-15 11:48
ADC能采集的是模拟信号, 你的PWM是模拟信号吗?PWM不是0就是1, 你想采那个?
ADC能采的是PWM信号是通过 ...

他的目的应该是采集波形,
比如你要采集个正弦波,后处理,怎么办  首先至少采集一个周期  其次满足采样点要求
两者结合估计他计算的是500khz 3700个点正好

所以他要么固定adc转换周期是500k,全速dma转换。或者定时器主从模式产生500khz的方波3700个脉冲,用于pwm触发adc转换
nashui_sx
3楼-- · 2019-07-22 21:37
nashui_sx 发表于 2019-3-15 12:37
他的目的应该是采集波形,
比如你要采集个正弦波,后处理,怎么办  首先至少采集一个周期  其次满足采样 ...

一个频率为500K的PWM信号, 你想用ADC采样, 然后得出它的占空比, 再把4096*占空比的, 先放缓冲, 再经DMA送到上位机, 是这样吗?

如果是, 我之前的回帖已经说明白这问题, 不可能用ADC做, 用ADC读不出它的占空比。
edmund1234
4楼-- · 2019-07-22 23:21
 精彩回答 2  元偷偷看……
edmund1234
5楼-- · 2019-07-23 04:45
edmund1234 发表于 2019-3-15 13:30
对于一个频率为500K的PWM信号来说, ADC最多可以采样两点, 通过这两点(不是0, 就是0xFFF)的数据你就能反 ...

你还是再学习学习在评论,不要活在自己的世界里
nashui_sx
6楼-- · 2019-07-23 08:59
nashui_sx 发表于 2019-3-15 19:35
你还是再学习学习在评论,不要活在自己的世界里

踩着你尾巴了? 呵呵
回你帖的时候没打算让你多学点技术, 就想让你先学好些汉语。

一周热门 更多>