打印
[STM32F0]

ADC采集三相电压电流,ADC0~ADC5只有前四个正确

[复制链接]
3356|31
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
LSLDAY|  楼主 | 2016-6-11 12:42 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
我是采集6通道,ADC0~ADC5只有前四个通道正确,不管从后往前扫描还是,从前往后扫描,都是前四个(ADC0~ADC3)通道正确  ,好怪啊  ,不知道哪里错了

1.png (51.77 KB )

1.png

2.png (80.57 KB )

2.png

3.png (93.7 KB )

3.png

QQ截图20160611122345.png (67.89 KB )

QQ截图20160611122345.png
沙发
LSLDAY|  楼主 | 2016-6-11 12:43 | 只看该作者
有遇到过同样问题的同学吗

使用特权

评论回复
板凳
LSLDAY|  楼主 | 2016-6-11 12:44 | 只看该作者
@zyj9490   能给个指点吗  朋友

使用特权

评论回复
地板
LSLDAY|  楼主 | 2016-6-11 12:58 | 只看该作者
从  ADC0 扫描到 ADC5   ADC0~ADC3  正确        从  ADC5 扫描到 ADC0   ADC5~ADC2  正确      

使用特权

评论回复
5
zyj9490| | 2016-6-11 13:57 | 只看该作者
本帖最后由 zyj9490 于 2016-6-11 14:02 编辑
LSLDAY 发表于 2016-6-11 12:44
@zyj9490   能给个指点吗  朋友

dma的BUFFERSIZE不为6,应为12,或者用CUBE重新做一个项目初始化下试下。明显是DMA转移不出来数据啊。

使用特权

评论回复
6
LSLDAY|  楼主 | 2016-6-11 14:38 | 只看该作者
zyj9490 发表于 2016-6-11 13:57
dma的BUFFERSIZE不为6,应为12,或者用CUBE重新做一个项目初始化下试下。明显是DMA转移不出来数据啊。  ...

谢谢大哥的回复,问题我找到了 就在图片中的红色箭头处,后两个通的运算的中间变量忘记清0了,现在改过来就好了 。  不过你 说的那个DMA缓存数组应该为12  不是6   这是 为什么???

4.png (61.78 KB )

4.png

5.png (62.08 KB )

5.png

使用特权

评论回复
7
LSLDAY|  楼主 | 2016-6-11 14:39 | 只看该作者
zyj9490 发表于 2016-6-11 13:57
dma的BUFFERSIZE不为6,应为12,或者用CUBE重新做一个项目初始化下试下。明显是DMA转移不出来数据啊。  ...

后两个通道的计算中间变量忘记清0了,现在改过来就好了 。

使用特权

评论回复
8
zyj9490| | 2016-6-11 14:42 | 只看该作者
LSLDAY 发表于 2016-6-11 14:38
谢谢大哥的回复,问题我找到了 就在图片中的红色箭头处,后两个通的运算的中间变量忘记清0了,现在改过来 ...

你的AD是12位吗,一个通道占二个字节,不是12个字节吗。我是用CUBE生成初始代码的。

使用特权

评论回复
9
LSLDAY|  楼主 | 2016-6-11 18:47 | 只看该作者
是 12位的  ,但我的缓存数组   dma_init_structure.DMA_MemoryBaseAddr = (uint32_t)&adc_dma_tab[0];      
adc_dma_tab[]数组定义的 int16_t 型   所以dma的BUFFERSIZE 可以为6    不知道我这么认为是对还是错

使用特权

评论回复
10
LSLDAY|  楼主 | 2016-6-11 19:07 | 只看该作者
zyj9490 发表于 2016-6-11 14:42
你的AD是12位吗,一个通道占二个字节,不是12个字节吗。我是用CUBE生成初始代码的。 ...

是 12位的  ,但我的缓存数组   dma_init_structure.DMA_MemoryBaseAddr = (uint32_t)&adc_dma_tab[0];      
adc_dma_tab[]数组定义的 int16_t 型   所以dma的BUFFERSIZE 可以为6    不知道我这么认为是对还是错

使用特权

评论回复
11
zyj9490| | 2016-6-11 21:36 | 只看该作者
LSLDAY 发表于 2016-6-11 19:07
是 12位的  ,但我的缓存数组   dma_init_structure.DMA_MemoryBaseAddr = (uint32_t)&adc_dma_tab[0];   ...

你认为是对的,怎么是32位呢

使用特权

评论回复
12
robter| | 2016-6-12 07:23 | 只看该作者
很好的经验,学习了

使用特权

评论回复
13
LxiaoseI| | 2016-6-12 09:51 | 只看该作者
没采用计量芯片?

使用特权

评论回复
14
LSLDAY|  楼主 | 2016-6-12 11:24 | 只看该作者
zyj9490 发表于 2016-6-11 21:36
你认为是对的,怎么是32位呢

取 adc_dma_tab 数组的首地址强制转换为uint32_t类型  这个32位指的是地址的类型

使用特权

评论回复
15
LSLDAY|  楼主 | 2016-6-12 11:25 | 只看该作者
robter 发表于 2016-6-12 07:23
很好的经验,学习了

哪个经验

使用特权

评论回复
16
LSLDAY|  楼主 | 2016-6-12 11:26 | 只看该作者
zyj9490 发表于 2016-6-11 21:36
你认为是对的,怎么是32位呢

对了,请教一下   CUBE是什么??

使用特权

评论回复
17
LSLDAY|  楼主 | 2016-6-12 11:29 | 只看该作者
LxiaoseI 发表于 2016-6-12 09:51
没采用计量芯片?

嗯是的额

使用特权

评论回复
18
airwill| | 2016-6-12 11:33 | 只看该作者
看来只是软件里的初始化缺陷导致的, 路过, 恭喜楼主.

使用特权

评论回复
19
LSLDAY|  楼主 | 2016-6-12 12:02 | 只看该作者
airwill 发表于 2016-6-12 11:33
看来只是软件里的初始化缺陷导致的, 路过, 恭喜楼主.

谢谢

使用特权

评论回复
20
LSLDAY|  楼主 | 2016-6-12 12:05 | 只看该作者
airwill 发表于 2016-6-12 11:33
看来只是软件里的初始化缺陷导致的, 路过, 恭喜楼主.

才发现,原来竟是版主大人,多谢光临,不胜荣幸啊

使用特权

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

本版积分规则

24

主题

288

帖子

5

粉丝