IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Arduino Discussion :

Asservissement en courant Arduino


Sujet :

Arduino

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2014
    Messages : 84
    Points : 19
    Points
    19
    Par défaut Asservissement en courant Arduino
    Bonjour à tous,

    Je viens de nouveau demander de l'aide sur ce forum en espérant qu'on pourra de nouveau m'aider.

    Description du système:
    Je dispose d'une carte Arduino UNO, d'un driver, de deux moteurs ainsi que d'un capteur de courant de type analogique.
    Le capteur de courant peut mesurer un courant allant de -5A à +5A. Mes moteurs consomment entre 70mA (à vide) et 1,6A (chage maximal et vitesse max).
    Le capteur de courant fonctionne de la manière suivante:
    Une tension de base de 2,5V est renvoyé sur un pin analogique de l'Arduino +/- 66mV en fonction du courant mesuré. 2,5V correspondant à 0A.

    Description de l'application souhaité:
    Je souhaiterais utiliser le capteur de courant pour réaliser un asservissement en courant. En effet, plus la charge sur les moteurs est importante plus les moteurs consomment.
    De ce fait, j'aimerais pouvoir réaliser la possibilité de stopper mes moteurs si le courant dépasse une certaine valeur. Autrement dit, j'aimerais pouvoir controler mes moteurs en fonction du courant mesuré à leurs bornes.

    Problème:
    Seulement voila le problème, je ne sais absolument pas comment réaliser cette boucle qui me permettrait de mesurer, par exemple, toute les 20ms le courant traversant les moteurs et utiliser cette mesure dans mon programme pour controler mes moteurs.

    Auriez-vous des conseils à me donner s'il vous plait?

    Je reste à votre disposition en cas de question. Par avance merci.

  2. #2
    Membre averti
    Avatar de ChipsAlaMenthe
    Homme Profil pro
    Ingénieur en eau chaude et ballon rond
    Inscrit en
    Mai 2015
    Messages
    138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Ingénieur en eau chaude et ballon rond
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Mai 2015
    Messages : 138
    Points : 394
    Points
    394
    Par défaut
    Salut à toi! ^^

    Alors, concernant ce problème, j’ai déjà traité cela auparavant ^^.

    Etant donné que tu connais à chaque tour de boucle la valeur de ta tension grâce à ton capteur, c’est par ici qu’il faut commencer.

    Sur l’Arduino tu peux mesurer le temps écoulé depuis le début de son allumage, regarde du côté des timers aussi. (alors désolé de ne pas pouvoir te donner de code mais je ne suis pas chez moi en ce moment et ça remonte aussi à plus de deux ans ^^).

    Du coup, en récupérant la valeur du temps écoulé depuis le début de l’allumage, tu peux faire une différence avec l’ancienne valeur pour calculer un delta. Si ce delta est inférieur à 20ms alors ne le contrôle pas, sinon si c’est supérieur tu peux le contrôler ^^.

    Si cette réponse ne te satisfait pas, tu peux aussi utiliser les interruptions sur l’Arduino, c’est fiable, et au moins là tu auras toutes les 20ms ta valeur (avec un petit retard parfois mais léger ^^).


    J'espère que cette réponse te satisfait si j'ai bien compris tout ton problème

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2014
    Messages : 84
    Points : 19
    Points
    19
    Par défaut
    Bonjour,

    Vous avez bien compris mon problème. Seulement, je n'arrive pas à comprendre quelle fonction je dois utiliser pour récupérer la data fournis par le capteur.
    Je ne sais pas si je dois utiliser AnalogRead() ou une autre fonction.

    Concernant les timers, je dois télécharger une librairie pour cela non?

    Par avance merci.

  4. #4
    Membre averti
    Avatar de ChipsAlaMenthe
    Homme Profil pro
    Ingénieur en eau chaude et ballon rond
    Inscrit en
    Mai 2015
    Messages
    138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Ingénieur en eau chaude et ballon rond
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Mai 2015
    Messages : 138
    Points : 394
    Points
    394
    Par défaut
    Re-salut ! ^^

    Alors, si tu as branché ton capteur sur l’entrée analogique, alors dans ce cas oui, tu dois utiliser Analog read de la manière suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    // Valeur de la pin analogique sur laquelle tu as branché ton capteur
    const int monCapteur = 3;
     
    int valeurLue = 0;
     
    void loop 
    {
        ...
        valeurLue = analogRead(monCapteur);
        ...
    }
    Pour le timer d'après mes souvenir la librairie est déjà présente donc tu n'a pas besoin de la télécharger, par contre tu dois include je crois #include <Time.h>.

    Pour les fonctions de temps, regarde la fonction "millis()" sur le site Arduino ainsi que les fonctions qui ressemblent (décrites plus bas dans la page Arduino). ^^



    Edit:
    Je ne sais pas pourquoi, mais je sens que tu vas avoir besoin à un moment de la fonction "map(...)", elle permet de recaler l'intervalle d'une valeur dans un autre ordre de grandeur, regarde sur le site Arduino pour en savoir plus, simple intuition .

  5. #5
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2014
    Messages : 84
    Points : 19
    Points
    19
    Par défaut
    Je vous remercie pour votre réponse.

    Je prends note. Je vais faire des tests. Je vous tiens au courant demain surement dans l'après midi.

    EDIT: Pour l'entrée du capteur c'est pas plutot sur le pin A0 (ou tout autre pin analogique) que je dois brancher mon capteur?

  6. #6
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2014
    Messages : 84
    Points : 19
    Points
    19
    Par défaut
    Avant de vouloir faire les tests, j'aimerais votre avis sur mon code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
     
    #include <Metro.h>
     
    //Define the interval
    Metro MyInterval = Metro(30);
     
    //Motor 1
    int pinAIN1 = 9; //Direction
    int pinAIN2 = 8; //Direction
    int pinPWMA = 3; //Speed
     
    //Motor 2
    int pinBIN1 = 11; //Direction
    int pinBIN2 = 12; //Direction
    int pinPWMB = 5; //Speed
     
    //Standby
    int pinSTDBY = 10;
     
    //Current sensor
    int pinCurrentSensor = 6;
    int CurrentValue = 0;
     
    void setup()
    {
    //Set the PIN Modes
      pinMode(pinAIN1, OUTPUT);
      pinMode(pinAIN2, OUTPUT);
      pinMode(pinBIN1, OUTPUT);
      pinMode(pinBIN2, OUTPUT);
      pinMode(pinSTDBY, OUTPUT);
      pinMode(pinPWMA, OUTPUT);
      pinMode(pinPWMB, OUTPUT);
      pinMode(pinCurrentSensor, INPUT);
    }
     
    void loop()
    {
      if(MyInterval.check() != 1) //Check if the metro has passed its interval
      {
        CurrentValue = analogRead(pinCurrentSensor);
        if(CurrentValue < 4)
        {
          digitalWrite(pinAIN1, HIGH);
          digitalWrite(pinAIN2, LOW);
          digitalWrite(pinBIN1, HIGH);
          digitalWrite(pinBIN2, LOW);
          digitalWrite(pinSTDBY, HIGH);
          analogWrite(pinPWMA,255);
          analogWrite(pinPWMB,127);
        }
        else
          digitalWrite(pinSTDBY, LOW);
      }
    }
    Je précise que le fichier d'en tete Metro est une librairie que j'ai téléchargé ici

  7. #7
    Modérateur

    Avatar de Vincent PETIT
    Homme Profil pro
    Consultant en Systèmes Embarqués
    Inscrit en
    Avril 2002
    Messages
    3 190
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Consultant en Systèmes Embarqués
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 190
    Points : 11 573
    Points
    11 573
    Par défaut
    Salut,
    Tu peux aussi faire différemment si ton micro possède une "analogique input comparator" (je serai surpris que ton ATmega328P en ait pas au moins une)

    Ca fonctionne comme un comparateur avec un AOP donc rapidement (moins rapidement qu'avec un AOP biensur).
    Tu régles une tension de seuil via un simple pont diviseur externe sur l'entrée analogique du comparateur, sachant que certain micro save même le faire en interne, et tu lis la valeur de ton signal avec l'autre entrée analogique du comparateur.
    Si la tension lue est supérieure(ou inférieure, ça dépend du réglage) à la tension de seuil que tu as fixé, tu vas déclencher une interruption qui te permettra de couper tes moteurs. Tu n'as même pas besoin de lire régulièrement l'ADC soit par une boucle (pooling) soit par interruption du Timer.

    L'inconvénient de faire ça avec un ADC c'est que c'est beaucoup plus long (fait un essai mais je ne serai pas surpris que tu m'annonces quelque chose comme une centaine de µs entre le temps où tu détectes le seuil requis et le temps que tu mettra a couper tes moteurs) et les moteurs peuvent très bien cramer avant même que tu ais eu le temps de les couper. Si tu le fais avec un ADC en prenant en compte son temps de latence, tu peux mettre un seuil plus bas pour être sur que les moteurs ne vont pas cramer mais tu dégrades la qualité de ton montage car tes moteurs ne pourront jamais tourner a 100% de leurs capacités.

    Si tu as un oscillo a 2 entrées alors tu peux :
    1) Allumer une LED simulant moteur coupé (donc après lecture de l'ADC et traitement de la coupure moteur disont pour 4V) et mettre l'entrée 1 de l'oscillo dessus
    2) Et mettre l'entrée 2 de l'oscillo sur le signal issu du capteur.
    3) Tu règles le trigger de la voie 1 pour que les signaux soient choppés lorsque la LED s'allume.

    Dans la grande théorie la LED s'allumera à 4V et sur l'oscillo tu verras sur la voie 1 un beau passage de 0 à 5+V et sur la voie 2 tes 4V
    En vrai ça sera différent, tu vas voir sur l'oscillo un passage de 0 à +5V sur la voie 1 et sur la voie 2 la tension va dépasser les 4V
    Tout ça à cause du temps que mettra Arduino a réagir.

    A+
    La science ne nous apprend rien : c'est l'expérience qui nous apprend quelque chose.
    Richard Feynman

  8. #8
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2014
    Messages : 84
    Points : 19
    Points
    19
    Par défaut
    Merci à nouveau pour ton aide Vincent. Cependant, je dois avouer que la solution que tu proposes me parait bien obscur haha.

    De plus, j'ai déjà mon capteur de courant ça serait idiot de pas l'utiliser finalement (ha moins que je n'ai vraiment rien compris à ce que tu m'as dis Vincent).

    Sinon, que penses-tu du code que j'ai mis précédemment s'il te plait?

  9. #9
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    12 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 12 617
    Points : 56 730
    Points
    56 730
    Billets dans le blog
    40
    Par défaut
    Salut

    Citation Envoyé par Vincent PETIT Voir le message
    Tu peux aussi faire différemment si ton micro possède une "analogique input comparator" (je serai surpris que ton ATmega328P en ait pas au moins une)
    Il en a une (voir doc). Mais je ne trouve pas de solution d'emploi avec le langage Arduino ou de bibliothèque toute faite(*), il faut donc taper dans les registres...

  10. #10
    Expert éminent sénior
    Avatar de Auteur
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    7 648
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 7 648
    Points : 11 137
    Points
    11 137
    Par défaut
    bonjour,

    plusieurs choses :
    - si tu remplaces tes moteurs par une LED n'oublie pas d'y placer une résistance ! Une LED ne va pas aimer le 4V, 70mA . Ensuite une LED ne fonctionne que dans un seul sens. Donc attention, si elle est éteinte cela veut peut-être dire qu'elle est branchée à l'envers. Ce que tu peux faire c'est brancher sur chaque sortie 2 LED tête-bêche.

    - le code que tu as posté ne va pas bien fonctionner. Tu vas lire la tension aux bornes de ta voie analogique. Tant que tu restes en dessous de ton seuil (en valeur absolue !) pas de souci. Lorsque tu as vas dépasser ton seuil tu vas couper tes moteurs en utilisant la sortie STBY (bonne idée cela dit en passant ). Mais 20ms plus tard quand tu vas relire ce qu'il y a en entrée, que va-t-il se passer ? L'image de ton courant sera en dessous du seuil que tu as fixé et tes moteurs redémarrent !
    => ce qu'il faut faire donc c'est, par exemple, trouver un dispositif qui se verrouille lorsque STBY passe à 0 et que l'utilisateur doit déverrouiller manuellement (un disjoncteur)

    Ton capteur de courant n'est pas par hasard une pince ampèremétrique ?

  11. #11
    Modérateur

    Avatar de Vincent PETIT
    Homme Profil pro
    Consultant en Systèmes Embarqués
    Inscrit en
    Avril 2002
    Messages
    3 190
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Consultant en Systèmes Embarqués
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 190
    Points : 11 573
    Points
    11 573
    Par défaut
    Peut être nous sommes nous mal compris.
    f-leb à mis le doigt sur la fonction que je pensais être intégré à ce micro.

    Si je résume ce que tu souhaites faire, cela consiste en une comparaison entre la tension issue de ton capteur (je pense à un capteur de courant à effet hall) et une valeur déterminée dans ton programme.

    La solution qui répond à cela et en faisant l'analogie au domaine de l'électronique, c'est un comparateur. Sur ce genre de composant qui est un Aop sans contre réaction, tu fixes la broche d'entrée négative à 4V par exemple et sur la broche positive tu y connectes le signal issu de ton capteur. Le fonctionnement d'un comparateur est très simple : des que le signal issu de ton capteur passe au dessus de 4V le comparateur réagit est passe sa sortie à l'état haut. Une fois que le signal passe au dessous des 4V la sortie du comparateur passe à l'état bas.
    Dans ton cas le passage à l'état haut sur comparateur ferait stopper le moteur immédiatement.

    Ps : si tu inverses les entrées du comparateur alors il fonctionnera dans l'autre sens.

    Il se trouve que ton micro à un comparateur en interne. Et je trouve dommage de ne pas exploiter cette fonction qui répond exactement à ton problème.

    En effet tu peux également utiliser l'ADC du micro pour répondre à cette fonction sauf que cette solution est beaucoup plus longue en terme de réactivité que la précédente. Et il faut que tu sois vigilent quant à ce délai de réaction, sinon le temps que tu lises l'ADC est que tu te rendes compte que tu as dépasser le seuil des 4V tes moteurs auront peut être eu le temps de cramer avant même que tu ais eu le temps de les stopper.

    C'est très intelligent cette fonction de protection en courant des moteurs mais si le moteur crame quand même ça ne sert à rien.

    Peut être que dans la doc du moteur tu trouveras des infos sur les limites à ne pas dépasser.

    Moi à ta place je determinerai le temps que met ton Arduino à réagir.
    C'est à dire le temps entre le moment où le seuil dépasse les 4V et le moment où le moteur s'arrête.
    Et ensuite je ferai le même test mais non plus en lisant l'ADC mais utilisant le comparateur interne du ATMEGA328P pour comparer à moins que la doc du moteur nous dise que le moteur peut supporter cette surcharge pendant un long moment.

    Je sais pas si j'ai été plus clair ?
    La science ne nous apprend rien : c'est l'expérience qui nous apprend quelque chose.
    Richard Feynman

  12. #12
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2014
    Messages : 84
    Points : 19
    Points
    19
    Par défaut
    Bonjour à tous,

    Tout d'abord merci pour vos réponses.

    Alors j'aimerais préciser un point qui me semble important. Je peux fixer l'intensité maximale délivré par le générateur. Ce qui signifie que si les moteurs consomment 1,6A chacun (pour mes moteurs), je peux fixer le générateur à 1,6A max tout en ayant une tension de 6V.
    Pour que les choses soient plus clairs, je pense qu'il est nécessaire de mieux vous décrire l'application finale souhaitée.
    En faite, en ayant un retour sur le courant traversant les moteurs, je souhaite être capable d'arrêter mes moteurs. Ceci afin de pouvoir contrôler une prothèse de main et plus précisément quand l'utilisateur va attraper un objet. Ainsi, lorsque l'utilisateur a finis d'attraper l'objet (que les doigts exerce suffisamment de pression sur l'objet pour que l'utilisateur soulève l'objet sans que celui-ci tombe) le courant va augmenter en flèche dans les moteurs. En utilisant le capteur et le micro controlleur, il sera possible de définir le moment précis où je souhaite arrêter les moteurs.

    Par conséquent, il n'y aucun problème concernant un courant trop élevé dans les moteurs, a priori, puisque l'on connait les limites des moteurs.

    @Auteur:
    Concernant le point que tu as soulevé dans mon code, cela serait-il mieux si j'ajoute une condition dans mon if(). A savoir, si STDBY == HIGH && CurrentValue < X.
    Sinon, il est toujours possible de créer une variable qui sera en mémoire qui serait de type booléan. Elle prendrait en valeur false lorsqu'il n'y a eu aucun changement d'état et true lorsqu'il y a eu un changement d'état.

    Qu'en pensez-vous?

    Par avance merci.

    EDIT: J'ai oublié de préciser deux autres points important. Le premier est que le capteur dont je dispose est un capteur à effet hall. La datesheet du capteur est ici
    Aussi, je n'arrive pas à bien comprendre comment je dois brancher mon capteur. J'ai 3 pins sur le capteur à savoir GND, VCC et VO. Je suppose que GND et VCC sont l'alimentation du capteur et VO la sortie mais du coup comment puis-je mesurer le courant à un endroit précis?

  13. #13
    Membre averti
    Avatar de ChipsAlaMenthe
    Homme Profil pro
    Ingénieur en eau chaude et ballon rond
    Inscrit en
    Mai 2015
    Messages
    138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Ingénieur en eau chaude et ballon rond
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Mai 2015
    Messages : 138
    Points : 394
    Points
    394
    Par défaut
    Petite indication, je pense que tu ne devrais pas arrêter ton moteur, mais plutôt le figer à une valeur proche de la valeur maximale. Tout dépend de ton moteur en fait.
    Par exemple pour les servo moteurs basiques sur une Arduino, tu dois envoyer une certaine tension à ton moteur si tu ne veux pas qu’il retourne à son état d’origine. C’est défini par le rapport cyclique que ton moteur reçoit (très schématiquement). Tu devras donc je pense envoyer la même tension plutôt que de l’arrêter complètement ^^.

  14. #14
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2014
    Messages : 84
    Points : 19
    Points
    19
    Par défaut
    Ha oui remarque tout à fait pertinente!!
    Sinon même si le moteur ne reviendra pas à sa position initiale, il aurait tout simplement plus appliquer de force sur l'objet attrapé!

    EDIT: Seul problème c'est que je ne peux pas fixer le courant dans mes moteurs à travers l'arduino non??? Je peux juste fixer la vitesse de rotation a priori non?

  15. #15
    Modérateur

    Avatar de Vincent PETIT
    Homme Profil pro
    Consultant en Systèmes Embarqués
    Inscrit en
    Avril 2002
    Messages
    3 190
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Consultant en Systèmes Embarqués
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 190
    Points : 11 573
    Points
    11 573
    Par défaut
    Citation Envoyé par seraphon91 Voir le message
    En faite, en ayant un retour sur le courant traversant les moteurs, je souhaite être capable d'arrêter mes moteurs. Ceci afin de pouvoir contrôler une prothèse de main et plus précisément quand l'utilisateur va attraper un objet. Ainsi, lorsque l'utilisateur a finis d'attraper l'objet (que les doigts exerce suffisamment de pression sur l'objet pour que l'utilisateur soulève l'objet sans que celui-ci tombe) le courant va augmenter en flèche dans les moteurs. En utilisant le capteur et le micro controlleur, il sera possible de définir le moment précis où je souhaite arrêter les moteurs.
    Ok, donc tu veux pouvoir contrôler la force des doigts de la prothèse au travers de la mesure du courant ? Au quel cas, oui tu dois lire cette valeur via l'ADC si c'est bien ce que tu souhaites faire.
    La solution que je t'avais proposé c'était si tu voulais stopper tes moteurs rapidement en cas de surconsommation pour ne pas les griller.

    Citation Envoyé par seraphon91 Voir le message
    EDIT: J'ai oublié de préciser deux autres points important. Le premier est que le capteur dont je dispose est un capteur à effet hall. La datesheet du capteur est ici
    Aussi, je n'arrive pas à bien comprendre comment je dois brancher mon capteur. J'ai 3 pins sur le capteur à savoir GND, VCC et VO. Je suppose que GND et VCC sont l'alimentation du capteur et VO la sortie mais du coup comment puis-je mesurer le courant à un endroit précis?
    Ton capteur se branche en série sur le fil du moteur (le fil du moteur entre dans IP+ et ressort par IP-)
    Attention il y a de forte chance que la sortie VO est la même tête que le signal PWM que tu envois sur le moteur. A vérifier et prendre en compte pour la mesure.

    Pour bien apprendre voir les cours Arduino : https://arduino.developpez.com/cours/
    La science ne nous apprend rien : c'est l'expérience qui nous apprend quelque chose.
    Richard Feynman

  16. #16
    Membre averti
    Avatar de ChipsAlaMenthe
    Homme Profil pro
    Ingénieur en eau chaude et ballon rond
    Inscrit en
    Mai 2015
    Messages
    138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Ingénieur en eau chaude et ballon rond
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Mai 2015
    Messages : 138
    Points : 394
    Points
    394
    Par défaut
    Citation Envoyé par seraphon91 Voir le message
    Ha oui remarque tout à fait pertinente!!
    Sinon même si le moteur ne reviendra pas à sa position initiale, il aurait tout simplement plus appliquer de force sur l'objet attrapé!

    EDIT: Seul problème c'est que je ne peux pas fixer le courant dans mes moteurs à travers l'arduino non??? Je peux juste fixer la vitesse de rotation a priori non?
    Je ne connais pas tous les types de moteurs qui existent, mais de ce que je sais c'est:
    - Si c'est un servomoteur, alors tu peux fixer la position, avec un mécanisme qui s'appelle "rapport cyclique", comme ici:
    Nom : 415812.png
Affichages : 2202
Taille : 16,7 Ko

    Du coup sur ta période, le tems où ton signal est et position haute va représenter le degré d'inclinaison de ton moteur. Tu peux donc comme ça régler l'orientation.

    - Si c'est un moteur brushless, il fonctionne avec des aimants, et à ma connaissance tu ne peux que contrôler la vitesse de rotation sur ces moteurs. ^^

    Pour les servomoteurs tu as des fonctions avec Arduino qui font très bien le travail si mes souvenirs sont bons ^^.

  17. #17
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2014
    Messages : 84
    Points : 19
    Points
    19
    Par défaut
    Bonjour,

    @Vincent:
    Oui c'est bien cela. A travers le courant je dois pouvoir controler mes moteurs et par extension les doigts de la main.
    C'est noté pour le branchement du capteur. Merci beaucoup pour ton aide.

    @Chips:
    C'est un moteur DC dont je dispose. Voici la datasheet.
    Donc comme tu l'as dis, impossible de contrôler le moteur en position mais seulement en vitesse.

    Donc effectivement, je vais surement me retrouver avec comme problème que je ne peux pas fixer correctement le courant souhaité pour que la force exercé par les doigts soit minimale mais suffisante pour tenir un objet...
    Du coup la seul possibilité serait de modifier la vitesse "step by step" afin que l'intensité appliqué soit effectivement infèrieur à la valeur souhaité mais suffisante pour tenir l'objet. De ce fait, je n’arrêterai pas les moteurs et je n'abimerai pas l'objet.

    Qu'en pensez-vous?

  18. #18
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    12 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 12 617
    Points : 56 730
    Points
    56 730
    Billets dans le blog
    40
    Par défaut
    C'est un moteur CC ou un servomoteur ?

    Un servomoteur peut maintenir une position lorsqu'on arrête de l'alimenter (à condition de ne pas trop forcer).

    Pour un moteur CC, si ton driver le permet tu peux aussi court-circuiter le moteur (frein magnétique), parce que maintenir un couple sur un moteur CC à l'arrêt en jouant uniquement sur l'électronique euhh

  19. #19
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2014
    Messages : 84
    Points : 19
    Points
    19
    Par défaut
    Ni l'un ni l'autre. C'est deux moteurs DC dont je dispose!

  20. #20
    Modérateur

    Avatar de Vincent PETIT
    Homme Profil pro
    Consultant en Systèmes Embarqués
    Inscrit en
    Avril 2002
    Messages
    3 190
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Consultant en Systèmes Embarqués
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 190
    Points : 11 573
    Points
    11 573
    Par défaut
    DC = Direct curent
    CC = Courant continu
    Tu as bien des moteurs DC ou CC c'est pareil.
    Are you ? You are ?
    La science ne nous apprend rien : c'est l'expérience qui nous apprend quelque chose.
    Richard Feynman

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 4 1234 DernièreDernière

Discussions similaires

  1. Réponses: 24
    Dernier message: 13/04/2013, 17h51
  2. Date courante
    Par missllyss dans le forum SQL
    Réponses: 5
    Dernier message: 29/08/2003, 11h09
  3. Exécuter la classe courante ??
    Par sami_c dans le forum Eclipse Java
    Réponses: 1
    Dernier message: 17/03/2003, 17h47
  4. repertoire courant
    Par mobee dans le forum Autres éditeurs
    Réponses: 2
    Dernier message: 11/12/2002, 13h03
  5. [VB6] [Système] Tuer un processus courant
    Par mdoyer dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 22/10/2002, 14h47

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo