Différences entre versions de « Tutoriels/Créer son PCB avec STM32 »
m (→Protections) |
|||
Ligne 89 : | Ligne 89 : | ||
===Oscillateur externe=== | ===Oscillateur externe=== | ||
+ | Contrairement aux idées reçues (en tout cas pour certains d'entre nous), les MCU STM32 n'ont pas besoin d'oscillateur externe pour fonctionner! Ils en ont un intégré. Sa fréquence est fixe, mais avec une cascade de PLL, il est possible de trouver la cadence d'horloge voulue. Cependant, cette horloge, appelée HSI, perd en précision avec la variation de température et de tension. J'ai lu sur un forum que la fréquence peut varier jusqu'à 10 à 15%! Certaines applications, comme une connexion USB fiable, requièrent une fréquence parfaite. C'est à ce moment que l'on a besoin d'un oscillateur externe. Ces derniers sont extrêmement précis, robustes et fiables. La valeur de l'oscillateur externe, ou HSE ou LSE (High speed, Low speed), doit être comprise dans une certaine fourchette, qui nous sera indiquée par STM32CubeIDE. Bien évidemment, dans la datasheet également. | ||
+ | |||
+ | Un oscillateur à cristal possède une capacité de charge. De plus, l'oscillateur doit être entouré de condensateur de faible valeur pour éviter que l'oscillateur démarre à une fréquence plus faible que sa fréquence de résonnance. Une résistance permet de réduire la puissance consommée par le cristal. Cependant, l'absence de cette résistance ne pose généralement pas de problème. En suivant l'application note [https://www.st.com/content/ccc/resource/technical/document/application_note/c6/eb/5e/11/e3/69/43/eb/CD00221665.pdf/files/CD00221665.pdf/jcr:content/translations/en.CD00221665.pdf AN2867], vous pourrez calculer la valeur de ces capacités en fonction de celle du cristal et de sa fréquence. Il est possible d'approximer ces valeurs. D'après [https://www.st.com/content/ccc/resource/technical/document/application_note/6c/a3/24/49/a5/d4/4a/db/CD00164185.pdf/files/CD00164185.pdf/jcr:content/translations/en.CD00164185.pdf AN2586], pour un HSE, il est conseillé de trouver un cristal compris entre 5pF et 25pF. Une approximation des condensateurs CL1 et CL2 donne une valeur de 10pF. Il est mentionné que pour un LSE, il ne faut pas utiliser de cristal à 12.5pF. Les broches OSC_IN et OSC_OUT sont généralement les 5 et 6 du MCU. | ||
+ | |||
+ | [[Fichier:Oscillator_stm32.png|x300px]] | ||
+ | |||
+ | L'oscillateur ne doit surtout pas être sujet à des perturbations électriques. Des précautions doivent être prises lors du routage et seront décrites plus tard. | ||
+ | |||
===Debug et flashage=== | ===Debug et flashage=== | ||
(boot) | (boot) |
Version du 22 septembre 2019 à 10:31
Introduction
Dans la phase de prototypage, il est commun d'utiliser des cartes de développement telles que STM32 Nucleo ou Arduino Uno. Une solution qui permet au développeur de simplement connecter la carte à un ordinateur et de téléverser le code. Les éléments externes sont reliés par des connecteurs de type "header", et le tour est joué. Au bout d'un certain temps, cette solution est affinée, et la majorité des pins ne sont plus réassignées à de nouvelles fonctions. Il peut aussi arriver que la quasi-totalité des broches soit utilisée. À moins de scotcher les fils à la carte, il arrive aussi que ces derniers se déconnectent par mégarde. C'est en général à ce moment que l'on se dit "pourquoi ne pas créer un PCB qui regroupe mes éléments externes et le microcontrôleur?". En effet, cette alternative permettrait de réduire le nombre de fils, compacter l'électronique et fiabiliser le reste de la connectique. Mais des questions suivent cette idée: comment faire? Par où commencer? Comment je vais programmer ma carte? Comment je vais souder les composants?
Dans ce tutoriel, j'aborde ces questions auxquelles j'ai répondu par ma propre expérience. Je parlerai des outils de conceptions, de la fabrication de la carte, du choix des composants, des outils de programmation, enfin, tous les éléments nécessaires pour réaliser son PCB avec STM32 embarqué. Le tutoriel suit l'ordre chronologique des étapes que j'ai suivi.
Vous êtes prêts? C'est parti.
Avant de commencer
Dans ce tutoriel, je vais présenter l'outil de développement logiciel STM32CubeIDE, car à mon gout, c'est l'outil le mieux adapter pour travailler avec les microcontrôleurs STM32. Concernant la conception de cartes électroniques, il existe une multitude de logiciels. Ici, je n'en aborde pas un spécifiquement. Je décrirai simplement le processus de conception. Libre à vous de choisir le logiciel qui vous convient le mieux. Je ferrai une liste de logiciels que je connais avec une bonne réputation. (Des pages sont en cours de rédaction sur l'utilisation de logiciels tels qu'Altium et STM32CubeIDE).
Il faut garder à l’esprit qu'il existe probablement des méthodes plus performantes pour la réalisation d'un tel projet. Mon tutoriel offre un point de départ! C'est de cette manière que je me suis lancé dans la fabrication de PCB avec microcontrôleur donnant un résultat satisfaisant. Sur la fin de la rédaction de ce tutoriel, je tenterai de faire un renseignement un peu plus poussé sur les sujets dont je n'ai pas donné d'information exhaustive. Particulièrement sur la partie parlant de la soudure portant sur le choix de l'étain et du flux. Il est aussi possible que j'ai oublié de mentionner des règles et bonnes pratiques de routage. Cependant, les informations qui suivent devraient être suffisantes pour se lancer dans la conception d'un premier PCB avec STM32.
Beaucoup d'informations complémentaire et diverses précisions sur l'implémentation d'un microprocesseur STM32 sur une carte embarquée sont données dans les "Application Notes" fournies par STMicroelectronics.
Ceci mit de côté, commençons!
Déroulement de l'opération
Dans un premier temps, on réalise le schéma technique de la carte électronique. Dans cette étape, on s'assure que toutes les fonctions que l'on souhaite incorporer sont présentes et prêtes à marcher. Puis vient l'étape du routage. Avant de passer à cette étape, il est conseillé de s'assurer que l'étape de la schématisation est terminée (mis à part des modifications mineures). Imaginez avoir routé tout le PCB, et vous vous apercevez que vous avez pris le mauvais microcontrôleur... Une fois le routage terminé, il faut également passer du temps à vérifier que toutes les pistes sont connectées au bon endroit et qu'il n'y a pas de courts-circuits ou de conflits mécaniques. Faire fabriquer le PCB prend du temps. Il serait dommage d'attendre pour rien. Après vérification, il est l'heure de commander le PCB et les composants. Une fois arrivés, il faut les assembler. Il est conseillé de suivre un certain ordre logique de soudure, en faisant, pourquoi pas, des tests de temps à autre pour vérifier que les composants fonctionnent. Quand tout est prêt et semble ne pas avoir grillé, on passe à la programmation.
Schématiser le projet
Schéma bloc
Commencer par dessiner un schéma bloc de la carte électronique souhaitée est une bonne pratique. Cela permet de repérer quels éléments doivent être interconnectés, avoir une idée des tensions d'alimentation qu'il faudra (puissance et logique) et de la disposition globale des composants sur le PCB. Ce dernier point sera très apprécié quand ce sera l'étape de routage. En plus, pour la documentation, c'est un grand plus, car simple à lire.
Choisir son microcontrôleur
Tout dépend de l'application que l'on souhaite. STMicroelectronics propose plusieurs gammes de microcontrôleurs. Sur l'image ci-dessous, on retrouve les ultra-low-power adaptées à des solutions d'appareils connectés qui doivent économiser peut d’énergie avec un compromis sur la performance. Les MCU mainstream sont les plus rependus et sont un bon compromis entre la performance et l'économie d'énergie. Et les High-performance, qui ne se penchent pas trop sur l'aspect énergie.
Ma recommandation est de choisir un microcontrôleur que l'on peut trouver dans les cartes de développement Nucleo ou Discovery. Comme ça, si jamais il y a besoin de faire des tests supplémentaires, il suffit de prendre la carte associée au MCU et continuer son code sans perdre de temps sur les problèmes de compatibilités. En plus de ça, c'est une bonne idée d'utiliser les MCU supportés par Mbed. Mbed étant une plateforme en ligne permettant de développer des solutions rapidement en utilisant leurs libraires assez haut niveau. Certains d'entre nous ont probablement commencé par cette plateforme pour programmer les Nucleo, et ont une bonne partie de leur code dessus. Il faut faciliter la transition à STM32CubeIDE qui est un logiciel offrant beaucoup plus de liberté tout en laissant la possibilité de travailler avec Mbed (ce que je ne recommande pas :p ). La liste des microcontrôleurs embarqués sur une Nucleo et supportés par Mbed sont ici. Et simplement la liste des microcontrôleurs sur carte de développement là.
STMicroelectronics propose l'outil ST MCU finder qui regroupe l'ensemble des microcontrôleurs STM (32 et 8). Cet outil est inclus dans STM32CubeIDE. Lorsqu'on commence un nouveau projet, la même interface apparaît. Cet outil permet de filtrer les microcontrôleurs par fonctions, mémoire, vitesses, nombre de broches et d'autres paramètres. Il affiche même si le MCU est utilisé dans une carte de développement!
Vous avez trouvé votre bonheur? Passons à la suite!
Schéma technique
Avant de se lancer dans le dessin technique, il est l'heure de faire le choix du logiciel de conception électronique. Bien qu'il arrive que les fichiers des schémas techniques soient compatibles entre certains logiciels, il est préférable, et plus logique, de rester sur un logiciel.
KiCad est un logiciel gratuit et assez rependu. Altium est utilisé par beaucoup de grandes entreprises. Eagle est le logiciel le plus utilisé, et, à mon impression, celui qui trouvera toujours une place dans le cœur d'un concepteur de cartes. Il existe encore la solution en ligne EasyEda, en partenariat avec le fabricant de PCB JLCPCB et un grand revendeur de composants LCSC (également partenaire de JLCPCB). L'avantage est donc que l'on est en connaissance des composants disponibles ainsi que de leur modèle.
Librairies de composants et leurs formes
Vient donc la question importante des librairies de composants. Lorsqu'on dessine le schéma technique de la carte, on ne trace pas les composants comme si c'était une image, comme on le ferrait dans Paint. On utilise les librairies qui répertorient les composants, en leur associant un symbole, une empreinte ("footprint" en anglais) et un modèle 3D. Les trois sont importants. Le symbole permet de schématiser le circuit (la première étape). L'empreinte représente la projection du composant sur le PCB, et donc les "tampons" sur lesquels se soudent les broches des composants. Et le modèle 3D permet de se rendre compte de la place que prendra le composant. C'est surtout utile lorsque l'on intègre des connecteurs à la plaque, ou plus encore, lorsque l'on fait un assemblage de PCB.
Il existe plusieurs "packages" de composants. Ils sont séparés en deux grandes familles les "through hole" et les "surface mounted" (généralement appelés "surface mounted devices" SMD). Les TH sont plus grands, souvent beaucoup plus grands, que les SMD. C'est une des raisons pour laquelle les industriels privilégient les SMD aux TH. (Une autre des raisons étant que sur la ligne d'assemblage, il est plus simple de souder les SMD). C'est donc pour cela que les composants SMD sont généralement moins chers, de par leur quantité, et que la version TH n'existe pas toujours. Il faut donc s'habituer à travailler avec les SMD!
Les packages sont standardisés. Souvent, un package est associé à une fonction de par ses propriétés mécaniques comme la dissipation thermique. Ci-dessous, une liste non exhaustive de packages et une généralisation de leur application: - DIP, c'est les circuits intégrés utilisés lors de prototypages sur breadboard - TO sont souvent utilisés pour les transistors MOSFET de puissance par exemple - Les régulateurs de tension prennent la forme des SOT - Les circuits intégrés en SOIC etc. Une liste complète des packages peut être trouvée sur la page wiki.
Pour les composants passifs comme les résistances et les condensateurs, deux nombres juxtaposés indiquent leur longueur et largeur. Si la puissance ne dépasse pas le 1/8 de Watt, personnellement, je recommande de travailler avec les 0805. Au-dessus, les composants prennent beaucoup de place. En dessous ce n’est pas évident de les souder. Attention aux 0402 ou moins, il est facile des les inhaler, et ce n’est pas cool!
Petite astuce, il existe des règles PCB avec les footprints les plus communs. Très pratiques, abordables et élégantes, c'est un outil à avoir lors des premières conceptions de carte. Elle va bien aider quand il faut se rendre compte de la dimension des composants!
Je décris un peu plus bas, comment trouver des librairies de composants.
Alimentation
Les composants que vous allez utiliser demandent des tensions d'alimentation différentes. De manière générale, elles seront de 5V ou 3.3V, mais il est possible que vous ayez choisi des composants fonctionnant sur d'autres tensions. Il est bien plus pratique d'avoir seulement une source d'alimentation reliée à votre carte électronique. C'est pour cette raison, que vous serez amenés à intégrer des régulateurs de tension. En fonction de la tension externe que vous avez à disposition, il n'est pas exclu que vous ayez besoin d'intégrer un circuit boost pour augmenter la tension. Cependant, il est plus simple de se débrouiller pour avoir une source d'alimentation dont la tension est supérieure à la plus grande requise, pour ensuite, par le biais de régulateurs de tension, l'abaisser. Gardez en tête, que certains régulateurs ont un drop down voltage de 1V. C'est le cas pour le régulateur 5V de la Nucleo, contrairement au régulateur 3.3V qui n'a quasiment pas de chute de tension.
Les microcontrôleurs STM32 fonctionnent sur du 3.3V. Attention! Ne raccordez pas le VDD sur du 5V, cela risque d’endommager le composant. Cependant, les GPIO tolèrent le 5V. Les broches VDD doivent être reliées à 3.3V et VSS à la masse du circuit. Il est de même pour VDDA et VSSA. Ces dernières sont l'alimentation du (des) convertisseur(s) analogique numérique. Si le MCU possède des broches VBATx et VCAPx, alors VBATx doivent être reliées à 3.3V et VCAPx, ATTENTION : en série avec un condensateur à la masse. Pas directement à la masse. La capacitance de ce condensateur doit être de 2.2uF.
Nous nous inspirerons du circuit d'alimentation de la STM32 Nucelo.
Si vous alimentez votre circuit par une tension de 5V, le circuit de droite ne sert pas. Autrement, le 5V est généré par U3 LD1117S50TR. Comme dit précédemment, ce régulateur a une chute de tension de 1V, ce qui veut dire que si le circuit n'est pas alimenté par une tension de plus de 6V, vous n'aurez pas 5V en sortie du LD1117S50TR mais un peu moins. Le LD39050PU33R fourni un 3.3V très stable et n'a quasiment pas de voltage drop. Même si vous utilisez déjà une tension 3.3V en entrée, c'est une bonne idée de placer ce régulateur. S'il y a des variations de tension dans votre source d'alimentation, le régulateur la limitera à 3.3V. Le convertisseur 5V peut fournir 800mA et le 3.3V 500mA. Si vous ne comptez pas alimenter grand-chose d'autre avec ces régulateurs, cette combinaison convient. Autrement, si le courant souhaité est bien plus grand (quelques ampères), avoir un deuxième circuit fournissant le 5V et 3.3V de "puissance" séparément du LD39050PU33R et LD1117S50TR qui fournissent la tension "logique" évite des perturbations sur cette dernière.
Dans tous les cas, il est recommandé d'avoir une protection de la source, avec une diode ne laissant pas remonter un pic de courant dans l'alimentation globale. Et dans le paragraphe suivant, une explication de l'importance des condensateurs présents sur le circuit d'alimentation sera apportée.
Protections
Comme dit précédemment, une protection importante est celle de la source d'alimentation. Il est recommandé de toujours mettre une diode (Schottky car mieux adapté qu'une simple diode PN) entre la source d'alimentation et le circuit. Par exemple, si l'on utilise le 5V d'une connexion USB, cela évitera de griller votre prise en cas de surtension.
Une protection est une limitation de courant. Une solution est d'utiliser un fusible. Elle est adaptée pour les gros courant en général. Une autre façon de faire, serait d'intégrer une détection de courant avec un relais qui s'ouvre si le courant est trop grand. Une résistance de Shunt, de par la chute de tension, indiquerait le courant passant à travers. Avec un pont diviseur de tension, on se cale sur la chute de tension équivalente au courant que l'on souhaite détecter. Les deux valeurs sont reliées à un AOP qui les compare. La sortie est reliée au relai. Attention cependant aux caractéristiques du relais, car ils ne sont pas faits pour des courants infinis! Et attention à choisir une résistance de très faible valeur et de grande puissance pour éviter de la griller. Voici un tel circuit :
Il est recommander d'isoler le microcontrôleur d'éléments de puissance par un optocoupleur. Un autre composant peut être utilisé qui est un buffer. Son avantage est qu'il peut recevoir 3.3V en entrée (la tension de sorties des GPIO d'un STM32 par défaut), et sortir du 5V (s'il est alimenté de la sorte). Ainsi, si un pic de tension remonte dans la partie logique, le MCU est protégé par une barrière.
Finalement, une dernière protection sont les capacités de découplages, dont je parle dans une autre partie.
Oscillateur externe
Contrairement aux idées reçues (en tout cas pour certains d'entre nous), les MCU STM32 n'ont pas besoin d'oscillateur externe pour fonctionner! Ils en ont un intégré. Sa fréquence est fixe, mais avec une cascade de PLL, il est possible de trouver la cadence d'horloge voulue. Cependant, cette horloge, appelée HSI, perd en précision avec la variation de température et de tension. J'ai lu sur un forum que la fréquence peut varier jusqu'à 10 à 15%! Certaines applications, comme une connexion USB fiable, requièrent une fréquence parfaite. C'est à ce moment que l'on a besoin d'un oscillateur externe. Ces derniers sont extrêmement précis, robustes et fiables. La valeur de l'oscillateur externe, ou HSE ou LSE (High speed, Low speed), doit être comprise dans une certaine fourchette, qui nous sera indiquée par STM32CubeIDE. Bien évidemment, dans la datasheet également.
Un oscillateur à cristal possède une capacité de charge. De plus, l'oscillateur doit être entouré de condensateur de faible valeur pour éviter que l'oscillateur démarre à une fréquence plus faible que sa fréquence de résonnance. Une résistance permet de réduire la puissance consommée par le cristal. Cependant, l'absence de cette résistance ne pose généralement pas de problème. En suivant l'application note AN2867, vous pourrez calculer la valeur de ces capacités en fonction de celle du cristal et de sa fréquence. Il est possible d'approximer ces valeurs. D'après AN2586, pour un HSE, il est conseillé de trouver un cristal compris entre 5pF et 25pF. Une approximation des condensateurs CL1 et CL2 donne une valeur de 10pF. Il est mentionné que pour un LSE, il ne faut pas utiliser de cristal à 12.5pF. Les broches OSC_IN et OSC_OUT sont généralement les 5 et 6 du MCU.
L'oscillateur ne doit surtout pas être sujet à des perturbations électriques. Des précautions doivent être prises lors du routage et seront décrites plus tard.
Debug et flashage
(boot)
Reset
Capacités de découplage
(VDDA)
Pull down et pull up
Composants "barrière"
(aspect protection et tension 3.3V=>5V)