jeudi 11 juillet 2013

msp430 launchpad, partie 5

Les sujets abordés dans cette chronique sont:

  • Opération du MCU en mode burst.
  • Utilisation du USCI A en mode UART.
  • Sonde de température interne

Contrôle de la consommation électrique

Texas instruments décris la famille des MCU MSP430xxx comme étant de très faible consommation idéal pour l'utilisation dans des appareils à piles. Pour une consommation minimale il faut cependant respecter certains critères:

  1. Conserver le MCU en mode suspendu et ne l'activer qu'au besoin. TI appelle ça le burst mode.
  2. Faire fonctionner les oscillateurs et les périphériques à la plus basse fréquence possible compte tenu des contraintes de l'application.
Le démo utilise ces principes et consiste à utiliser le périphérique ADC10 pour lire la sonde de température interne au MCU et à transmettre le résultat à l'ordinateur qui est relié au launchpad par un port sériel. J'utilise un Pololu 2301a comme adapteur de niveau. L'adapteur est alimenté directement par la carte launchpad par les broches GND et VCC qui sont à adjacentes à S2 sur la carte. Organisation du programme.
  1. À la mise sous tension: initialisation horloge et périphériques.
  2. Envoie du message "OK\n" au PC hôte.
  3. entre dans la boucle du programme principal.
  4. Le MCU est suspendu en attente de réception d'une commande du PC hôte.
  5. Lorsqu'un caractère est reçu du PC hôte. l'ISR uart0_rx_isr() réactive le MCU.
  6. Le programme vérifie si le caractère reçu est 't'. Sinon remet le MCU en mode suspendu et retourne au point 4.
  7. Si reçu 't', sort de la boucle d'attente et lance la lecture de température et remet le MCU en mode suspendu.
  8. Lorsque le périphérique ADC10 a terminé sa lecture l'ISR adc10_isr() extrait la valeur qui est dans ADC10MEM dans les 2 variables b1 et b2 et réactive le MCU.
  9. L'exécution du programme principal se poursuit par la transmission de b1 et b2 au PC hôte par la fonction uart_tx(). Notez que durant la transmission le MCU est encore suspendu jusqu'à que ce la transmission du caractère soit complétée. C'est l'ISR uart_tx_isr qui réactive le MCU.
  10. Le Watchdog timer est configuré en mode minuterie avec délais de 1 seconde et le MCU est encore suspendu jusqu'à l'expiration du délais. Le mcu est réactivé par l'ISR wdt_isr().
  11. Le programme retourne au début de la boucle principale (point 3) pour attendre une nouvelle commande 't' du PC hôte.
Le programme a en fait 2 variantes:
  1. Lorsque #define LP_MODE3 est défini le MCU est conservé en mode basse consommation LPM3. À ce niveau l'activité du MCU est suspendu et le seul oscillateur en fonction est ACLK. Les périphériques qui fonctionnent dans ce mode doivent utiliser ACLK ou avoir leur propre oscillateur comme l'ADC10. La fréquence du DCO est de 1Mhz. Le générateur baudrate du UART est alimenté par ACLK et le baudrate est à 9600.
  2. Lorsque la ligne #define LP_MODE3 est supprimée (ou mise en commentaire), le MCU est suspendu en mode LPM0. À ce niveau l'activité du MCU est suspendu mais le signal SMCLCK est toujours disponible pour les périphérique. Dans cette variante le DCO est configuré à 8Mhz, le générateur baudrate est alimenté par SMCLK et la transmission UART est à 115200 baud. Cette variante consomme plus d'énergie que la première mais permet d'utiliser le UART à vitesse supérieure.

code source

Sonde de température

Les msp430xxx qui ont un convertisseur Analogue/Numérique possèdent une sonde de température intégrée. Une application peut-être conçue pour utiliser cette sonde afin de surveiller la température du chip de silicium et entreprendre une action préventive si cette température atteint un seuil critique. Action qui peut consister à simplement mettre le MCU en mode LPM4. J'ai préparé un deuxième démo (code source à la fin de cette chronique) qui montre comment ça peut-être fait.

Pour utiliser la sonde de température il s'agit simplement de sélectionner le canal d'entrée 10
ADC10CTL1 |= INCH_10;
et à utiliser une référence de voltage interne de 1,5volt
ADC10CTL0 = SREF_1+REFON+ADC10ON;
ou 2,5volt
ADC10CTL0 = SREF_1+REF2_5V+REFON+ADC10ON;

UART

Pour communiquer avec le PC hôte il faut configurer le périphérique USCI (Universal Serial Communication Interface) en mode UART. En fait il y a 2 types de USCI le type A et le type B. Le type A est le plus polyvalent, il peut-être configuré en mode LIN, SPI, UART, IrDA . Le type B ne peut-être configuré qu'en modes I2C ou SPI.

Le démo utilise donc le périphérique UCA0. La partie la plus complexe de la configuration est celle qui concerne le générateur baudrate. Heureusement le guide contient 2 tables 15-4 et 15-5 avec les valeurs nécessaires pour différents BRCLK et différents baudrates standards. Les valeurs utilisées dans ce démo sont extraites de la table 15-4.

Ce démo fait une utilisation très rudimentaire du périphérique, il n'y a aucune gestion d'erreur sur réception ni de vérification du l'état du périphérique. Il faut savoir qu'il est possible de configurer une interruption sur erreur de réception et que le SFR UCA0STAT contient des bits indicateurs d'erreurs et autre conditions.

Le périphérique en tant que tel n'a pas de lignes RTS et CTS si l'application requiert un contrôle de flux matériel celui-ci devra être configuré entièrement en logiciel en réservant 2 E/S pour ces lignes.

Contrôle de la surchauffe

La seule application utile de la sonde de température intégrée au MCU est son utilisation pour contrôler la surchauffe du MCU. Le démo suivant montre comment configurer un tel contrôle. L'application consiste simplement à faire clignoter la LED2 qui est sur la carte. S'il y a surchauffe la LED2 (verte) est éteinte la LED1 (rouge) est allumée et le MCU est placé en mode LPM4. Il devra alors être réinitialisé par le bouton RESET ou une remise sous tension. Pour ce démo j'utilise un seuil d'environ 40°C de sorte q'un séchoir à cheveux peut déclencher la protection.
SEUIL = 1023*Vt/Vref
Vref = 1,5Volt
Vt = 0,00355*T°C + 0,986
Pour 40°C on a SEUIL=770

Aucun commentaire:

Publier un commentaire