Alimenter une RaspberryPi comme un PC

1. Introduction

1.1 Du blabla...

La Raspberry (RPi) est un micro ordinateur, portable et de faible consommation. Cependant, vous voudrez sûrement, un jour, peut-être, arrêter de la promener pour la montrer aux copains et l'intégrer à un vrai projet machine pour bénéficier de sa puissance de calcul !

Puissance de calcul... mais pas puissante du tout... En effet, comme tout élément informatique, une telle carte ne peut sortir que quelque mA et il serait d'ailleurs idiot de vouloir plus : ça ne vous viendrais pas à l'idée de faire tourner un moteur avec votre téléphone ! Et bien là, c'est pareil ! On arrive donc au point où l'on souhaite associer notre petite RPi avec une alimentation de puissance (entendez par là plusieurs Ampères sur du +5V, du +12V etc...). Il serait idiot de vouloir tout créer, alors le candidat idéal est : une alimentation ATX.

1.2 Matériel nécessaire

  • Un voltmètre : avant de brancher la RPi, il sera bon de vérifier que vous ne vous êtes pas trompé de ligne : du 12V tuerait votre RPi. En règle générale, c'est utile pour comprendre ce qu'il se passe sur une alim.
  • Une alimentation ATX : neuve ou de récup
  • Une RaspberryPi sur Rasbian
  • 2 x NPN 2N2222 : d'autre plus petits feront l'affaire, mais c'est le générique des NPN basse puissance, vous devriez en avoir plein sous le coude !
  • 2 x Résistance 4.7kΩ
  • 2 x Résistance 2.2kΩ
  • 1 x Résistance 470Ω
  • 1 x LED : de la couleur de votre choix, comme indicateur ON/OFF
  • 1 x Switch : type "pulse" OFF-ON-OFF
  • Du fil logique : type strap, vous pourrez acheter des connecteurs adéquats si vous voulez un beau montage : le connecteur CI ATX 20pin se trouve sur Lextronic.
  • 1 x Molex 4*1 femelle : attention, personne ne sait si c'est mâle ou femelle du fait de la structure foireuse de ces connecteurs, au niveau des pins ce sont des mâles (ça rentre dans maman alim), mais au niveau plastique ce sont des femelles (le plastique coté alim qui est mâle rentre dans la femelle). Mettez vous bien la structure en tête avant d'acheter. Si vous commandez, prendez des couples, vous ne serez pas déçu de recevoir le mauvais genre.
  • 1 x câble USB-microUSB type chargeur de téléphone : normalement ils passent tous du 2A si vous n'utilisez pas le DATA, au pire le câble fondera.

2. Généralité sur l'alimentation ATX

Rien de super nouveau, une alimentation ATX c'est juste le nom d'une alimentation de PC. La même que dans votre PC de bureau. Conçu pour travailler avec l'informatique, elle dispose de quelques fonctions de base, utiles, pour s'associer en douceur avec l'informatique. Mais d'abord, voyons un peu ce qu'une alimentation de base (~30€) a dans le ventre :

2.1 Caracteristiques EVGA 430W

  • +3.3V : 24A
  • +5V : 15A
  • +12V : 34A
  • -12V : 0.3A
  • +5Vsb : 3A

Je ne vais pas vous faire une description inutile de ce que ça veut dire, je vais juste expliquer ce qu'est le +5Vsb : il s'agit d'une ligne de veille, toujours active même lorsque l'alimentation est éteinte. En gros, si vous voulez récupérer un +5V quand tout est éteint (par exemple pour faire tourner un ventilo X temps après l'extinction ou pour faire une LED de veille, c'est sur ça que vous vous relierez).

Pour le reste, la puissance suffira amplement pour bon nombre de projets !

2.2 La broche 20pin ATX

20 ou 24 finalement on s'en fou. Les 4 pins qui font la différence sont juste des pins d'alimentation CPU, ils sont toujours "volants" sur l'alimentation et toujours associés sur la carte mère.

Brochage ATX
Figure 1: Brochage d'un connecteur ATX 20 pins

Comme vous pouvez le voir en Figure 1. la majorité des pins sont des GND (ground, masse, 0V) et des sorties puissances (+3.3V, +5V surtout, qui alimente la carte mère et la RAM). Vous vous en doutez, ce ne sont pas eux qui sont interessant... Les pins d'intérêts sont PS_ON et PWR_OK.

2.3 Fonctionnement général d'une alimentation ATX

Pour notre explication, on va utiliser PS_ON, PWR_OK et +5V. +5V symbolisant l'ensemble des lignes de puissances (+12V, +3.3V) du connecteur 20 pins mais aussi des MOLEX, SATA, etc...

Cinétique d'une alimentation
Figure 2: Cinétique d'une alimentation

Sur une alimentation ATX, seul PS_ON agit en INPUT : c'est à dire qu'on ne communique avec l'alimentation qu'avec ce pin. Réciproquement, on ne tire aucune info de ce pin. Lorsque notre alimentation est branchée mais éteinte (Figure 2. A), PS_ON est à un niveau HAUT (+2.8V), tout le reste est à un niveau BAS (sauf Vds, voir avant) : logique, l'alimentation est éteinte, le but c'est qu'elle soit... éteinte.

Dès lors que l'on appuie sur notre bouton d'alimentation PC, on shunt PS_ON avec GND ramenant le signal HAUT vers BAS (Figure 2. B), il s'agit du signal de démarrage de l'alimentation. Durant cette phase où le signal passe de HAUT vers BAS, nous somme dans le flou : +5V va démarrer à un moment où le signal sera suffisamment BAS mais pas toute de suite, cette phase dure quelques m-µ secondes. A partir du moment où le signal est considéré comme BAS sur PS_ON, +5V démarre (Figure 2. C), notre alimentation est démarrée mais pas stable, le +5V sera entre 0V et 5V ce qui n'est pas compatible avec l'informatique qui est sensible à tout ça (même si cette phase dure aussi quelques msecondes).

Il est donc nécessaire d'empêcher le PC de démarrer durant cette phase : c'est là qu'entre en jeu PWR_OK. PWR_OK restera BAS tant que tout ne sera pas parfaitement démarré et stabilisé. Dès que tout est OK, PWR_OK passe à HAUT (Figure 2. D). Cela prend également un poil de temps, ce n'est pas grave, qu'importe le moment où le PC décide de démarrer durant cette transition, tout est OK.

On arrive donc au moment où tout est OK, démarré et stable (Figure 2. E), l'alimentation est démarrée. Dès que le pin PS_ON repasse à HAUT, tout s'éteint (Figure 2. F-G).

On comprendra aisément que le bouton du PC ne suffit pas pour maintenir un PC allumé. En effet, vous ne restez pas le doigts appuyé sur le bouton durant vos sessions de jeux et le bouton n'est pas un interrupteur ON/OFF comme pour votre luminaire... (ce fut le cas dans le temps). Il y a donc un circuit interne à la carte mère du PC qui maintient PS_ON en BAS jusqu'à ce que vous fassiez "PC>Éteindre le PC" (ce qui passe par la couche informatique) ou que vous mainteniez le bouton pendant 3-5 secondes (ce qui passe par la couche électronique).

2.4 Réaliser le circuit de contrôle ATX

Comme dit précédemment, une carte mère dispose d'un circuit interne permettant le maintient et le contrôle de PS_ON. C'est ce que je vous propose faire maintenant. Ce circuit est purement empirique (je ne suis pas électronicien), fonctionne parfaitement et est très stable, lobodol vous l'améliorera si il juge ça intéressant niveau réduction de composant ou stabilité.

Circuit de contrôle ATX
Figure 3 : Circuit de contrôle ATX

Comment fonctionne ce micro-circuit ?

Rappelez vous, lorsque l'alim est OFF, V+5 est à 0V. Ce circuit ne fait donc rien lorsque l'alim est éteinte : la première étape étant donc de l'allumer.

Pour allumer l'alim, comme expliqué précédemment, il faut mettre POS_ON en BAS. Pour ce faire, une simple pression sur SWITCH shuntera POS_ON avec GND et démarrera l'alimentation. Si on se contentait de ça, dès que l'on relâcherait le doigts, l'alimentation s'arrêterait d'elle même.

Pour éviter ce phénomène, on utilise le fait que lorsque l'alimentation démarre (grâce au SWITCH), elle va commencer à fournir du V+5. Ce V+5 est donc relié à la base de Q1, ce qui va permettre un passage entre PS_ON (collector de Q1) et GND (emitter de Q1). V+5 maintient Q1 passant tant que Q1 est passant : dans mon jargon de biologiste, on appelle ça un feedback positif.

Ok, c'est bien beau tout ça mais pour l'éteindre, on fait comment ?

Il y avait l'option on rappuie et ça éteint (bascule ON/OFF sur NE555), mais personne n'éteint son PC en débranchant l'alimentation ! Il faut donc que l'alim se coupe quand le PC (ici le RPi) envoi la consigne : "j'ai fini mon process d'extinction, on coupe le jus maintenant".

C'est le rôle de Q2. Ici Q2 agit en shunt de Q1 : dès que le RPi envoie le signal par RPi GPIO (on verra plus tard comment), Q2 devient passant, ramène la tension de R2 à 0V (pull down) ce qui fait que la base de Q1 n'est plus activée. Q1 est bloqué, POS_ON n'est plus en BAS : l'alimentation s'éteint. R3 est également une résistance de tirage qui permet (dieu sait comment) d'améliorer les vitesses de déclenchement et d'éviter que le rail +5V mette 10 secondes à se vider. Probablement inutile une fois monté avec le RPi, ça change beaucoup pendant les tests sans.

Et quand on parle des tests : Tout ça est indépendant de la RPi ! Avant de brancher ça sur votre bébé à 30€, vérifiez le bon fonctionnement ON/OFF : et pour tester le OFF, branchez simplement RPi GPIO sur V+5 ou Vds.

Une magnifique LED est simplement branchée sur V+5 comme indicateur ON/OFF.

3. La RaspberryPi

Cet article n'a pas vocation d'expliquer qu'est ce qu'une RaspberryPi. Si vous pensez qu'il s'agit d'une framboise mathématique, je pense que vous ne serez pas intéressé par la suite !

3.1 Alimenter une RaspberryPi

Alimenter une RPi est vraiment tout con : on branche un câble micro-USB sur une alimentation type "chargeur de téléphone" de plus de 2A. Il faut donc savoir une chose qui va grandement nous simplifier la vie : le contrôle PWR_OK se fait en interne dans la RPi. Il n'y a pas besoin de donner une alimentation "propre" par l'USB puisque par nature, une alim USB est dégueulasse. Je vais donc vous présenter un montage simple ne passant pas par le PWR_OK. Cette "option" serait facilement ajoutable (avec un relai?), vous pourrez le faire, et ajouter le schéma en commentaire ;)

3.2 Préparer votre adaptateur MOLEX-microUSB

Vous pouvez faire ça propre, ou à la méthode dégueux, comme moi. Le but est simple, reliez le +5V et GND du molex sur le V+ et le GND du micro-USB.

Adaptateur MOLEX vers micro-USB
Figure 4 : Adaptateur MOLEX vers micro-USB

Les deux solutions présentent avantages et inconvénients.

La première, la plus propre (Figure 4. A), permet de relier le connecteur micro-USB directement sur la MOLEX en utilisant du câble de gros calibre. On limite donc les risques de surchauffe du cable USB qui n'est pas forcément fait pour passer 2.5A. Limite uniquement, car le faible tronçon entre le connecteur micro-USB et les câbles multi-brin reste limitant et pourra fondre en cas de surcharge. La meilleurs option étant donc de limiter cette surcharge : c'est le but de cet article, utiliser une ligne de puissance plutôt que les pin d'alimentation de la RPi.

La seconde, la plus crade (Figure 4. B), est très simple à mettre en œuvre, le connecteur USB se soudant très bien. Ce montage permet également de garder un câble "élégant" plutôt que deux fils multibrin qui se baladent. Pensez juste à protéger la fiche USB soudée avec de la gaine pour éviter un court-circuit inopiné.

3.3 Envoyer le signal d'extinction (halt)

Comme vous le savez (ou pas), on ne contrôle pas au niveau software l'état des GPIOs quand le RPi est halt (off). Dans notre situation, il faut qu'au boot, le signal soit impérativement à 0V (BAS) en OUTPUT et après halt, à 3.3V (HAUT). Si ce n'est pas le cas (imaginons que le signal au boot soit HAUT), Q2 serait passant, shunterai Q1 et couperait l'alim direct ! Si après le halt le signal est BAS, bas Q2 serait saturé, ne shunterai pas Q1 et l'alim resterai ON.

Pour ce faire, nous passons par le device tree blob (dt-blob) : ce petit fichier permet de configurer les états par défaut des GPIO avant et après que l'OS soit chargé.

Lancer votre RPi, connectez vous à ce dernier, mettez vous en sudo (sudo su) et lets go :

Tout d'abord, et si ce n'est pas déjà fait, on install le logiciel permettant de compiler les device tree.


apt-get install device-tree-compiler

Créez ensuite un fichier dans votre répertoire courant :


nano /home/pi/dts-blob.dts

Et copiez-y le contenu officiel accessible sur ce lien.

Il faudra ensuite modifier ce fichier (donc ne le fermez pas). Selon votre modèle de RPi (B 1.0, B 1.1, 3, etc...) vous devez accéder à la bonne branche. Sur nano, faites Ctrl + W (recherche) et tapez selon votre modèle :

Modèle CTRL+W
RaspberryPi 3 pins_3b1
RaspberryPi 2B 1.1 pins_2b2
RaspberryPi 2B 1.0 pins_2b1
... ...

Au delà j'imagine que vous savez lire un fichier... d'ailleurs, ce n'est qu'une aide. L'idéal serait de lire ce fichier et de le comprendre ;)

Dans mon cas je recherche pins_3b1 et j'accède donc à la configuration des pins pour la RPi3.

Après le bloc "pin@default" j'ajoute ma ligne de définition :

Dans dts-blob.dts :

pin@p17 { function = "output"; termination = "pull_up"; polarity = "active_high"; startup_state = "inactive"; };

Sur le pin 17 (BCM) soit le GPIO_0 (utilisez "gpio readall" pour connaître les correspondances, nécessite WiringPi par exemple) j'ordonne qu'au démarrage le pin soit inactif (BAS) et qu'à l'extinction, il soit HAUT (pull_up pour qu'en état stable il soit HAUT, active_high pour ne pas qu'il soit activement maintenu BAS).

Voilà, on a programmé notre pin. Il ne reste plus qu'à compiler ce fichier et l'ajouter au chargement de boot :


dtc -I dts -O dtb -o /boot/dt-blob.bin /home/pi/dts-blob.dts

Cela va générer un .bin qui sera chargé au prochain boot. On reboot donc !


reboot

Puis on éteint


halt

Et on débranche :)

4. Résultat final

4.1 Branchement

  1. Mettez l'interrupteur général de l'alim sur O
  2. Easy to do. On branche d'abord notre circuit de contrôle sur l'alimentation à l'aide de strap. Retournez voir le schéma du connecteur 20pin si besoin.
    • V+5 : fil rouge, strap rouge, V+5 sur notre circuit
    • POS_ON : fil vert, strap vert, PS_ON sur notre circuit
    • GRND : fil noir, strap noir, GRND sur notre circuit
    • Branchez ensuite votre RPi à l'aide de l'adaptateur MOLEX vers micro-USB.
  3. Branchez votre RPi avec l'adaptateur MOLEX vers micro-USB
  4. Reliez le GPIO_0 (BCM17) sur RPI GPIO de notre circuit
  5. Reliez un GRND (RPi) sur RPi Ground de notre circuit

Il est important de partager le GND entre notre RPi et l'alimentation ! Sans quoi ça ne marcherait pas et risquerait de mettre en danger notre RPi (bien que protégé, il ne faut pas que notre GPIO (3.3V) deviennent le GND du V+5).

4.2 Lets go!

Et c'est parti !

  1. Mettez l'interrupteur général de l'alim sur I
  2. Appuyez sur votre SWITCH : l'alim démarre ainsi que le RPi.
  3. Connectez vous au RPi en sudo
  4. Éteignez le RPi (rappel commande : "halt")
  5. L'alimentation se coupe juste après la cloture de l'OS.
Résultats
Figure 5 : Résultats

Bravo à vous ! Vous avez une RPi alimenté par une ATX, ne vous reste plus qu'à poursuivre vers des circuits de puissance pour utiliser tout ce que votre alimentation peut fournir : en restant prudent, un mauvais branchement pouvant détériorer votre RPi.

4.3 Améliorations

Bien sûr, il y a plein d'améliorations à apporter, qu'elles soit fonctionnelles, esthétiques ou de convenances. Voici une liste de ce qui pourrait être bien de faire et que vous pourriez partager sur Fire-DIY quand vous l'aurez fait !

  • Faire une carte d'interface alim doté d'un VRAI connecteur ATX et de bornier/connecteur de puissance
  • Rajouter une étape POWER_OK à l'aide d'un relais permettant de démarrer la RPi et ses périphériques quand l'alim est stable.
  • Ajouter un GPIO_IN pull_up sur le POS_ON pour qu'un nouvel appui sur le bouton quand le RPi est allumé envoie (par un signal BAS) une consigne HALT (par script python par exemple)
  • Ajouter sur le bouton un petit circuit RC permettant, après maintient de 4-5 seconde, le shunt de Q1 et forcer l'extinction (HARD_OFF)

Bon courage à vous et Fire !

Vos réactions (9) :

nico

Bonjour,

Déjà merci beaucoup pour tout cet article très bien documenté et très utile pour un débutant comme moi (et en français en plus).

Je me suis lancé dans un projet de borne d'arcade alimenté par une alimentation ATX et grace à vous je suis en mesure de finir à un prix attractif (peu de composants différents).

J'ai donc essayé votre montage et je confirme qu'il fait ce qu'on lui demande !!!

Par contre, je ne comprend pas trop l'intérêt de la résistance R3 : le pos_on étant mis à la masse par l'interrupteur pas besoin de passer par Q1 et V+5 étant alimenté après lancement de l'alimentation Q1 devient passant dès qu'on relache l'interrupteur. (je précise que je suis débutant et que je dis peut être une grosse bétise)

Pour le rpi, je suis parti sur la piste d'un relai plutôt que bidouiller les gpio (préférence personnelle).

Bon et les améliorations : c'est pour quand l'article ?? :p

Encore merci et bonnes continuations.

07/08/2017 à 23:35

TK

De manière empirique, la résistance R3 accélère la mise à la masse (probablement en ayant le rôle de diviseur de tension plaçant la tension sur le fil).

On sera heureux de mettre à jour les améliorations et d'ajouter ton nom à l'articles quand tu nous aura fait un petit rapport sur ces dernières :)

09/08/2017 à 00:22

lobodol

Salut, je suis en vac pour le moment mais je te ferai un explication plus détaillée à mon retour

09/08/2017 à 17:25

Scall

Merci pour cet article très complet sur le fonctionnement et l'utilisation de l'alim ATX pour le RPi.
Par contre je n'arrive pas à faire fonctionner le montage en l'état. Quand j'appuie sur le switch le circuit se met bien route mais des que je le relâche celui-ci s'éteint aussitôt.
Il semble que Q1 ne devienne pas passant.
Je comprends pas pourquoi, et je n'arrive non plus à faire fonctionner le lien dans le mail de validation du forum.
Poisse quand tu nous tiens.
Pouvez-vous m'aider ?

02/01/2018 à 16:16

nico

Re-bonjour et bonne année,

Je reviens vers vous pour un retour d'expérience.

Bon en attendant les explications plus détaillées, j'ai avancé de mon côté sur le sujet (la chance, il y en a qui ont de lonnnguuueesss vacances ;) ou qui ont une vie très chargée...).

Au final, j'ai trouvé un autre schéma à base de nand (je ne sais pas si j'ai le droit de piquer une source d'un de vos concurrents pour le mettre sur ce site alors avec google on tappe : "latching press on hold off").
Ce qui a fait pencher la balance a été la ressemblence au fonctionnement d'un ordinateur, ie le fait de pouvoir éteindre l'alimentation brutalement en maintenant appuyer un certain temps sur le bouton d'allumage (mon projet me permettait pas d'avoir deux boutons, l'alimentation étant difficile à atteindre et si le pi plante l'alim reste en fonctionnement).
Pour les côtés négatifs : schéma plus compliqué et nombre plus important de composants (donc prix plus élevé).

Encore merci pour votre travail.

PS: Je veux bien participer à votre site si ce que j'ai fait vous intéresse (ce ne serait qu'un juste retour des choses). Je pourrais fournir ce que j'ai trouvé et fait, par contre je ne garantie pas l'exactitude electronique. Quand je vois les photos de votre résultat, je vous félicite car mon montage est vraiment crade à côté du votre. (envoyez moi un mail)

02/01/2018 à 22:48

nico

Pour Scall :
Je ne sais plus si c'est marqué dans l'article mais certaines alimentations ont besoin d'une charge minimum pour fonctionner.
Il est recommandé de mettre une résistance 10W de 5Ohms sur la ligne 5V pour les anciennes alims, tandis qu’il est conseillé de passer à 22Ohms sur la ligne 12V pour une alim récente.

Perso j'avais eu ce problème sur une alimentation et j'avais trouvé un forum ou il était fait mention de brancher un lecteur de cd ou de disquette pour contourner le problème sans acheter des composants en plus.

Sinon problème de branchement ?
Bon courage en tout cas.

02/01/2018 à 22:58

lobodol

Salut les gars et bonne année. Désolé pour le temps de réponse, je suis total débordééééé en ce moment.
Je relance Willikus pour qu'il vous réponde, il sera plus à même de fournir une réponse adaptée vu que c'est lui l'auteur.

Je confirme ce que dit nico au sujet de la charge. Certaines alim ont besoin d'avoir une résistance au cul pour démarrer.

@Scall: tu rencontres toujours des pb pour t'inscrire ? Je vois que ton compte est actif
@nico: ça serait avec joie. Créé toi un compte et propose des articles sur le forum, dans la catégorie "vos tutos" ou "vos projets" :)

06/01/2018 à 19:37

rexty

Bonjour
c'est le montage que j'attendais pour faire un jeedom-box.MERCI
Cependant, mes aptitudes étant limitées, je ne saisis pas bien la notion de "switch", est-ce un BP ou un inverseur à 3 positions ?; ou un inter de pc
merci de m'éclairer.
cordialement

09/02/2018 à 11:51

lobodol

Salut @rexty, content que ça te plaise :)
Un bouton poussoir fait parfaitement l'affaire

09/02/2018 à 12:10

Vous avez besoin d'aide ? Utilisez le Forum plutôt que les commentaires.

Un commentaire ?

* Champs obligatoires