查看: 9429|回复: 13

[已解决] 如何使用DMA进行多通道AD采样

[复制链接]

该用户从未签到

28

主题

108

帖子

1

高级会员

Rank: 4

积分
523
最后登录
2020-9-7
发表于 2018-11-17 14:40:11 | 显示全部楼层 |阅读模式
各位好:

           目前我使用的MCU为NXP的KE15Z256,打算用DMA实现AD的多路采样,具体做法如下:
          1.使用PIT定时500us进行DMA0的触发,每次触发将需要转换的通道命令数组写进AD的SC1寄存器
          2.当AD转换完成后,触发DMA1进行数据的读取。


         问题:对于单个通道转换没问题,可是当通道数一多,就没办法进行 采样。
         对于DMA0和DMA1的TCD,应该如何进行配置,具体程序如附件所示,麻烦大神帮我看下问题出现在哪里
DMA.rar (4.04 KB, 下载次数: 24)
回复

使用道具 举报

该用户从未签到

28

主题

108

帖子

1

高级会员

Rank: 4

积分
523
最后登录
2020-9-7
 楼主| 发表于 2018-11-17 15:39:09 | 显示全部楼层
例如电网频率为50Hz,想要在一个周期20ms内采样8个通道,每个通道采样40个点。因此,就必须要在500US,对8个通道个采样一次。采用PIT进行500US定时,每次定时时间到,PIT触发DMA0进行AD转换的启动,AD转换结束后,触发DMA1进行数据读取。如何对DMA0和DMA1的TCD进行配置?
回复 支持 反对

使用道具 举报

该用户从未签到

28

主题

108

帖子

1

高级会员

Rank: 4

积分
523
最后登录
2020-9-7
 楼主| 发表于 2018-11-19 09:02:26 | 显示全部楼层
有大神一起讨论一下吗?帖子不要沉啊
回复 支持 反对

使用道具 举报

该用户从未签到

28

主题

108

帖子

1

高级会员

Rank: 4

积分
523
最后登录
2020-9-7
 楼主| 发表于 2018-11-19 09:43:50 | 显示全部楼层
为了实现多ADC通道扫描采样,需要考虑的一个核心关键点在于,利用了ADC的软触发转换“一触即发”的特性。以软触发转换为开始,让一路DMA(DMA0)通过搬运转换命令字到ADC转换通道的命令寄存器(ADCx_SC1A)以执行自动触发。在转换完成之后,又通过另一路DMA(DMA1)将ADC转换结果寄存器(ADCx_RA)中存放的转换值自动搬运到用户指定的结果存储区中。此时也利用到了ADC模块可
以通过读结果寄存器ADCx_RA的操作清转换完成标志位(ADCx_SC1A[COCO]),只有当COCO标志位被清零后,ADC才能执行下一次转换。而当COCO标志位被硬件自动置位时,可以触发另一路DMA(DMA1)将转换结果从ADCx_RA中读走,实现自动清COCO标志位的操作。此时,整个转换过程都是由控制搬运转换命令字的DMA搬运操作掌控的,为了控制搬运转换命令字的节奏,可以选择使用PIT触发该路DMA的搬运过程


以上,因为COCO的标志位清除有两种情况
1.读RA寄存器  2.写SC1A寄存器

因此,我的疑问是,如果DMA1未来得及读取RA寄存器时,DMA0又写了SC1A,会导致DMA1丢失数据?
这种时间机制,是不是有缺陷?如何改善?
回复 支持 反对

使用道具 举报

该用户从未签到

723

主题

6382

帖子

0

超级版主

Rank: 8Rank: 8

积分
25480
最后登录
2025-9-9
发表于 2018-11-19 10:18:16 | 显示全部楼层
你可以参考此应用手册实现。
AN4590(中文).pdf (409.09 KB, 下载次数: 59)
回复 支持 反对

使用道具 举报

该用户从未签到

28

主题

108

帖子

1

高级会员

Rank: 4

积分
523
最后登录
2020-9-7
 楼主| 发表于 2018-11-19 10:27:25 | 显示全部楼层
小恩GG 发表于 2018-11-19 10:18
你可以参考此应用手册实现。

这份我也有找到,之前的思路是参考另外一份资料的,早上感觉思路好像不是太对。请问您有根据这份成功实现功能吗?
回复 支持 反对

使用道具 举报

该用户从未签到

28

主题

108

帖子

1

高级会员

Rank: 4

积分
523
最后登录
2020-9-7
 楼主| 发表于 2018-11-20 11:04:41 | 显示全部楼层
小恩GG 发表于 2018-11-19 10:18
你可以参考此应用手册实现。

请问一下:

例如,50Hz的电流波形,一个周期为20ms,总的有A/B/C/N四路电流,我500US分别对A/B/C/N采样一个点,能实现吗?

麻烦您帮我解答一下,我意思是,定时触发一次,就要采样4个通道。而PDF资料,是定时触发一次,才采样一个通道,采样4个通道,需要定时触发4次,就是4*500us
回复 支持 反对

使用道具 举报

该用户从未签到

723

主题

6382

帖子

0

超级版主

Rank: 8Rank: 8

积分
25480
最后登录
2025-9-9
发表于 2018-11-20 14:31:51 | 显示全部楼层
在士林的晴天 发表于 2018-11-20 11:04
请问一下:

例如,50Hz的电流波形,一个周期为20ms,总的有A/B/C/N四路电流,我500US分别对A/B/C/N采样 ...

PIT没法做到,硬件触发一次,4个ADC通道顺序采样。
实现相似功能的就是用PDB的预触发作为ADC的硬件触发源,特别是B2B模式,总共有四个触发源,形成一个环状结构,循环的触发ADC采样。
具体请参考PDB模块章节
回复 支持 反对

使用道具 举报

该用户从未签到

3

主题

8

帖子

0

新手上路

Rank: 1

积分
42
最后登录
2019-1-9
发表于 2018-12-6 13:42:30 | 显示全部楼层
我也在做片上ADC采样,4路电流3路电压,一个周波采样64点,还要考虑频率追踪问题。会持续关注此贴,希望楼主有成果多多赐教! PDB应该可行。
回复 支持 反对

使用道具 举报

该用户从未签到

28

主题

108

帖子

1

高级会员

Rank: 4

积分
523
最后登录
2020-9-7
 楼主| 发表于 2018-12-24 15:15:49 | 显示全部楼层
wangshixin1016 发表于 2018-12-6 13:42
我也在做片上ADC采样,4路电流3路电压,一个周波采样64点,还要考虑频率追踪问题。会持续关注此贴,希望楼 ...

我还是用PIT进行触发的,目前是能进行采样了,就是可能通道之间采样间隔比较长
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /3 下一条

Archiver|手机版|小黑屋|恩智浦技术社区

GMT+8, 2025-9-9 19:28 , Processed in 0.097124 second(s), 33 queries , MemCache On.

Powered by Discuz! X3.4

Copyright © 2001-2024, Tencent Cloud.

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