'POWER DOWN'에 해당되는 글 2건

  1. 2011.09.28 AVR 파워다운 모드 전류측정 실험
  2. 2010.06.01 MSP430 소비전류 측정 실험
[AVR]/AVR_EVM2011. 9. 28. 12:26

AVR 파워다운 모드 전류측정 실험

AVR 파워다운 모드 전류측정 실험

AVR은 저전류 전용 칩이 아니기 때문에 고려 해본적이 없었는데 전류소모를 적게 해야 할 일이 있어 AVR소비 전류를 줄이는 방법에 대해 검토 해 보았다. MSP430에 비하면 비할 바가 못되지만 아무튼 5단계의 슬립모드 설정이 가능하고 실험 결과 나쁘지 않게 사용가능할것 같다.


AVR전류 측정

전원 공급후 while루프 돌때 - 12mA
USB기능 동작시 - 25mA

아무런 동작을 하지 않아도 12mA가 흐러고 타이머나 기타 페리를 사용하는 순간 25mA까지 소비 한다.

이 상태로는 좀 문제가 있는것 같고 슬립모드 관련 데이터 시트를 보니 몇가지 방법이 있는것 같다. 테스트에 사용한 칩은 ATmega88V이다. 예전 버전 ATmega8을 가지고 테스트 하다 고생 했는데.. 결국 새로운 칩은 슬립 모드 관련 상당히 개선된 점이 많았다.


AVR에는 5단계의 슬립모드가 있다.



IDLE Mode
표에서 처럼 CPU클럭만 멈추고 다른 페리들은 살아 있어서 외부 페리의 이벤트에 따라 께어날 수 있다. 하지만 소비 전류는 크게 줄어들지 않는다.

WINAVR에서 제공하는 코드로 아래와 같이 하면 슬리모드로 진입할 수 있다.
  set_sleep_mode(SLEEP_MODE_IDLE);
  sleep_mode();

실험 결과 슬립모드로 들어 들어 갔을때 9mA 정도 소비 한다. 일반 동작시보다는 3mA정도 줄어 든것 같다


ADC Noise Reduction Mode
IDLE모드 보다는 조금더 페리를 정지 시켜서 전류 소모를 줄이는데... ADC노이즈를 줄이는데 효과가 있다고 하니 사용해볼 만하다.


Power-save Mode
슬립모드에서도 타이머를 사용할 수 있기 때문에 일정시간 이후 슬립모드에서 깨어날 수 있도록 할 수 있다. 
아래 코드로 진입 가능하며 하다.
  set_sleep_mode(SLEEP_MODE_PWR_SAVE);
  sleep_mode();

타이머 인터럽트로 일정 시간 이후 깨어날 수 있으므로 일정시간 간격으로 데이터 센싱하는 용도로 사용하면 파워를 많이 줄일 수 있다.
실험 결과 파워세이브 모드에서 1mA 정도의 소비 전류가 있다.


Power-down Mode
표와같이 모든 페리를 끄고 외부 인터럽트만 동작하는 모드로 가장 전류 소모를 줄일 수 있다. 하지만 께어날 수 있는 방법이 스위치 등을 달아서 에서 인터럽트 발생하는 방법 밖에 없으로 일정시간 후 스스로 께어나기는 힘들다.
아래 코드로 설정 가능하다.
  set_sleep_mode(SLEEP_MODE_PWR_DOWN);
  sleep_mode();

실험 결과 파워다운 모드에서 0.6uA 정도의 전류 소모로 동작이 가능하다.




파워다운 모드가 좋은데 아쉬운 점은 스스로 께어나지 못한다는 점이다. 그렇다고 파워 세이브 모드로 해서 타이머를 켜두면 1mA의 전류가 흐르기 때문에 문제이다.
메뉴얼을 보니 와치독 타이머 인터럽트로 CPU를 깨울 수 있다고 한다.
와치독타이머로 일정 시간후 스스로 께어나게 코드 수정 후 테스트 결과 6uA정도 소모 한다. 께어나는 동안 페리가 동작하므로 잠깐 13uA까지 모소 하지만 파워 세이브 모드와 유사하게 동작하지만 전류는 상당히 줄일 수 있었다.




참고로 ATMega8 (예전 버전)에는 슬립모드 관련 기능이 많이 빈약하다.


Posted by nexp

댓글을 달아 주세요

[MSP430]/MSP430_EVM2010. 6. 1. 22:00

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

Posted by nexp

댓글을 달아 주세요