MSP430 소비전류 측정 실험
MSP430F2013 기준으로 소비전류를 측정해 보았다.
우선 MSP430 데이터시트를 보면 아래와 같이 나타나 있다.
Low Supply Voltage Range 1.8 V to 3.6 V
Ultra-Low Power Consumption Programming Voltage Needed, Programmable
- Active Mode: 220uA at 1 MHz, 2.2V
- Standby Mode: 0.5uA
- Off Mode (RAM Retention): 0.1uA
우선 가장 기본 코드로 루프를 돌면서 3초에 한번씩 LED를 순간적으로 On/Off하는 코드를 돌려보았다.
기본코드는 1Mhz에서 동작한다.
측정 결과 340uA정도로 측정된다. 3.3V이므로 데이터시트와 크게 차이는 없는것 같다.
1Mhz에서 아무생각없이 동작시켜도 이정도라면 나쁘지 않은것 같다.
Led1Init();
Led1On();
while(1)
{
Led1Off();
Delay(10);
Led1On();
Delay(3000);
}
16Mhz로 구동해 보니 2.7mA가 출력된다. 속도가 16배 빨라져서 그런가?
조금은 이상한데..
MSP430은 5단계의 저전력 모드가 있는데 그중에 LPM3 모드로 테스트 해 보았다.
평소 슬립모드에 있다가 와치독 타이머를 이용해 2~3초에 한번씩 깨어나 수행하는 코드이다.
MSP430 LPM3 모드에서 테스트 결과 0.4uA가 측정된다.
void main(void)
{
BCSCTL1 |= DIVA_1; // ACLK/2
BCSCTL3 |= LFXT1S_2; // ACLK = VLO
WDTCTL = WDT_ADLY_1000; // Interval timer
IE1 |= WDTIE; // Enable WDT interrupt
P1DIR = 0xFF; // All P1.x outputs
P1OUT = 0; // All P1.x reset
P2DIR = 0xFF; // All P2.x outputs
P2OUT = 0; // All P2.x reset
while(1)
{
int i;
Led1Off();
Delay(10);
Led1On();
_BIS_SR(LPM3_bits + GIE); // Enter LPM3
}
}
#pragma vector=WDT_VECTOR
__interrupt void watchdog_timer (void)
{
_BIC_SR_IRQ(LPM3_bits); // Clear LPM3 bits from 0(SR)
}
MCU회사마다 저전력 측정 기준이 달라서 명확한 기준은 정하기 힘든것 같지만 어플리케이션에 따라 적절히 잘 선택해야 하지 않을까...