Les cookies assurent le bon fonctionnement de nos services. En utilisant ces derniers, vous acceptez l'utilisation des cookies. En savoir plus
`

Controleur d’alimentation pour Raspberry pi.

Sauvegarder: 4 J'aime

Partager:

Difficulté:

Avec buton on-off ,et au choix : watchdog (chien de garde) ,ou redémarage à interval régulier

 


 


Ce projet a pris naissance , pendant les vacances , lors de mes connections au PI à distance. Suite à un bug, fausse manipe, trop d’infos…………? enfin une cause inconnue, le PI bug , plus de connexion, et bien sûr pas de possibilités de reset logiciel ou matériel.
J’ai décidé donc d’équiper ma framboise d’un chien de garde qui couperait l’alim du PI en cas d’absence de signe de vie de celui-ci depuis un certain temps.
Aprés je me suis dit que si je pouvais couper l’alim du PI , je pourrais couper l’alim total du montage , le bouton on-off (avec un peu d’électronique) sera la solution.
Puis sur différent forum , j’ai remarqué des demandes sur un système de redémarrage du PI à intervalle régulier.
j’ai donc décidé de tout intégré dans un montage externe au Pi avec le minimum de liaison avec la framboise : l’alim (bah oui! faut bien…..) et une pin pour l’échange des infos entre les deux.


 

Matériel :

Budget : 1€

  • -un microcontrôleur microchip pic 12f1840 (j’ai aussi crée une source des programmes générique ,pour l ‘utilisation d’ autre µp)
  • -deux mosfet canalp IRFR5305 (ou équivalent)
  • -2 diodes 1n4148
  • -1 diode zener 3.3v
  • -6 resistances de 10k ohms
  • -1resistance de 270 ohms
  • -un cable de récup mini usb mal
  • -un chargeur 5v 2A(mini micro usb,jack…) avec une prise femelle qui va avec
  • -un bouton poussoir
  • -un cable avec une pin femelle (pour connecter au gpio du pi) 

Etape 1 : Budget: 20€

 

Etape 2 : Principe

En bas de l’étape vous pourrez télécharger un dossier zip, contenant les différent projets et fichiers utilisés pour le tuto.

En premier , je vais décrire le fonctionnement du watchdog:
c’est un compteur qui , si il n’est pas réinitialisé à intervalle régulier , coupe et rétablissement de l’alim du pi , pour forcer un redémarrage . Le pi devra donc envoyer toutes les 30s un créneau de niveau haut de 3s sur la pin de liaison avec le contoleur.

Deuxièmement le bouton ON-OFF:
Le ON, on appui sur le bouton poussoir , il commute un mosfet qui alimente le contrôleur , qui à son tour commute un transistor pour l’alimentation du PI.
Le OFF , l’appui sur le même bouton pendant 4s indique au PI une demande d’arrêt , le PI lance ces commandes de halt et accuse réception au contrôleur. Après une tempo , le contrôleur coupe toute les alimentations (µc+rpi) de ce fait plus rien n’est alimenté et il n’y a pas de consommation de courant.
Tout est prêt pour un nouveau cycle.


Etape 3 : Le controleur , schema électronique, circuit imprimé

Comme cité plus haut , le contrôleur s’articule autour d’une puce microchip 12f1840.

Je vais maintenant décrire le schéma électronique:
il s’articule autour de deux mosfet canal P et d’un µc. A l’état initial l’alimentation est connectée sur P1 tout à gauche , les mosfet sont bloqués et le µc n’est pas alimenté , il n’y a pas de tension sur le connecteur P2 chargé d’alimenter le PI.
Pour allumer tout ça : on appui sur le switch , celui-ci met à la masse la gate du mosfet Q1 au travers de D2 , il devient conducteur et aliment le µc.
le 12f1840 lance sont programme et met sa sortie gp4 à la masse , bloquant à l’état passant , à travers d3, Q1. Le switch peut être relâché l ‘alim n’est pas interrompue, ensuite le µc commute à la masse gp2 rendant également Q2 passant , alimentant de ce fait le raspberry.

La pin gp5 sert d’acquérir les créneaux de niveau bas provenant du switch , ces créneaux serviront à lancer les commandes d’arrêt au PI.

La pin gp1 sert à la communication avec le pi ,D1 R4 R7 ,permettent une adaptation de niveau entre le pic (5v) et le PI (3.3v).

La pin gp0 quant à elle , est une entrée analogique qui mesure la tension issue du pont diviseur formé par R2 et R5 , cette tension sera convertie en temps pour le mode redémarrage régulier du PI . Pour choisir ce mode (par defaut le mode watchdog est activer) il faut que r5 soit présente est d’une valeur inf à 100k ohms.

Dans le répertoire “circuit imprimé” il y a un pdf pour le dessin du circuit avec l implantation des composants en page 2 ainsi qu’un répertoire contenant le projet kicad qui m’a servi pour le dessin du circuit. pour la fabrication du CI :
http://ouiaremakers.com/fabrication-de-circuits-imprimes-facile-2/
(Et oui un peu de pub……)

 

Etape 4 : le controleur , le programme

Le programme est réalisé avec mplax , comme toujours, je fournis les sources du projets microchip.

Pour ceux qui ne sont pas fan de microchip ,ou tout simplement ont les outils pour d’autre µc (arduino,stm , atmel ……..)vous trouverez dans le dossier µp un fichier main.c qui est un générique du projet microchip. Bien-sûr il n’est pas fonctionnel en l’état , vous devrez ajouter les header pour vos µc et compléter certaines fonctions pour le hardware, mais j’ai essayé de commenter suffisamment le fichier pour rendre le travail aussi simple que possible. Je détaillerai plus bas le fonctionnement du programme (générique et 12f1840)

Je fait un résumé du programme , mais pour les questions plus pointues, j’ai essayé de commenter le programme le plus possible et bien-sure je tenterai de répondre à vos questions.
Allez on commence!
tout le programme s’articule autour d’un timer (timer1) qui incrémente toutes les secondes un compteur . Celui-ci sert pour définir le temps du watchdog , la durée des différent créneaux et en mode redémarrage , le temps entre 2 alimentation du PI.
J’utilise aussi les interruptions pour détecter les fronts montants et descendants sur la pin de communication avec le PI .

Dés la mise sous tension ,il y a une phase d’initialisation (timer , gpio, interuption , adc) puis les GP4 et 2 sont mises à la masse pour verrouiller Q1 et alimenter le PI .
Le programme effectue ensuite une conversion a/n sur gp0, si celle-ci est inférieur à 50 la variable timer_mode est laissée à 0 indiquant ainsi au programme le mode de fonctionnement watchdog.
la boucle principale démarre alors. Elle surveille les différent flags positionnés par les interruptions . Toute les 30 s le Pi envoi sur gp1 un front haut de 0.5s ,cela génère une interruption qui remet le compteur à 0. si le compteur dépasse la valeur de 60(s) il y de forte chances que le PI soit bloqué, donc le programme passe gp2 à 1 puis après 1s à 0, ce qui a pour effet de couper l’alim du pi et de forcer un redémarrage.
Un appui sur le switch a pour effet de passer gp5 à 0 , cela déclenche une interruption qui passe à sont tour gp1 à 1 ,si cela dur plus de 4s ca signale au pi une demande d’arrêt.

 

Fichiers :

Etape 5 : les programmes dans le PI

les programmes se trouvent dans le répertoire fichier pi. les deux sous-répertoires correspondent au projets code::blocks qui mon servit à créer les fichiers binaires qui seront exécutés par le PI. Je les ai ecrits et compilés directement sur le Pi , pour éviter des problèmes de compilation croisé. Comme pour le 12f1840, j’ai commenté au maximum, mais les programmes sont beaucoup plus simples. Vous pouvez lire les fichiers main.cpp ou directement ouvrir les projets code::blocks (si vous l’avez) pour en étudier le fonctionnement.

Le programme bt_onoff a la charge d’envoyer toutes les 30s un niveau de 0.5s sur une pin du pin reliée au contrôleur, vous l’aurez deviné, pour reseter le chien de garde.
Il surveille aussi cette même pin pour intercepter une demande d’arrêt (niveau haut supérieur à 4s) et lancer la commande ” sudo halt”.

Le programme halt est appelé par le raspbian lors de sa fermeture , il passe , pendant 3s , la pin de communication au niveau haut.

 

Fichiers :

Etape 6 : Instalation des programmes sur le pi

La première chose à faire :Copier ensuite les 4 fichiers ,joints à la fin de la partie 4 ,dans un répertoire de votre choix dans votre pi (/home/pi/ par exemple).Vous pouvez utiliser plusieurs méthode: samba , ftp , carte sd…

Ensuite installer la librairie bcm2835 , si vous ne la posséder pas encore.
Ouvrez une fenêtre de terminal ,si vous utiliser le bureau de raspbian , ou restez dans la console le cas échéant, vous pouvez aussi utiliser une connexion ssh.
Entrée les commandes suivantes:

tar zxvf bcm2835-1.xx.tar.gz

cd bcm2835-1.xx

./configure

make

sudo make check

sudo make install



puis pour installer les fichiers et executer le script instal , on vous invite à choisir une pin pour la communication avec le µp puis tout s'instal tous seul.

Fichiers :

Etape 7 : branchements et fin.

 

Houf!!! on y arrive !!!
Reliez tout d’abord la sortie de communication du contrôleur à la pin du pin choisie pendant l’instal, et la sortie alimentation du contrôleur au port mini usb d’alim du Pi.
branchez l’entrée alim du contrôleur à un adaptateur 5v 2a .
Pressez 1s le bouton poussoir , le PI doit s’allumer, pour l ‘arrêter, pressez le bouton 5s , et au bout d’une minute environ les alims vont se couper.

Voilas j ‘ai fini , merci de m’avoir lu jusqu’à la fin, j’espère avoir été intéressant et clair dans mes explications , n’hésitez pas à posez des questions.
A plus pour de nouvelles aventures. Et votez pour moi !

 

Gerse
06 - 07 - 2016 : 00:00

Hello super montage.

guillaume faye
06 - 07 - 2016 : 00:00

merci.

Ipxav
06 - 07 - 2016 : 00:00

Merci Guillaume ! Tu as super bien documenté la gestion de l'alimentation du Raspberry pi.
PS : Très bonnes sources 😉

dede
06 - 07 - 2016 : 00:00

Merci, je fait de mon mieux pour etre clair et interessant.

Boris
01 - 09 - 2016 : 00:00

bonjour, Très intéressent votre montage, j'ai une question quand on coupe le pi avec bouton arrêt cela coupe l'alim directement ou clos tous les processus avant de s'éteindre?Pour information le liens de téléchargement tuto 2 n'est plus fonctionnel.

guillaume faye
06 - 07 - 2016 : 00:00

Pour l 'arret , il y coupure des processus et aprés une tempo coupure de l 'alimentation .

Boris
01 - 09 - 2016 : 00:00

Pour la coupure du pi pour inactivité peut on la supprimer ?

guillaume faye
06 - 07 - 2016 : 00:00

c'est possible mais ca serat suremment domageable pour la carte sd.

guillaume faye
06 - 07 - 2016 : 00:00

les liens son actifs de nouveau.

ThibThib
23 - 01 - 2018 : 00:00

Hello

Merci pour le tuto.

Petite question : combien de courant le mofset est-il capable de délivrer ? Est-ce qu'il peut alimenter un raspberry pi 3 (3A max), un LCD (700mA max il me semble), quelques RGB Led (jusqu'à 1A max) et quelques Leds et display. Bref, est-ce que 5A, ça passe avec le MOFSET IRFR5305 ?

D'ailleurs, comment fait-on pour choisir son MOFSET (sur la doc, je lis Vdss=-55V et Id=-31A, mais je ne suis pas sûr de comprendre à quoi ça correspond) ?

Merci !

Thibault

guillaume faye
06 - 07 - 2016 : 00:00

Bonsoir, le IRFR5305 ne  pourra pas supporter les 5A à mon avis 3a max.

les données vdss=-55v et id=-31a sont des valeurs maximums à ne pas dépasser. pour connaitre les valeurs  admissible pour ce montage il faut se référer à la doc :

https://www.infineon.com/dgdl/irfr5305pbf.pdf?fileId=5546d462533600a401535632522820ff

page 3 fig3.

notre vgs est de -4.5v donc ID max 3A  : 4.5= Valim(5v)-Vdiode3(0.5v)

si vous optez pour des diodes Schottky avec une tension de 0.2v ca pourrais passer , mais je n'ai pas   testé , à assayer en augmentant la charge au fur et à mesure et peut etre  un petit dissipateur.

Par contre avec un FQP27P06:

page 3 fig2, vous pourrais monter à environ 10A mais je n'ai pas nom plus testé de si fort ampérages ni transistors.

guillaume faye
06 - 07 - 2016 : 00:00

il y a aussi le ntd25p03l-d https://www.onsemi.com/pub/Collateral/NTD25P03L-D.PDF peut etre un peu plus adapté.

guillaume faye
06 - 07 - 2016 : 00:00

Le mosfet q2 fonctionne comme le premier. 

Avec une commande en 3.3v ca va etre limite en amperage. 

Ce transistor est mieu adapté :

FDD4685-F085P. Je vous laisse trouver la doc et étudier pourquoi il est plus adapté (indice :chercher vgs vs id).


ThibThib
23 - 01 - 2018 : 00:00

Ok, merci pour les références, je vais regarder ça.

Que se passerait-t-il si mon micro-controlleur était en 3.3V (dans mon cas, je n'aurai pas le MOFSET Q1, mon micro-controlleur serait toujours alimenté, ce qui revient à ne garder que la partie de droite de votre montage) ? Est-ce que 3.3V en sortie de mon micro suffit à faire commuter le MOFSET Q2 ?


ThibThib
23 - 01 - 2018 : 00:00

Merci beaucoup!  Je vais regarder ça en détail

Sauvegarder: 4 J'aime

Partager:

Recevez une fois par mois les meilleurs tutoriels Déco dans votre boîte mail


Ces tutoriels devraient vous plaire

Un capteur de température/humidité en WIFI avec une page Web
Gestion des gpio du Raspberry Pi avec Python3.x
Comment fabriquer un vidéoprojecteur à 5€