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 :

Commande PWM moteur CC, lecture encodeur


Sujet :

Arduino

  1. #41
    Membre expérimenté

    Homme Profil pro
    Directeur de projet
    Inscrit en
    mai 2013
    Messages
    413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Service public

    Informations forums :
    Inscription : mai 2013
    Messages : 413
    Points : 1 334
    Points
    1 334
    Par défaut Bruits et moteur
    Bonjour Horus,

    Citation Envoyé par Horus68 Voir le message
    ...L'inconvénient majeur, c'est la faible plage de valeurs permettant de faire tourner le moteur : de 130 à 255,
    la moitié de la plage de réglage totale a priori disponible...
    Si tu as un oscillo tu dois pouvoir voir que ce qui revient vers le microcontrôleur est un mélange de résiduel de PWM et de retour d'impulsion. Avec un peu de malchance tu peux avoir un joli battement que ton filtrage ne peut qu'en partie filtrer.

    Si c'est bien ce qu'on voit, pour pouvoir revenir à une fréquence plus basse de PWM, une approche complémentaire serait d'additionner/soustraire à ton signal de retour (avant filtrage) le signal PWM atténué et retardé (c'est comme les casque anti-bruit qui retirent le bruit en le réinjectant en opposition de phase). Je ne cache pas que cela doit être de type essais et erreurs. Mais avec un peu de persévérance, ça peut tomber en marche.

    Pour l'inversion brutale de sens de rotation, le moteur va se transformer en générateur et va faire sauter les protections qui ne sont prévues que pour des transitoires courtes.

    Salut
    Ever tried. Ever failed. No matter. Try Again. Fail again. Fail better. (Samuel Beckett)

  2. #42
    Membre expérimenté

    Homme Profil pro
    Directeur de projet
    Inscrit en
    mai 2013
    Messages
    413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Service public

    Informations forums :
    Inscription : mai 2013
    Messages : 413
    Points : 1 334
    Points
    1 334
    Par défaut Autre approche
    Bonjour Horus,

    Il y a peu être une approche plus simple. Puisque la courbe de vitesse v(i) est connue. Si tu calcule f(-1) tu peux retrouver une commande à peu près linéaire en demandant non pas un PWM de i mais un PWM de f(-1)(i) . Vu la forme des courbes une approximation quadratique (enfin sqrt) pourrait suffire.

    Une forme plus simple mais moins précise est d'approximer la courbe inverse par segment. Supposons un tableau iV de 17 valeurs. La valeur n°16 donne i pour Vmax, la valeur n°8 donne i pour Vmax/2, la valeur n°4 donne i pour Vmax/4, la valeur n°12 donne i pour 3/4*Vmax... Ensuite quand il y a une valeur donnée x (par exemple de 0 à 255) la consigne PWM devient :
    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    int xu = x >> 4;
    int xd = x & 15; 
    iPWM = iV[xu] + ((iV[xu+1] - iV[xu])*xd) >> 4;  // Pas de précaution particulière car la fonction est strictement croissante

    Il y a de la perte de résolution puisque les 256 valeurs d'entrée correspondent à 256 valeurs de sortie mais avec une répartition différente. Il est possible d'amoindrir un peu cela en travaillant avec une résolution apparente supérieure par exemple 1024 en entrée :
    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    int xu = x >> 6;
    int xd = x & 63; 
    iPWM = iV[xu] + ((iV[xu+1] - iV[xu])*xd) >> 6;

    Calcule bien

    Salutations
    Ever tried. Ever failed. No matter. Try Again. Fail again. Fail better. (Samuel Beckett)

  3. #43
    Nouveau Candidat au Club
    Homme Profil pro
    Enseignant
    Inscrit en
    avril 2018
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : avril 2018
    Messages : 25
    Points : 1
    Points
    1
    Par défaut Tomber en marche
    Salut Guesset,

    Citation Envoyé par Guesset Voir le message
    Si tu as un oscillo tu dois pouvoir voir que ce qui revient vers le microcontrôleur est un mélange de résiduel de PWM et de retour d'impulsion. Avec un peu de malchance tu peux avoir un joli battement que ton filtrage ne peut qu'en partie filtrer.
    Salut
    Alors, là, j'avoue que je suis largué
    Ma pratique de l'oscillo étant de niveau "grand débutant", ne permet pas d'obtenir des choses significatives.

    Ce que j'ai constaté, c'est que en alimentant directement un circuit R, L, C (dont le bobinage du moteur), on obtient un signal de sortie de la carte, qui est perturbé par l'appel d'intensité (j'imagine) variable induit par une réponse pseudo-périodique :
    La variation de tension en sortie d'Arduino semble être l'inverse (atténué, facteur 10) de la variation de la tension aux bornes du condensateur.

    Mais ici, on est dans un cas différent où le signal de sortie de l'arduino n'est pas censé être perturbé par le reste du circuit. Je me trompe ?
    J'ai lu des choses intéressantes sur le site "Modellheisenbahn" a propos de la conduction discontinue, mais les fréquences PWM évoquées sont beaucoup plus faibles que 490Hz pour obtenir ce mode de fonctionnement, favorisant les ralentis.
    Ici, ce qui m'étonne, c'est qu'à 3906Hz, on n'est pas linéaire, alors que la documentation du PmodHB5 présente un diagramme à 2kHz.
    Les diviseurs étant en nombre limité, je ne peux pas tester entre 31250 et 3906Hz... Frustrant

    Je voulais essayer la vitesse pour des tensions d'alimentation plus basses, voir si j'obtiens la même droite... J'avoue, j'ai des doutes
    CONFIRMES :
    Nom : PWM31250-6V4_5V3V.JPG
Affichages : 42
Taille : 83,1 KoLinéaire, certes, mais pas les mêmes équations...

    L'approche calculatoire inversant la caractéristique me plait assez, ça se programme, mais c'est trop compliqué, car on ne peut rien calculer à la main !!
    ... fonctions de transfert, théorème de la valeur finale, boucle ouverte, boucle fermée, tout ça...
    Tout ça ne se calcule bien qu'avec des comportements linéaires. et pour la commande PWM, on peut tout à fait moduler à partir de 130.
    Dans les calculs, avec un habile changement d'origine, on ne conserve que la pente et zou, ça se calcule

    Merci pour ta réponse,
    si tu peux me donner plus d'éclaircissement sur ce qui revient sur le microcontrôleur (ou un lien), je suis preneur.

    Cordialement

  4. #44
    Nouveau Candidat au Club
    Homme Profil pro
    Enseignant
    Inscrit en
    avril 2018
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : avril 2018
    Messages : 25
    Points : 1
    Points
    1
    Par défaut Oscillo drame
    En bleu, la commande PWM, en rouge, la tension aux bornes du moteur
    En basse fréquence, c'est très moche
    Nom : 122Hz.jpg
Affichages : 40
Taille : 36,7 Ko

    En haute fréquence, c'est "propre" :
    Nom : 31250Hz.jpg
Affichages : 40
Taille : 37,1 Ko

    Yapuka tester le transitoire en faisant varier l'amplitude de l'échelon...

    Cordialement

  5. #45
    Membre expérimenté

    Homme Profil pro
    Directeur de projet
    Inscrit en
    mai 2013
    Messages
    413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Service public

    Informations forums :
    Inscription : mai 2013
    Messages : 413
    Points : 1 334
    Points
    1 334
    Par défaut Un oscillo vous manque et...
    Bonsoir Horus,

    Elles sont bien ces courbes. Débutant avec un LeCroy ?

    En bas, le bobinage du moteur bloque suffisamment les fréquences hautes pour qu'elles ne soient pas beaucoup absorbées donc on retrouve à peu près le PWM.

    En haut, basses fréquences, je suis un peu plus perplexe. L'impulsion négative à la descente du PWM s'explique par la réaction inductive. Après, je pense, sans être sûr, que c'est la rotation inertielle du moteur qui génère les "collines" (le temps par tour du moteur doit être un multiple de leur période propre).

    Ce qui serait intéressant c'est de voir la tête de l'un des signaux qui reviennent du détecteur vers le microcontrôleur (A ou B). Est-ce que toute l'irrégularité provient du détecteur ou est-ce qu'un signal parasite (PWM ?) le perturbe. Tu places simplement la sonde sur la broche qui reçoit ce signal.

    Salut
    Ever tried. Ever failed. No matter. Try Again. Fail again. Fail better. (Samuel Beckett)

  6. #46
    Membre expérimenté

    Homme Profil pro
    Directeur de projet
    Inscrit en
    mai 2013
    Messages
    413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Service public

    Informations forums :
    Inscription : mai 2013
    Messages : 413
    Points : 1 334
    Points
    1 334
    Par défaut Inversion
    Bonsoir Horus,

    Ce n'est pas du traitement de signal seulement l'inverse d'une fonction.

    Une symétrie par rapport à la première diagonale rend les choses plus lisibles.

    J'ai pris seulement la trace rouge et en définissant point de départ et point d'arrivé ainsi que leur deux tangentes (en orange), j'obtiens la courbe quadratique jaune (parabole) très proche de la courbe rouge .Si je donne à cette fonction la vitesse attendue, elle me retourne une valeur de PWM qui me donne (approximativement) la vitesse de consigne.

    Nom : Vitesse-PWM-Frequence inverse.png
Affichages : 42
Taille : 195,4 Ko

    Le problème est, soit la vitesse ne varie pas de la même manière en continu et PWM, soit la vitesse est bonne mais c'est l'information de vitesse qui est altérée par le PWM. Je penche pour cette dernière hypothèse mais ça demande à être vérifié.

    L'enquête continue.
    Ever tried. Ever failed. No matter. Try Again. Fail again. Fail better. (Samuel Beckett)

  7. #47
    Nouveau Candidat au Club
    Homme Profil pro
    Enseignant
    Inscrit en
    avril 2018
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : avril 2018
    Messages : 25
    Points : 1
    Points
    1
    Par défaut Parasite ?
    Salut Guesset,

    Citation Envoyé par Guesset Voir le message
    Ce qui serait intéressant c'est de voir la tête de l'un des signaux qui reviennent du détecteur vers le microcontrôleur (A ou B). Est-ce que toute l'irrégularité provient du détecteur ou est-ce qu'un signal parasite (PWM ?) le perturbe. Tu places simplement la sonde sur la broche qui reçoit ce signal.
    J'ai branché l'oscillo sur la voie A du codeur, et voilà ce que ça donne, pour 1 commande PWM à 170 :
    Nom : CodeurA_31250_170.jpg
Affichages : 35
Taille : 37,1 Ko
    En rouge, le signal codeur, en bleu la PWM
    Période de 7.5ms à la louche, soit 533 tick/s en comptant 2 fronts par période et 2 voies
    Le relevé par les interruptions donne 525, ce qui semble bien corrélé
    Le signal est propre, pas perturbé, mais je suis avec une fréquence PWM de 31250Hz.

    A 490Hz :
    Nom : CodeurA_490_90.jpg
Affichages : 35
Taille : 37,9 Ko ; Nom : CodeurA_490_150.jpg
Affichages : 34
Taille : 38,2 Ko
    Là aussi, c'est corrélé, à quelques pour mille.

    Donc pas de problème du côté du capteur. Tout vient sans doute du moteur et des diodes de roue libre qui sont là pour éviter les catastrophes lors des commutations des transistors.
    J'imagine que la constante de temps électrique du moteur est très faible et qu'il faut avoir une commande très rapide pour que les oscillations R,L n'aient pas le temps de se produire. Mais peut-être que j'imagine mal.

    Cordialement
    Images attachées Images attachées      

  8. #48
    Membre expérimenté

    Homme Profil pro
    Directeur de projet
    Inscrit en
    mai 2013
    Messages
    413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Service public

    Informations forums :
    Inscription : mai 2013
    Messages : 413
    Points : 1 334
    Points
    1 334
    Par défaut Mystère
    Bonsoir Horus,

    Oui ça a l'air propre. Si on suppose que c'est également le cas pour les fréquences PWM plus faibles on peut en déduire que c'est la commande PWM elle-même qui défaille (pourtant le signal capté sur le moteur semble OK). Tu as fait état de plusieurs solutions en pont mais également d'un système de filtrage. Il est possible d'en savoir plus sur le montage (un schémas même griffonné serait utile) ?

    Il y a un réducteur sur ce moteur ?

    Bonne soirée.
    Ever tried. Ever failed. No matter. Try Again. Fail again. Fail better. (Samuel Beckett)

  9. #49
    Responsable Modération

    Homme Profil pro
    Ingénieur électricien
    Inscrit en
    septembre 2008
    Messages
    1 028
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur électricien

    Informations forums :
    Inscription : septembre 2008
    Messages : 1 028
    Points : 3 695
    Points
    3 695
    Par défaut
    Bonjour Horus

    Toutes les courbes que tu as obtenues sont parfaitement correctes et correspondent à la physique des moteurs et de l'électronique. Y compris la discontinuité au pas 255.

    La vitesse stabilisée d'un moteur, c'est le point d'équilibre entre le coupe électromagnétique et la friction.
    Le couple électromagnétique est proportionnel au courant, qui est proportionnel à la différence entre la vitesse et U x k (k c'est juste un facteur du moteur).
    La friction c'est principalement proportionnel à la vitesse (frottement mécanique) et un peu au cube de la vitesse (ventilation).

    Si tu mets cela dans un calcul tu obtiens les courbes à faible fréquence PWM.

    La décalage des courbes avec l'augmentation de la fréquence PWM est dû simplement aux pertes de commutation du pont. A 32kHz, le pont ne marche plus correctement, et il est probable que la vitesse du moteur s’effondre dès qu'il y aura la moindre charge mécanique dessus. La discontinuité à la consigne 255 s’explique par l'absence de commutation, et donc de perte de commutation. Mets 253 ou 254 comme consigne la plus élevée et tu n'auras pas de cassure dans les courbes.

    Pour les mesures oscillo. La tension induite d'un pôle c'est une sinusoïde. Le collecteur commute continuellement sur les deux pôles opposés ayant la plus grande tension induite. Donc il est normal que la tension mesurée avec le pont coupé soit une succession de parties hautes de sinusoïdes.
    A la coupure du PWM, le courant (inductif) doit s’évacuer la tension passe à zéro. Mais une fois le courant à 0 on mesure la tension induite du moteur. A 32kHz le PWM se réenclenche avant même que le courant soit à 0, provoquant un "beau" signal mesuré.

    Il y a plusieurs manière de régler un moteur, mes études sont un peu loin dernière moi et surtout j'ai conservé en tête mes derniers projets qui consistaient à réguler des moteurs triphasés au comportement bien différent. La version simple c'est de réguler la vitesse par le courant dans une première boucle, puis de régler le courant par la tension dans une deuxième boucle. On transforme alors le réglage non-linéaire en deux réglages linéaires imbriqués. La méthode la plus facile étant de mesurer le courant, la méthode un peu plus hard étant de calculer le courant.

    Bonne suite

    Delias

  10. #50
    Membre expérimenté

    Homme Profil pro
    Directeur de projet
    Inscrit en
    mai 2013
    Messages
    413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Service public

    Informations forums :
    Inscription : mai 2013
    Messages : 413
    Points : 1 334
    Points
    1 334
    Par défaut Maux de moteur
    Bonjour Delias,

    Je te remercie de ces éclaircissement mais je ne partage cependant pas le point suivant :

    Citation Envoyé par Delias Voir le message
    ... A 32kHz, le pont ne marche plus correctement, et il est probable que la vitesse du moteur s’effondre dès qu'il y aura la moindre charge mécanique dessus...
    Si le pont ne fonctionnait plus (32 kHz c'est élevé pour un moteur mais faible pour un circuit électronique) on ne retrouverait pas intégralement le PWM qu'il fournit à l'entrée du moteur. Je pense qu'à cette fréquence le moteur bloque toutes les harmoniques et c'est pourquoi le signal se retrouve à ses bornes. A l'exception de la valeur moyenne bien sûr en grande partie consommée par le moteur. Ce qui explique sa linéarité de comportement (et également son démarrage pour des valeurs plus élevées).

    Je me trompe peut être, mais si l'analyse est bonne, le signal recueilli aux bornes du moteur ne doit plus avoir sa base à zéro (le décalage dépendrait entre autres de la résistance équivalente de la source).

    Salut
    Ever tried. Ever failed. No matter. Try Again. Fail again. Fail better. (Samuel Beckett)

Discussions similaires

  1. Programme Arduino de commande de moteur+encodeur.
    Par loquet38 dans le forum Arduino
    Réponses: 7
    Dernier message: 15/03/2018, 20h20
  2. Commander un moteur (virtuellement)
    Par soft001 dans le forum LabVIEW
    Réponses: 0
    Dernier message: 12/04/2012, 10h06
  3. Commander un Moteur Electrique via une Interface Web
    Par felops dans le forum Entrée/Sortie
    Réponses: 4
    Dernier message: 05/03/2008, 14h00
  4. Installation d'un module en ligne de commande sur moteur 9i
    Par Arakil dans le forum Installation
    Réponses: 0
    Dernier message: 10/09/2007, 12h47
  5. Commander plusieurs moteurs par un seul port USB
    Par wolfjeremy dans le forum Windows
    Réponses: 6
    Dernier message: 11/06/2006, 14h52

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