查看: 3755|回复: 9

[已解决] MK60DXX的ADC差分问题

[复制链接]

该用户从未签到

1

主题

6

帖子

0

新手上路

Rank: 1

积分
23
最后登录
2017-8-9
发表于 2017-8-7 18:03:39 | 显示全部楼层 |阅读模式
在使用ADC的差分功能的时候,使用的是差分模式,ADC_SC1_REG(adc,ab)  |= ADC_SC1_DIFF_MASK;
但读出来的值ADC0_BASE_PTR->R[0]为引脚对地的电压,不是DP,DM之间的电压
我输入的是差分电压,正的接DP,负的接DM。
例如,我给的差分电压是1.2V,即DP对GND是2.5V,DM对地1.3V,但读出来的值换算为电压,是2.5V,并非1.2V
为什么呢?

最佳答案

myheart33 发表于 2017-8-8 14:58 你说的是对的。 不是计算问题,还是差分有问题,差分电压为0,读R寄存器的值还换算后,还是ADC_DP对GND的 ... 其实还真和计算无关,如果结果寄存器里面有数据了,或者说数据正常了 ...
回复

使用道具 举报

该用户从未签到

712

主题

6371

帖子

0

超级版主

Rank: 8Rank: 8

积分
24871
最后登录
2025-7-18
发表于 2017-8-8 08:59:24 | 显示全部楼层
楼主你好!
把你芯片的全称给贴出来,这样我好帮你查看。
回复 支持 反对

使用道具 举报

该用户从未签到

1

主题

6

帖子

0

新手上路

Rank: 1

积分
23
最后登录
2017-8-9
 楼主| 发表于 2017-8-8 09:54:54 | 显示全部楼层
本帖最后由 myheart33 于 2017-8-8 10:00 编辑
小恩GG 发表于 2017-8-8 08:59
楼主你好!
把你芯片的全称给贴出来,这样我好帮你查看。

MK60DN512VLL10,用的是MQX4.2

  ADC_CFG1_REG(adc) |= ADC_CFG1_ADIV(0)            /**<  分频系数1 */
                                   + ADC_CFG1_MODE(1)          /**<  转换模式:当diff=0时:为单端12位转换 ;当diff=1时:为带有2进制补码输出的差分13位转换 */
                                  + ADC_CFG1_ADICLK(0);       /**<  输入时钟为总线时钟 */
  
  ADC_CFG2_REG(adc) |= ADC_CFG2_ADHSC_MASK;       /**<  高速转换时序 */               
  
  
  ADC_SC2_REG(adc) |= ADC_SC2_REFSEL(0)          /**<  参考电压:外部VREFH VREFL  */
                                  +ADC_SC2_DMAEN_MASK;           /**<  DMA使能*/
  ADC_SC3_REG(adc) = 0;           /**<  0个采样均值 */  
  
  ADC_SC1_REG(adc,ab)  &= ~ADC_SC1_AIEN_MASK;     /**< 转换完成中断禁止 */  
  
  ADC_SC1_REG(adc,ab)  |= ADC_SC1_DIFF_MASK;    /**< 差分信号 */
  ADC_SC1_REG(adc,ab) &= ~(ADC_SC1_ADCH_MASK);                  
  ADC_SC1_REG(adc,ab)  = ADC_SC1_ADCH(channel); //channel=0,adc=ADC0_BASE_PTR,ab=0

//设置源地址   
  DMA_BASE_PTR->TCD[0].SADDR = DMA_SADDR_SADDR((uint32_t)&(ADC0_BASE_PTR->R[0]));


回复 支持 反对

使用道具 举报

该用户从未签到

712

主题

6371

帖子

0

超级版主

Rank: 8Rank: 8

积分
24871
最后登录
2025-7-18
发表于 2017-8-8 10:16:38 | 显示全部楼层
myheart33 发表于 2017-8-8 09:54
MK60DN512VLL10,用的是MQX4.2

  ADC_CFG1_REG(adc) |= ADC_CFG1_ADIV(0)            /**<  分频系数1 */ ...

楼主你好!
仿真看下你的ADC寄存器。
SC1n[ADCH]=0, 硬件引脚要接在ADC0_DP0 和ADC0_DM0,硬件检查下不要接错了。
SC1n[DIFF] = 1, 检查寄存器,的确是差分。
先检查下这几点,是否寄存器仿真的时候也是正确的。
回复 支持 反对

使用道具 举报

该用户从未签到

1

主题

6

帖子

0

新手上路

Rank: 1

积分
23
最后登录
2017-8-9
 楼主| 发表于 2017-8-8 11:58:38 | 显示全部楼层
小恩GG 发表于 2017-8-8 10:16
楼主你好!
仿真看下你的ADC寄存器。
SC1n[ADCH]=0, 硬件引脚要接在ADC0_DP0 和ADC0_DM0,硬件检查下不要 ...

以上配置都没问题,好像找到问题了
现在用的是差分带符号13位,那最大量化值就是8192,也就是正负4096.
计算他的电压值:
V=(value*3.3)/8192
其中V为测量电压值;value为量化值,即R寄存器的值;3.3为最大电压值。
这个计算是对的吗?
回复 支持 反对

使用道具 举报

该用户从未签到

712

主题

6371

帖子

0

超级版主

Rank: 8Rank: 8

积分
24871
最后登录
2025-7-18
发表于 2017-8-8 13:40:34 | 显示全部楼层
myheart33 发表于 2017-8-8 11:58
以上配置都没问题,好像找到问题了
现在用的是差分带符号13位,那最大量化值就是8192,也就是正负4096.
...

楼主你好。
计算电压应该是除以2的12次方,也就是4096,因为带符号了。
后面具体正负看符号位决定。
你也可以测试验证下。
回复 支持 反对

使用道具 举报

该用户从未签到

1

主题

6

帖子

0

新手上路

Rank: 1

积分
23
最后登录
2017-8-9
 楼主| 发表于 2017-8-8 14:58:40 | 显示全部楼层
小恩GG 发表于 2017-8-8 13:40
楼主你好。
计算电压应该是除以2的12次方,也就是4096,因为带符号了。
后面具体正负看符号位决定。

你说的是对的。
不是计算问题,还是差分有问题,差分电压为0,读R寄存器的值还换算后,还是ADC_DP对GND的值,理论上应该是0左右。不知道怎么回事了?
回复 支持 反对

使用道具 举报

该用户从未签到

712

主题

6371

帖子

0

超级版主

Rank: 8Rank: 8

积分
24871
最后登录
2025-7-18
发表于 2017-8-8 16:17:22 | 显示全部楼层
myheart33 发表于 2017-8-8 14:58
你说的是对的。
不是计算问题,还是差分有问题,差分电压为0,读R寄存器的值还换算后,还是ADC_DP对GND的 ...

其实还真和计算无关,如果结果寄存器里面有数据了,或者说数据正常了,还怕算不正确吗?
所以,还是要多看看配置对不对。
回复 支持 反对

使用道具 举报

该用户从未签到

1

主题

6

帖子

0

新手上路

Rank: 1

积分
23
最后登录
2017-8-9
 楼主| 发表于 2017-8-8 17:59:38 | 显示全部楼层
小恩GG 发表于 2017-8-8 16:17
其实还真和计算无关,如果结果寄存器里面有数据了,或者说数据正常了,还怕算不正确吗?
所以,还是要多 ...

明天再详细测试下,解决后再结贴吧
希望哪位还可以提供更多些想法,我来测试
回复 支持 反对

使用道具 举报

该用户从未签到

1

主题

6

帖子

0

新手上路

Rank: 1

积分
23
最后登录
2017-8-9
 楼主| 发表于 2017-8-9 09:59:57 | 显示全部楼层
问题解决了,配置问题
ADC_SC1_REG(adc,ab)  = ADC_SC1_ADCH(channel); //channel=0,adc=ADC0_BASE_PTR,ab=0
这一句错了,应该是
ADC_SC1_REG(adc,ab)  |= ADC_SC1_ADCH(channel); //channel=0,adc=ADC0_BASE_PTR,ab=0
回复 支持 反对

使用道具 举报

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

本版积分规则

关闭

站长推荐上一条 /3 下一条

Archiver|手机版|小黑屋|恩智浦技术社区

GMT+8, 2025-7-19 20:40 , Processed in 0.132416 second(s), 31 queries , MemCache On.

Powered by Discuz! X3.4

Copyright © 2001-2024, Tencent Cloud.

快速回复 返回顶部 返回列表