Différences entre versions de « Tutoriels/Créer son PCB avec STM32 »

De Polybot Grenoble
Sauter à la navigation Sauter à la recherche
 
(27 versions intermédiaires par le même utilisateur non affichées)
Ligne 11 : Ligne 11 :
 
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).
 
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.
+
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!
 
Ceci mit de côté, commençons!
Ligne 33 : Ligne 35 :
  
 
==Schéma technique==
 
==Schéma technique==
(mentionner les librairies)
+
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.
 +
 
 +
[http://kicad-pcb.org/ KiCad] est un logiciel gratuit et assez rependu. [https://www.altium.com/ Altium] est utilisé par beaucoup de grandes entreprises. [https://www.autodesk.com/products/eagle/overview 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 [https://easyeda.com/ 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!
 +
 
 +
[[Fichier:TH_vs_SMD.png|x200px]]
 +
 
 +
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 [https://en.wikipedia.org/wiki/List_of_integrated_circuit_packaging_types 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!
 +
 
 +
[[Fichier:SMD_resistors_size_comparison.jpg|x200px]]
 +
 
 +
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!
 +
 
 +
[[Fichier:PCB_rulers.jpeg|x200px]]
 +
 
 +
Je décris un peu plus bas, comment trouver des librairies de composants.
 +
 
 
===Alimentation===
 
===Alimentation===
(VCAP)
+
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.
 +
 
 +
[[Fichier:5v_nucleo.png|x400px]]
 +
[[Fichier:33v_nucleo.png|x400px]]
 +
 
 +
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===
 
===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 :
 +
 +
[[Fichier:Circuit_protection.jpg|x300px]]
 +
 +
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.
 +
 +
Encore une protection est un "microcontroler supervisor". Il permet au circuit d'alimentation de se stabiliser avant que le microcontrôleur commence à fonctionner. Ce dernier possède une broche nRST qui le reset lorsque la broche en question est reliée à la masse. Un "microcontroler supervisor" ajoute un délai entre le moment où la carte est alimentée, et le moment où ce composant envoi 3.3V sur nRST. Ce délais n'est pas obligatoire, mais il permet de s'assurer que le microcontrôleur ne commence à exécuter son programme et redémarre accidentellement suite à une variation de tension.
 +
 +
Finalement, une dernière protection sont les capacités de découplages, dont je parle dans une autre partie.
 +
 
===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)
+
Très bien, nous avons notre microcontrôleur et notre circuit. Mais comment fait on pour le programmer? Et bien il y a plusieurs solutions.
 +
 
 +
Les microcontrôleurs STM32 ont une interface de débogage appelée SWD (serial wire debug). Reliée par un programmateur ST-Link, il est possible non seulement de flasher son code sur la puce, mais aussi de le déboguer. C'est à dire exécuter les instructions ligne par ligne, lire et modifier les registres à la volée, pareil pour les variables. Bien plus pratique et moins gourmande en ressources que la technique du printf. J'aborderai dans une autre partie utilisation de ST-Link à cette fin, mais ce qu'il faut retenir, c'est qu'il n'y a pas besoin d'intégrer ST-Link sur votre circuit! L'interface SWD se présente sous la forme de deux broches, SWDIO et SWDCLK. Bien entendu, il faut également relier les masses du programmateur et de votre circuit. Si le circuit n'est pas alimenté, le programmateur peut fournir du 5V et 3.3V. Une autre chose est la broche nRST. Elle est en pull-up ce qui veut dire qu'en la reliant à la masse, le microcontrôleur est Reset. Cette broche doit être également prise en compte. A ma compréhension, lors du premier interfaçage avec le programmateur, le microcontrôleur ne sait pas qu'à tout moment, ST-Link peut invoquer le mode débogue. nRST permet au programmateur d'intercepter le microcontrôleur. Dans votre code, vous pouvez attribuer les broches SWDIO SWDCLK comme étant exclusivement réservées au débogue. Ainsi, vous n'aurait plus besoin du nRST. ST-Link pourra prendre le dessus à tout moment.
 +
 
 +
D'après [https://www.st.com/content/ccc/resource/technical/document/application_note/group0/3d/a5/0e/30/76/51/45/58/DM00354244/files/DM00354244.pdf/jcr:content/translations/en.DM00354244.pdf AN4989], SWDIO doit avoir un pull-up et le SWCLK un pull-down.
 +
 
 +
Une fois que vous avez terminer votre code, et que vous souhaiter flasher plusieurs carte avec votre fichier binaire, d'autres solutions plus pratiques que le ST-Link existent. Les microcontrôleurs STM32 ont un bootloader vous permettant de flasher la puce. Ce mode est accessible en appliquant une combinaison de '0' ou '1' sur les broches BOOT0 et BOOT1 (BOOT1 n'est pas présente sur tous les MCU). [https://www.st.com/content/ccc/resource/technical/document/application_note/b9/9b/16/3a/12/1e/40/0c/CD00167594.pdf/files/CD00167594.pdf/jcr:content/translations/en.CD00167594.pdf AN2606] donne les différents mode du bootloader de tous les STM32. Le bootloader peut être entrée par différentes interfaces : SPI, CAN, Série, I2C et d'autres. Mais la plus intéressante est l'interface USB. Pas tous les microcontrôleurs STM32 possèdent cette option. Pour ceux qui l'ont, cela veut dire qu'il vous suffira de brancher un câble USB à votre ordinateur et le flashage peut commencer! Donc à garder en tête. Ne pas hésiter à intégrer un jumper pour les pins BOOT0 et BOOT1 et une prise USB (micro, mini, normale, enfin n'importe quel format). Attention, cela ne remplace pas le SWD.
 +
 
 +
Attention! un pull-down doit être placé sur les broches BOOT0 et BOOT1!!! Sinon le microcontrôleur démarrera pas systématiquement, et rentrera en mode boot en fonction des perturbations sur la broche!
 +
 
 
===Reset===
 
===Reset===
 +
Le microcontrôleur possède une broche nRST permettant de relancer le programme contenu dans la flash de la puce lorsqu'un '0' est appliqué (Reset). Afin d'éviter un redémarrage intempestif, cette broche doit être reliée au 3.3V par une résistance en guise de pull-up. De plus, il est pratique d'avoir une façon de relancer le programme, par exemple, avec un bouton. Cependant, les boutons sont sujets au rebond, ce qui se traduit par quelques oscillations entre l'état fermé et ouvert. Cela implique donc que le programme risque de se relancer plusieurs fois, ce qui peut être indésirable. Par conséquent, il faut ajouter un condensateur lissant le signal. Une capacité de 100nF devrait faire l'affaire.
 +
 +
[[Fichier:Nrst.png|x200px]]
 +
 
===Capacités de découplage===
 
===Capacités de découplage===
(VDDA)
+
Certains circuits intégrés, et c'est le cas pour les STM32, sont sensibles aux variations de tension. Sans y remédier, il est possible que le microcontrôleur redémarre intempestivement à cause d'une chute de tension. Afin de pallier à ce problème, il est primordial de placer des capacités de découplage près de l'alimentation de chaque circuit intégré. Ces capacités vont emmagasiner de l’énergie et permettent ainsi de compenser une chute de tension. La valeur typique est comprise entre 10nF et 100nF. Dans la partie alimentation, les régulateurs de tension sont également entourés de capacités de découplage. Ces dernières sont on une valeur plus grande. Les valeurs des X5R varient moins en fonction de la température. Lorsque l'on utilise des capacités de découplage sur des circuits où des courants importants circulent, des capacités plus larges sont sollicitées.
 +
 
 +
Pour les condensateurs de 10nF à 100nF pour le découplage, utilisez des condensateurs céramiques. Pour ceux de plus de 1uF, les condensateurs Tantale devraient convenir. Les condensateurs chimiques existent également en SMD et peuvent être utilisés sur des circuits de puissance
 +
 
 +
[[Fichier:Decoupling_capacitors.png|x300px]]
 +
 
 +
L'alimentation du ou des convertisseur(s) analogiques numériques se voit ajouter une faible inductance en série avec le 3.3V à la place d'un condensateur. Cette inductance réduit les perturbations liées aux variations de courant. Elle prend la forme d'un composant en ferrite.
 +
 
 
===Pull down et pull up===
 
===Pull down et pull up===
===Composants "barrière"===
+
Les résistances de pull down et pull up permettent de garder une broche d'un circuit intégré à l'état, respectivement, bas et haut. Elles sont très importantes, car elles évitent un comportement inattendu dans le cas où des perturbations agissent sur la broche. Sur les GPIO des STM32, il est possible de paramétrer la broche directement en mode pull up ou pull down. Pour les autres circuits intégrés, ce n'est pas forcement le cas, et il est impératif d'en utiliser. Imaginez si la broche de contrôle de votre pont-H reçoit du bruit en entrée, votre moteur risque de faire n'importe quoi! Un pull-down s'impose. Les valeurs typiques des pull-up et pull-down sont de 1kOhm a 10kOhm.
(aspect protection et tension 3.3V=>5V)
+
 
===Les broches===
+
[[Fichier:Pullup_pulldown.jpg|xp300x]]
 +
 
 +
===Astuces===
 +
Pour faciliter le débogage, il est sage de placer des LED pour indiquer le bon fonctionnement de l'alimentation, ou votre programme. Attention cependant à ne pas en abuser. Il ne faut pas oublier que le MCU ne peut pas fournir un courant infini, et il est dommage d'utiliser trop de courant fourni par l'alimentation. De plus, les LED ne doivent surtout pas être misent en série. En effet, si l'une d'elles claque, vous aurez un circuit ouvert, et plus rien ne fonctionnera. Il faut les placer en parallèle de votre ligne, avec une résistance pour limiter le courant. Pour la valeur de la LED rappelez vous simplement que U=RI. En fonction de votre LED vous calculerez la résistance dont vous aurez besoin, sachant que les GPIO de STM32 fournissent du 3.3V. (Pour les autres tensions, il faut aviser).
  
 
=Routage et conception de son PCB=
 
=Routage et conception de son PCB=
 
==Quelques principes à respecter==
 
==Quelques principes à respecter==
 
===Prendre en compte les moyens technologiques de fabrication===
 
===Prendre en compte les moyens technologiques de fabrication===
===Largeur des pistes===
+
Il semble évident qu'il est impossible de fabriquer un circuit de n'importe quelle dimension. La technologie de production définie les limites en largeur de piste, leur épaisseur, la distance entre deux pistes, la taille maximale de la carte, etc. C'est pour cela qu'avant de commencer le routage de votre PCB, il est impératif de choisir le moyen de fabrication de la carte. Il est possible de développer des PCB chez soi par le moyen de l'insolation UV, ou l'utilisation d'une CNC, mais il est difficile, voire impossible, d'atteindre la précision et la qualité d'un PCB fabriqué par un industriel. (Un article est en cours de rédaction sur la production de carte électronique chez soi). Notamment lorsqu'il s'agit d'atteindre une résolution de 0.1mm pour l'implémentation d'un microcontrôleur.
 +
 
 +
Malheureusement, il n'existe pas d'entreprise de fabrication de PCB à petite échelle à faible coût en France. Pour éviter de se ruiner, il faut donc faire appel à un grand fabricant de PCB chinois, tel que JLCPCB. En se rendant sur leur [https://jlcpcb.com/ site] et en navigant vers [https://jlcpcb.com/capabilities/Capabilities capabilities], on tombe sur les moyens technologiques de fabrication.
 +
 
 +
La conception de PCB implique l'utilisation de dimensions. Elles sont souvent données en mm (millimètres) et mil (milli-inch ou thousand of an inch, un millième de pouce). Malheureusement, les fabricants de composants utilisent les deux unités, et il vous faudra activement jongler entre les deux. (Pour passer de mm à mil, il faut multiplier mm  environ par 40)
 +
 
 +
En plus de l'assistance au routage avec l'indication des connexions les plus roches non routées, votre logicielle de conception vous empêchera de faire n'importe quoi en lui indiquant des règles à respecter. Toutes les règles listées ci-dessous doivent être entrées dans le vérificateur de règles de conception dans votre logiciel avant le début du routage. Ainsi, vous n'aurez pas de surprises sur le prix lors de la commande de votre carte, ou le fabricant vous disant que votre design est impossible.
 +
 
 +
Il est plus judicieux de paramétrer le vérificateur de règles de votre logiciel de conception avec la largeur de piste la plus grande possible, en concordance avec la dimension de vos composants. Cela augmentera les chances que n'importe quel fabricant puisse le faire pour un prix faible.
 +
 
 +
- Couches (Layers) : assez explicite, c'est le nombre de couches que vous allez avoir sur votre PCB. Les fabricants facturent en général le même prix pour des cartes à 1 et 2 couches. Le prix augmente lorsqu'il s'agit de PCB à +2 couches. Dans ce tutoriel, nous n'aborderons pas les PCB +2 couches, car il y a des précautions différentes à prendre.
 +
 
 +
- Matière (Material) : il s'agit du matériau de support. Certains fabricants proposent des cartes flexibles, métalliques, transparentes, etc. La matière classique est le FR-4 et la choisir gardera le prix de la commande bas.
 +
 
 +
- Dimensions maximales : les dimensions  maximales en largeur et longueur de la carte.
 +
 
 +
- Plage de tolérance sur le contour (Dimension Tolerance Outline) : la machine de découpe du PCB possède une erreur. Il faut le prendre en compte pour éviter de placer une piste trop près du bord, dans quel cas, la machine risque de l’abîmer.
 +
 
 +
- Masque (solder mask) : c'est la couleur de votre PCB. Dans les dernières étapes de la fabrication votre carte, le fabricant applique un filme de protection sur les pistes. Cela permet de les isoler de faux contacts et le protéger de la corrosion.
 +
 
 +
- Épaisseur (thickness) : c'est l'épaisseur de votre plaque. L'épaisseur classique est 1.6mm. Elle est également sujette à une incertitude (thickness tolerance).
 +
 
 +
- Épaisseur de cuivre interne et externe (finished outer and inner layer copper) : c'est l'épaisseur de vos pistes (en hauteur). La valeur classique est 35um. C'est une valeur importante à prendre en compte en fonction de la puissance que vous allez faire passer dans vos pistes ainsi que leur largeur maximale. Si vous n'avez pas beaucoup de place et que vous avez besoin de faire passer de gros courants, pensez à commander des pistes plus épaisses dans la mesure de la disponibilité et du prix.
 +
 
 +
- Taille de piste minimale (min. trace) : la largeur minimale de piste. Le fabricant ne peut pas fabriquer des PCB avec des largeurs de piste infiniment petites. Il y a donc une dimension minimale. Les "bons" fabricants proposent pour la difficulté classique 3.5mil ou 0.2mm.
 +
 
 +
- Espacement entre les pistes (min. spacing) : la distance entre deux pistes. Si vous souhaitez implémenter une puce avec des pattes "serrées", telle qu'un microcontrôleur (0.2mm entre chaque broche), il faut être sûr que le fabricant puisse répondre à votre besoin. En général, l’espacement minimal de difficulté classique est de 3.5mil ou 0.2mm.
 +
 
 +
- Diamètre interne minimal des via (Min. Via hole size) : si vous travaillez sur une carte double face, vous allez être amenés à placer des vias. Ce sont des passages entre deux faces, constitués d'un trou dont les parois sont recouvertes d'un conducteur. C'est pour cette raison que le fabricant ne peut pas faire un perçage infiniment petit, en plus de la fragilité de la mèche. En général la taille minimale des via est 0,2mm.
 +
 
 +
- Diamètre externe minimal des via (Min. Via diameter) : de la même manière que les pistes ont une taille minimale, le contour de votre via aura une épaisseur minimale. Faites attention, car les règles de routage des vias ne sont pas le diamètre du trou et l'épaisseur du contour, mais le diamètre du trou et le diamètre du via. En général le diamètre externe est de 0.45mm.
 +
 
 +
- Distance entre le via et la piste (Via To Trace) : étant donné que le processus technologique de la formation des pistes et celui de la constitution d'un via n'est pas le même, la distance minimale entre un via et une piste n'est pas la même que la distance minimale entre deux pistes. En général est de plus de 5mil.
 +
 
 +
- Dimension de perçage (Drill Hole Size) : la seule différence entre un perçage simple et un via, c'est que le via reliera les deux faces, alors que le perçage simple est juste un trou. Il est sujet à la même dimension minimale que les vias. Le fabricant ne peut pas avoir de foret de 1m de diamètre. Il y a donc une contrainte de la dimension maximale de perçage.
 +
 
 +
- Épaisseur de la piste autour du perçage (Annular Ring) : à la différence des vias, les perçages simples sont définis par le diamètre du trou et l'épaisseur de son contour.
 +
 
 +
- Résolution des caractères (Character Width and Height) : il est possible d'appliquer des annotations sur les PCB. Elles sont également sujettes à une dimension maximale en hauteur et en largeur.
 +
 
 +
===Largeur et longueur des pistes===
 +
(courant)
 +
(exposer un bout en mettant pas le masque)
 +
(résistance qui augmente avec la longueur)
 +
 
 
===Eviter les angles droits et aigus===
 
===Eviter les angles droits et aigus===
 
===Dissipation thermique===
 
===Dissipation thermique===
Ligne 57 : Ligne 185 :
 
===Séparer la partie puissance et logique===
 
===Séparer la partie puissance et logique===
 
===Chemin du retour===
 
===Chemin du retour===
 +
(parler de pair différentielle)
 +
 
===Oscillateur===
 
===Oscillateur===
  

Version actuelle datée du 2 octobre 2019 à 13:34

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 .

MCU series STM32.jpeg

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!

TH vs SMD.png

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!

SMD resistors size comparison.jpg

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!

PCB rulers.jpeg

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.

5v nucleo.png 33v nucleo.png

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 :

Circuit protection.jpg

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.

Encore une protection est un "microcontroler supervisor". Il permet au circuit d'alimentation de se stabiliser avant que le microcontrôleur commence à fonctionner. Ce dernier possède une broche nRST qui le reset lorsque la broche en question est reliée à la masse. Un "microcontroler supervisor" ajoute un délai entre le moment où la carte est alimentée, et le moment où ce composant envoi 3.3V sur nRST. Ce délais n'est pas obligatoire, mais il permet de s'assurer que le microcontrôleur ne commence à exécuter son programme et redémarre accidentellement suite à une variation de tension.

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.

Oscillator stm32.png

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

Très bien, nous avons notre microcontrôleur et notre circuit. Mais comment fait on pour le programmer? Et bien il y a plusieurs solutions.

Les microcontrôleurs STM32 ont une interface de débogage appelée SWD (serial wire debug). Reliée par un programmateur ST-Link, il est possible non seulement de flasher son code sur la puce, mais aussi de le déboguer. C'est à dire exécuter les instructions ligne par ligne, lire et modifier les registres à la volée, pareil pour les variables. Bien plus pratique et moins gourmande en ressources que la technique du printf. J'aborderai dans une autre partie utilisation de ST-Link à cette fin, mais ce qu'il faut retenir, c'est qu'il n'y a pas besoin d'intégrer ST-Link sur votre circuit! L'interface SWD se présente sous la forme de deux broches, SWDIO et SWDCLK. Bien entendu, il faut également relier les masses du programmateur et de votre circuit. Si le circuit n'est pas alimenté, le programmateur peut fournir du 5V et 3.3V. Une autre chose est la broche nRST. Elle est en pull-up ce qui veut dire qu'en la reliant à la masse, le microcontrôleur est Reset. Cette broche doit être également prise en compte. A ma compréhension, lors du premier interfaçage avec le programmateur, le microcontrôleur ne sait pas qu'à tout moment, ST-Link peut invoquer le mode débogue. nRST permet au programmateur d'intercepter le microcontrôleur. Dans votre code, vous pouvez attribuer les broches SWDIO SWDCLK comme étant exclusivement réservées au débogue. Ainsi, vous n'aurait plus besoin du nRST. ST-Link pourra prendre le dessus à tout moment.

D'après AN4989, SWDIO doit avoir un pull-up et le SWCLK un pull-down.

Une fois que vous avez terminer votre code, et que vous souhaiter flasher plusieurs carte avec votre fichier binaire, d'autres solutions plus pratiques que le ST-Link existent. Les microcontrôleurs STM32 ont un bootloader vous permettant de flasher la puce. Ce mode est accessible en appliquant une combinaison de '0' ou '1' sur les broches BOOT0 et BOOT1 (BOOT1 n'est pas présente sur tous les MCU). AN2606 donne les différents mode du bootloader de tous les STM32. Le bootloader peut être entrée par différentes interfaces : SPI, CAN, Série, I2C et d'autres. Mais la plus intéressante est l'interface USB. Pas tous les microcontrôleurs STM32 possèdent cette option. Pour ceux qui l'ont, cela veut dire qu'il vous suffira de brancher un câble USB à votre ordinateur et le flashage peut commencer! Donc à garder en tête. Ne pas hésiter à intégrer un jumper pour les pins BOOT0 et BOOT1 et une prise USB (micro, mini, normale, enfin n'importe quel format). Attention, cela ne remplace pas le SWD.

Attention! un pull-down doit être placé sur les broches BOOT0 et BOOT1!!! Sinon le microcontrôleur démarrera pas systématiquement, et rentrera en mode boot en fonction des perturbations sur la broche!

Reset

Le microcontrôleur possède une broche nRST permettant de relancer le programme contenu dans la flash de la puce lorsqu'un '0' est appliqué (Reset). Afin d'éviter un redémarrage intempestif, cette broche doit être reliée au 3.3V par une résistance en guise de pull-up. De plus, il est pratique d'avoir une façon de relancer le programme, par exemple, avec un bouton. Cependant, les boutons sont sujets au rebond, ce qui se traduit par quelques oscillations entre l'état fermé et ouvert. Cela implique donc que le programme risque de se relancer plusieurs fois, ce qui peut être indésirable. Par conséquent, il faut ajouter un condensateur lissant le signal. Une capacité de 100nF devrait faire l'affaire.

Nrst.png

Capacités de découplage

Certains circuits intégrés, et c'est le cas pour les STM32, sont sensibles aux variations de tension. Sans y remédier, il est possible que le microcontrôleur redémarre intempestivement à cause d'une chute de tension. Afin de pallier à ce problème, il est primordial de placer des capacités de découplage près de l'alimentation de chaque circuit intégré. Ces capacités vont emmagasiner de l’énergie et permettent ainsi de compenser une chute de tension. La valeur typique est comprise entre 10nF et 100nF. Dans la partie alimentation, les régulateurs de tension sont également entourés de capacités de découplage. Ces dernières sont on une valeur plus grande. Les valeurs des X5R varient moins en fonction de la température. Lorsque l'on utilise des capacités de découplage sur des circuits où des courants importants circulent, des capacités plus larges sont sollicitées.

Pour les condensateurs de 10nF à 100nF pour le découplage, utilisez des condensateurs céramiques. Pour ceux de plus de 1uF, les condensateurs Tantale devraient convenir. Les condensateurs chimiques existent également en SMD et peuvent être utilisés sur des circuits de puissance

Decoupling capacitors.png

L'alimentation du ou des convertisseur(s) analogiques numériques se voit ajouter une faible inductance en série avec le 3.3V à la place d'un condensateur. Cette inductance réduit les perturbations liées aux variations de courant. Elle prend la forme d'un composant en ferrite.

Pull down et pull up

Les résistances de pull down et pull up permettent de garder une broche d'un circuit intégré à l'état, respectivement, bas et haut. Elles sont très importantes, car elles évitent un comportement inattendu dans le cas où des perturbations agissent sur la broche. Sur les GPIO des STM32, il est possible de paramétrer la broche directement en mode pull up ou pull down. Pour les autres circuits intégrés, ce n'est pas forcement le cas, et il est impératif d'en utiliser. Imaginez si la broche de contrôle de votre pont-H reçoit du bruit en entrée, votre moteur risque de faire n'importe quoi! Un pull-down s'impose. Les valeurs typiques des pull-up et pull-down sont de 1kOhm a 10kOhm.

xp300x

Astuces

Pour faciliter le débogage, il est sage de placer des LED pour indiquer le bon fonctionnement de l'alimentation, ou votre programme. Attention cependant à ne pas en abuser. Il ne faut pas oublier que le MCU ne peut pas fournir un courant infini, et il est dommage d'utiliser trop de courant fourni par l'alimentation. De plus, les LED ne doivent surtout pas être misent en série. En effet, si l'une d'elles claque, vous aurez un circuit ouvert, et plus rien ne fonctionnera. Il faut les placer en parallèle de votre ligne, avec une résistance pour limiter le courant. Pour la valeur de la LED rappelez vous simplement que U=RI. En fonction de votre LED vous calculerez la résistance dont vous aurez besoin, sachant que les GPIO de STM32 fournissent du 3.3V. (Pour les autres tensions, il faut aviser).

Routage et conception de son PCB

Quelques principes à respecter

Prendre en compte les moyens technologiques de fabrication

Il semble évident qu'il est impossible de fabriquer un circuit de n'importe quelle dimension. La technologie de production définie les limites en largeur de piste, leur épaisseur, la distance entre deux pistes, la taille maximale de la carte, etc. C'est pour cela qu'avant de commencer le routage de votre PCB, il est impératif de choisir le moyen de fabrication de la carte. Il est possible de développer des PCB chez soi par le moyen de l'insolation UV, ou l'utilisation d'une CNC, mais il est difficile, voire impossible, d'atteindre la précision et la qualité d'un PCB fabriqué par un industriel. (Un article est en cours de rédaction sur la production de carte électronique chez soi). Notamment lorsqu'il s'agit d'atteindre une résolution de 0.1mm pour l'implémentation d'un microcontrôleur.

Malheureusement, il n'existe pas d'entreprise de fabrication de PCB à petite échelle à faible coût en France. Pour éviter de se ruiner, il faut donc faire appel à un grand fabricant de PCB chinois, tel que JLCPCB. En se rendant sur leur site et en navigant vers capabilities, on tombe sur les moyens technologiques de fabrication.

La conception de PCB implique l'utilisation de dimensions. Elles sont souvent données en mm (millimètres) et mil (milli-inch ou thousand of an inch, un millième de pouce). Malheureusement, les fabricants de composants utilisent les deux unités, et il vous faudra activement jongler entre les deux. (Pour passer de mm à mil, il faut multiplier mm environ par 40)

En plus de l'assistance au routage avec l'indication des connexions les plus roches non routées, votre logicielle de conception vous empêchera de faire n'importe quoi en lui indiquant des règles à respecter. Toutes les règles listées ci-dessous doivent être entrées dans le vérificateur de règles de conception dans votre logiciel avant le début du routage. Ainsi, vous n'aurez pas de surprises sur le prix lors de la commande de votre carte, ou le fabricant vous disant que votre design est impossible.

Il est plus judicieux de paramétrer le vérificateur de règles de votre logiciel de conception avec la largeur de piste la plus grande possible, en concordance avec la dimension de vos composants. Cela augmentera les chances que n'importe quel fabricant puisse le faire pour un prix faible.

- Couches (Layers) : assez explicite, c'est le nombre de couches que vous allez avoir sur votre PCB. Les fabricants facturent en général le même prix pour des cartes à 1 et 2 couches. Le prix augmente lorsqu'il s'agit de PCB à +2 couches. Dans ce tutoriel, nous n'aborderons pas les PCB +2 couches, car il y a des précautions différentes à prendre.

- Matière (Material) : il s'agit du matériau de support. Certains fabricants proposent des cartes flexibles, métalliques, transparentes, etc. La matière classique est le FR-4 et la choisir gardera le prix de la commande bas.

- Dimensions maximales : les dimensions maximales en largeur et longueur de la carte.

- Plage de tolérance sur le contour (Dimension Tolerance Outline) : la machine de découpe du PCB possède une erreur. Il faut le prendre en compte pour éviter de placer une piste trop près du bord, dans quel cas, la machine risque de l’abîmer.

- Masque (solder mask) : c'est la couleur de votre PCB. Dans les dernières étapes de la fabrication votre carte, le fabricant applique un filme de protection sur les pistes. Cela permet de les isoler de faux contacts et le protéger de la corrosion.

- Épaisseur (thickness) : c'est l'épaisseur de votre plaque. L'épaisseur classique est 1.6mm. Elle est également sujette à une incertitude (thickness tolerance).

- Épaisseur de cuivre interne et externe (finished outer and inner layer copper) : c'est l'épaisseur de vos pistes (en hauteur). La valeur classique est 35um. C'est une valeur importante à prendre en compte en fonction de la puissance que vous allez faire passer dans vos pistes ainsi que leur largeur maximale. Si vous n'avez pas beaucoup de place et que vous avez besoin de faire passer de gros courants, pensez à commander des pistes plus épaisses dans la mesure de la disponibilité et du prix.

- Taille de piste minimale (min. trace) : la largeur minimale de piste. Le fabricant ne peut pas fabriquer des PCB avec des largeurs de piste infiniment petites. Il y a donc une dimension minimale. Les "bons" fabricants proposent pour la difficulté classique 3.5mil ou 0.2mm.

- Espacement entre les pistes (min. spacing) : la distance entre deux pistes. Si vous souhaitez implémenter une puce avec des pattes "serrées", telle qu'un microcontrôleur (0.2mm entre chaque broche), il faut être sûr que le fabricant puisse répondre à votre besoin. En général, l’espacement minimal de difficulté classique est de 3.5mil ou 0.2mm.

- Diamètre interne minimal des via (Min. Via hole size) : si vous travaillez sur une carte double face, vous allez être amenés à placer des vias. Ce sont des passages entre deux faces, constitués d'un trou dont les parois sont recouvertes d'un conducteur. C'est pour cette raison que le fabricant ne peut pas faire un perçage infiniment petit, en plus de la fragilité de la mèche. En général la taille minimale des via est 0,2mm.

- Diamètre externe minimal des via (Min. Via diameter) : de la même manière que les pistes ont une taille minimale, le contour de votre via aura une épaisseur minimale. Faites attention, car les règles de routage des vias ne sont pas le diamètre du trou et l'épaisseur du contour, mais le diamètre du trou et le diamètre du via. En général le diamètre externe est de 0.45mm.

- Distance entre le via et la piste (Via To Trace) : étant donné que le processus technologique de la formation des pistes et celui de la constitution d'un via n'est pas le même, la distance minimale entre un via et une piste n'est pas la même que la distance minimale entre deux pistes. En général est de plus de 5mil.

- Dimension de perçage (Drill Hole Size) : la seule différence entre un perçage simple et un via, c'est que le via reliera les deux faces, alors que le perçage simple est juste un trou. Il est sujet à la même dimension minimale que les vias. Le fabricant ne peut pas avoir de foret de 1m de diamètre. Il y a donc une contrainte de la dimension maximale de perçage.

- Épaisseur de la piste autour du perçage (Annular Ring) : à la différence des vias, les perçages simples sont définis par le diamètre du trou et l'épaisseur de son contour.

- Résolution des caractères (Character Width and Height) : il est possible d'appliquer des annotations sur les PCB. Elles sont également sujettes à une dimension maximale en hauteur et en largeur.

Largeur et longueur des pistes

(courant) (exposer un bout en mettant pas le masque) (résistance qui augmente avec la longueur)

Eviter les angles droits et aigus

Dissipation thermique

Masse

Séparer la partie puissance et logique

Chemin du retour

(parler de pair différentielle)

Oscillateur

Astuces

Où trouver des librairies de composants?

Créer des points de test

LED d'indication et boutons ou switchs

Annotations

Contraintes physiques

Fixation du PCB

Dimensions des composants et autres éléments présents sur le PCB

Fabriquer sa carte

Assemblage

Soudure

Ordre de soudure suggérée

Comment savoir si mon microcontrôleur fonctionne?

Programmation

ST-Link

STM32CubeIDE

Autres méthodes de flashage