2009년 3월 15일 일요일

MSP430 MCU의 내부 전압 측정

MSP430 MCU 기반의 Telosb 계열의 모트를 사용하는 경우
opt\tinyos-1.x\tos\platform\msp430\InternalVoltageC 컴포넌트를 사용하여 내부 전압을 측정할 수 있다.

다음을 참고하면...
http://mail.millennium.berkeley.edu/pipermail/tinyos-help/2006-November/020959.html

수식은 다음과 같다.
InternelVoltage = ADC reading / 4095 * 1.5 * 2

MSP430에는 내부적으로 생성하는 1.5v 및 2.5v REFVOLT가 있다.
ADC의 V+에 대한 레퍼런스로는 Vcc, 1.5v, 2.5v, external reference가 있는데 그 중 1.5v 및 2.5v는 내부적으로 생성하는 정전압 레퍼런스에 해당한다.
이 정전압 레퍼런스는 선택적으로 사용이 가능하다.
또한, 위 수식에서 2를 곱해주는 이유는 내부적으로 저항을 사용하여 분배하므로 다시 역변환 과정(ADC값을 전압으로 바꿔줄 때) 이 필요하므로 2를 곱하는 것이다.

만약 새 배터리를 사용하여 측정하게 되면 0xFF0F 라는 값이 나오는데 little endian 형식으로 16진수 값이 출력되기 때문에 실제값은 0x0FFF 이다. 이를 십진수로 바꾸면 4095 라는 값이 나온다.
4095라는 값이 출력되는 이유는 12bit ADC를 사용하므로 표현 가능한 범위가 0~4095까지인 것이다.
이를 수식에 대입해보면...

4095/4095*1.5*2=3

즉, 내부전압은 3V 가 된다.

[TIP 1]
DemoSensorC 컴포넌트를 사용하여 내부전압을 사용하려 한다면

configuration DemoSensorC {
provides interface ADC;
provides interface StdControl;
}
implementation{
components InternalVoltageC as DemoSensor; //InternalTempC as DemoSensor;
StdControl = DemoSensor;
ADC = DemoSensor;
}

위와 같이 modify 한 후, 최상위 어플리케이션에서 가져다 쓰면 된다.

[TIP 2]
최상위 어플리케이션에서 InternalVoltageC 컴포넌트를 바로 쓰면 된다.
** InternalVoltageC 컴포넌트는 3v 까지만 측정이 가능하도록 구현되어 있다.

댓글 없음:

댓글 쓰기