Modifications

Sauter à la navigation Sauter à la recherche
m
Ligne 85 : Ligne 85 :     
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.
 
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 106 : 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===
  

Menu de navigation