[方案相关] ADC转换结果由DMA传输

[复制链接]
 楼主| lesheng002 发表于 2020-5-7 16:46 | 显示全部楼层 |阅读模式
项目需要检测外部电压,低于4.5V,则认为关机了,用单通道ADC检测,结果由DMA传输到数组中,程序反复监4测这个检测结果,芯片选的是HC32L176,官网没有现成的例子可供参考,自己折腾几天都没有结果,请各位大亨帮忙提供个DEMO什么的,谢谢先
 楼主| lesheng002 发表于 2020-5-7 18:36 | 显示全部楼层
华大技术给我发了个DEMO,使用顺序扫描转换,我按照DEMO测试发现Start=1后只起动了一次转换,后面需手工启动,一点不好用
smartpower 发表于 2020-5-7 22:31 | 显示全部楼层
两种方法:  
1. 采用内置的电压比较器,对分压后的VCC与内置2.5V进行比较。
2. 采用内置的LVD,对分压后的VCC电压送到LVD的输入口进行检测。
smartpower 发表于 2020-5-7 22:37 | 显示全部楼层
我学得第三种方法,更简单。不需要外部电路即可。VCC分压后的电压与DAC的输出电压进行比较,只需要读VC的比较结果就行了。


507805eb41d0d80ac1.png

smartpower 发表于 2020-5-7 22:50 | 显示全部楼层
从下图来看,通用TIM可以实现ADC定时自动转换的啊,每次只需要读最结果寄存器就行了。

34065eb41ff34a2df.png
 楼主| lesheng002 发表于 2020-5-8 08:01 | 显示全部楼层
smartpower 发表于 2020-5-7 22:50
从下图来看,通用TIM可以实现ADC定时自动转换的啊,每次只需要读最结果寄存器就行了。

我测试过2个方式,1是单次连续转换,查询转换完成标志,读结果并判断,2是单次连续转换,结果由DMA传输到RAM中,不需要人工干预启动转换的过程,
测试结果发现,2种方式都会卡死,造成系统滴答中断函数都不会被执行,且后一种方式只第一次初始化执行了一次转换,后面就不执行了
真的用DMA方式会影响到MCU 的正常运行?
你提到的这个方式还没试过,试试看
liaotian001 发表于 2020-5-8 09:43 | 显示全部楼层
lesheng002 发表于 2020-5-8 08:01
我测试过2个方式,1是单次连续转换,查询转换完成标志,读结果并判断,2是单次连续转换,结果由DMA传输到 ...

跟我们FAE联系一下,看看哪里配置错误的问题。这个功能是很普通的功能,使用ADC+DMA采样,基本上每个客户都是用到的。
 楼主| lesheng002 发表于 2020-5-8 10:49 | 显示全部楼层
liaotian001 发表于 2020-5-8 09:43
跟我们FAE联系一下,看看哪里配置错误的问题。这个功能是很普通的功能,使用ADC+DMA采样,基本上每个客户 ...

贵公司的FAE有做个DEMO给我,ADC+DMA+TIM2, TIM2用于触发ADC转换,DMA用于ADC转换完成后将结果传输到RAM中,功能是实现了,但一启动ADC,碰到延时函数,系统就死了,而我的延时函数是通过系统滴答函数来实现的,
 楼主| lesheng002 发表于 2020-5-8 20:33 | 显示全部楼层
lesheng002 发表于 2020-5-8 10:49
贵公司的FAE有做个DEMO给我,ADC+DMA+TIM2, TIM2用于触发ADC转换,DMA用于ADC转换完成后将结果传输到RAM ...

问题就出现在延时函数,库函数中使用ADC必须先调用函数Bgr_BgrEnable()初始化,函数中有个延时delay10us,这个延时函数是华大官方写的延时函数,使用SysTick定时器完成,而我自己的延时也是借用SysTick定时器实现,这样当初始化ADC时就将我自己的SysTick定时器初始化给破坏了,因而我的延时就卡死了,其它公司库函数都没有用SysTick来做延时,习惯了就没想过有冲突。看来换个MCU问题还是不少

点评

你可以把延时函数换了啊,用NOP循环什么的……  发表于 2020-5-12 17:57
 楼主| lesheng002 发表于 2020-5-12 20:58 | 显示全部楼层
@martinhu 为什么贵公司不考虑用户会使用SysTick,而是要用户换这种延时函数,虽然可以解决,但这样做我觉得不合理

点评

这个问题我回答不了  发表于 2020-5-13 15:54
aa642895350 发表于 2020-6-16 15:55 | 显示全部楼层
您好,请问ADC+DMA+TIM2的DEMO能发我一份参考吗?谢谢
liaotian001 发表于 2020-6-16 19:31 | 显示全部楼层
ADC 输入, LVD输入, VC输入,在HC32L13x以上系列, 同一个端口是复用ADC,LVD,VC等模拟电路的,联合使用很方便。
并且支持硬件自动触发DMA搬运数据,功耗更低,使用实时性更强。
 楼主| lesheng002 发表于 2020-7-4 16:10 | 显示全部楼层
aa642895350 发表于 2020-6-16 15:55
您好,请问ADC+DMA+TIM2的DEMO能发我一份参考吗?谢谢

这个DEMO还需要吗?
wangliuliu566 发表于 2020-11-13 10:49 | 显示全部楼层
lesheng002 发表于 2020-7-4 16:10
这个DEMO还需要吗?

能否在本帖共享一下? 谢谢
martinhu 发表于 2020-11-14 13:15 | 显示全部楼层
wangliuliu566 发表于 2020-11-13 10:49
能否在本帖共享一下? 谢谢

这个是之前楼主提到的样例demo。
hc32l19x_ddl_TIM2 Trig ADC DMA transfer_2.zip (5.39 MB, 下载次数: 95)

看楼主之前在抱怨,systick延时与自己程序冲突就说MCU有问题,这么简单的延时函数可以自己改吧,难道身为程序员,非得全部做好了拿现成的?
 楼主| lesheng002 发表于 2020-12-14 22:28 | 显示全部楼层
martinhu 发表于 2020-11-14 13:15
这个是之前楼主提到的样例demo。

你们是做核心库函数的,本来就应该考虑到的,还要用户测试去发现,是想考验一下用户的能力?另外来讲,你改就改呗,还觉得我提出这么个问题有错了,真是怪了。
martinhu 发表于 2020-12-15 14:24 | 显示全部楼层
lesheng002 发表于 2020-12-14 22:28
你们是做核心库函数的,本来就应该考虑到的,还要用户测试去发现,是想考验一下用户的能力?另外来讲,你 ...

不好意思,延时函数不是我做的……
aoo 发表于 2020-12-16 10:15 | 显示全部楼层
千人QQ群:206032332
edyd 发表于 2020-12-20 16:24 | 显示全部楼层
延迟函数不要乱用
两只袜子 发表于 2020-12-21 09:01 | 显示全部楼层
延迟函数不可以乱用的啊
您需要登录后才可以回帖 登录 | 注册

本版积分规则

7

主题

93

帖子

0

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