Documentation Technique

Alimentation de la carte Turtle

La Turtle board peut être alimentée par batterie (piles AAA ordinaires ou NiMH rechargeables). En deuxième option, il peut être alimenté via le port micro-USB. La carte passe automatiquement de l’alimentation USB à l’alimentation par batterie, l’alimentation USB a la préférence.

La carte Turtle : affectation des broches et des interruption

Interface du débogueur

Le paquet de la carte comprend un connecteur 2×4 broches à utiliser avec un débogueur externe. Pour l’utilisation du débogueur, l’en-tête doit être soudé et connecté à un débogueur distant, voir les détails sur la page Interface Nucleo ST-Link. Par défaut, le logiciel Turtle démarre et tente de connecter une console au débogueur UART (fils TX/RX, 230400 baud). Si aucun UART de débogage n’est détecté, il essaie de se connecter via un port COM virtuel USB pendant 30 secondes. Si aucun des deux n’est disponible, il n’y a pas de sortie console.

Remarque :
Les messages d’erreur de bas niveau ne seront imprimés que sur le débogueur externe ou l’interface UART externe car les services USB s’arrêteront en cas de panne. Tous les messages réguliers fonctionneront bien avec un port COM virtuel USB ou avec un débogueur UART. Au lieu d’un débogueur UART, il est également possible de connecter un UART externe régulier aux broches RX/TX pour l’impression des messages de la console.

Installer l’antenne

Il y a trois options d’antenne :

  • L’antenne SMA fournie peut être branchée sur le connecteur SMA
  • Un connecteur U.FL est disponible pour les antennes U.FL externes
  • Un fil de base peut être connecté, pour cela le connecteur SMA doit être dessoudé et le fil doit être soudé à la broche centrale de la pastille SMA sur le dessus du circuit imprimé

Une antenne filaire de base doit être raccourcie à 8,2 cm. L’antenne est adaptée à λ/4 pour 868,1 MHz.

La formule exacte pour calculer la longueur de l’antenne est :

Longueur d'onde = vitesse de la lumière / fréquence

Pour λ/4, cette valeur doit à nouveau être divisée par 4.

Remarque :
La carte Turtle est livrée ajustée pour une seule fréquence RF (433 ou 470 MHz, ou 868 ou 915 MHz). La fréquence est indiquée sur la carte. La fréquence de la carte et la fréquence de l’antenne doivent correspondre, sinon elle ne fonctionnera pas correctement.

Enclencher/déclencher la tension « VDD-SW » pour les charges externes

Un interrupteur de tension interne permet d’allumer et d’éteindre les consommateurs d’énergie externes afin qu’ils ne consomment pas d’énergie en permanence. La broche d’E/S « EXT_POWER_SW » est définie dans le fichier « PinMap.h » du logiciel RadioShuttle pour la commutation. Il peut être commuté sur « EXT_POWER_ON » ou « EXT_POWER_OFF ». La mesure de la tension de la batterie, mesurée par les broches ADC « BAT_POWER_ADC », est reliée au câble « VDD-EXT ». Pour que la carte nécessite le moins d’énergie possible, le « VDD-EXT » est généralement éteint.

Mesure de la tension de la batterie

Pour mesurer la tension d’alimentation de la VDD (environ 3,3 volts lorsqu’elle est alimentée par USB, environ 3,0 volts lorsqu’elle est alimentée par batterie), un appareil de mesure est fourni sur la carte. La tension de la batterie est affichée avec une précision d’environ 100 mV. La tension est mesurée et affichée lors du démarrage ou de la réinitialisation. La fonction BatteryVoltage() du fichier « RTCUtil.cpp » mesure et retourne la tension.

Turtle « deepsleep » et réveil

Le logiciel d’exemple de RadioShuttle pour la carte Turtle a une boucle principale où il traite les tâches et entre dans la fonction Mbed sleep(), c’est-à-dire dans le sommeil profond pour la consommation d’énergie la plus faible.

Remarque :
Lorsqu’une console USB est utilisée, sleep() ne peut pas être appelé car cela déconnecterait la console USB. De plus, le mode sommeil profond n’est pas pris en compte lors de l’enregistrement des fonctions de la minuterie. La fonction MCU « LowPowerTimer » supporte le mode « deepsleep » et peut être utilisée à la place.

Tout gestionnaire d’interruption d’entrée enregistré, ou un gestionnaire RTC ou « LowPowerTimer », réveillera le MCU du sommeil profond et continuera le traitement immédiatement. Une fois le traitement terminé, la fonction sleep() est de nouveau appelée et entre dans le mode deepsleep. Lorsque le MCU est en veille ou en mode « deepsleep », la LED verte s’éteint.

Conseils de conception pour les routines d’interruption

Par défaut, les routines d’interruption doivent être aussi courtes que possible et ne doivent jamais attendre que quelque chose se produise pour éviter les blocages. De plus, l’impression sur une console USB ne fonctionne pas dans les routines d’interruption, et l’impression sur un UART comporte également des limitations.

L’exemple de code de la carte Turtle a une excellente solution pour cela : La routine d’interruption affiche un événement, la boucle principale reprend l’événement d’interruption et effectue le traitement sur un code de niveau utilisateur (non interrompu). Cela permet d’imprimer sur la console, d’attendre quelque chose et de le traiter facilement :

  • Ajouter un nouveau bit d’interruption unique dans le fichier « main.h », par exemple MY_INT = 0x20
  • Dans la fonction d’interruption, envoyer l’événement via InterruptMSG(MY_INT);
  • Dans la boucle principale, vérifiez pour vous les événements d’interruption via if (pendirqs & MY_INT)

Cela rend la programmation beaucoup plus facile et permet le débogage d’impression dprintf(). A titre d’exemple, vérifiez comment fonctionne la fonction timerUpdate() dans « main.cpp ».

Sonde de température et d’humidité (optionnel)

Le capteur offre la possibilité de mesurer la température et l’humidité exactes d’une manière très économe en énergie. Le feutre blanc du capteur ne doit pas être enlevé, car il a une fonction de protection pour que le capteur fonctionne correctement. Un capteur « SI7021-A20-GM1 » de Silicon Labs est utilisé, le pilote est inclus dans le logiciel RadioShuttle.

Connecter le capteur

Le capteur est connecté via le bus I2C et nécessite quatre lignes (GND, VDD, SCL, SDA). Les options d’installation simples suivantes sont disponibles :

  • Montage en haut de la carte
  • Montage en haut à l’arrière de la carte
  • Installation externe par câble de rallonge (non fourni), par ex. à l’extérieur du boîtier ou directement sur un radiateur, etc.

Faites attention à l’ordre des broches (« GND » est à l’extérieur) ; le capteur a deux côtés de connexion et peut être tourné pour qu’un côté s’adapte selon l’installation (en haut ou en bas).

Remarque :
Deux composants (résistances optionnelles) sur le capteur ne sont pas équipés intentionnellement, ce sont des résistances I2C pull-up, qui sont déjà incluses comme 10 kΩ sur la carte principale. Pour un capteur externe avec de longs fils, il peut être utile de souder deux résistances de 1 kΩ (incluses) pour obtenir des signaux stables. Une option supplémentaire est de réduire la vitesse I2C. Nous partagerons notre expérience ici plus tard.

Utilisation logicielle du capteur

S’il est connecté, le capteur est actif en permanence, mais ne nécessite qu’environ 1 μA tant qu’aucune valeur de capteur n’est lue. Lors de la mise sous tension de la carte tortue (mise sous tension ou réinitialisation de la carte), le capteur n’est initialisé qu’une seule fois et la température est transmise avec les messages de démarrage. Au démarrage de la carte, les valeurs des capteurs sont automatiquement mesurées et affichées. Le code se trouve dans le fichier « Turtle_RadioShuttle/Utils/utils/utils.cpp » :

if (sensorSI7021->hasSensor()) {
    dprintf("%s: Rev(%d)  %.2f°C  Humidity: %.2f%%", sensorSI7021->getModelName(), sensorSI7021->getRevision(), sensorSI7021->readTemperature(), sensorSI7021->readHumidity());
}

Remarque :
Pour cela, « FEATURE_SI7021 » doit être défini dans le fichier « PinMap.h ».

Il est recommandé de ne pas lire inutilement le capteur en permanence, car chaque lecture des valeurs prend du temps et consomme de l’énergie pendant ce temps. La lecture de la température dure environ 13 ms, celle de l’humidité de l’air environ 20 ms. Pendant ce temps, le MCU NUCLEOL432 est actif.

Fonctionnement sur piles

La carte Turtle supporte des tensions de batterie de 2,1 V à 3,6 V. Habituellement, les clients utilisent 2 piles AAA qui fournissent 3 V lorsqu’elles sont pleines ou 2 piles NiMH rechargeables qui fournissent 2,4 V lorsqu’elles sont pleines. Le porte-piles AAA peut également être remplacé par un porte-piles AA car son connecteur (largeur de fil) est compatible.

Dans les environnements plus froids, les piles ordinaires et les piles NiMH rechargeables ne fonctionnent pas bien. Dans ce cas, on peut utiliser des piles au lithium de qualité supérieure (2 x 1,5 V).

Seules les piles placées dans le porte-piles (broches +/-) peuvent alimenter efficacement la carte pendant de nombreuses années en mode veille avec des messages LoRa RadioShuttle réguliers.

Les cartes alimentées par USB ou VIN utiliseront un LDO (low-dropout regulator) pour réduire la tension d’entrée à 3,3 V. Le LDO consomme en permanence une petite quantité d’énergie qui ne serait pas un problème pour une alimentation USB mais qui ne permet pas un fonctionnement sur batterie longue durée.

Remarque :
Les batteries rechargeables Li-ion (lithium-ion) ou LiPo (lithium polymère) ne peuvent pas être utilisées pour alimenter la carte via les broches d’entrée de la batterie car leur tension est supérieure à 3,6 V, ce qui détruit les puces MCU et LoRa sur la carte. Cependant, l’alimentation de la carte par des batteries Li-ion ou LiPo via VIN fonctionnera.

La carte Turtle n’a pas de chargeur de batterie intégré parce que les cartes durent de nombreuses années et le remplacement des batteries se fait rapidement.