vendredi 1 décembre 2017

Programmer un STM32F103 (blue pill) avec l'IDE Arduino



IMPORTANT:


Plusieurs éléments de cet article sont devenus désuets. Vous devriez plutôt vous référer à cet article plus récent: Programmation d'une carte STM32 avec l'IDE Arduino.

On trouve facilement les "blue pills" pour moins de deux euros, sous la désignation "STM32F103C8T6 Minimum System Development Board" (à ce prix, vous devrez souder vous-mêmes les deux rangées de connecteurs).  Ces petites cartes, munies d'un  STM32, peuvent être programmées au moyen de l'IDE Arduino.  Voici une petite marche à suivre sous Windows 7.

Tout d'abord, si votre objectif est de programmer la carte au moyen de l'IDE Arduino, assurez-vous d'acheter un module comportant un STM32F103.  On peut trouver pour encore moins cher des modules comportant un STM32F030, mais ces derniers ne sont pas supportés par le projet STM32Duino.



Programmateur ST-Link V2

Malgré la présence d'un connecteur micro-USB, on ne peut pas programmer la carte en la branchant directement dans le port USB d'un ordinateur, à moins d'y avoir préalablement gravé un bootloader.  Je me suis donc procuré un programmateur STLink V2, qui prend la forme d'un petit dongle USB (il m'a coûté environ 2 euros).



Le ST-Link V2 se branche aux 4 connecteurs situés à l'extrémité de la carte.


Si vous préférez utiliser un adaptateur USB-série plutôt que STLink V2, vous trouverez des informations utiles dans cet autre article.

Préparation de l'IDE Arduino

1) Vous vous assurez d'abord d'avoir une version récente de l'IDE Arduino.  Pour ma part, j'ai fait mes tests avec la version 1.8.1.

2) Vous ouvrez le gestionnaire de carte en passant par le menu Outils - Type de carte - Gestionnaire de carte.


3) Une fois dans le gestionnaire de carte, vous installez "Arduino SAM Boards (32-bits ARM Cortex-M3) by Arduino" (ça va prendre quelques minutes).  Ces fichiers sont prévus pour l'Arduino Due qui, tout comme le STM32F103, est de type ARM Cortex-M3.



4) Vous téléchargez ce fichier, et vous le décompressez pour obtenir un dossier intitulé "Arduino_STM32".  Vous vous rendez ensuite dans votre dossier "Arduino" (celui qui contient le dossier "librairies") et, à moins qu'il n'existe déjà, vous créez un dossier "hardware" dans lequel vous placez le dossier "Arduino_STM32".


5) Vous fermez l'IDE Arduino, et vous l'ouvrez à nouveau.

6) Tadam!  Dans "Type de carte", vous disposez maintenant d'une liste de cartes de type STM32.  Le type qui convient à notre blue pill est "Generic STM32F103C series".



7) Les réglages par défaut sont tous appropriés, sauf "Upload method", que j'ai réglé à "STLink".


8)  Lorsque vous insérez le dongle STLink dans un port USB de l'ordinateur, un pilote de périphérique est installé (de plus, la LED située sur la carte se met à clignoter).


On peut ensuite ouvrir l'exemple "blink" et changer le numéro pour PC13 (qui est la broche reliée à la LED intégrée sur la carte).  Puisque la LED sur la carte clignote déjà, c'est une bonne idée de modifier la fréquence de clignotement, afin de voir une différence...

(Le téléchargement du sketch devrait fonctionner, malgré le fait que l'article "Port" du menu "Outils" demeure grisé.)

Installation des pilotes

Sous Windows, si vous désirez utiliser le port USB de la Blue Pill (pour utiliser le moniteur série, par exemple, ou si vous avez l'intention d'installer le bootloader afin de programmer la Blue Pill par son port USB), vous devrez également installer des pilotes. Pour ce faire, vous ouvrez le dossier "Arduino_STM32" que nous avons installé dans le dossier "hardware" à l'étape 4.  En suivant le chemin d'accès "Arduino_STM32/drivers/win", vous démarrez le script d'installation "install_drivers.bat".



Yves Pelletier   (TwitterFacebook)


lundi 27 novembre 2017

Contrôle d'un moteur à courant continu avec MPLAB Xpress Evaluation Board

Faisons maintenant un peu de robotique avec le MPLAB Xpress Evaluation Board, un moteur à courant continu et un circuit intégré L293D.  Au besoin, vous pourrez facilement modifier ce projet pour contrôler simultanément deux moteurs à courant continu (plate-forme robotique).  De plus, rien ne vous empêche de remplacer le L293D par un autre circuit intégré comme, par exemple, le L298N.


Dans ce projet, l'utilisateur pourra contrôler la vitesse de rotation du moteur en tournant le potentiomètre intégré à la carte MPLAB Xpress Evaluation Board.  De plus, le sens de rotation du moteur s'inversera lorsque le bouton poussoir de la carte sera maintenu enfoncé.

Voici une courte vidéo montrant le dispositif en action:



Le circuit

Parce qu'il risque de consommer beaucoup de courant, le moteur ne doit pas être alimenté par la carte MPLAB Xpress Evaluation Board:  une alimentation externe est nécessaire.

Le MPLAB Xpress Evaluation Board contrôle les broches 1, 2 et 7 du L293D.  Le signal modulé en largeur d'impulsion (PWM) transmis à la broche 1 contrôlera la vitesse de rotation du moteur.  Lorsque la broche 2 sera soumise à une tension de 3,3 V pendant que la broche 7 sera à une tension nulle, le moteur tournera dans un sens.  Il tournera dans l'autre sens quand la tension de la broche 2 sera nulle, et que celle de la broche 7 sera de 3,3 V.



  • La broche 1 du L293D ("enable 1") est branchée à la sortie RA0 du MPLAB Xpress Evaluation Board.
  • La broche 2 du L293D ("input 1") est branchée à la sortie RA1 du MPLAB Xpress Evaluation Board.
  • La broche 3 du L293D ("output 1") est branchée à un des deux contacts du moteur.
  • La broche 4 du L293D (ou la broche 5, 12 ou 13)  (GND) est branché à une broche GND du MPLAB Xpress Evaluation Board et à la borne négative de l'alimentation du moteur.
  • La broche 6 du L293D ("output 2") est branchée à l'autre contact du moteur.
  • La broche 7 du L293D ("input 2") est branché à la sortie RA2 du MPLAB Xpress Evaluation Board.
  • La broche 8 du L293D ("Vs") est branchée à la borne positive de l'alimentation du moteur.
  • La broche 16 du L293D ("Vss") est branchée à la sortie 5 V du MPLAB Xpress Evaluation Board.

Les broches 9, 10, 11, 14 et 15 du L293D sont destinées à contrôler un deuxième moteur:  elle ne sont pas utilisées dans le présent projet.



Configuration avec MCC

Rendons-nous maintenant sur l'IDE en ligne MPLAB Xpress, et créons un nouveau projet.  Si vous ne savez pas comment procéder, vous devriez jeter un oeil sur ce précédent billet.

Vous accédez ensuite à MCC (MPLAB Xpress Code Configurator) et vous ajoutez trois éléments à votre projet:  ADCC, PWM6 et TMR4.  Ces trois éléments apparaîtront dans la zone "Project Resources" de MCC si vous cliquez deux fois sur leur nom dans la liste "Devices Resources".


Commençons par le réglage du timer TMR4, qui est nécessaire pour l'utilisation du module PWM6.  Cliquez sur TMR4 dans "Projects Resources", et réglez "Clock Source" à "FOSC/4".  Assurez-vous que "Enable Timer" est coché.


Réglons maintenant le générateur de modulation par largeur d'impulsion (PWM6) qui contrôlera la vitesse de rotation de notre moteur.  Après avoir cliqué sur PWM6 dans "Projects Resources", réglez "Select a Timer:" à "Timer4" et assurez-vous que "Enable PWM" est coché.


Cliquez maintenant sur "ADCC" dans la zone "Project Resources" afin de régler le convertisseur analogique-numérique qui sera associé au potentiomètre.  Cochez "Enable ADC", et réglez "Acquisition Count" à 1.


Cinq clics sont requis dans la zone des cadenas, dans le bas de la fenêtre de MCC:  la pin RA0 est assignée au PWM6, les pins RA1 et RA2 sont désignées comme sorties (output) GPIO, la pin RA4, qui est soudée au potentiomètre de la carte, est associée au convertisseur analogique-numérique (ANx) et la pin RA5, qui est soudée au bouton poussoir de la carte, est désignée comme une entrée (input) GPIO.


Finalement, un click sur "Pin Module" dans la zone "Project Resources" permet de modifier le nom de nos entrées/sorties.  Pour faciliter la programmation, les broches RA1 et RA2 s'appellent respectivement "sortie_1" et "sortie_2", la broche RA4 s'appelle "potentiometre" et la broche RA5 s'appelle "bouton".  J'ai décoché les cases "Analog" pour RA1 et RA2.


Il ne reste plus qu'à cliquer sur le bouton "Generate", et à retourner dans MPLAB Xpress.

Le script

Après tout ce qui a été configuré dans MCC, le programme à écrire dans  le fichier "main.c" est plutôt simple:  le rapport cyclique du signal PWM est réglé selon la position du potentiomètre.  L'état logique des sorties 1 et 2 (broches RA1 et RA2) est réglé de façon différente selon que le bouton est enfoncé ou non.



Yves Pelletier   (TwitterFacebook)

jeudi 23 novembre 2017

Afficheur 8 chiffres, 8 LEDs, 8 boutons TM1638 et STM32 Nucleo

J'ai déjà eu l'occasion de parler des modules d'affichage "LED and KEY", qui comportent 8 chiffres, 8 LEDs et 8 boutons poussoirs, le tout contrôlé par un circuit intégré TM1638: au cours des derniers mois, je les ai utilisés avec une carte Arduino, et ensuite avec un ATTiny85.

Cette fois-ci, j'en ai utilisé un avec une carte STM32 Nucleo (programmée sur mbed, comme d'habitude).

Le circuit

Les branchements sont un peu particuliers, puisque sur le module d'affichage, une seule broche est consacrée à l'envoi et à la réception des données, alors que sur la carte Nucleo, les données sont reçues par la broche MISO et envoyées par la broche MOSI.

Par conséquent, les broches MISO et MOSI de la carte Nucleo sont toutes les deux branchées à la broche DIO du module TM1638, en prenant soin, cependant, de placer une résistance de 1 kΩ entre MOSI et DIO.

  • Broche VCC du module afficheur:  sortie 3V3 du Nucleo
  • Broche GND du module afficheur:  broche GND du Nucleo
  • Broche STB du module afficheur:  broche CD/D10 du Nucleo
  • Broche CLK du module afficheur:  broche SCK/D13 du Nucleo
  • Broche DIO du module afficheur:  broche MISO/D12 et résistance de 1 kΩ - broche MOSI/D11 du Nucleo



Importation de la bibliothèque

Après avoir créé un nouveau projet dans mbed, on y importe la bibliothèque TM1638 par Wim Huiskamp.

Premier exemple:  affichage d'un nombre croissant

Ce premier script affiche un nombre entier qui augmente d'une unité à chaque demi seconde.



Deuxième exemple:  utilisation des boutons

Dans ce deuxième script, on affiche un numéro et on allume une LED chaque fois qu'un des 8 boutons est enfoncé.






À lire également:

Yves Pelletier
   (TwitterFacebook)