Module de commande d'alimentation ATX pour Raspberry Pi
power
raspi

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 le système avec un même bouton poussoir

atx_module

 

 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é suffisamment 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, son PCB 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

simul

X: 2s / div
Y: 0.5v / div
ATX_PS-ON (mesuré)
PWR_SW (simulé)
RPI_GPIO (mesuré)
RPI_UART0-TXD (simulé)

 

 Paramétrage du RaspberryPi 

Broche RPI_UART0-TXD à 3.3V pendant le fonctionnement

A travers un client SSH, connectez-vous à votre RaspberryPi
Configurez d'abord 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

Arrêt du RaspberryPi commandé par GPIO

Pour que le bouton poussoir commande l'arrêt du RaspberryPi, le circuit doit-être connecté à une broche GPIO
Téléchargez le script
Editez éventuellement ce script 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
Installez ses dépendances, notamment gpiozero:
sudo apt-get -y install python3-gpiozero python3-pkg-resources
Et activez-le au démarrage du système:
sudo crontab -e
Rajoutez alors dans le fichier qui s'ouvre:
@reboot /usr/local/bin/rpi_shutdown.py &
Ce script a été écrit suivant la documentation de gpiozero:
https://gpiozero.readthedocs.io/en/stable/recipes.html#shutdown-button
Redémarrez proprement votre RaspberryPi:
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
- que l'appui sur le bouton déclenche l'arrêt du RaspberryPi, qui déclenche l'arrêt de l'alimentation

 

 Ressources 

Raspi Téléchargez le schéma

Raspi Téléchargez le projet Kicad

Raspi Simulation du module ATX

Raspi Instructables

Raspi Alimentation à découpage ATX, décorticage et réparation (vidéo de Deus Ex Silicium)