Mesure de la consommation des véhicules électriques : Le système LeoINAGPS
sur
Intéressé par la mesure de la consommation électrique d'un véhicule électrique ? Il est important de suivre la consommation d'électricité d'un véhicule dans le temps, mais il est encore plus intéressant de pouvoir le faire en fonction de la nature de l'itinéraire suivi. Ce projet permet de détecter les paramètres électriques de base du moteur de traction en les reliant à l'itinéraire, aux pentes et aux altitudes, à l'aide d'un récepteur GPS et de Google Maps.
Consommation électrique des véhicules électriques
Un de mes amis, à mobilité réduite, utilise un scooter électrique pour gagner en autonomie. Il réside aussi plusieurs mois par an dans un petit village des Apennins ligures, non loin de chez moi. Notre région montagneuse présente de nombreuses montées et descentes, certaines avec des pentes particulièrement raides. C'est pour cette raison que les deux batteries au plomb de grande capacité, spécialement conçues pour la traction électrique, nécessitent des remplacements fréquents.
Je me demandais quelle était la consommation du scooter dans différentes conditions et envisageais même d'adopter des batteries plus performantes, telles que celles au lithium-ion. Contrairement aux vélos et scooters électriques équipés de moteurs sans balais, compacts et légers, et de batteries au lithium, ce scooter utilise de robustes moteurs CC à aimant permanent et des batteries au plomb. Le scooter sur lequel les tests ont été effectués est équipé de deux batteries 12 V/36 Ah, récemment remplacées par des batteries de plus grande capacité (45 Ah).
Pour la fonctionnalité GPS, j'ai développé mes propres fonctions pour lire la vitesse, la position et l'heure UTC. J'ai cependant décidé de ne pas utiliser la lecture de l'altitude par le GPS, car sa précision est insuffisante pour évaluer correctement les pentes des montées. Lors des premières compilations du nouveau programme, je me suis rendu compte que la RAM (2 kB) du microcontrôleur ATMega328 de l'Arduino Nano était insuffisante pour un fonctionnement stable. J'ai donc envisagé de le remplacer par un microcontrôleur ATmega32U4 comme celui utilisée sur Arduino Leonardo qui dispose de 2,5 kB de RAM et d'un UART libre.
Le nom de ce projet est inspiré en partie par Leonardo (la carte est compatible Arduino Leonardo), et aussi par le module INA226 qui mesure le courant et la tension de la charge, ainsi que par le récepteur GPS qui complète le système.
À partir de ces tests, j'ai pu déduire la consommation du scooter, utilisé par mon ami, dans les différentes conditions du trajet, facilement identifiable à partir de la carte Google. Malheureusement, je n'ai pas pu calculer la pente à partir de la coordonnée verticale du GPS en raison de sa précision et de sa résolution limitées. Il existe des capteurs de pression capables de fournir l'altitude avec une résolution de quelques dizaines de centimètres, mais ils n'ont pas été utilisés dans les tests.
Description du système
Le schéma fonctionnel des divers composants du système est illustré dans la figure 1.
Le module INA226
Pour la mesure du courant avec un shunt, deux méthodes de connexion sont possibles :
- Vers la masse (côté bas) : Le shunt est connecté entre la charge et la masse.
- Vers la source (côté haut) : Le shunt est connecté entre la source d'alimentation et la charge.
Le circuit intégré INA226, de Texas Instruments, est un dispositif numérique capable de mesurer le courant avec un shunt côté haut ou côté bas. Il mesure également la tension, calcule la puissance et fournit une alarme multifonctionnelle . Le schéma fonctionnel de l'INA226 est représenté dans la figure 2.
Le CA/N interne est basé sur un convertisseur delta-sigma 16 bits (ΔΣ) avec un temps de conversion typique de quelques millisecondes, adapté également aux courants variants rapidement dans le temps. Il permet la mesure des courants négatifs - les nombres négatifs sont représentés au format complément à deux.
La résolution de la tension de shunt est de 2,5 µV avec une pleine échelle de 32 768 × 2,5 µV = 81,92 mV. Pour la tension VBUS, la résolution est de 1,25 mV avec une pleine échelle théorique de 40,96 V (ne devant pas dépasser 36 V). La résolution de la puissance est 25 fois celle du courant, la pleine échelle dépendant du shunt utilisé. Le système a donc une précision remarquable.
L'interface entre la puce et le microcontrôleur se fait via le bus I2C. De petits modules (carte breakout) comme celui que j'ai utilisé, visible sur la figure 3, sont disponibles sur le marché. Le module comporte deux broches d'adresse, A0 et A1, que l'on peut connecter à VCC, GND, SDA, ou SCL pour définir l'adresse I2C de l'INA226. Le module que j'ai utilisé intègre deux résistances pull-down, l'adresse est donc 0x40. Des pastilles à l'arrière permettent de modifier cette adresse, offrant jusqu'à 16 adresses différentes, utile pour surveiller une batterie avec de nombreuses cellules.
Ce module intègre un shunt de 0,1 Ω (R100) qui permet de mesurer un courant maximal de 0,8192 A. Mais j'ai préféré l'enlever, en soudant à sa place un condensateur de 1 µF pour filtrer le bruit, et utiliser mon propre shunt (nous y reviendrons plus loin).
Le module ATmega32U4 Pro Micro
Le module Pro Micro utilisé est doté d'un microcontrôleur ATmega32U4 et est compatible avec Arduino Leonardo. Il peut être programmé avec l'EDI Arduino en sélectionnant la carte Leonardo. Il est compact : environ 33 × 18 mm, encore plus petit que l'Arduino Nano, ce qui est similaire à celui d'une vieille EPROM DIL à 24 broches. Si la taille n'est pas une contrainte, une carte Arduino Leonardo peut être utilisée à la place.
La carte utilisée dans ce projet est représentée dans la figure 4. Elle a un régulateur de 5 V et peut être alimentée par USB ou par l'entrée RAW (6...12 V). L'alimentation via la broche RAW à un minimum de 6 V fournit une tension VCC de +5 V grâce au régulateur. L'alimentation via USB fournit environ 4,8 V sur RAW, une valeur réduite à cause de la chute de tension dans une diode Schottky qui sert de protection, ainsi qu'un fusible. Si vous souhaitez utiliser le régulateur interne, qui n'a pas de dissipateur thermique, je recommande d'utiliser des tensions basses de 6...7.2 V et d'éviter de connecter des charges supérieures à 100...150 mA. Si vous utilisez un régulateur externe, comme dans notre cas, vous pouvez alimenter la carte avec +5 V sur la broche VCC en excluant le régulateur interne.
Le module MicroSD
J'ai choisi un module SD adapté à Arduino, c'est-à-dire avec des niveaux logiques de 5 V et une alimentation de 5 V (voir figure 5). Il est équipé d'un régulateur de 3,3 V et d'un adaptateur de niveau. Les modules dépourvus d'adaptateur de niveau et de régulateur 3,3 V ne doivent pas être utilisés pour ce projet. Pour gérer la carte SD, j'ai utilisé la bibliothèque SD d'Arduino.
L'écran LCD
J'ai utilisé un afficheur LCD standard à deux lignes de 16 caractères équipé d'un contrôleur compatible Hitachi HD44780 et d'un rétroéclairage à LED à haute efficacité, qui consommait environ 20 mA, réduit à 10 mA en ajoutant une résistance externe en série avec la résistance interne. La figure 6 illustre l'aspect de l'afficheur connecté au microcontrôleur via une interface parallèle avec 4 données et 2 bits de contrôle.
Le module GPS
Sur le marché, on trouve une vaste gamme de récepteurs GPS/GNSS, y compris des modèles abordables. L'important est qu'il puisse être alimenté en 5 V. Il est crucial que ces modules puissent être alimentés en 5 V et de connaître leur vitesse de transmission du port série (généralement de 4 800 ou 9 600 bit/s). Certains modules sont équipés d'une antenne intégrée, tandis que d'autres ont une antenne discrète. J'ai utilisé un ancien récepteur 4,800 baud, doté d'une antenne intégrée et d'une base magnétique, que j'ai connecté au système via un connecteur JST à 4 broches.
Schéma du circuit
La figure 7 (voir page suivante) illustre le schéma du système. En plus du connecteur pour l'interface série, j'ai également monté un interrupteur pour sélectionner les mesures de puissance, avec ou sans GPS. Le bouton SS sert à démarrer ou arrêter l'acquisition sur la microSD. Le régulateur LM7805 pourrait également être omis si nous utilisions celui intégré à la carte, mais l'utilisation d'un régulateur externe, nécessitant une tension minimale de 7 V et pouvant supporter jusqu'à 24 V avec un dissipateur thermique, offre une plus grande fiabilité. La consommation de courant de l'appareil (avec rétroéclairage) est d'environ 47...50 mA.
La diode Schottky D1 est utilisée pour éviter un conflit potentiel en cas de présence simultanée de l'alimentation externe (5Ve) et de l'alimentation USB. Les résistances R1 et R2, ainsi que le condensateur C5, constituent un filtre passe-bas de premier ordre pour réduire le bruit.
Calcul du shunt
Pour mesurer des courants élevés, il est recommandé d'acheter des shunts commerciaux plutôt que de les fabriquer soi-même. Des gammes de 10, 20, 50, et 100 A ou plus sont facilement disponibles sur le marché et offrent généralement une précision de 0,5% (voir figure 8). Une tension de sortie de 75 mV est couramment utilisée pour tous les courants à pleine échelle, très proche de la pleine échelle de l'INA226, qui est de 81,92 mV.
Pour mes besoins, j'ai choisi un shunt de 75 mV pour mesurer des courants jusqu'à 50 A, donnant une résistance de:
Rse = 75 mV / 50 A = 1.5 mΩ
Le courant à pleine échelle devient alors :
Ifs = 81,92 mV / Rse = 54.613 A
La résolution du courant sera :
54.613 / 32768 = 1.666 mA
La puissance maximale, dissipée par le shunt, sera :
P = V * I = V2 / R = 4.474 W
Données GPS
Pour analyser les messages NMEA, transmis par le récepteur GPS, j'ai développé des fonctions spécifiques. Le programme lit les phrases NMEA RMC (Recommended Minimum Specific Data) car elles fournissent non seulement les coordonnées géographiques mais aussi la vitesse en nœuds, ainsi que la date et l'heure. Par exemple :
$GPRMC,141507.870,A,4429.2796,N,00907.4338,E,0.00,,180522,,*1B
Cela correspond à une heure UTC de 14:15:07.870, des données valides, une latitude de 44°29.2796' N, une longitude de 9°07.4338' E, une vitesse de 0 nœuds, sans direction spécifique, en date du 18/05/2022, sans indicateur de mode. Ces paramètres sont détaillés dans le tableau 1.
Les coordonnées sont converties des degrés et minutes en degrés décimaux. La chaîne de données outdata, enregistrée sur la microSD, est structurée comme suit :
,time,latitude,longitude,speed
Pour l'exemple cité, cela se présente comme suit :
,141507,4429.2796,00907.4338,0.00
Logiciel de gestion INA226
J'ai utilisé une version modifiée de la bibliothèque INA226.h library, en raison de quelques imprécisions dans la version originale. J'ai modifié les fonctions calibrate(float rShunt, float iMaxExpected) et setShuntVoltageLimit(float voltage).
Il se peut que l'auteur ait déjà effectué des modifications, mais je recommande d'utiliser la version disponible sur la page web d'Elektor Labs pour cet article , car elle a été testée avec ce système.
La fonction calibrate() prend en paramètres d'entrée la résistance du shunt et le courant maximum, dans notre cas :
rShunt = 0.0015 Ω et iMaxExpected = 54.613 A
Cette fonction calcule plusieurs variables :
- currentLSB = iMaxExpected / 32768 = 54.613 / 32,768 = 1.666 [mA]
- calibrationValue = 0.00512 / currentLSB / rShunt = 0.00512 / 0.00166 / 0.0015 = 2,048
- powerLSB = currentLSB * 25 = 0.000625 * 25 = 15.625 [mW]
Formats des données de l'écran et de la microSD
Compte tenu de la résolution des variables à afficher sur l'écran, voici leurs formats :
- Bus voltage: V=xx.xx (7 caractères)
- Shunt current: I=xx.xxx (8 caractères)
- Bus power: W=xxx.xx (8 caractères affichés)
Ainsi, sur la première ligne, je saisi la tension et le courant, séparés par un espace, et sur la deuxième ligne, j'entre la puissance :
V=xx.xx I=xxx.xxx
W=xx.xx
En cas d'utilisation du GPS, la vitesse en km/h et l'heure UTC sont indiquées sur la deuxième ligne.
Mesures de la consommation d'énergie
La chaîne de caractères dataString, qui sera enregistrée sur la SD, est structurée comme suit :
Vbus,Ishu,power,Vshu
Où Vbus est la tension de la batterie, Ishu est le courant circulant à travers le shunt, power est leur produit et Vshu est la tension aux extrémités du shunt. Si le GPS n'est pas utilisé à bord, ce sont les seules mesures pour chaque échantillonnage ; si le GPS est utilisé, les données relatives à l'heure, à la position et à la vitesse seront également ajoutées.
Tests du système LeoINAGPS
Pour ces tests, j'ai utilisé le shunt de 50 A mentionné précédemment, qui est de classe 0,5%. Les essais ont été effectués dans un petit village des Apennins ligures, et le système a été monté sur un scooter électrique appartenant à mon ami Roberto (figure 9). Afin de faire de la place à l'appareil, le boîtier situé sous le siège du conducteur a été enlevé.
Le trajet débutait dans le jardin de la maison de mon ami et comprenait initialement plusieurs descentes de divers degrés de pente, tandis que le chemin du retour empruntait une autre route marquée par des montées significativement raides. Le parcours, bien que relativement court, comportait des pentes assez raides, testant ainsi les capacités du moteur de ces scooters, majoritairement de fabrication chinoise.
Ces scooters sont équipés d'un moteur DC conventionnel d'environ 1 000 W, alimenté par deux batteries au plomb de 12 V conçues pour la traction électrique et connectées en série. La protection est assurée par un fusible de 40 A et un interrupteur thermique de 30 A. Le contrôleur électronique intégré, à base de MOSFET, commande le moteur en mode PWM. Les batteries d'origine avaient une capacité de 35 Ah, mais ont été remplacées par des batteries de 45 Ah pour augmenter l'autonomie sur des terrains accidentés comme celui du test. Sur un terrain aussi vallonné, les batteries ont une durée de vie relativement courte et doivent être changées presque chaque année. En effet, la capacité de 45 Ah est calculée sur une base de décharge de 20 heures (I = 2,25 A), et pour une décharge de 5 heures, plus conforme à l'usage réel, cette capacité se réduit à 35 Ah (I = 7 A).
À l'exception du GPS, le système a été monté sous le siège du scooter et au-dessus des batteries, comme le montrent la figure 8 et la Figure 10. Le système LeoINAGPS était alimenté par deux batteries au lithium en série (7,2 V).
Le récepteur GPS a été monté sur un support spécial pour éviter toute obstruction par le conducteur, comme le montre la figure 9. Il intègre l'antenne et le récepteur. Les récepteurs GPS fournissent généralement une mesure de position toutes les secondes, le système doit donc être synchronisé avec la réception des messages NMEA. Chaque mesure, enregistrée sur la carte microSD, se compose de huit paramètres : tension de la batterie [V], courant délivré [A], puissance [W], tension shunt [V], heure UTC, latitude, longitude et vitesse [km/h]. Les coordonnées sont exprimées en degrés et en dixièmes de degrés.
Avant de démarrer l'acquisition en appuyant sur le bouton situé à l'avant de l'enregistreur, il est nécessaire d'attendre que le GPS reçoive et traite les signaux d'au moins trois satellites, ce qui peut prendre quelques minutes. Une fois le GPS est opérationnel, la LED commence à clignoter et l'heure UTC apparaît également sur l'écran.
L'heure locale italienne est en avance d'une heure sur l'heure UTC pendant l'été (CEST) ou de deux heures pendant l'heure normale (CET). Lorsque les tests sont terminés, il faut appuyer à nouveau sur le bouton pour terminer l'acquisition. Le test s'est très bien déroulé et a duré 963 s, soit environ 16 minutes.
Mesures
La figure 11 présente les courbes temporelles de la tension de la batterie, du courant délivré, de la puissance et de la vitesse du véhicule, tous exprimés en secondes. La période où la vitesse est nulle correspond à un arrêt du véhicule pour la prise de la photo visible dans la figure 9. Dans les descentes, le moteur à balais agit comme une dynamo, inversant le courant et provoquant des surtensions de plus de 32 V à plusieurs occasions, ce qui n'est pas idéal pour les batteries.
Le graphique de l'historique du courant révèle des informations précieuses, permettant d'identifier clairement les différentes descentes, marquées par des valeurs négatives de courant : la première descente (entre les secondes 89 et 112), suivie d'une légère remontée et le début de la seconde descente (à la seconde 136), puis un arrêt (entre les secondes 148 et 186), et d'autres descentes variées (entre les secondes 189 et 300), avec la troisième (entre les secondes 660 et 683) et la quatrième (entre les secondes 759 et 786) descentes étant les plus longues et les plus intenses.
Comme on pouvait s'y attendre, c'est dans les montées que la consommation est la plus élevée, avec des pics dépassant 800 W. On peut constater les pics de courant au démarrage du moteur ou à l'arrêt du scooter (freins).
Durant le test, la vitesse typique était d'environ 4 à 5 km/h avec des pointes à 6 km/h, comparable à un rythme de marche. ce qui s'explique par l'absence de longs tronçons plats. Le trajet aller s'est achevé à la seconde 372 ; le trajet retour, suivant un itinéraire différent, a été plus longue. Le moment du demi-tour est identifiable sur le diagramme de la vitesse, marqué par une chute de 5,2 à 2 km/h. Cette manœuvre est encore plus visible sur le diagramme de longitude, présenté à la Figure 12.
Le scooter a effectué une montée relativement raide, suivi d'un court segment de route qu'il a parcouru sur une centaine de mètres avant de faire demi-tour. Cette inversion, qui s'est produite à la seconde 704, est visible sur le tracé de latitude. D'après ces courbes, on constate que les coordonnées du point d'arrivée sont similaires à celles du point de départ.
Importer l'itinéraire dans My Maps
Pour visualiser l'itinéraire superposé aux images satellites, on peut utiliser My Maps et Google Maps, qui sont disponibles gratuitement en ligne. Vous devez posséder un compte Google et suivre les instructions ci-dessous :
- Connectez-vous à My Maps sur votre ordinateur.
- Cliquez sur +CREATE A NEW MAP.
- Dans la légende de la carte, cliquez sur Add layer
- Nommez la nouvelle couche si vous le souhaitez.
- Dans cette couche, cliquez sur Import.
- Sélectionnez ou téléchargez le fichier VIPVSGPS.csv puis cliquez sur Select.
- Choisissez les colonnes pour les latitudes (première colonne), les longitudes (deuxième colonne) et les étiquettes pour chaque point (par exemple, la puissance).
Si vous souhaitez visualiser l'itinéraire avec Google Maps et superposer la photo satellite, il suffit d'importer la couche avec des opérations simples. La figure 13 montre le résultat, et la figure 14 montre uniquement le détail de là où l'itinéraire a commencé et s'est terminé. Ces programmes permettent de placer une valeur spécifique à côté de chaque point. J'ai donc choisi d'indiquer la puissance mesurée sur le moteur à chaque instant.
Calcul de l'énergie
Pour évaluer l'autonomie, il est crucial de savoir combien d'énergie a été consommée par les batteries. La quantité d'énergie électrique ∆E fournie par les batteries au moteur dépend de la puissance développée et de l'intervalle de temps ∆t = t2-t1 ; si la puissance P était constante durant cet intervalle, l'énergie se calculerait facilement comme suit :
∆E = P-∆t [J] (1)
L'énergie est exprimée en joules (1 J = 1 W/s) dans le système international. Pour les systèmes électriques, on utilise fréquemment les wattheures (Wh), obtenus en divisant les joules par 3 600. Dans notre exemple, la puissance n'est pas constante et varie dans le temps, ce qui nécessite une intégration continue plutôt que discrète, et la formule (1) doit donc être ajustée :
Une méthode numérique de base pour effectuer une intégration est celle des trapèzes :
Ce système est très approximatif. Pour calculer l'intégrale définie d'une fonction - c'est-à-dire l'aire sous-tendue - on approxime P(t) par de nombreux trapèzes dont l'aire est facile à calculer, comme le montre la figure 15.
Cette méthode est d'autant plus précise que l'intervalle ∆t diminue. Dans notre cas, la période d'échantillonnage, ∆t, est d'une seconde, donc :
E2 = (P1 + P2) ∙ 1s / 2 + E1 [J]
Avec un tableur, il est facile de calculer l'énergie en J et en divisant par 3 600, en Wh. Pour estimer l'autonomie approximative du scooter, il faut calculer la perte de charge C des batteries, exprimée en Ah, il faut intégrer le courant, de façon similaire à ce que nous avons fait pour l'énergie, donc :
C2 = (I1 + I2) ∙ 1s / 2 + C1 [Ah]
La charge est liée à l'énergie par la tension ; en effet, l'énergie en [Wh] est obtenue en multipliant la charge par la tension moyenne.
Les résultats des données d'essai, traitées dans Matlab, sont les suivants :
- Traitement des mesures du système LeoINAGPS.
- Nom du fichier traité = VIPVSGPS2.CSV
- Nombre d'échantillons acquis = 963
- Période d'échantillonnage = 1.000 [s]
- Énergie fournie au moteur = 48.943 [Wh]
- Capacité perdue (P&N) = 1.650 [Ah]
- Capacité perdue (P) = 1.793 [Ah]
- Tension moyenne de la batterie = 26,103 [V]
- Courant de décharge moyen = 6,206 [A]
- Capacité (E/V moyenne) = 1,875 [Ah]
Dans ce cas, la capacité perdue (positive & négative) est sous-estimée, en partie à cause du ∆t trop élevé et en partie à cause des segments où le courant est négatif (pentes), qui ne contribuent pas efficacement à la recharge de la batterie. En fait, elles sont plus nuisibles qu'utiles. La capacité calculée uniquement sur le courant positif (P), la tension moyenne de la batterie et le courant moyen ont également été calculés.
Le programme
Au démarrage, le programme initialise les E/S, l'écran LCD, l'INA226, vérifie si la carte microSD est présente et lit la position du commutateur GPS. Dans setup(), le port série est initialisé à un débit de 4 800 bauds :
Serial1.begin(4800); // initialize UART with GPS baud rate
Si vous utilisez un module GPS plus moderne, susceptible d'opérer à 9 600 bauds, vous devrez ajuster ce paramètre en conséquence.
Lorsque le commutateur est réglé sur GPS, le programme affiche « Wait for GPS... » sur l'écran et attend un signal valide du GPS. La fonction GetData() extrait l'heure, la position et la vitesse à partir des phrases NMEA RMC.
Lorsque les données sont valides (Statut = « A »), la vitesse et l'heure (hhmmss) sont affichées sur la seconde ligne de l'écran. Cette fonction est aussi chargée de convertir les coordonnées, qui sont initialement exprimées en degrés et minutes, en degrés décimaux.
Questions ou commentaires ?
Avez-vous des questions techniques ou des commentaires sur cet article ? Envoyez un courriel à l'auteur, ou contactez Elektor.
L' article « The LeoINAGPS System » (240305-04) paraît dans Elektor Sep/Oct 2024.
Discussion (0 commentaire(s))