- MSP430 com IAR: Primeiros passos
- Acionamento de Motor de Passo com MSP430
- MSP430 – Modos de Low-Power
- MSP430 Driver Library
Continuando com a série de artigos sobre MSP430, neste iremos abordar uma das principais características desta família de microcontroladores, que são seus modos de baixo consumo (Ultra Low-Power). Os modos Low-Power são recursos que os microcontroladores possuem para economizar energia. Quando o microcontrolador entra neste modo de operação alguns dos seus periféricos são desligados, e para o mesmo sair deste modo é necessário que aconteça algum tipo de evento. Esses eventos podem ser uma interrupção por hardware ou por software.
Modos de operação no MSP430
O MSP430G2452 é o microcontrolador que estou utilizando em minha LaunchPad MSP-EXP430G2, possuindo seis modos Low-Power de acordo com o datasheet:
- Modo Ativo: Com todos os periféricos ativos;
- Modo Low-Power 0 (LPM0): CPU (Central Processing Unit) desligada. ACLK (Auxiliary Clock) e SMCLK (Sub-Main Clock) permanecem ativos, MCLK (Main Clock) fica desativado;
- Modo Low-Power 1 (LPM1): CPU (Central Processing Unit) desligada. ACLK (Auxiliary Clock) e SMCLK (Sub-Main Clock) permanecem ativos, MCLK (Main Clock) fica desativado. DCO (Digitally Controlled Oscillator) desativado;
- Modo Low-Power 2 (LPM2): CPU (Central Processing Unit) desligada. MCLK (Main Clock) e SMCLK (Sub-Main Clock) desativados. DCO (Digitally Controlled Oscillator) permanece ativo. ACLK (Auxiliary Clock) Ativo;
- Modo Low-Power 3 (LPM3): CPU (Central Processing Unit) desativado. MCLK (Main Clock) e SMCLK (Sub-Main Clock) desativados. DCO (Digitally Controlled Oscillator) desativado. ACLK (Auxiliary Clock) Ativo;
- Modo Low-Power 4 (LPM4): CPU (Central Processing Unit) desativado. ACLK (Auxiliary Clock) desativado. MCLK (Main Clock) e SMCLK (Sub-Main Clock) desativados. DCO (Digitally Controlled Oscillator) desativado. Cristal Oscilador Desativado.
Na tabela abaixo, é apresentado o consumo de energia para cada um dos modos de operação do MSP430G2452.
Tabela 1 – Tabela de consumo de cada modo Low-Power.
Como podemos notar na tabela acima, o MSP430 possui valores de corrente na ordem de micro Ampere em modo Low-Power. O artifício que essa família de microcontroladores possui para atingir valores tão pequenos no consumo de energia é a existência de diferentes sinais de Clock (ACLK, SMCLK, MCLK) para fornecer aos seus periféricos. Isso permite que alguns periféricos sejam desligados conforme o modo low-power que foi habilitado, proporcionando assim uma grande economia da energia consumida pelo microcontrolador. Na figura 1 é mostrado o diagrama de blocos funcional do MSP430G2452 e os sinais de Clock citados acima.
Ativando o Modo Low-Power
Os modos de baixo consumo são habilitados via software. É feito através do bits localizados no registrador especial R2. Para ativar basta utilizar a função “__bic_SR_register()” acompanhada por um parâmetro que indica o modo de Low-Power que deseja ser executado. Exemplo:
1 |
__bis_SR_register(LPM4_bits); // Entra no módulo LPM4 |
A própria biblioteca do microcontrolador (“io430g2452.h” para o IAR Embedded Workbench IDE e “msp430g2452.h” para Code Composer Studio) já possui as definições da macros para habilitar e desabilitar os modos de baixo consumo.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
/*------------------------------------------------------------------------------- * Status register bits *------------------------------------------------------------------------------*/ #define C (0x0001) #define Z (0x0002) #define N (0x0004) #define V (0x0100) #define GIE (0x0008) #define CPUOFF (0x0010) #define OSCOFF (0x0020) #define SCG0 (0x0040) #define SCG1 (0x0080) /* Low Power Modes coded with Bits 4-7 in SR */ #define LPM0_bits (CPUOFF) #define LPM1_bits (SCG0+CPUOFF) #define LPM2_bits (SCG1+CPUOFF) #define LPM3_bits (SCG1+SCG0+CPUOFF) #define LPM4_bits (SCG1+SCG0+OSCOFF+CPUOFF) #define LPM0 __bis_SR_register(LPM0_bits) /* Enter Low Power Mode 0 */ #define LPM0_EXIT __bic_SR_register_on_exit(LPM0_bits) /* Exit Low Power Mode 0 */ #define LPM1 __bis_SR_register(LPM1_bits) /* Enter Low Power Mode 1 */ #define LPM1_EXIT __bic_SR_register_on_exit(LPM1_bits) /* Exit Low Power Mode 1 */ #define LPM2 __bis_SR_register(LPM2_bits) /* Enter Low Power Mode 2 */ #define LPM2_EXIT __bic_SR_register_on_exit(LPM2_bits) /* Exit Low Power Mode 2 */ #define LPM3 __bis_SR_register(LPM3_bits) /* Enter Low Power Mode 3 */ #define LPM3_EXIT __bic_SR_register_on_exit(LPM3_bits) /* Exit Low Power Mode 3 */ #define LPM4 __bis_SR_register(LPM4_bits) /* Enter Low Power Mode 4 */ #define LPM4_EXIT __bic_SR_register_on_exit(LPM4_bits) /* Exit Low Power Mode 4 */ /*-------------------------------------------------------------------------------*/ |
A seguir um exemplo de código fonte onde é habilitado o modo Low-Power. Neste exemplo é configurado o modo Low-Power 4, o pino P1.0 como saída, o pino P1.3 como entrada e a interrupção por borda de descida no pino P1.3. Feita todas as configurações, logo depois o microcontrolador entra em modo Low-Power.
Para o MSP430 sair deste estado é necessário que ocorra uma transição de borda de descida no pino P1.3, isto é, o nível lógico da entrada deve passar de 1 para 0.
Vale lembrar que esse exemplo foi testado na LaunchPad MSP-EXP430G2. Logo, é necessário adicionar um resistor de pull-Up no pino P1.3.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
//****************************************************************************** // Projeto: Ativando Módulo Low_Power 4 com MSP-EXP430G2 //****************************************************************************** #include "io430.h" // Biblioteca para IAR Embedded Workbench IDE //#include <msp430.h> // Biblioteca para Code Composer Studio int main(void) { WDTCTL = WDTPW + WDTHOLD; // Desabilita watchdog timer P1DIR |= 0x01; // Habilita P1.0 como saída P1IE |= 0x08; // Configura interrupção para o P1.3 P1IES |= 0x08; // Configura borda de descida no P1.3 P1IFG &= ~0x08; // Limpa Flag do pino P1.3 __bis_SR_register(LPM4_bits + GIE); // Entra no módulo LPM4 } // Rotina de interrupção do Port P1 #if defined(__TI_COMPILER_VERSION__) || defined(__IAR_SYSTEMS_ICC__) #pragma vector=PORT1_VECTOR __interrupt void Port_1(void) #elif defined(__GNUC__) void __attribute__ ((interrupt(PORT1_VECTOR))) Port_1 (void) #else #error Compiler not supported! #endif { P1OUT ^= 0x01; // inverte o valor de P1.0 P1IFG &= ~0x10; // Limpa Flag do pino P1.3 } //****************************************************************************** |
Conclusão
Neste artigo observamos como é fácil habilitar os modos Low-Power para a família de microcontroladores MSP430 e também o seu consumo em cada um dos seus modos de operação.
Para o projeto ter uma boa eficiência no consumo de energia não basta ter um microcontrolador operando no modo de baixo consumo, o hardware precisa ser otimizado para obter o menor consumo. Os microcontroladores MSP430 se mostram uma boa opção para dispositivos portáteis, dispositivos móveis, ou aplicações que exijam baixo consumo.
Referências
– http://www.ti.com/product/msp430g2452
– http://www.ti.com/product/MSP430G2452/toolssoftware#softTools
– http://www.ti.com/lit/ds/symlink/msp430g2452.pdf
Tabela 1 – Fonte: Texas Instruments – MSP430G2452
Figura 1 – Fonte: Texas Instruments – MSP430G2452
Figura da imagem destacada – Fonte: AZORobotics – TECMUNDO
Excelente artigo! Estou no aguardo dos próximos!
Muito Obrigado!!! Estou trabalhando em conjunto com equipe Embarcados para produzir mais conteudo.
Ótimo artigo! Parabéns!
Olá, boa noite!! Você tem alguma programação e circuito de uma balança eletronica com ele ? Preciso fazer uma balança simples, menos de 1kg, só que tenha uma autonomia boa, com uma bateria de 3v. Por favor, se você tiver você me ajuda ? realmente tou precisando muito. A idéia é quando chegar no peso menor que 100g por exemplo um led acenda, Só isso.Pode me Ajudar ?
Boa tarde Douglas, infelizmente eu não tenho nenhum hardware ou software pronto para a sua aplicação. Eu sugiro você pesquisar a respeito de Células de Carga.
https://pt.wikipedia.org/wiki/C%C3%A9lula_de_carga
https://learn.sparkfun.com/tutorials/getting-started-with-load-cells