打印

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

[复制链接]
26282|96
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
kingpower2018|  楼主 | 2009-5-19 19:43 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
关于STM32 ADC用DMA采多通道时数据错位的问题,之前的错误现象是4.5A变成9A或0.5A,后来对ADC的参数配置加了定时配置后,有很大的改善,但客户现场又用了20多天后,又出现数据错误的现象,电流110A的变30多A?   急!急!急!



沙发
kingpower2018|  楼主 | 2009-5-19 19:46 | 只看该作者

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

我们现在用到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…….

使用特权

评论回复
板凳
kingpower2018|  楼主 | 2009-5-19 19:50 | 只看该作者

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

客户现场主要的有90KW的电机干拢信号不时的启动/停止,应该是干拢使ADC的数据发生错误!!!

使用特权

评论回复
地板
香水城| | 2009-5-19 21:21 | 只看该作者

你这个问题不是一时半会儿可以解决的

估计需要改变你的硬软件设计,甚至要改变软件的架构,所以说不是一时半会儿可以解决的。

使用特权

评论回复
5
zhiweihzx| | 2009-5-20 08:36 | 只看该作者

我也遇到过这个问题

哈哈,你遇到的问题我也遇到过,而且使用的方法也差不多,只不过我检测的AD通道比你多几个,也许我能帮你解决,这个问题不是stm32的问题,这么问他们也不会搞明白,哈哈,我已经把ST的人折腾的差不多了,都烦我了,嘿嘿,最后只好自己琢磨了。

使用特权

评论回复
6
kingpower2018|  楼主 | 2009-5-20 08:45 | 只看该作者

请5楼的帮帮忙!!!

请5楼的帮帮忙!留个联系方式行吗,你是怎么解决的,诚谢!

使用特权

评论回复
7
arm_long| | 2009-5-20 11:19 | 只看该作者

楼主太为难ST了

稍微考虑一下楼主描述的问题,就知道是楼主的设计有问题,而不是ST的芯片有问题

使用特权

评论回复
8
zhiweihzx| | 2009-5-20 11:52 | 只看该作者

描述问题

我感觉是楼主描述的问题,如果按照楼主描述的,dma会非常忙碌的,不停地存取数据,哈哈,不过我想应该不是这个样子。

使用特权

评论回复
9
kingpower2018|  楼主 | 2009-5-22 19:02 | 只看该作者

ST MCU 真麻烦

ST的工程师都哪去了,没人给我解决问题呀

使用特权

评论回复
10
香水城| | 2009-5-22 19:09 | 只看该作者

我们的工程师不是给你打电话联系了吗?

我前面不是说了吗,你这个问题不是一时半会儿可以解决的,估计需要改变你的硬软件设计,甚至要改变软件的架构。

 

使用特权

评论回复
11
jlwg| | 2009-5-24 06:54 | 只看该作者

香水城说的比较委婉,其实一看您的描述就知道主要是软件

2.    然后用定进器Tim1定时中断(50*128 Hz)从ADCRegValue [3]读数据到数组ADC_ConvertedTEMP[3*128]中;
------这么用很烦琐,又是定时器,又是dma,软件解决,根本不用什么定时器,定时器还有个和dma同步的问题。

3.    当128次采完时启用DMA2将ADC_ConvertedTEMP[3*128]传到ADC_ConvertedValue[3*128]数组中用于计算;
---同样是可以用软件解决的问题,又用一个dma。

大家对您的具体设计不了解,也只能说道这个程度。好好规划一下您的整个的软硬件架构吧。

使用特权

评论回复
12
McuPlayer| | 2009-5-24 13:24 | 只看该作者

上次好像香水有给一些建议

印象中我还跟贴了来着

使用特权

评论回复
13
lonely8122| | 2009-5-24 15:31 | 只看该作者

程序的鲁棒性差

  楼主的程序,数据的正确性太依赖于硬件的正常工作,如果现场工作环境很恶劣,有比较严重的电源或者电磁辐射干扰,ADC1的三个通道的转换顺序被打乱,或者DMA1的某次传送没有成功把数据送到ADCRegValue [3],或者TIMER1某次的定时中断响应慢了,都有可能造成三个通道的数据错位。个人觉得把三个通道的数据存在不同的缓冲区里,比较保险。

使用特权

评论回复
14
他爹| | 2009-5-25 14:22 | 只看该作者

咋就不行呢?为啥不试试别人家的MCU?

咋就不行呢?为啥不试试别人家的MCU?

使用特权

评论回复
15
午夜霓虹| | 2009-5-25 14:27 | 只看该作者

我也是那么做的

目前用着还算稳定,并不是楼主所说的那样,关键还是哪里设置的不是很到位,思路是没什么问题的。

使用特权

评论回复
16
他爹| | 2009-5-25 21:19 | 只看该作者

看明白了,真烂!

别误会,我说的不是说MCU!

使用特权

评论回复
17
午夜霓虹| | 2009-5-26 12:07 | 只看该作者

那是在说人吗

我觉得很有想法,充分利用硬件资源

使用特权

评论回复
18
jlwg| | 2009-5-26 12:46 | 只看该作者

硬件资源的充分利用硬件资源不应该是这种方式

把硬件全都用上了不等于充分利用,本来用1个硬件就可以做好的活,偏要用2个硬件,这种方式应该叫充分浪费硬件资源,硬件浪费了,程序还没做好。

使用特权

评论回复
19
cqbbgmg| | 2009-5-26 13:17 | 只看该作者

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

我也是用DMA,采多通道信号的,但没出现问题,**50hz的同步信号同步,每20ms采约350次的电压,电流,输入等信号,计算真有效值,每次同步信号来先关闭adc,从新设好dma,adc后在开始采样,一次都没有出过错。我的缓冲区大于数据区,保证不溢出,然后采到多少算多少。

使用特权

评论回复
20
午夜霓虹| | 2009-5-26 15:06 | 只看该作者

关键问题在于细节

他的思路本身没什么大的问题,关键在于很多细节的地方可能没注意到,这样做的好处是CPU可以解脱出来做更多的事情,软件的复杂度也会降低,复杂度低了,自然稳定性就会提高。

   我们不能说第一个走新路的人摔倒了,就否定路的价值。

   路本来是无所谓有无所谓无的,走的人多了,也便成了路,方法也是,出主意的人多了,慢慢就会完善,体现出他的优点,避免缺点。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

4

主题

58

帖子

0

粉丝