본문 바로가기

[MSP430]/MSP430_EVM

MSP430 소비전류 측정 실험

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에서 아무생각없이 동작시켜도 이정도라면 나쁘지 않은것 같다.

 

 WDTCTL = WDTPW + WDTHOLD;            // Stop watchdog
 
 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회사마다 저전력 측정 기준이 달라서 명확한 기준은 정하기 힘든것 같지만 어플리케이션에 따라 적절히 잘 선택해야 하지 않을까...

반응형