Go Down

Topic: [Aide] Valeur analogique convertie en volte (Read 1 time) previous topic - next topic

Nov 17, 2012, 07:56 pm Last Edit: Nov 17, 2012, 07:57 pm by lacolombenoir Reason: 1
Bonjour, après une journée de recherche je me permet de poster mon problème,

Dans le cadre de l'utilisation d'un accéléromètre j'ai besoin de connaitre le voltage rendu vers mon entrée analogique,
La valeur prise en compte est normalement de 0 a 1023 correspondent a 0 et 5 volte, donc en théorie si je divise 5 par 1023 sa devrais me donner 0.005 volte par unités,
Le problème c'est que le résultat ne correspond pas a la réaliser car je devrais normalement enregistrée 1.65v et j'obtiens 1.95v,
Mon voltmètre lui me renvois bien 1.65v,

Existe t-ils un moyen de convertir la valeur analogique de l'Arduino en voltage et ce sans montage externe ?
www.hatokuro.comuf.com site consacrer au rétrogaming

barbudor

L'entrée analogique mesure 0..1023 entre 0V et VCC
Mesure ton VCC, il ne doit pas être à 5V mais plutot à 4.23V
Barbuduino: Arduino sur Breadboard & VinciDuino: Clone Leonardo // WR703: Mini-routeur hacké // LauchPad MSP430 et Stellaris // Panda II Arduino-like .NetMF sous VisualC#
RTFC: Read That F.....g Code / RTFD: Read That F.....g Doc / RTFDS: Read That F.....g DataSheet / RTFS: Read That F.....g Schematic / Wot da ya wanna D.I.Y. today ?

68tjs

Ce n'est pas normal les entrées analogiques donnent des résultats justes pour autant qu'elles sont utilisées correctement, à 99,99% il y a des erreurs quelque part.

Ce qui arrive fréquemment c'est que le même fil sert simmultanément à faire passer beaucoup de courant et de référence pour la mesure de tension avec les entrées analogiques et si le fil est fin sa résistance ne sera pas négligeable.
Si tu es dans ce cas commence par remplacer le fil du 0V par un gros fil comme ceux utilisé pour le 220V et regarde si la différence est restée la même ou si elle à diminuée.

Sinon pour pouvoir répondre :
- Schéma de câblage complet avec tout ce qui est connecté.
- Référence de tout ce qui est connecté avec des liens vers les datasheets.
- Si possible photo de la réalisation.
et
- code.


Artouste


Bonjour, après une journée de recherche je me permet de poster mon problème,

Dans le cadre de l'utilisation d'un accéléromètre j'ai besoin de connaitre le voltage rendu vers mon entrée analogique,
La valeur prise en compte est normalement de 0 a 1023 correspondent a 0 et 5 volte, donc en théorie si je divise 5 par 1023 sa devrais me donner 0.005 volte par unités,
Le problème c'est que le résultat ne correspond pas a la réaliser car je devrais normalement enregistrée 1.65v et j'obtiens 1.95v,
Mon voltmètre lui me renvois bien 1.65v,

Existe t-ils un moyen de convertir la valeur analogique de l'Arduino en voltage et ce sans montage externe ?

Bonsoir
meme avis que barbudor
par defaut AREF=VCC
et il est simple de voir que pour une meme tension stabilisée sur une entrée ana de l'arduino, la valeur rendue est differente selon si l'arduino est alimenté par
l'usb ou par son connecteur .

pour un peu plus de "rigueur" il faut passer par une vraie ref de tension et l'indiquer dans le "programme"

68tjs

Euh il dit mesurer 1,95V par l'arduino alors que le voltmètre lui donne 1,65V

Si c'est un problème de tension d'alim elle ne ferait pas 4,23V mais plutôt 5,9 V  soit presque 20% de plus puisque le résultat de la mesure "serait plus grand" que la réalité et non l'inverse.

C'est pourquoi j'ai incriminé une chute de tension parasite dans les câbles de mesure.

Cela dit je partage entièrement l'avis que pour faire des mesures dignes de ce nom il faut utiliser une vraie référence de tension externe.

#5
Nov 17, 2012, 09:12 pm Last Edit: Nov 17, 2012, 09:25 pm by lacolombenoir Reason: 1
En effet j'ai vérifier et la tentions n'est pas exactement de 5 volte mais 4.23,
la puce souder sur la carte est une MMA7361 dont voici le datasheet http://cdn.shopify.com/s/files/1/0038/9582/files/MMA7361L.pdf?1282525052, mais bon je suis sure que la tentions renvoyer est bonne vu que le voltmètre indique les bonne valeur selon la datasheet,

voici le lien pour la photo

PS: Apparemment l'erreur venais du faite que je prenais 5 pour le voltage, merci de m'avoir fais remarquer cette erreur, si vous avez des suggestions ou amélioration n'hésiter pas a les posters.

Et pour les intéresser voici le code source il est loin d'être terminer il n'est qu'à l'état de teste.

Code: [Select]


int x;
int y;
int z;
double vx;

int someil = 2;
int gselect = 3;


void setup()
{
Serial.begin(9600);
pinMode(someil,OUTPUT); // initiation du pin de someil
pinMode(gselect,OUTPUT); // initiation du pin de sensibilité
digitalWrite(someil,HIGH); // mise en action du dispositif
digitalWrite(gselect,LOW);// high detection directionel low bidirectionel
}

void loop()
{
x = analogRead(A3);
y = analogRead(A4);
z = analogRead(A5);

vx =x*(4.23/1023);

Serial.print("x = ");
Serial.print(vx);
Serial.print(" , ");

Serial.print("y = ");
Serial.print(y);
Serial.print(" , ");

Serial.print("z = ");
Serial.print(z);
Serial.println(".");

delay(100);
}

www.hatokuro.comuf.com site consacrer au rétrogaming

Artouste

#6
Nov 17, 2012, 09:42 pm Last Edit: Nov 17, 2012, 09:52 pm by Artouste Reason: 1

...
PS: apparemment l'erreur venais du faite que je prenais 5 pour le voltage, merci de m'avoir fais remarquer cette erreur, si vous avez des suggestions ou amélioration n'hésiter pas a les posters.

...

tu cumule beaucoup de dispersion sur ta chaine d'acquisition
Ton accelero est alimenté en 3.3V (VDD typ)
il y a un centrage sur Zero G à 1.65 V = ~ 1/2 de VDD
l'excursion theorique possible des G (Neg/Pos) est comprise entre 0/3.3V
en utilisant la ref "defaut" de l'arduino et en supposant (ce qui n'est déjà pas le cas  8)  ) un 5V "aux petits oignons, tu perd la portion 5V-3.3V = delta 1.7
soit pour un pas ~  à 0,0049 V  ~347 points de perdus = quasi 30% de perte pour la résolution de mesure.

suggestion(s) :
déjà passer AREF en EXTERNAL à 3.3V , ça ne pourra pas etre pire  :smiley-mr-green:
alimenter si possible l'accelero par le meme 3.3V que l'AREF externe




Je vais paraitre un peu bête mais je n'ai pas trouver comment définir AREF en 3.3v.
www.hatokuro.comuf.com site consacrer au rétrogaming

barbudor


Euh il dit mesurer 1,95V par l'arduino alors que le voltmètre lui donne 1,65V


Justement
Sa vrai mesure c'est celle du voltmètre : 1.65V
Les 1.95V c'est pas une mesure c'est le mauvais résultat de 390 * 5V / 1023 = 1.95

D'ou on déduit facilement que son VCC est en fait 1.65/1.95 * 5V = 4.23


Sur la photo on devine que la carte Arduino en question est une Nano d'origine eBayienne.
Ca sent la diode de protection anti-retour sur l'alim, modèle de base à 0.7V de chute de tension au lieu d'une Schottky moins gourmande comme sur la Nano officielle (MBR0520, VF=0.36V)
Barbuduino: Arduino sur Breadboard & VinciDuino: Clone Leonardo // WR703: Mini-routeur hacké // LauchPad MSP430 et Stellaris // Panda II Arduino-like .NetMF sous VisualC#
RTFC: Read That F.....g Code / RTFD: Read That F.....g Doc / RTFDS: Read That F.....g DataSheet / RTFS: Read That F.....g Schematic / Wot da ya wanna D.I.Y. today ?

Artouste


Je vais paraitre un peu bête mais je n'ai pas trouver comment définir AREF en 3.3v.

semblerait que ce soit une nano
http://arduino.cc/en/uploads/Main/ArduinoNanoTop.jpg
strapper le 3.3V sur AREF
et dans le sketch
analogReference(EXTERNAL)
voir
http://arduino.cc/en/Reference/AnalogReference?from=Reference.AREF

Sa fonctionne merci j'avais pas réaliser qu'il fallait mettre le pin aref sous la tentions voulue,
Sinon oui c'est du made in ebay mais je vous rassure j'ai un Arduino uno,
j'ai prix la v3 non officiel du mini (10€) pour le jour ou je tenterais d'utiliser les ondes radio , et en plus avec l'Arduino Due  XD qui venais tout juste de sortir j'ai préférée faire quelques économie pour le moment en vue de pouvoirs me l'acheter plus tard.

sinon voici le code actuel plus précis dans les mesures

Code: [Select]

int x;
int y;
int z;
double vx;
double vy;
double vz;

int someil = 2;
int gselect = 3;


void setup()
{
Serial.begin(9600);
pinMode(someil,OUTPUT); // initiation du pin de someil
pinMode(gselect,OUTPUT); // initiation du pin de sensibilité
digitalWrite(someil,HIGH); // mise en action du dispositif
digitalWrite(gselect,LOW);// high detection directionel low bidirectionel
analogReference(EXTERNAL);
}

void loop()
{
x = analogRead(A3);
y = analogRead(A4);
z = analogRead(A5);

vx =x*(3.35/1023);
vy =y*(3.35/1023);
vz =z*(3.35/1023);

Serial.print("x = ");
Serial.print(vx);
Serial.print(" , ");

Serial.print("y = ");
Serial.print(vy);
Serial.print(" , ");

Serial.print("z = ");
Serial.print(vz);
Serial.println(".");

delay(100);
}
www.hatokuro.comuf.com site consacrer au rétrogaming

Artouste


Sa fonctionne merci j'avais pas réaliser qu'il fallait mettre le pin aref sous la tentions voulue,


ok tant mieux
le 3.3V pris comme AREF est celui de l'arduino ou celui de la carte accelero ?

Vu que tout est relier a la carte (Arduino) en matière de courent ses celui de (l'arduino) qui est utiliser,
mais je vais probablement prévoir un second usb pour l'accéléromètre et tenter d'en faire une sorti 3.3V et une fois que j'aurais fais sa je mettrais la sorti du second usb sur la broche AREF de la carte.
www.hatokuro.comuf.com site consacrer au rétrogaming

Artouste


Vu que tout est relier a la carte (Arduino) en matière de courent ses celui de (l'arduino) qui est utiliser,
mais je vais probablement prévoir un second usb pour l'accéléromètre et tenter d'en faire une sorti 3.3V et une fois que j'aurais fais sa je mettrais la sorti du second usb sur la broche AREF de la carte.

bonjour
je suis désolé, mais meme en faisant un effort, je n'ai rien compris à tes explications/demonstrations  :~

Pour faire simple AREF est relier au 3.3V de l'Arduino, et finalement l'accéléromètre restera alimenter uniquement par l'Arduino.

PS: désolé si ce que je dit n'est pas très claire.
www.hatokuro.comuf.com site consacrer au rétrogaming

Go Up