Go Down

Topic: courant sur A0 et A1 motor shield varie beaucoup (Read 2071 times) previous topic - next topic

Froquet

Bonjour,
J'utilise une carte arduino uno et la carte arduino motor shield R3. Quand je lis les valeur du courant sur A0 et A1 j'obtiens des valeurs qui varient de 80 soit une erreur de 156 mA.
Je vais regarder à l'oscilloscope comment varie cette tension image du courant. peut être le hachage de la tension est il à une fréquence trop basse.
Avez vous une idée d'où vient le problème ? et surtout comment le résoudre .
Je dois détecter une surintensité de 1,2A  et 10 % au moins d'erreur me parrait beaucoup
Merci pour votre aide
 

Christian_R

Pas de code, ni de montage, mais j'ai deviné qu'il faut modifier le schmilblick.
Christian

Froquet

OK je détailles,
Un petit robot , 2 roues motrices , actionnées par deux moteurs CC 6V .
Je commande les mouvements du robot donc les moteurs avec ma carte arduino UNO équipée de la carte motor shield R3.
L'alimentation des moteurs se fait par piles , et les deux moteurs sont cablés sur les deux connecteurs A et B de la motor shield.
La commande est OK le robot avance tourne et recule .
Mais je veux controler le courant dans le moteur donc je  lis la conso en A0 et A1
voir programme partiel ci-dessous

int pinConsoIG=A1;
int pinConsoID=A0;
int ConsoIG=0;
int ConsoID=0;


// Fonction SETUP = code d'initialisation
// La fonction setup() est execute en premier et une seule fois, au demarrage du programme

void setup()
{
 
  pinMode(pinConsoIG, INPUT); 
  pinMode(pinConsoID, INPUT);     
  Serial.begin(9600);      // On configure le moniteur serie
}
   

   void lireConso(){
    ConsoIG= analogRead(pinConsoIG);
    ConsoID= analogRead(pinConsoID);
    Serial.print(" la conso du moteur droite ");
    Serial.println(ConsoID);
    Serial.print(" la conso du moteur gauche ");
    Serial.println(ConsoIG);
    delay (500);
 }
 
// Fonction LOOP = Boucle sans fin = Coeur du programme
// La fonction loop() s'execute sans fin en boucle aussi longtemps que l'Arduino est sous tension

void loop()
{
       
         lireConso();
 
 }


Quand mes moteurs tournent je lis bien des valeurs numériques en A0 et A1 mais pour un fonctionnement donné le courant IG peut varier par exemple de 150 à 240, les valeurs lues ne sont pas stables, et donc le résultat peu précis .
J'attends une valeur entre 0 et 1023 avec une résolution de 1.953 mA vu le montage du L298 et/ou les caractéristiques fournies : 2A pour 1023
Cet AM je vais vérifier la forme de la tension obtenue sur A0...
J'espère avoir été plus claire.
Quelle précision peut on attendre?


icare

Bonjour,
Comment tu fais l'acquisition de l'image de ton courant ?
2B OR NOT(2B) = FF
Arduino 1.0.5 à 1.8.5 + gEdit + Ubuntu 18.04 LTS

Froquet

Sur la carte Motorshield la doc indique et le montage le montre que sur A0 nous avons une image du courant dans le moteur A : nombre de 0 à 1023 pour une intensité de 0 à 2A;

En fait sur la carte sur L138 il y a une résistance de 0,15 ohm qui est traversé par le courant du moteur, donc la tension à ses bornes est proportionnelle au courant . ensuite sur la carte on a un montage à AOP amplificateur qui multiplie par 11 la tension précédente soit au final sur la borne A0 une tension de 1,65 Imot

Ensuite comme le programme le montre je lis la tension A0 par :
int pinConsoID=A0;
ConsoID= analogRead(pinConsoID);

et j'affiche sur la console avec :
 Serial.print(" la conso du moteur droite ");
 Serial.println(ConsoID);

Alors ? comment expliquer mon résultat à part un hachage avec une fréquence trop faible?

icare

Re,
Déjà lorsque tu fais une première mesure sur analogRead, tu as rarement une valeur correcte ou juste.
Le mieux est de faire plusieurs mesures et calculer la moyenne.
@+
2B OR NOT(2B) = FF
Arduino 1.0.5 à 1.8.5 + gEdit + Ubuntu 18.04 LTS

Christian_R

Le hachage PWM est synchronisé par l'arduino, la mesure analogique de le tension (proportionnelle à l'intensité) aussi, mais dans la boucle du programme donc à un rythme différent.

On peut effectivement s'attendre à des trucs bizarres, selon les fréquences respective de l'un et de l'autre. (problème d'échantillonnage au mauvais moment : aliasing).

Solution matérielle, mettre un condensateur qui se charge selon la tension efficace pour lisser les mesures.

Solution logicielle, faire une moyenne, mais vérifier avant la fréquence à laquelle on fait les mesures.
Christian

ChristopheFr

En fait sur la carte sur L138 il y a une résistance de 0,15 ohm qui est traversé par le courant du moteur, donc la tension à ses bornes est proportionnelle au courant .
Le courant qui traverse le moteur n'est pas constant.
Il augmente au fur et à mesure du temps au cours d'un pas (effet inductif).
Il faudrait synchroniser les mesures avec les pas.

icare

Re,
Peux-tu nous donner le lien vers la doc de ta carte ?
2B OR NOT(2B) = FF
Arduino 1.0.5 à 1.8.5 + gEdit + Ubuntu 18.04 LTS

Froquet

 pour la carte shield motor voila le lien


 http://arduino.cc/en/Main/ArduinoMotorShieldR3

Déja je ne regarde pas le courant au démarrage seulement en fonctionnement normal pour détecter les surintensité du à un couple trop important sur le moteur

Sinon j'ai visualisé la tension sur A0 pour un moteur donné, en effet il y a des pics puis une certaine variation mais pas du tout constant.

J'ai donc essayer de filtrer avec un condo entre A0 et la masse et j'ai visualisé pour différentes valeurs de condo le résultat est concluant j'arrive à un signal stable et une valeur lue sur A0 qui varie de +- 2.
Donc satisfaisant, reste à faire des tests pour un moteur plus puissant.



Go Up