Une fonctionnalité bien utile sur un système embarqué et de connaitre la charge de ses batteries. Nous avons donc décidé en refaisant notre carte alimentation de mesurer les tensions aux bornes des batteries. On faisait déjà ça avant, mais vu que le pic ne marchait pas vraiment, et bin, ça ne … marchait pas vraiment.
Cette année grand moyen ! nous avons acheté 3 ina 148, de magnifiques amplificateurs différentiels de gain 1. Capable de supporter une tension à ses bornes alors qu’il n’est pas allumé, c’est le composant fait pour ça. Un petit pont de résistance pour ramener la tension des batteries à une tension entre 0 et 5V, et op! on a une belle image de la tension des batteries !
Passons sur l’épisode Murphyesque (merci Marc pour tes magnifiques greenwire de la mort qui tue) dû à une erreur de numéro de patte (il vaudrait une loi qui oblige à toujours compter dans le même sens d’ailleurs), et allons directement à, la programmation.
Murphy nous gettait, à l’affut au coin de la rue (Alin Trosphère, poète es robotique)
Le pic 26K80 a un (seul) magnifique convertisseur sur 12 bits, capable de fonctionner en mode différentiel, etc… Je vous conseille d’ailleurs la lecture de ce magnifique chapitre de datasheet qui ravira tout les picteux.
La tension des batteries variant plutôt comme un escargot (tout bon prof de physique vous dira d’ailleurs que l’on peu estimer qu’elle est constante) on décide de faire une mesure toute les secondes.
Et là il y a un truc très intéressant à savoir sur les convertisseurs A/D des pic: il sont capable de moyenner! Grosso modo, le convertisseur moyenne pendant un temps (appelé TACQT par microchip) réglable par l’utilisateur, puis le convertisseur … convertit cette mesure.
Ce qui est assez génial quand vous avez le temps et que vous voulez une bonne mesure, c’est que vous pouvez choisir TACQT aussi long que vous voulez, en le mettant en mode reset. La procédure est simple:
- On met le module A/D en mode reset (ADCON2bits.ACQT = 0 pour ceux qui ne sauraient plus ou est leur table de nuit)
- On démarre l’acquisition en choisissant un canal analogique
- On attend…
- Et la, on lance la conversion (ADCON1bits.GO_NOT_DONE = 1)
Quel est l’intérêt? En moyennant la mesure est plus fiable. Avec un convertisseur 12bits, pour une tension d’entrée entre 0 et 15V (avant le pont de résistance, bien entendu), on peu théoriquement atteindre une précision de 1mV.
Afin de nous faciliter le débugage, nous envoyons le résultat via can à notre carte mère qui l’affiche sur l’écran LCD. Résultat vous avez un super voltmètre (celui acheté au supermarché n’affiche que 2 décimales après la virgule).
Bon après une petite campagne de calibration, il s’avère que l’écart type de l’erreur est d’environ 5mV. Finalement notre magnifique voltmètre à plus de 1000€ ne fait pas mieux que celui acheté au supermarché.
Maintenant interro surprise : A quoi ça sert?
La robotique, ou l’art de faire un truc à faire ce que l’on fait mieux nous même