DMA+ADC1四路输出,亲测可用,整个的测量一次的时间大约是1.2ms

2019-07-20 22:46发布

这个是我再做实验的时候通过将原子哥的程序进行移植和修改,然后测试可以使用的程序,希望能够帮到有需要的坛友。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
12条回答
nashui_sx
1楼-- · 2019-07-21 20:10
本帖最后由 nashui_sx 于 2019-7-12 11:06 编辑
vegetablebird 发表于 2019-7-12 10:20
//获取ADC值
u16 Get_ADC(u8 times)
{  

1.你只用值的话可以,但是正常的话用值是不是太简单了,比如温度你转成ad值采样,你难道温度超过一个设定阈值就报警触发别的,不会的对吧。还是要结合温度上升速率,那就需要固定采样周期
在比如你采集波形ad值分析,你不固定采样频率也没法做fft变换
你这种能用,只是就是能看个ad值的场合用,实际有些场合没啥用

2.你要是只是用个值,你也没必要一直开关adc,反正dma不占cpu,你直接一直开着就行了,想用直接去读那个变量就好了

3.你adc采样每此延时10ms,平滑50次 500毫秒,不觉得时间太久吗,还有啥意义用dma,dma就是为了解放cpu干别的事,你竟然延时了500ms
正常应该定时器触发+完成中断,不定时器触发也应该用dma完成中断给main一个信号进行滤波就好了

http://www.openedv.com/forum.php?mod=viewthread&tid=273877&extra=
你看下这个里面的两个例子 一个是定时器触发的,一个是不带的,怎么不延时采样的
gongzq666
2楼-- · 2019-07-21 22:31
 精彩回答 2  元偷偷看……
vegetablebird
3楼-- · 2019-07-22 00:29
nashui_sx 发表于 2019-7-12 10:53
1.你只用值的话可以,但是正常的话用值是不是太简单了,比如温度你转成ad值采样,你难道温度超过一个设定 ...

因为在循环里面有满足一个条件才使用这个函数,所以我用了单次转换,只需要获取ADC的值就可以。这样的话直接设置连续转换也可以吗?
延时这个确实是我不小心加进去的
nashui_sx
4楼-- · 2019-07-22 00:50
gongzq666 发表于 2019-7-12 11:27
我刚刚查看了一下,是不是通过定时器的PWM产生固定周期的方波,adc使用的是外部外部触发方式,然后定时的 ...

是的,定时器的好几种时间都能控制adc的启动,dma直接存起来,存满了会进完成中断,主函数滤波就好了,3个通道你可以设置30缓存的dma  正好一个通道10个数据 滤波就好了
nashui_sx
5楼-- · 2019-07-22 06:12
vegetablebird 发表于 2019-7-12 11:46
因为在循环里面有满足一个条件才使用这个函数,所以我用了单次转换,只需要获取ADC的值就可以。这样的话 ...

对,单次就行了,转换完自动关了,下次打开转换就好了
gongzq666
6楼-- · 2019-07-22 07:52
 精彩回答 2  元偷偷看……

一周热门 更多>