9757|27

75

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

通道错位:阴魂不散,害人不浅 [复制链接]

关于STM32的ADC在顺序扫描DMA传输模式下,容易出现通道错位的问题,已经是由来已久。在我做的产品中,由于用到7个通道,而注入模式只有4个寄存器(重点!),就采用了此模式。测试发现,在调试运行中打断运行后,重新开始运行的话非常容易出现通道错位。
看了坛子里的讨论,加上自己的总结,采取了自以为完美的措施:每次DMA传输结束后触发中断,计算结束后,对两个ADC都DEINIT,重新初始化和校准,然后对DMA也如法炮制。为了避免抢资源,整个程序中只开了这一个中断。
经过几个月几千次的测试,没发现这个鬼影再出现。自以为得计,终于制服了这个阴魂。
昨天下午,来了位对我的东西极为感兴趣的客户经理,于是我给他讲:我的东西可以达到0.1%的测量精度,而且在一个通道满负荷时,不影响其他通道。那经理不相信我能用12位的ADC做到,于是拉出一匹来溜溜,看看是不是骡子。
经理要我加入零序电流通道,退出零序保护,把相电流保护动作值设定为2A电流0秒动作(满负荷100A),我很自信得照做了。当电流加到90A,数值显示稳定,其他三相电流没飘到0.02!刚要开口说话,继电器动作的声音出来了,LCD屏上立即跳出信息提示:C相速断保护动作,时间0.02秒。
登时被石化在当场!我很清楚,鬼影又出来了!C相上根本没接线,哪里来的电流啊。客户经理拍拍我,那眼神很分明:牛不是这么吹的 啊
杯具啊。窗外传来那英的歌:就这样被鬼征服,断送了自己的路,我的前景是模糊,我的选择是糊涂......
路还要走啊,查吧,很简单,在驱动继电器的语句上设定了断点,经过几十次试验就抓住了。果然,本该在零通道上的1866采样值,出现在了C上,而零通道上本该是1866的成了-1,经过滤波算法后,这个冲激值在全部频谱上叠加了一个等值的77(我的是24点算法),而且其影响要在24个采样点过后才消除,超过了设定值的三倍多,不动才怪!
改吧,顺序扫描是绝不能用了,继电保护的特点就是:出现一次问题,立即封门,再好也没人在买喽!
试着用注入通道,也很快改好了。可是跟UM上冲突的问题又来了:如前面重点所说,注入模式下只有四个DR寄存器,UM上的寄存器列表上也是四个,可测试中发现,ADC1和ADC2各有四个!如果总共有八个,昨天损失的客户,要冤死了哟!!!

究竟是几个,亲爱的ST啊,能清楚得说说吗???
此帖出自stm32/stm8论坛

最新回复

                                 看了这么久,真不知道你为什么要使用注入模式? 就算用16个AD通道也不会出错啊 就用DMA模式 注入通道最多只能四个,是给你暂时读出的需要。 另外,在你设计的时候,一定先仔细看手册,不然重设计,是件麻烦的事。  详情 回复 发表于 2011-1-6 08:58
点赞 关注
 

回复
举报

68

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
经过示波器测量,DMA后的中断过程总共占据了245微秒的计算时间,而两次中断的时间间隔是833微秒 (20毫秒一个周波,采集24个点,两个点的间隔时间是833微秒)
因此不是因为中断过程重叠的原因。
此帖出自stm32/stm8论坛
 
 

回复

61

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
能给出一个测试程序可以重现你说的问题吗?

眼见为实,我想亲眼看看你说的情况。
此帖出自stm32/stm8论坛
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

4
 
能给出一个测试程序可以重现你说的问题吗?

眼见为实,我想亲眼看看你说的情况。
对于这样的常见、悬而未决的问题(STM32 ADC DMA错位),建议版主给出1个可以工作的例子,应该比问客户要代码更加有效
此帖出自stm32/stm8论坛
 
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

5
 
不用贴代码这么麻烦了。

需要的答案是: 注入模式究竟有几个DR寄存器!!!ADC1和ADC2各有四个,还是这两个ADC公用这四个。根据UM说明,注入模式的JDR寄存器高十六位是无效的,只有低十六位有效,必然是无法跟顺序模式的那样ADC1用低16位,ADC2用高16位。

我的程序已经改了注入模式,再改回顺序模式去抓个图看看。
并不是经常错位,而是偶然的,很少出现。但出现一次就是难以挽回的后果。
此帖出自stm32/stm8论坛
 
 
 

回复

77

帖子

0

TA的资源

一粒金砂(初级)

6
 
呵呵,这问题我以前也遇到过,不过后来没出现了,你的产品的编译器用的是哪个版本的,我现在倒是认为不是ST的问题,因为我升级编译器就没再出现了,而且以前出现是在调试的时候打断一下,然后再次扫描,就出现错位,呵呵。

在运行的时候还真是没碰到过。st的AD的精度做的确实不错,就是他的这个问题让人觉得不舒服,我把代码给过st的fae,但是等了好几个星期,都没有明确的答复。

楼主也就别再难为他们了。
此帖出自stm32/stm8论坛
 
 
 

回复

55

帖子

0

TA的资源

一粒金砂(初级)

7
 
                                 我觉得ST也应该有个说明,说明一下错位的原因和如何避免,楼主的代码也不妨再给他们分析分析,我那个给了没什么结果。
此帖出自stm32/stm8论坛
 
 
 

回复

64

帖子

0

TA的资源

一粒金砂(初级)

8
 
请问楼主的ADC是用硬件触发还是软件触发的呢?
我现在也遇到这个问题,就是ADC的注入通道不够用。我想是DMA,就是怕通道错。
此帖出自stm32/stm8论坛
 
 
 

回复

80

帖子

0

TA的资源

一粒金砂(初级)

9
 
                                 关注,我也在用DMA ADC
此帖出自stm32/stm8论坛
 
 
 

回复

65

帖子

0

TA的资源

一粒金砂(初级)

10
 
我看了一下,注入模式应该是两个ADC,分别有四个寄存器,不过我没实验,呵呵。

个人感觉还是楼主那里有问题,我用的也是DMA的模式,在正常仿真的时候确实出现过通过错位,但是真正的用起来还没出现过。
此帖出自stm32/stm8论坛
 
 
 

回复

62

帖子

0

TA的资源

一粒金砂(初级)

11
 
                                 楼主的标题挺吓人的
此帖出自stm32/stm8论坛
 
 
 

回复

77

帖子

0

TA的资源

一粒金砂(初级)

12
 


如果是指示仪表,确实是发现不了的,仅仅一个数据异常,马上就过去了,也就是几十毫秒的事情,眼睛发现不了。但是这种保护设备是隐瞒不成的,它会立即动作,并记录下动作过程和所有数据来。
如十楼说说,ADC精度确实很高,很强大。但不知道为啥非要用这种怪异的方式。TI的DSP里ADC通道和寄存器是一一对应的,用了好多从没这等怪事。
不管怎样,DMA是坚决不用了,注入通道有几个算几个,先用上。进入ADC的JOE中断后,再重新设置ADC,把另外的通道设置上,软件触发一次,在等待ADC完成的过程中,计算刚才得到的数据。估算过,时间损失不了太多,也就是20个微秒吧。

注入通道究竟几个寄存器,ST的客服是不知道,是不愿说,还是要保密啊
此帖出自stm32/stm8论坛
 
 
 

回复

78

帖子

0

TA的资源

一粒金砂(初级)

13
 
C相上根本没接线-----是指对应的STM32引脚是悬空的吗?

ST的客服是不知道-----哪里的客服?深圳、上海、北京?

不过好像ST好像没有客服,只有FAE吧。
此帖出自stm32/stm8论坛
 
 
 

回复

123

帖子

0

TA的资源

一粒金砂(初级)

14
 
不是STM32引脚悬空,而是没接外加的电流量,STM32的板子是好的,只要把外接的电流量加上就正常了。

没知道的就算了,自己试吧。现在发现与买的不同批次的芯片有关系!上次演示用的设备继续不定时的错位,但是换了一台不同次购买的芯片做的设备,测试了几百次还没出问题。

纵观做保护的,国内比较大的南瑞继保,第一代第二代产品使用了INTEL芯片(80196和80296),最新的一代使用的是ADI的BF系列DSP;北京四方,第一代是日本三菱芯片,第二代是MOTOLOLA的MC68332,最新一代是飞思卡尔的冷火。国外的,法国ALSTOM使用的是TI的TMS320VC33
此帖出自stm32/stm8论坛
 
 
 

回复

63

帖子

0

TA的资源

一粒金砂(初级)

15
 
楼主用的是官方库?
ST的官方库有不少的BUG。
俺一开始使用STM32库的时候就中了招。后来把不得不把手册上的奇存器查了个底朝天。
核对ARM官方的手册,发觉ST数据手册上同样有一些让人不解的寄存器地址错误。
这过程浪费不少时间。
此帖出自stm32/stm8论坛
 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

16
 
楼主, 大凡 已经发现的MCU的硬件BUG. 都是有规律的。
而你说的这种情况。 不符合目前的 规则。
最有说服力的就是软件存在BUG。

其实,要做无规律的东西,也是很不容易的啊!

楼主,你实在是太有才!
此帖出自stm32/stm8论坛
 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

17
 
stm32官方库从2。0版到最新的3。4版,所提供的comtex-M3公共部分的底层驱动设置都存在一些问题。
但是这好象跟ST官方的关系不大。那些CM3的公共部分是每个用MCU的编程人员都必需掌握的技术。

在此忠告一下:不喜欢底层寄存器编程的人肯定会掉进那个有可能至命的BUG。
此帖出自stm32/stm8论坛
 
 
 

回复

61

帖子

0

TA的资源

一粒金砂(初级)

18
 
                                 楼主为什么不用规则通道?上电就配好DMA采集,以后运行就不用操作DMA,只需要采集够点数,直接进中断,把缓存区解析数据解析出来就可以。我也发现注入通道会出现错位问题。我采集10通道12800HZ的采集率,没有发现什么问题。
此帖出自stm32/stm8论坛
 
 
 

回复

84

帖子

0

TA的资源

一粒金砂(初级)

19
 
这个问题, 半年之前, 我就提出了. 为什么过去这么长时间了, 还在要代码?
为什么还在要代码?
就库里提供的代码例子, 就可以测试呀.
问题是这个毛病是来得很突然! 我一直怀疑是 DMA 与总线仲裁的问题. 如果真是 MCU 内部设计问题, 我们应用人员是不容易给出准确重现的测试代码来的.
此帖出自stm32/stm8论坛
 
 
 

回复

69

帖子

0

TA的资源

一粒金砂(初级)

20
 
目前使用注入通道,进入定时器中断后软件启动ADC,一次采集4个,再重新改ADC的通道设置后启动再采集4个,没发现问题。至于四个还是八个,我可经不住折腾了,不再冒险做试验。等产品定型了,有空余时间再来测试吧。
19楼的朋友,注入通道一对一的寄存器,没用DMA, 也错位?真要这样,我这项目就死翘翘啦
此帖出自stm32/stm8论坛
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

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

 
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
快速回复 返回顶部 返回列表