86

帖子

0

TA的资源

一粒金砂(初级)

21
 

DMA

参考手册中,关于AD使用DMA传送数据这样描述:

DMA:直接数据访问模式
该位由软件设置和清除。详见DMA控制器章节。
0:不使用DMA模式
1:使用DMA模式
注:在多于一个ADC的器件中,只有ADC1能产生DMA请求。

要使用ADC1、ADC3两个,不能用两通道的DMA分别传送两个ADC的数据么?
此帖出自stm32/stm8论坛
 

回复

77

帖子

0

TA的资源

一粒金砂(初级)

22
 

回21楼:对不起,这是翻译时的疏忽

那个"注"的原文是:Note: Only ADC1 and ADC3 can generate a DMA request. 只有ADC1和ADC2能产生DMA请求。

第10.8节的表述是正确的:
此帖出自stm32/stm8论坛
 
 

回复

62

帖子

0

TA的资源

一粒金砂(初级)

23
 

如何实现在我需要的时刻采样

情况是这样的:
1)ADC时钟9M,TIM1时钟72M经18分频计62500次得到156.25us的定时时间,TIM2时钟36M经9分频计4000次得1ms的定时时间。
2)总的周期是60ms,其中要采20路信号,需要156.25us采20通道一次样,20ms内每路信号采128次。
3)我设置的每次每路AD采样时间是(55.5+12.5)*(1/(9M)=7.5(5无限循环)采20路需要的总时间=20*7.5(5无限循环)=151.111111111111111111us

我现在设置成 单次连续模式,担心的问题是只采了151us采不了完整的波形。
此帖出自stm32/stm8论坛
 
 

回复

84

帖子

0

TA的资源

一粒金砂(初级)

24
 

STM32的每个ADC模块最多只有16个外部通道,你需要使用2个ADC模

STM32的每个ADC模块最多只有16个外部通道,你需要使用2个ADC模块才能实现20路信号的采集,这样你使用20路平均的计算方法就不对了。

比如你安排ADC1处理16路信号,ADC3处理剩余的4路信号,你需要按16路平均计算一次和按4路平均再计算一次。
此帖出自stm32/stm8论坛
 
 
 

回复

69

帖子

0

TA的资源

一粒金砂(初级)

25
 

使用了ADC1、ADC3,,,,,,

1)ADC1用了11通道外部加上一通道内部的参考电压共12路,ADC3用了9通道;
2)每通道都得采128个点,一样得定156.25us采一次

您是指:如果启动ADC1那么只ADC1转换12路,启动ADC3同理?


,,,,,,,,,,,
此帖出自stm32/stm8论坛
 
 
 

回复

64

帖子

0

TA的资源

一粒金砂(初级)

26
 

是的

                                 建议你每个ADC模块各安排10个通道,这样可以2个ADC模块使用一个定时基准进行采样。
此帖出自stm32/stm8论坛
 
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

27
 

电压信号有11路,电流信号9路

电压信号11路,电流9路,ADC1采电压,ADC3采电流;

我能这样采么:
1)TIM1定156.25us时间中,进入定时器处理函数后复位ADC_DR的EOC位,再启动ADC1;
2)当发现状态寄存器ADC_DR的EOC位被置1时启动ADC3,然后复位EOC位;
3)如此依次重复步骤1)、2)来采20通道的信号。
此帖出自stm32/stm8论坛
 
 
 

回复

79

帖子

0

TA的资源

一粒金砂(初级)

28
 

如果你要求每156.25us对每个通道采样一次,可以使用定时器触

设置ADC为单次+扫描+定时器触发+DMA,例如定时器设置为10us,则每10us定时器触发一次转换,这样第1次触发时转换第1个通道,第2次触发时转换第2个通道,......,第11次触发时转换第11个通道,每个通道开始转换的时间间隔就是定时器设置的10us;即每个通道转换需要(55+12.5)/(1/9M)=7.556us,再等待2.444u之后开始下一个通道的转换。

这样总共只需要10x10+7.556=107.556us就可以转换完11个通道,另一个ADC模块可以照此操作,2个模块完全并行且互不干扰;因此2个模块同时操作可以轻松地在107.556us转换完20个通道,大大少于156.25us。
此帖出自stm32/stm8论坛
 
 
 

回复

76

帖子

0

TA的资源

一粒金砂(初级)

29
 

谢谢香城主,这样一个周期能采得完整的波形么?

1)ADC1的这个内部电压参考信号,如果我要用到电压校准,是否一定得转换这个内部信号呢?
2)采的电压、电流信号都是周期为20ms的正弦波,希望一周采128个点,如果采电压信号11路外部+1路内部参考信号,对于每一路信号就是每隔13.0208333...3...us(20ms/(128*12))采一个点;
对于9路电流来说同理推得;
怎样设置能保证恰好在这段时间内采到20通道完整的信号呢;
3)您上面讲到两个ADC可以并行工作,我应该把它们两个设置成双ADC模式从而让它们能并行的转换么?
   也就是在ADC配置时这一句应该这样赋值么:
ADC_InitStructure.ADC_Mode = ADC_Mode_RegSimult;//工作在双ADC模式下
此帖出自stm32/stm8论坛
 
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

30
 

有问题

28楼香斑竹所说,与我的理解有偏差。据我试验得知,一旦是设定为扫描模式,即使是非连续转换,触发后也是全部转换完才产生EOC信号,转换结果需要用DMA传到RAM里。以下是部分设置:
ADC_DeInit(ADC1);//DMA传输后的采样表,第0个高16位是IA,低16位是IB;第1个高16位是IC,低16位是3I0
  ADC_DeInit(ADC2);//第3个高16位是IA,低16位是5V采集,判断DMA通道错位后的纠正。
  ADC_InitStructure.ADC_Mode = ADC_Mode_RegSimult;
  ADC_InitStructure.ADC_ScanConvMode = ENABLE;
  ADC_InitStructure.ADC_ContinuousConvMode = DISABLE;
此帖出自stm32/stm8论坛
 
 
 

回复

74

帖子

0

TA的资源

一粒金砂(初级)

31
 

晕了

,,,,, 
搞不清楚了,
我得好好看看 手册,
,,,,,
此帖出自stm32/stm8论坛
 
 
 

回复

69

帖子

0

TA的资源

一粒金砂(初级)

32
 

谢谢,我搞混了,30楼正确

                                 对不起咯~~~~
此帖出自stm32/stm8论坛
 
 
 

回复

90

帖子

0

TA的资源

一粒金砂(初级)

33
 

我觉得

                                   我觉得,两位说的都没错,用定时器触发单次转换,或者使用扫描模式都可以。
此帖出自stm32/stm8论坛
 
 
 

回复

82

帖子

0

TA的资源

一粒金砂(初级)

34
 

谢谢,设置ADC为单次+扫描+定时器触发+DMA

按照香城主的,设置ADC为单次+扫描+定时器触发+DMA,如下这样安排可以么:

1)ADC1 ADC3每通道采样一次时间=(41.5+12.5)*(1/9M)=6us;
2)定时156.25us,
进入定时处理函数后先复位ADC_DR的EOC位,再启动ADC1,ADC1转换所有通道的时间T1=6us*12=72us;
当检测到ADC_DR的EOC位被置位的时候,启动ADC3并复位ADC_DR的EOC位,ADC3所有通道转换所用时间T2=6*9=54us
总的时间T=T1+T2+语句判断时间=72us+54us+数us >= 126us;
3)剩下的时间等待到156.25us,进入下一次转换,直到采完所有通道的128个点,开始计算每通道的值。
此帖出自stm32/stm8论坛
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表