Os microcontroladores MSP430 da Texas Instruments (www.ti.com), pelas suas características de baixo consumo, são ideais para a implementação de aplicações alimentadas a bateria e que fazem uso de displays de cristal líquido. No artigo anterior MIC080, demos como exemplo uma balança eletrônica e neste artigo, baseados no Application Report SLAA254 mostramos como é possível implementar um altímetro com o MSP430F42x, que possui um conversor de dados sigma-delta de 16 bits on-chip.

A pressão atmosférica decresce de aproximadamente 1 mb para cada 8 m de aumento na altura a partir do nível do mar.

Essa variação da pressão é causada pelo próprio peso do ar atmosférico, ou seja, da coluna de ar sobre o ponto considerado, podendo ser usada como referência para se determinar a altitude de um local, em relação a um nível de referência, normalmente o nível do mar. A figura 1 mostra a variação da pressão com a altitude.

Assumindo uma pressão de 1013,25 mb no nível do mar (altitude zero), e uma temperatura constante do ar de 0 oC, pode-se utilizar a seguinte fórmula para se relacionar a dependência da altura com a pressão para altitudes até 100 km.


 

Figura 1
Figura 1

 

A resolução dessa equação permite obter a altitude em metros, em função da pressão ph e, com isso, calcular a altitude absoluta em função da diferença de pressão. Temos então:

 


 

Entretanto, a medida da altitude pela pressão tem alguns sérios problemas a serem considerados. Um deles, é que a pressão varia com a temperatura, isso com valores significativos, na faixa de milibares, o que se traduz em mudanças de altitude que podem chegar a dezenas de metros.

Por esse motivo, para aumentar a precisão, um altímetro barométrico deve ser calibrado diversas vezes ao dia, especialmente durante as mudanças bruscas das condições do tempo.

Lembramos que na aproximação de tempestades, frentes frias ou outras mudanças, a pressão pode variar de vários milibares em questão de poucas horas e até mesmo minutos.

 

Solução com o MSP430F4270

A solução dada pela Texas Instruments consiste em se usar o sensor de pressão absoluta MPXm2120. Este sensor fornece uma tensão de saída diferencial de 40 mV, com uma pressão de 1000 mb, usando uma excitação de 10 V.

A tensão de saída desse sensor diminui à medida que a pressão do ar diminui na razão de 40 uV/mb. Na aplicação, o sensor é alimentado diretamente pela fonte de 3 V.

Como a saída do sensor consiste numa relação métrica com a tensão de alimentação, a nova tensão de plena escala obtida pode ser calculada como 3V/10 V x 40 mV = 12 mV. Com a excitação de 3 V de excitação do sensor, a tensão de saída vai diminuir na razão de 3V/10 V x 40 uV/mb ou 12 uV/mB.

A finalidade do projeto desenvolvido pela Texas é fornecer uma resolução de display de 1m para altitudes em torno do nível do mar. Para isso, a mudança de pressão para se ir de 0 a 1 m, será calculada como:


 

Para resolver essa diferença de pressão, o conversor ADC deve ser capaz de resolver 0,127 mb/2 - 0,0635 mb. Isso equivale a um passo máximo para o LSB de 12 uV/mb x 0,0635 mB = 0,762 uV.

No projeto dado como exemplo, o ADC integrado SD16, do tipo sigma-delta de 16 bits é utilizado. Suas características elétricas podem ser obtidas de forma detalhada no datasheet do MSP430F42x0.

Neste projeto, o módulo SD16_A e alimentado por uma referência externa de tensão de 1,27 V, a partir de uma tensão de alimentação de 3 V.

Assim, usando o máximo ganho do amplificador programável de 32 vezes, temos que o ganho obtido será de 28,35. Com um total de 16 bits (15 bits mais um de sinal) da saída do filtro de decimação do SD16 A, temos um passo de tensão para o LSB de:


 

Assim, o tamanho desse passo reflete diretamente no passo da mudança de pressão de 0,683 uV/(12 uV/mb) = 0,0569 mb, o que é suficiente para preencher os requisitos de tamanho do passo LSB, para altitudes a partir do nível do mar até aproximadamente 6 000 metros.

Em 6 000 metros, uma diferença de altitude de 1 m resulta numa diferença de pressão de 0,0598 mB. Observe que esse é um cálculo teórico, assumindo que todos os 15 bits possam ser usados.

Na prática, quando usando o SD16_A, com o ganho ajustado para 32, o número efetivo de bits de saída pelo conversor é menor, devido á presença de ruído. Técnicas para filtrar esse ruído devem ser usadas para a realização dos cálculos.

Usando o passo para a tensão LSB, calculado para o SD16_A, e o coeficiente de transferência do MPXm2102, a pressão real do ar pode ser calculada pela seguinte fórmula:


 

Esta equação pode ser usada como um firmware para o altímetro, de modo a se calcular e apresentar no display a pressão em milibares.

Uma outra função desta aplicação é mostrar a temperatura ambiente. Para isso, o sensor de temperatura integrado ao módulo SD16_A é utilizado.

De acordo com o datasheet do dispositivo, esse sensor tem um coeficiente de transferência de 1,32 mV/K (tip).

Com o SD16_A operando no modo de 16 bits, e usando a tensão de referência interna de 1,20 V (tip), a temperatura ambiente em oC pode ser calculada pela seguinte fórmula:


 

 

Implementação do Hardware

Para se obter um projeto que faça uso de um único chip, a solução consiste no uso de um MCU (microcontrolador). A série MSP430F42x0 de microcontroladores de consumo ultra-baixo, memória flash, e que possuem um ADC sigma-delta de 16 bits integrado (SD16_A) é a que melhor se adapta ao caso.

O conversor de dados ainda possui um amplificador de ganho programável (PGA) on-chip, que possibilita a amplificação de sinais provenientes de uma fonte externa até 32 vezes. Nessa aplicação foi usado o MSP430F4270, mas outros membros da família podem também ser empregados. Na figura 2 temos o diagrama esquemático do projeto.

 

Figura 2
Figura 2

 

De modo a se obter uma operação standby de baixo consumo, foi usado o transdutor de pressão MPXm2102, excitado através dos pinos das portas P6.6 e P6.7 do MSP430, os quais podem ser desabilitados quando não em uso.

Com uma tensão de alimentação de 3 V o sensor consome aproximadamente 1,8 mA de corrente, quando excitado. O sinal diferencial da saída do transdutor é aplicado diretamente ao canal A0 do SD_16 via P6.0 e P6.1.

O adc sigma-delta SD16_A do MSP430 pode operar tanto usando a referência interna como uma referência de tensão externa, como a empregada nesse exemplo de aplicação. Aqui, um divisor formado por resistores é usado para fornecer a tensão de referência.

Com o transdutor alimentado pela mesma fonte que alimenta o circuito, temos a vantagem de obter uma relação métrica de Vcc para as medidas. Isso significa que, à medida que a tensão da bateria cai, a referência cai na mesma proporção, afetando pouco a precisão das medidas.

O divisor formado por R7 e R11 foi escolhido de modo que a tensão de referência, quando a tensão da bateria varia de 3,0 v a 2,5 V, já que 2,5 V, é a menor tensão que o módulo SD16_A admite.

A referência de tensão on-chip, por outro lado, é usada para a medida de temperatura.

O driver LCD on-chip do MSP430 permite que o módulo LCD seja ligado diretamente em suas saídas. Foi usado um LCD SBLCDA4 de 4-mux x 7 e meio d~igitos da SoftBaugh (www.softbaugh.com). Os níveis de tensão para controlar as entradas de multiplexação do display são gerados internamente pelo módulo LDC_A do MSP430.

O uso de uma bomba de cargas é opcional, mas se for usada, possibilita a obtenção de maior contraste no LCD por gerar um Vcc independente.

Um cristal de relógio de 32,768 kHz é usado para o clock de referência do sistema, para excitar o display LCD e para gerar o sinal que acorda de tempos em tempos o módulo, para a realização das leituras.

Existem ainda dois push-buttons (SW1 e SW20, conectados às portas P1.0 e P1.1.

 

O Software

O código para o altímetro usando o MSPP430F4270 pode ser obtido no site da Texas Instruments (www.ti.com). Esse código pode ser obtido em versões em linguagem C e, em versões para uso do TI Code Composer Essentials (o nome do arquivo é F4270_Altimeter_SB_CCE.c) al~em do IAR Embedded Workbench para MSP430 (nome do arquivo: F4270_Altimeter_SB_IAR.c).

Depois do power-on reset, os periféricos são inicializados chamando Init_Sys(). Isso inclui a desabilitação do timer watchdog, configurar o oscilador LFXT1, inicializar o controlador LCD_A, o Basic Timer assim como os pinos I/O.

Então as constantes de calibração usadas para altitude, pressão do ar, temperatura, assim como a tensão de contraste do LCD e um registrador de flag são carregados da memória Flash. Finalmente as interrupções são habilitadas e entra o LPm3.

A rotina de interrupção do Basic Timer ISR), o timer watchdog ISR e o ISR do SD16_A acordam o dispositivo do estado LPm3, disparando o processamento no loop principal.

A variável StatusFlag é usada como registrador de aviso para manter o acompanhamento dos eventos que são processados. Depois de um loop atrav~es do manuseador de eventos, o modo LPm3 volta e o dispositivos fica na espera de outra chamada que o " acorde" através de um ISR.

O Basic Timer ISR BT_ISR() é então executado a cada segundo, acordando o MCU a partir do LPm3. Se o controlador de eventos principal detecta que o flag SF_BT_TICK foi fixado, o clock contador em tempo real (RTC) avança.

Quando o software opera no modo de medida de temperatura, uma nova sequência de conversão do SD16_A é requisitada, pela colocação do flag SF_SD16_START. Também no modo de medida de altitude ou pressão do ar, o modo display RTC é reabilitado depois que o contador de tempo alcançar o PM_DISPLAY_TIME.

Isto é feito para se economizar corrente, podendo o usuário escolher ambos os modos. Além disso, no caso do display de tempo, o flag SF_UPD_DISPLAY é ajustado para requisitar a atualização do display.

Os push-buttons SW1 e SW2 são controlados por duas ISRs, PORT1_ISR() e WDT_ISR(). Estes controles permitem usar os botões para ajustes e visualizações do display.

Os botões também permitem visualizar a temperatura tanto na escala Celsius como Fahrenheit.

Mais informações sobre o modo como as subrotinas que controlam esses botões operam podem ser obtidas na documentação original da

Texas.

 

Conclusão

A finalidade desse projeto "demo" da Texas Instruments, é mostrar como pode-se implementar com facilidade um medidor de altitude e também temperatura usando um único chip, no caso o microcontrolador MSP430F4270.

Se maior precisão e estabilidade forem exigidos, há diversas alternativas sugeridas, como a montagem em gabinete resistente, já que o sensor é sensível à luz ambiente.

Outra possibilidade consiste em se fixar o ganho do SD16_A em 1, de modo a se obter uma melhor performance SINAD/ENOB, e empregar um amplificador operacional diferencial de instrumentação externo. Com isso o nível de ruído pode ser reduzido, aumentando a resolução e diminuindo a quantidade de operações para obtenção da média dos valores medidos.

Também pode ser usada uma freqüência maior do modulador do SD16_A, de modo a se coletar e tirar a média de maior quantidade de valores coletados.