Autres articles / Other articles

Réaliser un testeur de batterie

publication: 6 avril 2024 / mis à jour 9 avril 2024

Read this page in english

 

Appel à collaboration

Vous développez des montages, simples ou complexes avec ESP32 et ESP32forth.

Partagez-les ici sur ce site.

ESP32forth ne pourra se développer qu'avec la collaboration active de toutes les bonnes volontés.

Vos montages peuvent aider d'autres développeurs.

Les montages des autres développeurs peuvent vous aider.

Pour proposer un article ou un montage, cliquez ici


Dans cet article Programmer un analyseur d'ensoleillement, on a abordé la manière d'exploiter un GPIO en conversion ADC pour lire une tension.

Nous allons voir un cas très pratique, exploitant la conversion ADC (Analog to Numeric Conversion). Ce cas va être décrit pas à pas, tant matériellement qu'au niveau logiciel.

Matériel requis

Pour débuter le montage, voici le matériel de départ requis:

Le modules de test de tension B25 0-25V

C'est un composant extrêmement simple. Si on exclue la connectique et le support, ce composant se résume à deux résistances:

Les deux entrées à gauche, VCC et GND, sont destinées à se connecter à la source de tension à tester. Le voltage ne doit pas dépasser 25 Volts. Les deux résistances, 30K et 7,5K, abaissent la tension testée selon un facteur de réduction. Cette tension réduite est disponible sur les deux sorties à droite, S et GND.

Un test à vide du module B25, c'est à dire non connecté à la carte ESP32, donnent ce résultat:

Voyons en détail les calculs à réaliser en tenant compte de la valeur des résistances. mais avant celà, voci comment se branche le module B25 à la carte ESP32-C3-Zero-M:

Le premier module B25 a sa sortie S connectée au port GPIO 04. La sortie marquée + n'est pas utilisée. De l'autre coté, sur les entrées marquées VCC et GND on pose deux fils assez longs, un noir ou bleu pour GND, l'autre rouge pour VCC.

Pour mesurer la tension d'une batterie, on connecte notre fil d'entrée rouge à la borne positive, le fil noir à la borne négative de la batterie à tester.

Voici comment réaliser notre toute première mesure de batterie avec ESP32forth:

\ Simple Analogread to GPIO-4, bat: 12,4V (Voltmeter) 
4 input pinMode 
4 analogread  \ leave 3514 

Cette première mesure empile la valeur 3514.

La mesure de tension de la batterie avec un voltmètre indique 12,4 Volts.

Traitement des mesures ADC

Paramétrons nos données:

Voici la formule permettant de calculer Vbatt:

( ADCval * Vref / RES ) / ( R1 / ( R2 + R1 ) )

Dans cette formule, on a mis en évidence le paramètre Vref. C'est cette tension de référence qui est utilisée par le convertisseur ADC. Si la tension est à 0V, la mesure ADC empile 0. Si la tension testée est Vref, la mesure ADC empile 4095. Donc, pour toutes les tensions comprises entre 0 et Vref, la mesure ADC sera comprise entre 0 et 4095.

Voici ce que donne l'application pratique de cette formule:

( 3514 * 3.3 / 4096 ) / ( 7500 / ( 30000 + 7500 ) ) = 14.155 V

Nous sommes loin des 12,4V mesurés au voltmètre. Cet écart provient du calibrage du convertisseur ADC, c'est à dire la valeur du paramètre Vref que nous avons arbitrairement mis à 3,3V.

Codage des formules en FORTH

Sur mon PC, j'ai comme espace de travail le répertoire ESP32 developpements. Voici comment ce projet est organisé dans cet espace de travail:

📁 ESP32developments
    📁 __sandbox
        📁 B25 VCC Module

Dans le dossier B25 VCC Module, je crée un nouveau fichier b25.fs:

📁 ESP32developments
    📁 __sandbox
        📁 B25 VCC Module
            🖹 b25.fs

Le fichier b25.fs est un fichier texte. On l'ouvre et on commence à le remplir:

\ ********************************************************************* 
\ B25 Voltage Sensor 
\    Filename:      b25.fs 
\    Date:          05 apr. 2024 
\    Updated:       09 apr. 2024 
\    File Version:  1.0 
\    MCU:           ESP32 all models 
\    Forth:         ESP32forth all versions 7.x++ 
\    Copyright:     --- 
\    GNU General Public License 
\ ********************************************************************* 
 
RECORDFILE /spiffs/b25.fs 
 
<EOF> 

Pendant toute la phase de développement, il suffira ensuite de copier le code FORTH depuis RECORDFILE jusqu'à <EOF> inclus, puis coller ce code dans le terminal qui communique avec notre carte ESP32 pour enregistrer ce code dans le fichier b25.fs du système de fichiers SPIFFS.

RECORDFILE /spiffs/b25.fs 
 
\ set GPIOs used by B25 modules, values set in config.fs 
02 value B25_NUM_1 
03 value B25_NUM_2 
 
\ init GPIOs used by B25 modules 
: B25.init ( -- ) 
    B25_NUM_1 INPUT pinmode 
    B25_NUM_2 INPUT pinmode 
  ; 
 
<EOF> 

Revenons sur cette formule:

( 3514 * 3.3 / 4096 ) / ( 7500 / ( 30000 + 7500 ) )

Elle contient une valeur réelle, ici 3.3. La présence de cette valeur réelle nécessite d'effectuer tous les calculs avec les opérateurs arithmétiques F+ F* F/...

Commençons par traiter la partie droite de la formule:

( 3514 * 3.3 / 4096 )  / ( 7500 / ( 30000 + 7500 ) )

Voici le codage, en langage FORTH de la partie de formule marquée en rouge ci-dessus:

 7500e fconstant RES_1 
30000e fconstant RES_2 
RES_1 RES_2 RES_1 F+ F/ fconstant RES_DIVISOR 

Voyons maintenant la partie gauche de la formule:

( 3514 * 3.3 / 4096 )  / ( 7500 / ( 30000 + 7500 ) )

Voici le codage de la partie de formule marquée en rouge ci-dessus:

fvariable Vout              \ final Voltage after calculation 
fvariable Vref              \ Référence de tension pour ADC 
    3.3e Vref SF! 
fvariable RES               \ RESolution pour la conversion ADC 
    4095e RES SF! 
 
\ Calculate Vout from ADC value 
: Vout! ( ADCval -- ) 
    s>f Vref SF@ F*  RES SF@ F/ 
    RES_DIVISOR F/ 
    Vout SF! 
  ; 

Testons le mot Vout!:

3514 Vout!  Vout SF@ F.   \ display 14.158975 

En modifiant le contenu de la variable Vref, on peut générer un résultat très proche de la tension mesurée au voltmètre:

2.9e Vref SF! 
3514 Vout!  Vout SF@ F.   \ display 12.442735 

Reste à gérer l'affichage de la tension mesurée, émettre une alarme sonore si la tension batterie atteint des niveaux critiques.

Avant d'aborder ces extensions, nous allons aborder en priorité la manière de gérer de manière rationnelle l'ensemble des fichiers de notre projet. Voir:
Gestion rationnelle des fichiers du testeur de batterie.


Legal: site web personnel sans commerce / personal site without seling