Pages: [1] 2   Go Down
Author Topic: balance 3axes  (Read 1672 times)
0 Members and 1 Guest are viewing this topic.
Corsica
Offline Offline
Jr. Member
**
Karma: 0
Posts: 82
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Bonjour à tous,

Je voudrais réaliser une balance 3axes avec une arduino uno, une INA125 et des jauges d'extensiometrie en pont de wheastone.
Je m'inspire de ceci: http://cerulean.dk/words/?page_id=42
Pour limiter la conso, j'envisage d'exciter successivement les trois pont et mesurer la microdef sur une seule INA125, (voir mon schémas).
Avant de me lancer, j'aurais aimé avoir votre avis.


* shemas.png (3.06 KB, 400x300 - viewed 23 times.)
Logged

France
Offline Offline
God Member
*****
Karma: 4
Posts: 971
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Bonjour

Supposons réglé le problême du collage des jauges....

Les ponts de Wheatstone vont se géner avec cette mise en parallèle !!!
Il est déjà difficile de récupérer la faible tension différentielle d'un pont, si en plus il y a des résistances en parallèle je crains qu'il n'y ait plus grand chose d'intéressant à mesurer.
Le fait de ne pas exciter 2 des ponts ne supprime pas la perturbation, les résistances sont toujours là en parallèle avec celles du pont actif qui aura du mal à s'exprimer !!

A mon avis il est impératif de séparer les ponts :
-en mettant un ampli d'instrumentation par pont,
-ou en prenant un bon convertisseur Analogique Numérique possédant les 3 entrées différentielles,
-ou en interposant un multiplexeur analogique entre ponts et Ampli unique

Exemple (parmi d'autres) de convertisseur utilisable : le MCP3424 de Microchip, 18bits, bus I2C, 4 entrées différentielles. http://jeelabs.net/projects/hardware/wiki/Analog_Plug


* MCP3424.jpg (27.41 KB, 461x303 - viewed 16 times.)
« Last Edit: September 29, 2011, 12:17:59 pm by al1fch » Logged

Corsica
Offline Offline
Jr. Member
**
Karma: 0
Posts: 82
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Je m'en doutais un peu.
Merci pour le lien, c'est une bonne solution.
Cependant,
  • il me semble que sur arduino, I2c est en 5v.  smiley-eek-blue
  • Je suis donc obligé d'exciter les 3 ponts en permanence? smiley-evil
Logged

France
Offline Offline
God Member
*****
Karma: 4
Posts: 971
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

-Les ponts peuvent etre excités sous 5V l'un après l'autre en les reliant chacun à une sortie numérique.
-Si le convertisseur est comme le MCP3424 (5V ou 3,3V) il n'y a pas de probleme. Tout peut être sous 5V
Logged

Corsica
Offline Offline
Jr. Member
**
Karma: 0
Posts: 82
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

En voilà des nouvelles qu'elles sont bonnes!
Il n'y a plusqu'à!
Merci encore, et @+, quand le montage sera prêt!
Logged

Corsica
Offline Offline
Jr. Member
**
Karma: 0
Posts: 82
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Quote
-Si le convertisseur est comme le MCP3424 (5V ou 3,3V) il n'y a pas de probleme. Tout peut être sous 5V
et pourtant, je lis à http://jeelabs.net/projects/hardware/wiki/Analog_Plug:
Quote
An I2C bus running at 3.3V is used for I/O,
Faut-il prévoir un convertisseur tel http://www.hobbytronics.co.uk/logic-level-converter ?
Ça me laisse perplexe. smiley-roll-sweat
Logged

France
Offline Offline
God Member
*****
Karma: 4
Posts: 971
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Un peu plus bas sur ma même page on voit :
Quote
This plug can be operated at 5V as well as 3.3V.
This board uses the conventions of a JeePlug and can be used with the ports on a JeeNode. It can also be used with other boards and MCU's, if you hook it up properly and adapt the interface code for it.

En fait le schéma montre effectivement une totale adaptabilité au 5V car
-la puce le supporte,
-les résistances de tirage (pull-up) du bus I2C ne sont pas implantées.


* schema.jpg (51.48 KB, 559x413 - viewed 16 times.)
Logged

Corsica
Offline Offline
Jr. Member
**
Karma: 0
Posts: 82
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ça y est, j'ai monté le machin sur mon arduino uno.
j'ai pompé sans tout bien comprendre:
Code:
#define analogPlug 0x68         // analogPlug I2C address

#include <Wire.h>
byte buffer[3];   // Array to store values

void setup()
{
    Serial.begin(9600);
    
    Wire.begin();
    wire.beginTransmission(analogplug);
    // Set analoogPlug settings
    // chanel1, continuous,18-bit, gain x1
    wire.send(0x1c);
    wire.endTransmission();
}

void loop()
{
    // Read the analogPlug

    Wire.beginTransmission(analogPlug);
    Wire.requestFrom(analogPlug,3); // Read 3 bytes 18-bit
    i = 0;
    while(Wire.available())
    {
        buffer[i] = Wire.receive();
        i++;
    }
    Wire.endTransmission();

    //Combine bytes into integer
    long value = (long) buffer[0] << 16 | buffer[1] << 8 | buffer[2];
    long uvolt = round(value * 2048/131.072);
    // Print out what we have
    Serial.println(uvolt/10);
    delay(400);             // wait for a second  
}


résultat: avec une vieille pile de1.5v, j'obtiens 147871, ce qui colle assez bien avec mon multimetre.
en court circuit, j'ai un beau 0
mais en mettant la même pile à l'envers, tuedieux! j'ai -45312!
j'essaie de comprendre avec le MSB, mais surtout, je n'ai pas encore bien compris pourquoi cette ligne:
Code:
uvolt = round(value * 2048/131.072);
sans aide, peut-être que j'y arriverais, mais un petit coup de main n'est-ce-pas....
« Last Edit: October 12, 2011, 11:57:15 am by patsol » Logged

France
Offline Offline
God Member
*****
Karma: 4
Posts: 971
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ce convertisseur travaille içi sur 17 bits de valeur absolue  (FAUX)    et un bit MSB de signe ("18bits")

2 puissance 17 = 131 072 (nombre de valeurs absolues possibles)
La réference de tension interne (précision 0,05 %) est 2,048V ou 2048 mV (pleine échelle en volts)

Le rapport 2048/131,072 permet donc d'afficher une valeur en µV
« Last Edit: October 12, 2011, 07:10:20 am by al1fch » Logged

Corsica
Offline Offline
Jr. Member
**
Karma: 0
Posts: 82
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Merci, c'est lumineux! smiley-cool

En toute rigueur, avec 17 bits, la valeur max est 131071?
pour le signe et le msb, Pas de soucis.

par contre, nouvelle surprise, quand je branche correctement ma pile, j'obtiens:
0101101010000101010110    1483094
bien, et en inversant la polarité
1110000100000000100001    -1589281
 smiley-roll-blue

0.1V, ça me fait un peu de peine!

 
Logged

France
Offline Offline
God Member
*****
Karma: 4
Posts: 971
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

mode 'pinaillage' ON
Quote
En toute rigueur, avec 17 bits, la valeur max est 131071?
Oui?  Et avec la valeur zéro in a 131072 "valeurs possibles " !!
mode 'pinaillage' OFF

100mV d'erreur pour un circuit ayant 1µV de résolution c'est effectivement dérangeant !!!
Je possède cette petite carte mais ne l'ai pas encore testée. Il faut trouver la cause et 'débugger" !!
je n'ai pas le temps en ce moment . Il faudrait vérifier dans la doc du convertisseur comment sont codés les nombres négatifs et voir si le programme de JCW respecte bien ce codage.
J'ai écrit hier un peu vite et sans vérifier '17bits de valeur absolue'.....  smiley-red A vérifier, c'est douteux  !!

CORRECTION  : nombres négatifs codés en 'complément à 2'   !!


* complément à 2.jpg (29.98 KB, 391x281 - viewed 7 times.)

* conversion.jpg (42 KB, 371x305 - viewed 9 times.)
« Last Edit: October 12, 2011, 07:11:33 am by al1fch » Logged

Corsica
Offline Offline
Jr. Member
**
Karma: 0
Posts: 82
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Quote
mode 'pinaillage' OFF
Bon, c'était juste pour ma compréhension. C'est à la notion de "valeurs possibles" qu'il faut que je réfléchisse, plutôt que valeur max?

C'est peut-être (sans doute) mon adaptation du code de JCW qui est en cause, mais il semble que celui-ci ne fait aucun effort pour connaître la polarité. Dans certains cas, ça peut être sans intérêt, mais pour mes ponts de jauges, j'ai besoin de la mesure signée.

Quote
Il faudrait vérifier dans la doc du convertisseur comment sont codés les nombres négatifs
c'est le MSB: 1-> négatif 0->positif
0101101010000101010110    1483094
1110000100000000100001    -1589281

Enfin, si j'ai bien compris. C'est peut-être un peu plus compliqué!?
Logged

France
Offline Offline
God Member
*****
Karma: 4
Posts: 971
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Quote
1 11111111111111111  ce que donne le circuit pour -1
   11111111111111111  on laisse le bit de signe
   00000000000000000  on inverse chaque bit
   00000000000000001  on ajoute 1
Il faut faire ce travail pour récupérer la valeur absolue d'un nombre négatif.
C'est un codage fréquent pour les convertisseurs analogique/numérique ou numérique/analogique
Avec ce codage le nombre zéro n'esiste pas en deux exemplaires +0 et -0
De plus de manière paradoxale ça simplifie les opération arithmétiques en binaire.
Logged

Corsica
Offline Offline
Jr. Member
**
Karma: 0
Posts: 82
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Oui, bon, je galère:

j'ai compris  smiley-small et corrigé mon code en fonction de  tes  conseils, al1fch:
Code:
    int i = 0;
    while(Wire.available())
    {
        buffer[i] = Wire.receive();
        i++;
    }
    Wire.endTransmission();
   //Combine bytes into integer
    int signe = 1;
    long value = (long) buffer[0] << 16 | buffer[1] << 8 | buffer[2];
    if (bitRead(value,17) == 1)  //c'est négatif
    {
      bitWrite(value,17,0);// on laisse le bit de signe
     //!! avec bitWrite(value,16,0), ca regle le probleme, du moins avec ma pile, mais bon!
      signe = -1;
      value = ~ value;//on inverse chaque bit
    }

bon, j'ai pas encore ajouté 1 (mode 'pinaillage' OFF)
Vous ne pensez pas que la méthode de récupération de la valeur est peut-être en cause?

« Last Edit: October 14, 2011, 12:49:46 pm by patsol » Logged

Ales
Offline Offline
Faraday Member
**
Karma: 39
Posts: 3626
Do or DIY
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Je crois tout simplement que ce qui est en cause c'est les specs du MCP : http://ww1.microchip.com/downloads/en/DeviceDoc/22088c.pdf

Tension minimale : Vss - 0.3 donc si tu lui envois -1.5V c'est un peu normal que ça bug ...
Logged


Pages: [1] 2   Go Up
Jump to: