mercredi 17 mai 2017

Jouer une mélodie avec le STM32 Nucleo (mbed)


Aujourd'hui, nous allons faire en sorte que notre carte STM32 Nucleo joue une petite mélodie.

Il est possible de faire de la synthèse de son assez sophistiquée grâce au STM32, mais nous nous limiterons à la génération d'un signal PWM dont nous ferons varier la fréquence, afin d'obtenir un résultat similaire à l'utilisation des instructions "tone" et "noTone" sur une carte Arduino.

Le circuit

Tel que discuté dans un précédent article, il est plutôt risqué de brancher un haut-parleur directement à une sortie du Nucleo:  la résistance d'un haut-parleur étant typiquement très faible (inférieure à 10 Ω), il en résulterait un courant trop intense qui risquerait à la longue d'endommager le STM32.  Une méthode beaucoup plus appropriée consiste à insérer un transistor entre la sortie du Nucleo et le haut-parleur.

Voici le schéma du circuit que j'ai utilisé.  Le potentiomètre est facultatif:  il permet de contrôler le volume sonore.

Plutôt qu'un MOSFET, vous pouvez utiliser un transistor NPN avec une résistance de quelques kΩ à sa base (plus de détails ici).

Le script

Voici un script programmé dans mbed.  Après avoir défini la pin D9 comme une sortie PWM au moyen de la fonction PWMOut, on peut régler sa période et son rapport cyclique.  La période est liée à la hauteur de la note jouée, alors que le rapport cyclique permet de contrôler le volume.

La constante "note" est un tableau contenant la fréquence associée aux 11 notes contenues dans un octave.

La mélodie se trouve dans la constante "melodie".  Il s'agit d'un tableau bi-dimensionnel contenant chacune des notes devant être jouée, de façon séquentielle.  Chaque note comporte trois paramètres:  la valeur de la note (0 pour do, 1 pour do#, 2 pour ré, jusqu'à 11 pour si), le numéro de l'octave (1 pour l'octave le plus grave, 2 pour l'octave suivant, etc.), et finalement la durée de la note (1 pour une croche, 2 pour une noire, 4 pour une ronde).

Vous pouvez facilement modifier le contenu de la constante "melodie" afin de faire jouer autre chose par votre carte Nucleo, sans avoir à changer quoi que ce soit au reste du programme.


Vidéo de la carte Nucleo en action



Yves Pelletier   (TwitterFacebook)

dimanche 14 mai 2017

Horloge temps réel DS1307 et MSP430 Launchpad (Energia)

Aujourd'hui, je vous propose un petit guide qui vous guidera dans l'utilisation d'un module RTC (horloge temps réel) DS1307 avec votre carte MSP430 Launchpad.  Ça peut s'avérer particulièrement utile si vous désirez fabriquer une horloge au moyen de votre Launchpad, ou si votre projet nécessite que votre Launchpad connaisse la date et l'heure exacte en tout temps (dans un système de data logging, par exemple).  Pour programmer le Launchpad, nous utiliserons le logiciel Energia.

Mise en garde

J'ai utilisé un module DS1307 parce c'est ce que j'avais sous la main.  Mais  en théorie, le DS1307 nécessite une tension d'alimentation de 5 V, alors que votre Launchpad fonctionne sous 3,3 V. Mon propre module a parfaitement fonctionné sous cette faible tension, mais il serait exagérément optimiste de supposer que tous les modules DS1307 peuvent s'accommoder d'une tension aussi basse. Donc, si vous disposez déjà d'un module DS1307, vous pouvez vérifier s'il accepte de fonctionner sous 3,3 V, tout comme le mien.  Mais si vous vous apprêtez à faire l'acquisition d'un module RTC dans le but de l'utiliser avec un Launchpad, il serait nettement plus approprié de vous procurer un module RTC conçu pour fonctionner sous 3,3 V (le PCF8523, par exemple).

Le module RTC DS1307

C'est la compagnie Maxim qui fabrique le circuit intégré DS1307, mais c'est plus pratique d'utiliser un module déjà prêt à l'emploi, comportant une petite pile qui permettra à votre horloge de conserver la bonne heure même pendant que votre Launchpad n'est pas sous tension.  J'ai utilisé un module chinois qui est très similaire au module commercialisé par Adafruit.

Téléchargement de la bibliothèque

J'ai utilisé d'excellents résultats avec la bibliothèque RTCLib.  Notez que cette bibliothèque n'est pas spécifique au Launchpad: c'est exactement la même version que pour l'Arduino.

Branchements

Ici, les choses peuvent se compliquer un peu.    Je commence par vous présenter le montage le plus simple, qui a très bien fonctionné pour moi.  Ensuite, au cas où ça ne fonctionnerait pas si bien pour vous, nous verrons quelques modifications pouvant être apportées à ce montage.

Le module RTC comporte 7 connecteurs, ce qui peut à première vue sembler un peu intimidant.   Mais pour une utilisation de base, seuls 4 connecteurs nous seront utiles:  deux connecteurs qui servent à l'alimentation du module, et deux connecteurs servant à la communication au moyen du protocole  i2c.


J'ai branché le module RTC de la façon suivante:
  • Pin GND du module RTC --- Pin GND du Launchpad
  • Pin Vcc du module RTC --- Pin VCC du Launchpad
  • Pin Sda du module RTC --- Pin P2.2 du Launchpad
  • Pin Scl du module RTC --- Pin P2.1 du Launchpad
Si vous vous inquiétez de l'absence de résistances pull-up, c'est qu'elles sont déjà présentes à l'intérieur de mon module RTC (3,3 kΩ, d'après ce que j'ai mesuré).  J'ignore si tous les modules RTC à base de DS1307 comportent déjà ces résistances ou non.

Si ce circuit ne fonctionne pas de votre côté, plusieurs raisons sont possibles:

- Peut-être que votre module RTC n'est pas muni de résistances pull-up, et que vous devez les ajouter vous-mêmes (4,7 kΩ devraient faire l'affaire).

- Si vous utilisez une vieille version d'Energia, les connecteurs I2C pourraient se trouver plutôt aux pins P1.6 et P1.7  (assurez-vous alors de retirer le jumper qui permet d'allumer la LED 2 intégrée à la carte).

- Ça pourrait être parce que votre module nécessite 5 V (ce qui est normal:  il s'agit de la tension recommandée par le fabricant).  Il existe une sortie 5 V non-officielle sur votre Launchpad:  il s'agit de souder un connecteur dans le trou "TP1" situé sous le port mini-usb.



Vous pouvez alimenter le module RTC sous 5 V en utilisant cette sortie, mais tout en évitant que les lignes de communication (Sda et Scl) ne dépassent 3,3 V.  Si votre module ne comporte pas déjà de résistances pull up reliant Vcc à Sda et Scl, le circuit ci-dessous serait approprié.


Sketch

Puisque la bibliothèque TRCLib a été conçue en fonction d'une utilisation avec l'Arduino, les exemples qui l'accompagnent utilisent une vitesse de communication de 57600 bauds:  ça semble trop rapide pour le Launchpad, car Energia n'a accepté d'afficher les messages qu'à 9600 bauds.

Voici un sketch fortement inspiré de l'exemple "ds1307".  Il affiche dans le moniteur série l'heure et la date, dans deux formats différents.




Yves Pelletier   (TwitterFacebook)

mercredi 10 mai 2017

Kit: générateur de basses fréquences ICL8038

Je n'avais pas vraiment besoin d'un nouveau générateur de basses fréquences, mais le prix (environ 2 euros) m'a intrigué.  J'ai donc commandé sur eBay ce kit comportant tous les composants nécessaires à la fabrication d'un petit générateur basse fréquence pouvant produire un signal sinusoïdal, carré ou triangulaire dans une gamme de fréquences allant de 50 Hz à 5000 Hz.

Le kit

Il s'agit d'un kit, donc on doit soi-même souder les 24 composants au circuit imprimé.  Mon exemplaire était livré sans la moindre trace de documentation, mais les indications qui sont gravées sur le circuit imprimé permettent malgré tout de placer les composants au bon endroit sans la moindre ambiguïté.


Le kit contient les éléments suivants (les symboles entre parenthèses sont ceux qui figurent sur le circuit imprimé):

A) Circuit imprimé (6 cm X 4 cm)
B) 2 triples borniers à vis pour l'alimentation et les sorties (J1 et J2)
C) Circuit intégré ICL8038, probablement contrefait (U1)
D) Interrupteur pour sélectionner les hautes ou les basses fréquences (S1)
E) Condensateur 1 nF "102" (C3)
F) Condensateur 10 nF "103" (C4)
G) 2 condensateurs 100 nF "104" (C1 et C2)
H) Condensateur électrolytique 220 µF (le circuit imprimé indique 100µF) (C5)
I) Potentiomètre 20K "203" pour le réglage du rapport cyclique (VR3)
J) Potentiomètre 100 K "104" pour atténuer la distorsion du signal (VR4)
K) Potentiomètre 5K pour le réglage de la fréquence (VR1)
L) Potentiomètre 5K pour le réglage fin de la fréquence (VR2)
M) Diode 1N1007 (D1)
N) LED rouge (D2)
O) Bouton du potentiomètre VR1
P) Résistance 200 ohms (R1)
Q) 3 résistances 10 K (R2 R3 R4)
R) 4 résistances 33 K (R5 R6 R7 R8)

Pour les curieux, voici un lien vers la fiche technique du ICL8038, et un schéma du circuit, trouvé sur la page eBay du vendeur (attention, les symboles du schémas ne concordent pas avec ceux qui sont gravés sur le circuit imprimé).


Utilisation du générateur

Le générateur doit être alimenté avec une tension continue de 12 volts (l'ICL8038 pourrait en principe tolérer au moins le double, mais pas le condensateur électrolytique, limité à 16 V!).

Lorsque le commutateur est en position "basse fréquence", le signal peut prendre une fréquence allant de 50 Hz à 500 Hz, alors qu'en position "haute fréquence", la fréquence peut être réglée à une valeur située entre 500 Hz et 5000 Hz.

Il existe une sortie distincte pour chaque forme de signal (sinus, carré ou triangulaire).

L'amplitude ne peut malheureusement pas être modifiée:  elle est d'environ 1 V pour le sinus, 1,5 V pour le signal triangulaire et 4 V pour le signal carré.   Le signal alternatif se superpose à une tension continue d'environ 5 V.

Pour 2 €, il s'agit d'une acquisition intéressante si vous ne disposez pas déjà d'un tel instrument. L'impossibilité de modifier l'amplitude du signal est un inconvénient; il pourrait être intéressant d'ajouter un étage d'amplification à gain variable afin de combler cette lacune.








Yves Pelletier   (TwitterFacebook)



Related Posts Plugin for WordPress, Blogger...