最近一直在测试msp430F5418的低功耗,电路只有CPU、复位电路和JTAG口,在AM正常运行模式下测得电流是70多mA(相当离谱),进入低功耗LPM3后是160多uA,几块板子测试出来都是一样的效果,测试程序使用的是TI官方的例程,我想知道有什么原因会造成这样啊?有没有什么特殊的配置啊?
这是我的测试程序:当屏蔽掉__bis_SR_register(LPM3_bits); 后测得的电流在70多mA
void main(void)
{
WDTCTL = WDTPW + WDTHOLD; // Hold WDT
UCSCTL4 = SELM_1 + SELS_1 + SELA_1; // MCLK = SMCLK = ACLK = VLO
P1OUT = 0x00;
P2OUT = 0x00;
P3OUT = 0x00;
P4OUT = 0x00;
P5OUT = 0x00;
P6OUT = 0x00;
P7OUT = 0x00;
P8OUT = 0x00;
P9OUT = 0x00;
P10OUT = 0x00;
P11OUT = 0x00;
PJOUT = 0x00;
P1DIR = 0xFF;
P2DIR = 0xFF;
P3DIR = 0xFF;
P4DIR = 0xFF;
P5DIR = 0xFF;
P6DIR = 0xFF;
P7DIR = 0xFF;
P8DIR = 0xFF;
P9DIR = 0xFF;
P10DIR = 0xFF;
P11DIR = 0xFF;
PJDIR = 0xFF;
__bis_SR_register(LPM3_bits); // Enter LPM3
__no_operation();
}
供电是怎么做的呢?
在不进入低功耗模式下,CPU是不是接受了较大的灌电流
检查下是否有管脚或连线短地,或是形成一可能的泄流环路,还有种可能就是上拉电阻
回复 板凳 wstt 的帖子
供电是直接用3.3V供电,没加任何其他的电路。
回复 4楼 问路者 的帖子
我把IO引脚设置成输出上拉,还是一样的现象。
void main(void)
{
WDTCTL = WDTPW + WDTHOLD; // Hold WDT
UCSCTL4 = SELM_1 + SELS_1 + SELA_1; // MCLK = SMCLK = ACLK = VLO
//所有引脚设置成输出上拉
P1DIR |= (BIT7+BIT6+BIT4+BIT3+BIT2+BIT1+BIT5+BIT0);
P2DIR |= (BIT7+BIT6+BIT5+BIT4+BIT3+BIT2+BIT1+BIT0);
P3DIR |= (BIT5+BIT4+BIT3+BIT2+BIT1+BIT0+BIT7+BIT8);
P4DIR |= (BIT6+BIT5+BIT4+BIT3+BIT2+BIT0+BIT7+BIT1);
P5DIR |= (BIT6+BIT5+BIT4+BIT3+BIT2+BIT0+BIT7+BIT1);
P6DIR |= (BIT6+BIT5+BIT4+BIT3+BIT2+BIT0+BIT7+BIT1);
P7DIR |= (BIT6+BIT5+BIT4+BIT3+BIT2+BIT0+BIT7+BIT1);
P8DIR |= (BIT6+BIT5+BIT4+BIT3+BIT2+BIT0+BIT7+BIT1);
P1OUT |= (BIT6+BIT5+BIT4+BIT3+BIT2+BIT0+BIT7+BIT1);
P2OUT |= (BIT6+BIT5+BIT4+BIT3+BIT2+BIT0+BIT7+BIT1);
P3OUT |= (BIT6+BIT5+BIT4+BIT3+BIT2+BIT0+BIT7+BIT1);
P4OUT |= (BIT6+BIT5+BIT4+BIT3+BIT2+BIT0+BIT7+BIT1);
P5OUT |= (BIT6+BIT5+BIT4+BIT3+BIT2+BIT0+BIT7+BIT1);
P6OUT |= (BIT6+BIT5+BIT4+BIT3+BIT2+BIT0+BIT7+BIT1);
P7OUT |= (BIT6+BIT5+BIT4+BIT3+BIT2+BIT0+BIT7+BIT1);
P8OUT |= (BIT6+BIT5+BIT4+BIT3+BIT2+BIT0+BIT7+BIT1);
P1REN &= ~ (BIT6+BIT5+BIT4+BIT3+BIT2+BIT0+BIT7+BIT1);
P2REN &= ~ (BIT6+BIT5+BIT4+BIT3+BIT2+BIT0+BIT7+BIT1);
P3REN &= ~ (BIT6+BIT5+BIT4+BIT3+BIT2+BIT0+BIT7+BIT1);
P4REN &= ~ (BIT6+BIT5+BIT4+BIT3+BIT2+BIT0+BIT7+BIT1);
P5REN &= ~ (BIT6+BIT5+BIT4+BIT3+BIT2+BIT0+BIT7+BIT1);
P6REN &= ~ (BIT6+BIT5+BIT4+BIT3+BIT2+BIT0+BIT7+BIT1);
P7REN &= ~(BIT6+BIT5+BIT4+BIT3+BIT2+BIT0+BIT7+BIT1);
P8REN &= ~(BIT6+BIT5+BIT4+BIT3+BIT2+BIT0+BIT7+BIT1);
//__bis_SR_register(LPM3_bits); // Enter LPM3
__no_operation();
}
回复 6楼 杉林漫漫 的帖子
晕,你全设置的输出状态啊,芯片没事吧,全置输出,很容易在管脚形成一个很大的电流,即使你进低功耗了也会产生很那的能耗,因为低功耗状态IO口是保持原状态的。把所有IO口设置成高阻(输入状态),相信就没问题了。IO口不能随意全开输出,万一哪个连线直接短地上,那这个管脚很容易就坏了!
代码是很简单,可硬件线路是怎么样的?先show个原理图上来看看
回复 7楼 问路者 的帖子
引脚状态改为输入上拉后,电流还是70多mA,没有大的变化啊
void main(void)
{
WDTCTL = WDTPW + WDTHOLD; // Hold WDT
UCSCTL4 = SELM_1 + SELS_1 + SELA_1; // MCLK = SMCLK = ACLK = VLO
//所有引脚设置成输入上拉
P1DIR&=~(BIT5+BIT4+BIT3+BIT2+BIT1+BIT0+BIT7+BIT8);
P2DIR &=~(BIT5+BIT4+BIT3+BIT2+BIT1+BIT0+BIT7+BIT8);
P3DIR &=~(BIT5+BIT4+BIT3+BIT2+BIT1+BIT0+BIT7+BIT8);
P4DIR &=~ (BIT6+BIT5+BIT4+BIT3+BIT2+BIT0+BIT7+BIT1);
P5DIR &=~(BIT6+BIT5+BIT4+BIT3+BIT2+BIT0+BIT7+BIT1);
P6DIR &=~ (BIT6+BIT5+BIT4+BIT3+BIT2+BIT0+BIT7+BIT1);
P7DIR &=~(BIT6+BIT5+BIT4+BIT3+BIT2+BIT0+BIT7+BIT1);
P8DIR &=~ (BIT6+BIT5+BIT4+BIT3+BIT2+BIT0+BIT7+BIT1);
P1OUT |= (BIT6+BIT5+BIT4+BIT3+BIT2+BIT0+BIT7+BIT1);
P2OUT |=(BIT6+BIT5+BIT4+BIT3+BIT2+BIT0+BIT7+BIT1);
P3OUT |= (BIT6+BIT5+BIT4+BIT3+BIT2+BIT0+BIT7+BIT1);
P4OUT |= (BIT6+BIT5+BIT4+BIT3+BIT2+BIT0+BIT7+BIT1);
P5OUT |= (BIT6+BIT5+BIT4+BIT3+BIT2+BIT0+BIT7+BIT1);
P6OUT |= (BIT6+BIT5+BIT4+BIT3+BIT2+BIT0+BIT7+BIT1);
P7OUT |= (BIT6+BIT5+BIT4+BIT3+BIT2+BIT0+BIT7+BIT1);
P8OUT |= (BIT6+BIT5+BIT4+BIT3+BIT2+BIT0+BIT7+BIT1);
P1REN |= (BIT6+BIT5+BIT4+BIT3+BIT2+BIT0+BIT7+BIT1);
P2REN |= (BIT6+BIT5+BIT4+BIT3+BIT2+BIT0+BIT7+BIT1);
P3REN |= (BIT6+BIT5+BIT4+BIT3+BIT2+BIT0+BIT7+BIT1);
P4REN |= (BIT6+BIT5+BIT4+BIT3+BIT2+BIT0+BIT7+BIT1);
P5REN |= (BIT6+BIT5+BIT4+BIT3+BIT2+BIT0+BIT7+BIT1);
P6REN |= (BIT6+BIT5+BIT4+BIT3+BIT2+BIT0+BIT7+BIT1);
P7REN |= (BIT6+BIT5+BIT4+BIT3+BIT2+BIT0+BIT7+BIT1);
P8REN |= (BIT6+BIT5+BIT4+BIT3+BIT2+BIT0+BIT7+BIT1);
while(1);
//__bis_SR_register(LPM3_bits); // Enter LPM3
//__no_operation();
}
回复 8楼 modernthink 的帖子
电路图粘贴不进来。悲催了
这样是有问题的!只有把悬空的引脚设置为IO,输出。
假如外部有器件是要消耗电流的
回复 10楼 杉林漫漫 的帖子
还是要从硬件电路上来看这个问题,如果管脚都是悬空,这样的程序配置没有什么问题
瞄一眼看到了
德州的人还是弄个文档之类的详细归总一下影响到功耗的详细因素吧
看到这样的问题帖子太多了,都有点看不过去了
例如,如果焊接了外界晶体没有正常起振的时候电流会不会增高点?好像有点器件默认会尝试起振晶体?
[ 本帖最后由 wangfuchong 于 2012-3-24 21:48 编辑 ]
回复 12楼 问路者 的帖子
我现在不知道怎么加附件,能不能告诉我怎么添加啊
回复 13楼 peter_zheng 的帖子
管脚确实是悬空的,而且是用的内部时钟,没有焊接外部晶振。硬件也没有找到什么问题啊,
介绍下我如果碰到这样的问题是如何去找问题的:
1. 检查软件,不用的管脚设置成输出低
-<目的>防止管脚设置错误造成额外功耗
2. 有条件的情况下,测量下每个管脚的电压,包括VCC和模拟管脚
-<目的> 确认软件正确设置
3. 把MCU取下来,测试下板子的功耗
-<目的>测试下板子是否有加工问题
4. 另外焊接一个MCU,测试下功耗
-<目的>看是否本芯片有被损坏
如果还有问题,把具体现象和电路图贴上来让大家帮忙检查。
总结一下步骤基本上就是先怀疑软件,在怀疑硬件,
不过在你这个案子上,70多mA的电流损耗先怀疑硬件,后怀疑软件。
回复 17楼 Triton.zhang 的帖子
谢谢你的建议哈!有道理