Skip to content

Module de commande d'une alimentation ATX pour RaspberryPi

Toutes les ressources sont sur la page GitHub du projet. Ce projet a été réalisé en collaboration avec Patrick Abati, Sitelec.org.

Au sein d'un système comportant un RaspberryPi alimenté par une alimentation ATX, l'objectif de ce circuit est de permettre d'allumer et d'éteindre proprement le système avec un même bouton poussoir.

Schema

Présentation du fonctionnement

Ci-dessous sont détaillées les étapes du fonctionnement du circuit.

Mise en route

Ce circuit agit sur la broche ATX_PS-ON de l'alimentation ATX pour commander sa mise en marche et son arrêt. Par défaut, cette broche est à 5V, ce qui correspond à l'état éteint de l'alimentation.
Pour allumer l'alimentation, le circuit doit mettre ATX_PS-ON à la masse.

Lors de l'appui sur le bouton poussoir, le transistor Q2 met ATX_PS-ON à la masse, ce qui déclenche la mise en route de l'alimentation et le démarrage du RaspberryPi.

Système actif

Au démarrage, le RaspberryPi met sa broche RPI_UART0-TXD à 3.3V, agissant sur le transistor Q1 qui maintient l'alimentation allumée en gardant ATX_PS-ON à la masse.
Cependant, il peut s'écouler un certain temps avant que RPI_UART0-TXD passe à 3.3V (2.6 secondes sur RaspberryPi 3). Le sous-circuit RC sur la base de Q2 permet de maintenir le transistor saturé suffisament longtemps.

Le condensateur C1 permet d'absorber les variations de tension sur la broche RPI_UART0-TXD, ce qui peut s'avérer utile en cas d'utilisation de l'UART du RaspberryPi, de façon à maintenir le système en route.

Arrêt du système

Une nouvelle pression sur le bouton poussoir est détectée par programme sur le RaspberryPi via une broche GPIO configurée en entrée, l'arrêt propre du système d'exploitation peut alors être déclenché.
Une fois que le RaspberryPi a atteint l'état d'arrêt, il reste alimenté mais sa broche RPI_UART0-TXD tombe à 0V, Q1 n'est donc plus passant, ATX_PS-ON est relâché et l'alimentation s'arrête.

Simulation

Simulation

  • X: 2 secondes par division
  • Y: 0.5V par division
  • jaune: ATX_PS-ON (mesuré)
  • rouge: PWR_SW- (simulé)
  • bleu: RPI_GPIO (mesuré)
  • vert: RPI_UART0-TXD (simulé)

Le projet KiCAD utilisé pour la simulation est présent sur la page GitHub du projet.

Un tutoriel sur la simulation avec KiCAD est disponible sur Sitelec.org.

Paramétrage du RaspberryPi

A travers un client SSH, connectez-vous à votre RaspberryPi.

Broche RPI_UART0-TXD à 3.3V pendant le fonctionnement

La première chose nécessaire est de configurer le RaspberryPi pour que sa broche RPI_UART0-TXD soit à 3.3V pendant son fonctionnement, de façon à maintenir l'alimentation allumée. Pour ce faire, éditez /boot/config.txt et ajoutez à la fin:

enable_uart=1
enable_uart=1

Arrêt du RaspberryPi commandé par GPIO

Pour que le bouton poussoir commande l'arrêt du RaspberryPi, le circuit doit-être connecté à la broche GPIO de votre choix.

Téléchargez ce script Python:

Vous pouvez éventuellement l'éditer pour changer les valeurs suivantes:

  • HOLD_TIME: nombre de secondes de pression sur le bouton pour déclencher l'arrêt (cette valeur est légèrement faussée par C2 qui va maintenir le potentiel un certain temps après le relâchement du bouton)
  • PIN_NB: le GPIO à utiliser

Copiez ce script dans /usr/local/bin. Rendez-le exécutable:

sudo chmod +x /usr/local/bin/rpi_shutdown.py
sudo chmod +x /usr/local/bin/rpi_shutdown.py

Installez ses dépendances, notamment gpiozero:

sudo apt-get -y install python3-gpiozero python3-pkg-resources
sudo apt-get -y install python3-gpiozero python3-pkg-resources

Et activez-le au démarrage du système:

sudo crontab -e
sudo crontab -e

rajoutez alors dans le fichier qui s'ouvre:

@reboot /usr/local/bin/rpi_shutdown.py &
@reboot /usr/local/bin/rpi_shutdown.py &

Ce script a été écrit suivant la documentation de gpiozero.

Redémarrez proprement votre RaspberryPi:

sudo reboot
sudo reboot

Vous pouvez à présent connecter le circuit au RaspberryPi et à l'alimentation et tester:

  • que l'alimentation est bien maintenue active par la broche RPI_UART0-TXD du RaspberryPi,
  • et que l'appui sur le bouton déclenche l'arrêt du RaspberryPi, qui déclenche l'arrêt de l'alimentation.

La page GitHub du projet
La page Instructables du projet
La page Sitelec.org du projet
Vidéo sur les alimentations à découpage ATX, par Deus Ex Silicium