14573|24

56

帖子

3

TA的资源

一粒金砂(初级)

楼主
 

关于STM32ADC用DMA采多通道时数据错位的问题 [复制链接]

我们现在用到STM32的两种CPU STM32F101C8T6 和 STM32F103都出现相同的问题,ADC采样用DMA方式采集多个通道时出现数据通道错位的问题,一般情况下都是正常的,我们在实验室测试也没有问题,但是在客户现场用上一个多月后就会出现这种现象,我们的产品主要是电力测控,出现这种问题就很严重了,可能出现很大的事故,希望ST公司的的技术人员能及时给予我们帮助.

DMA错位问题:
关于采样处理:
1.    小表采ADC1的三个通道CH1/ CH2/ CH3,用DMA1传送到缓冲区ADCRegValue [3] 中;
2.    然后用定进器Tim1定时中断(50*128 Hz)从ADCRegValue [3]读数据到数组ADC_ConvertedTEMP[3*128]中;
3.    当128次采完时启用DMA2将ADC_ConvertedTEMP[3*128]传到ADC_ConvertedValue[3*128]数组中用于计算;
4.    正常情况下,ADCRegValue [3]内的数据应为CH1/ CH2/ CH3
ADC_ConvertedTEMP[3*128] 内的数据应为CH1/ CH2/ CH3 / CH1/ CH2/ CH3…….
ADC_ ConvertedValue [3*128] 内的数据应为CH1/ CH2/ CH3 / CH1/ CH2/ CH3…….


急!急!急!  (邱工13652373631)
此帖出自stm32/stm8论坛

最新回复

                                 关于STM32 ADC用DMA采多通道时数据错位的问题,现在客户现场又出现问题了,电流110A 变成了解情30多A    详情 回复 发表于 2009-5-19 19:39
点赞 关注
 

回复
举报

78

帖子

0

TA的资源

一粒金砂(初级)

沙发
 

应该用定时器中断(或定时器事件触发)启动采样,DMA完成中断

                                  
此帖出自stm32/stm8论坛
 
 

回复

74

帖子

0

TA的资源

一粒金砂(初级)

板凳
 

你的问题好像与硬件无关,应该是软件处理的问题

我有几个问题:

1)ADC的采样速率是多少?为什么要用定进器中断把数据从ADCRegValue[3]搬到ADC_ConvertedTEMP[3*128]中?这一步应该使用DMA1传送结束中断实现才对。

2)如果用定进器中断实现数据从ADCRegValue[3]传送到ADC_ConvertedTEMP[3*128]中,如何保证数据传送过程中没有正在进行的ADC采样?

3)如何保证DMA2将ADC_ConvertedTEMP[3*128]传到ADC_ConvertedValue[3*128]数组的过程中(你的描述3),没有正在进行的ADC采样(你的描述1),并且没有正在进行的定进器中断搬运数据(你的描述2)?

4)非正常情况下错位的结果是什么样的?


请问你在哪个城市?ST或ST代理商的哪个FAE负责支持你的?你可以通过站内短信高速我,谢谢。
此帖出自stm32/stm8论坛
 
 

回复

74

帖子

0

TA的资源

一粒金砂(初级)

4
 

这不是开玩笑的了。

楼主拿自己的前途与公司的前提做赌注了啊!  太冒险了。

产品都有经过严格测试,软件反复推敲`,最坏打算~,绝对不可以发生的情况~
此帖出自stm32/stm8论坛
 
 
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

5
 

关于STM32 ADC用DMA采多通道时数据错位的问题

ADC的时钟频率为9MHz,第个通道的采样时间为ADC_SampleTime_41Cycles5,为什么要用定进器中断把数据从ADCRegValue[3]搬到ADC_ConvertedTEMP[3*128]中呢?是因为我要根据外界的频率不断来调整我的定时器时间来采取数据,外界的频率不一定是50Hz,有可能为40Hz~70Hz的任意值,但我要保证一个周期采样128个点.
2、对于用定进器中断实现数据从ADCRegValue[3]传送到ADC_ConvertedTEMP[3*128]中,数据传送过程中没有正在进行的ADC采样,我不用管它,因为数据都是一样的,不管它是新的数据,还是上一次的数据。
3、如何保证DMA2将ADC_ConvertedTEMP[3*128]传到ADC_ConvertedValue[3*128]数组的过程中(你的描述3),没有正在进行的ADC采样(你的描述1),并且没有正在进行的定进器中断搬运数据(你的描述2),我们也不用管它,只要它在相同的地方,数据就是一样的,我也不用管它是新的数据,还是上一次的数据。

 
此帖出自stm32/stm8论坛
 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

6
 

关于STM32 ADC用DMA采多通道时数据错位的问题

                                 我们是深圳的公司
此帖出自stm32/stm8论坛
 
 
 

回复

59

帖子

0

TA的资源

一粒金砂(初级)

7
 

有点无语……这真是一个奇特的采样方法...

                                  
此帖出自stm32/stm8论坛
 
 
 

回复

53

帖子

0

TA的资源

一粒金砂(初级)

8
 

关于STM32 ADC用DMA采多通道时数据错位的问题

非正常情况下错位的结果是ADCRegValue [3]内的数据为 CH2/ CH3/CH1 或 CH3/CH1/CH2
ADC_ConvertedTEMP[3*128] 内的数据应为CH2/ CH3/CH1/ CH2/ CH3/CH1…….
或 CH3/CH1/ CH2/ CH3/CH1/CH2/…….
此帖出自stm32/stm8论坛
 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

9
 

这2个DMA通道的优先级是如何设置的?

DMA1相对DMA2应该具有较高的优先级,这里是不是设置错误。怀疑是在DMA2传送数据时,正好碰上ADC采样需要DMA1的操作,但因为优先级的问题,ADC的数据没有及时地传送到ADCRegValue[3]中,造成了错位。


另外,根据5楼的描述,DMA1应该使用循环模式,连续不断地从ADC获取采样数据。同时DMA1可以直接把从ADC获取的数据传送到ADC_ConvertedTEMP[3*128]缓冲区中,省掉ADCRegValue[3]这个中间环节。最后定时地把ADC_ConvertedTEMP[3*128]的内容拷贝到ADC_ConvertedValue[3*128]数组中进行计算。
此帖出自stm32/stm8论坛
 
 
 

回复

73

帖子

0

TA的资源

一粒金砂(初级)

10
 

小板凳,学习

DMA是个好东西,我把原来的一些东西改到DMA下面。
CPU的空余时间更多了,得再多给些活给它干,不能让它闲着。
此帖出自stm32/stm8论坛
 
 
 

回复

73

帖子

0

TA的资源

一粒金砂(初级)

11
 

哈哈!楼主的程序有问题!

                                 这样很明显了啊!程序问题。
此帖出自stm32/stm8论坛
 
 
 

回复

79

帖子

0

TA的资源

一粒金砂(初级)

12
 

回复Netjob

                                 楼上,很明显吗?你是不是看出哪的问题了?分享下嘛
此帖出自stm32/stm8论坛
 
 
 

回复

66

帖子

0

TA的资源

一粒金砂(初级)

13
 

呵呵,你的处理太复杂了

即使要用DMA,为什么还要用定时器中断去读数据,128点采样,你可以通过DMA放到一个数据空间里,用DMA传输完毕后,再去分解数据。如果你要不想停AD,再定义一个比较大的空间采样就可以了吗?
还有你要跟频率,直接用定时器捕捉频率就可以了,根据上个周期的电网信号频率来定下个电网频率的周期。况且电网信号一般不会很快波动,即时波动也只是测误差相对大一点。如果你是电网保护设备,这点波动根本是没有关系的
此帖出自stm32/stm8论坛
 
 
 

回复

63

帖子

0

TA的资源

一粒金砂(初级)

14
 

关于STM32 ADC用DMA采多通道时数据错位的问题

不用定时器去读数据,我怎么样在一个周期波上采样均等的128个点呢?如果不用定时间器,我用DMA直接传128个采样数据不一定的我要的采样点数据,而且这128个采样点的时间周期是要根据输入的电网信号频率改变需改变的.
此帖出自stm32/stm8论坛
 
 
 

回复

84

帖子

0

TA的资源

一粒金砂(初级)

15
 

STM32 ADC用DMA采多通道时数据错位的问题

不用定时器去读数据,我怎么样在一个周期波上采样均等的128个点呢?如果不用定时间器,我用DMA直接传128个采样数据不一定的我要的采样点数据,而且这128个采样点的时间周期是要根据输入的电网信号频率改变而改变的.
我的产品在一般情况下是正常的,而且在实验室通过了所有需要的测试项目,但在客户现场用上几个月后就出现数据错位
此帖出自stm32/stm8论坛
 
 
 

回复

21

帖子

0

TA的资源

一粒金砂(初级)

16
 

STM32 ADC用DMA采多通道时数据错位的问题

                                 现在基本要确认是干拢产生的数据通道错位,我们在实验室用20KV的静电水平耦合,大概几秒钟就出现数据通道错位.
此帖出自stm32/stm8论坛
 
 
 

回复

73

帖子

0

TA的资源

一粒金砂(初级)

17
 

ADC的数据不是你去读的时候才采样的呀,控制时间的是启动

建议你参考我的程序吧,我直接用DMA加定时器采样的,44.1KBps的。
我的这个芯片是可以直接将定时器的比较信号启动ADC的。如果你的没有这个功能,那么在定时器中断中启动ADC即可。
启动后它就开始转换了,这时才是真正的采样,转换完成后,它会自动去触发DMA去读数据。当指定的数据个数达到时,
DMA会产生中断(或者你去查询也得),这时候就可以去处理这一些数据了。当然在数据处理之前,你可以先设置好
DMA,指向另外一个缓冲区,同时又采样了。

你要搞清楚这个关系:定时器是用来启动ADC的,而不是用来去读数据。ADC转换完毕会自动触发DMA读数据,DMA数据足够后,产生中断,处理数据。

https://bbs.eeworld.com.cn/club/bbs/showEssence.asp?id=10676
此帖出自stm32/stm8论坛
 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

18
 

出错情况要分清楚

  出错情况要分清楚:是只在在施加干扰时出错,还是干扰消失后仍然出错。
前一种情况或许可以忍受,后一种情况不能忍受、必须修正。
此帖出自stm32/stm8论坛
 
 
 

回复

84

帖子

0

TA的资源

一粒金砂(初级)

19
 

16楼给出的信息是楼主位没有提到的,而这是一个非常关键的

                                 18楼的问题是个实质问题,楼主如何看待这个问题呢?
此帖出自stm32/stm8论坛
 
 
 

回复

76

帖子

0

TA的资源

一粒金砂(初级)

20
 

等着瞧, 我可以保证100%是程序问题。

                                  
此帖出自stm32/stm8论坛
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

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

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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

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

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

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