4028|12

106

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

!!!求430读取VDD管脚上的电压值的代码!!! [复制链接]

求430读取VDD管脚上的电压值的代码,哪位大大有的,可否参考一下。
我想读取430VDD管脚上的电压值来粗略判断3.6V的锂电池的剩余电量,
不知道这种方法可行否,只要很粗略的判断(比如低电量通知)就行了。
另外,这样子是否无需改动外部任何电路?不用参考电阻或者分压电阻什么的?因为我只要读VDD管脚上的电压值。

最新回复

下面这段代码摘自某个程序,使用MSP430G2452实现电源电压检测部分。 其中ADC_Interrupt为宏定义,用于判断唤醒MCU的中断源确系ADC中断,说明ADC转换完成。 需要在ADC中断服务里将MCU从低功耗工作状态中唤醒。                         //测电压                         ADC10CTL1 = INCH_11;                         ADC10CTL0 = SREF_1 + ADC10SHT_2 + REFON + ADC10ON+ ADC10IE;                         ADC10CTL0 |= ENC + ADC10SC;                         LPM3;                         if(ADC_Interrupt)                         {                                 ADC_value = ADC10MEM;                                 ADC10CTL0 &= ~ENC;                                 if(ADC_value==0x3ff)                                 {                                         ADC10CTL0 &= ~ENC;                                         ADC10CTL1 = INCH_11;                                         ADC10CTL0 = SREF_1 + ADC10SHT_2 + REFON + ADC10ON + REF2_5V + ADC10IE;                                         ADC10CTL0 |= ENC + ADC10SC;                                         LPM3;                                         if(ADC_Interrupt)                                         {                                                 ADC_value = ADC10MEM;                                                 ADC10CTL0 &= ~ENC;                                                 Vcc=(ADC_value>>1)+(ADC_value<<1);                                         }                                 }                                 else                                 {                                         ADC_value+=ADC_value>>1;                                         Vcc=ADC_value;                                 }                         }复制代码  详情 回复 发表于 2015-4-21 23:41
 
点赞 关注

回复
举报

1193

帖子

0

TA的资源

纯净的硅(高级)

沙发
 
本帖最后由 qiushenghua 于 2015-4-21 10:20 编辑

430耐压3.6V,锂电池充满应该是4.2V,会不会过压损坏MCU?
参考UG,ADC指南里面有关于采集1/2Vcc的说明,选择对应通道即可。
另外要选择好合适的参考电压,不然超过一定电压(比如3V)ADC就溢出了,采集到的所有数据都是3FFF(以ADC10为例)
 
 

回复

2549

帖子

0

TA的资源

五彩晶圆(初级)

板凳
 
qiushenghua 发表于 2015-4-21 10:15
430耐压3.6V,锂电池充满应该是4.2V,会不会过压损坏MCU?
参考UG,ADC指南里面有关于采集1/2Vcc的说明,选择对应通道即可。
另外要选择好合适的参考电压,不然超过一定电压(比如3V)ADC就溢出了,采集到的所有数据都是3FFF(以ADC10为例)

你觉得楼主这方法可行性多大??测板子VCC,判断电量
 
 
 

回复

1万

帖子

25

TA的资源

版主

4
 
一般可以这样做,将ADC的基准参考设置为VDD,然后去读取内部的基准电压。因为内部基准相对是一个恒定值,这样就可以反推出VDD的电压了,这样是不需要改动电路的。

但是如果是锂电池,电压超过了3.6V,就不能直接连到VDD上,可以串联二极管降压。如果不需要精确电压,只需要一个告警门限,通常用比较器就行。
 
 
 

回复

1193

帖子

0

TA的资源

纯净的硅(高级)

5
 
数码小叶 发表于 2015-4-21 10:30
你觉得楼主这方法可行性多大??测板子VCC,判断电量

测量VCC可以测准,但是判断电量就不好说了。不同电池的电压-电量曲线是不一致的。另外,如果是MSP430还好说,如果电池上带有其他负载,那么电压还与电流有关系,就更难测准电量了。
 
 
 

回复

2549

帖子

0

TA的资源

五彩晶圆(初级)

6
 
qiushenghua 发表于 2015-4-21 13:53
测量VCC可以测准,但是判断电量就不好说了。不同电池的电压-电量曲线是不一致的。另外,如果是MSP430还好说,如果电池上带有其他负载,那么电压还与电流有关系,就更难测准电量了。

分析的很透彻
 
 
 

回复

57

帖子

0

TA的资源

一粒金砂(中级)

7
 
你不想用电阻分压可能是为了节省电能,其实可以用430控制一个小电流的PMOS管子,PMOS管子的漏电流非常小,而且导通压降为零,在需要测量时打开PMOS ,不需要时关断就行了
 
 
 

回复

1291

帖子

0

TA的资源

纯净的硅(中级)

8
 
dcexpert 发表于 2015-4-21 10:50
一般可以这样做,将ADC的基准参考设置为VDD,然后去读取内部的基准电压。因为内部基准相对是一个恒定值,这样就可以反推出VDD的电压了,这样是不需要改动电路的。

但是如果是锂电池,电压超过了3.6V,就不能直接连到VDD上,可以串联二极管降压。如果不需要精确电压,只需要一个告警门限,通常用比较器就行。

新技能get
 
 
 

回复

1291

帖子

0

TA的资源

纯净的硅(中级)

9
 
没做过这方面的,你可以把VDD接到AD口来读取数据,然后转换电压值吧
 
 
 

回复

1193

帖子

0

TA的资源

纯净的硅(高级)

10
 
没有那么复杂,ADC本来就有特殊通道的,Vcc/2就是一个特殊通道,选择它作为输入就行了
 
 
 

回复

1193

帖子

0

TA的资源

纯净的硅(高级)

11
 
下面这段代码摘自某个程序,使用MSP430G2452实现电源电压检测部分。

其中ADC_Interrupt为宏定义,用于判断唤醒MCU的中断源确系ADC中断,说明ADC转换完成。
需要在ADC中断服务里将MCU从低功耗工作状态中唤醒。

  1.                         //测电压
  2.                         ADC10CTL1 = INCH_11;
  3.                         ADC10CTL0 = SREF_1 + ADC10SHT_2 + REFON + ADC10ON+ ADC10IE;
  4.                         ADC10CTL0 |= ENC + ADC10SC;
  5.                         LPM3;
  6.                         if(ADC_Interrupt)
  7.                         {
  8.                                 ADC_value = ADC10MEM;
  9.                                 ADC10CTL0 &= ~ENC;
  10.                                 if(ADC_value==0x3ff)
  11.                                 {
  12.                                         ADC10CTL0 &= ~ENC;
  13.                                         ADC10CTL1 = INCH_11;
  14.                                         ADC10CTL0 = SREF_1 + ADC10SHT_2 + REFON + ADC10ON + REF2_5V + ADC10IE;
  15.                                         ADC10CTL0 |= ENC + ADC10SC;
  16.                                         LPM3;
  17.                                         if(ADC_Interrupt)
  18.                                         {
  19.                                                 ADC_value = ADC10MEM;
  20.                                                 ADC10CTL0 &= ~ENC;
  21.                                                 Vcc=(ADC_value>>1)+(ADC_value<<1);
  22.                                         }
  23.                                 }
  24.                                 else
  25.                                 {
  26.                                         ADC_value+=ADC_value>>1;
  27.                                         Vcc=ADC_value;
  28.                                 }
  29.                         }
复制代码
 
 
 

回复

106

帖子

0

TA的资源

一粒金砂(中级)

12
 
又是“qiushenghua”大大帮忙,问题解决了,谢谢啦!
 
 
 

回复

106

帖子

0

TA的资源

一粒金砂(中级)

13
 
但是还有问题,我手头的3.6V锂电池(非充电,一次性的),用了一段时间就没电了,连430初始化外设时连续3秒的3mA输出都顶不住,被下拉到1V以下,之后我断开锂电池负载用万用表测量3.6V锂电池是3.687V,电压还很高啊,怎么就没电了呢,
我记得这个锂电池新的时候也是差不多这个电压值的呀,如果是这样,我用测量电压的方法来判断电池大概的剩余电量的方法就行不通了。
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

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

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