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 :

Intégration de softpwm avec arduino leonardo


Sujet :

Arduino

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Février 2017
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Responsable de service informatique

    Informations forums :
    Inscription : Février 2017
    Messages : 7
    Points : 1
    Points
    1
    Par défaut Intégration de softpwm avec arduino leonardo
    Bonjour
    J'ecris car j'essaye d'aider sur le dev d'un systeme de control de moteur pour des objectives pour le cinema.

    https://www.motiondogs.com/wireless-...-base-kit.html

    Le systeme est ecrit en arduino leonard et controle un "stepper motor".

    Le code source est dispo en open source:
    https://github.com/MotionDogs/Lenzhound-1.x

    Le probleme est que le "stepper motor" est bruyant et n'est pas tres puissance, donc mon projet est d'adapter ce systeme vers des moteurs servo plus puissant.

    J'ai eu des longues discussion avec le fabriquant sur comment cablé un controlleur moteur DC sur leur carte mere et meme eu la preuve que ca peux marcher
    http://forum.motiondogs.com/t/using-...-motors/230/31

    Pour faire cette adaptation,il est sugéré d'intergrer Softpwm dans leur code source, tester avec le moteur que j'ai et trouvé les meilleurs "settings".
    Probleme : je ne connais rien en cpp.

    J'ai du mal a savoir si ce projet est difficile ou pas donc je cherche quelqu'un qui puisse me pister.
    Merci d'avance

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

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

    j'avoue ne pas avoir tout compris...

    Le systeme est ecrit en arduino leonardo et controle un "stepper motor".
    Ce que je vois dans les liens que tu nous indiques, un système avec une télécommande et un moteur pour contrôler les objectifs.
    Mais le système original intègre une carte Leonardo ? Ou c'est celui que tu es en train de réaliser ?
    En passant, Arduino Leonardo n'est pas un langage



    Le probleme est que le "stepper motor" est bruyant et n'est pas tres puissance, donc mon projet est d'adapter ce systeme vers des moteurs servo plus puissant.
    J'ai eu des longues discussion avec le fabriquant sur comment cablé un controlleur moteur DC sur leur carte mere et meme eu la preuve que ca peux marcher
    là c'est encore plus confus : le dispositif de base intègre un moteur pas à pas (stepper motor comme tu nous l'indiques) et tu souhaites le remplacer par un moteur DC ? Tu es sûr que tu ne veux pas remplacer le moteur actuel par un autre moteur pas à pas ? Car un moteur DC n'est pas un moteur pas à pas !


    Moi je vois ton problème comme ceci : si le moteur pas à pas actuel n'a pas assez de puissance on le remplace par un moteur pas à pas plus puissant (en modifiant aussi l'alimentation et l'électronique). Du coup, je ne vois pas trop ce que vient faire Leonardo dans ce projet.

    Peux-tu éclairer nos lanternes ?

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Février 2017
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Responsable de service informatique

    Informations forums :
    Inscription : Février 2017
    Messages : 7
    Points : 1
    Points
    1
    Par défaut
    Merci beaucoup pour votre reponse.
    Le but est d'adapter le systeme du moteur d'origine "pas à pas" à ce moteur numerique .
    http://heden-engineering.com/products/motors/m26ve_1/
    qui est beaucoup plus puissance, plus precis, moins lourd et plus silencieux.

    Pour faire ca, il y a la carte de reception de la telecommande "Motion Dogs DB1 Receiver"
    https://forum.developpez.be/images/attach/jpg.gif
    , qui est un Arduino Leonardo adapté,
    https://github.com/MotionDogs/Lenzhound-1.x
    qui est branché sur une carte Cytron 13A, 5-25V Single DC Motor Controller
    http://www.robotshop.com/en/cytron-1...ontroller.html
    puis cablé a un connecteur Lemo 7 points.
    https://forum.developpez.be/images/attach/pdf.gif
    Pour faire fonctionner ce systeme, j'ai besoin de "traduire" les instructions de la telecommande vers le Cytron 13A, 5-25V Single DC Motor Controller. A priori, c'est possible a travers la librarie SoftPWM,
    https://www.pjrc.com/teensy/td_libs_SoftPWM.html
    https://code.google.com/archive/p/ro...mentation.wiki

    Ce que je cherche à faire est d'integrer le SoftPWM libraire dans le code existant et ouvrir les 'pins' pour controller la carte Cytron 13A, 5-25V Single DC Motor Controller pour voir si SoftPWM est assez puissant.
    Sinon, chercher un autre librarie mieux adapté.
    Merci encoreNom : db1pinout.jpg
Affichages : 348
Taille : 199,4 Ko
    Images attachées Images attachées

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

    Informations forums :
    Inscription : Avril 2004
    Messages : 7 647
    Points : 11 136
    Points
    11 136
    Par défaut
    ok Je comprends mieux tout ça.

    Leonardo ou plus précisément l'ATMega 32U dispose d'entrées / sorties numériques et quelques unes de ces E/S peuvent être configurées en sorties PWM (c'est un signal carré de fréquence fixe dont le rapport cyclique varie). Le microcontrôleur dispose aussi d'entrées analogiques (notées de A0 à A5 sur les Leonardo) qui peuvent être également configurée en E/S numériques. Mais ce ne sont pas des sorties PWM.

    Dans ton cas, si le fabricant a utilisé la même nomenclature qu'Arduino, il a donc utilisé les voies A0-A5 (curieux choix dans ce cas ) comme sorties PWM pour piloter ton moteur. Or ces voies ne sont pas des voies PWM, problème que peut corriger la bibliothèque SoftPWM.

    Mais si je reviens sur ce que tu as écris :
    Pour faire fonctionner ce systeme, j'ai besoin de "traduire" les instructions de la telecommande vers le Cytron 13A, 5-25V Single DC Motor Controller. A priori, c'est possible a travers la librarie SoftPWM,
    cette bibliothèque ne fait pas ce que tu dis... Elle te permettra de piloter la carte Cytron, c'est tout. En aucun cas, elle ne te permettra de "traduire" les instructions provenant de la télécommande. Pour comprendre :

    Télécommande (émetteur) --------------> Récepteur (Motion Dogs DB1 Receiver) ----------------> SoftPWM -----------> Cytron -------> moteur

    Or ce qu'il te manque c'est au niveau du récepteur, et c'est lui qui va traduire les commandes. En fonction de ces commandes tu vas appeler les fonctions de SoftPWM qui vont piloter ta carte Cytron.


    je cherche à faire est d'integrer le SoftPWM libraire dans le code existant
    Franchement ce n'est pas une mince affaire, il faut analyser tout le projet Lenzhound pour pouvoir intégrer cette bibliothèque.

  5. #5
    Nouveau Candidat au Club
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Février 2017
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Responsable de service informatique

    Informations forums :
    Inscription : Février 2017
    Messages : 7
    Points : 1
    Points
    1
    Par défaut
    Merci beaucoup pour cette synthese. C'est tout a fait ca.
    Donc, ca semble etre compliqué. Est ce que vous avez une idée ou je puisse me former ? Est ce que vous connaissez des groupes enthuiaste Arduino sur Paris?
    Merci encore

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

    Informations forums :
    Inscription : Avril 2004
    Messages : 7 647
    Points : 11 136
    Points
    11 136
    Par défaut
    Si je prends le contenu du dossier Rxr du projet.

    • macros.h :
      comme son nom l'indique, ce fichier contient des macros. Mais ce qui est intéressant, c'est qu'il contient aussi les adresses du matériel. Deux pins sur les registres F pour l'antenne, et 6 pins pour le contrôleur du moteur répartis sur les ports B, C et D.
      Pour comprendre comment fonctionnent ces macros, il faut aussi regarder le fichier principal du projet, Rxr.ino.
      Je ne peux pas dire à quoi correspondent les voies MS1 et MS2, il faut regarder la doc. Avec ce fichier, tu peux savoir comment brancher ton contrôleur de moteur (la carte Cytron) sur la carte de commande.
    • motor.cpp :
      contient les fonctions du moteur : marche, arrêt, direction. Il faut prêter une attention particulière à la fonction pulse_ motor() : cette fonction envoie juste 1 pulse (un SET puis un CLR). Ce détail est important pour la suite...
    • motorcontroller.cpp :
      appelle les fonctions définies dans motor.cpp. Quant aux fonction de motorcontroller, elles sont appelée dans le fichier principal du projet, Rxr.ino
    • receiver.cpp
      récupère les données reçues.
    • Rxr.ino :
      dans ce fichier sont intégrées toutes les fonctions ci-dessus. On pourra remarquer dans la fonction setup() ces deux lignes de code
      Code c : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
        Timer1.initialize();
      Timer1.attachInterrupt(TimerISR, kPeriod);
      La fonction TimerISR qui appelle motor_controller.Run(); est attachée à l'interruption du Timer1. Ce qui veut dire qu'à chaque période kPeriod on envoie 1 pulse au moteur. C'est elle qui fait tourner ton moteur en envoyant des impulsions à une période fixe au contrôleur du moteur pas à pas.
      Infos : http://playground.arduino.cc/Code/Timer1
    Je n'ai pas passé en revue toutes les fonctions mais grosso-modo, voilà le fonctionnement du programme, si je ne me suis pas trompé .


    Mais je me pose plusieurs questions :
    - le moteur pas à pas a combien de fils (je penche pour 4 fils) ?
    - quel est le composant attaché au radiateur dans la seconde photo ?
    - as-tu une datatsheet complète sur cette carte Motion Dogs ?
    - as-tu essayé de connecter la carte Cytron sur la carte réceptrice ? Car a priori, si je me base sur les schémas que tu as donné, seuls trois voies sont connectées au lieu de 5.
    - je me demande si ce code peut fonctionner, moyennant quelques modifications, avec un moteur DC, mais sans intégrer SoftPWM. Car la différence majeure dans ton moteur pas à pas et le moteur DC est le nombre de bobines à piloter, les deux moteurs fonctionnant en PWM.

  7. #7
    Nouveau Candidat au Club
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Février 2017
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Responsable de service informatique

    Informations forums :
    Inscription : Février 2017
    Messages : 7
    Points : 1
    Points
    1
    Par défaut
    Merci beaucoup pour votre description de ce logiciel.
    Je vais analyser pour voir comment avancé.

    Pour repondre a vos questions:
    le moteur pas à pas a combien de fils (je penche pour 4 fils) ? Vous avez tres bien vu,
    Nom : 20170121_164802.jpg
Affichages : 300
Taille : 604,3 Ko
    - quel est le composant attaché au radiateur dans la seconde photo ? En dessous de la radiateur et un processeur mais je ne vois pas laquelle type.
    - as-tu une datatsheet complète sur cette carte Motion Dogs ? Je vais demandé
    - as-tu essayé de connecter la carte Cytron sur la carte réceptrice ? Car a priori, si je me base sur les schémas que tu as donné, seuls trois voies sont connectées au lieu de 5. - J'ai deja construit le schema dans une boitier mais ca ne marche pas tout seule (qui n'est pas tres etonnant).
    Nom : 20170223_091114.jpg
Affichages : 341
Taille : 894,6 Ko
    Le cablage is basé des de la fiche Lemo 7 point est basé sur des info que j'ai pu avoir d'autre constructeurs. il y a plusieurs constructeurs de moteurs de ce type qui utilise ce schema.
    http://www.prestoncinema.com/Manuals...manual2014.pdf page 25
    https://www.schneideroptics.com/pdfs...ual%20V3.2.pdf page 16

    - je me demande si ce code peut fonctionner, moyennant quelques modifications, avec un moteur DC, mais sans intégrer SoftPWM. Car la différence majeure dans ton moteur pas à pas et le moteur DC est le nombre de bobines à piloter, les deux moteurs fonctionnant en PWM. - Si j'ai bien compris, the principal interet de softpwm est de redispatcher le signal PWM sur les autres ports.

    https://www.pjrc.com/teensy/td_libs_SoftPWM.html
    "SoftPWM, written by Brett Hagman, can create additional PWM outputs on any pin. The signal frequency is relatively slow (default 30 Hz), which is mostly useful for controlling the brightness of LEDs. "
    Le probleme potentiel est, est ce que 30HZ est suffissant pour contoller ce type de moteur?
    Encore Merci
    Christopher

  8. #8
    Modérateur

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

    Informations professionnelles :
    Activité : Ingénieur électricien

    Informations forums :
    Inscription : Septembre 2008
    Messages : 1 267
    Points : 4 829
    Points
    4 829
    Par défaut
    Bonsoir

    La commande de moteur pas à pas n'a rien à voir avec une commande de moteur DC asservit.
    En moteur pas à pas, il y a deux méthode de commande:
    - Le mode par pas entier, il est fait par la succession des 4 pas suivants: 1; 2; 3; 4;
    - Le mode par demi-pas, il est réalisé par la succession des 8 pas suivants: 1; 1+2; 2, 2+3; 3; 3+4; 4; 4+1;
    L'inversion de sens se fait en inversant la séquence
    Dans les séquences ci-dessus, l'alimentation des bobines est la suivantes:
    - 1: bobine 1 en polarité positive
    - 2: bobine 2 en polarité positive
    - 3: bobine 1 en polarité négative
    - 4: bobine 2 en polarité négative
    cette partie est normalement réalisée par le driver de moteur.

    Après la commande depuis le micro est en boucle ouverte, le nombre de pas (qu'il faut compté) corresponds à l'emplacement du moteur, la fréquence de passage d'un pas à l'autre définira la vitesse. On doit retrouver cela dans le code du micro.
    Le travail du driver, en plus de l'alimentation c'est normalement de régler le courant moteur en PWMant le signal. Pour un moteur pas à pas, le courant doit resté constant c'est la tension moteur qui varie en fonction de la vitesse de rotation.

    Pour le moteur DC, la tension appliquée va définir sa vitesse, vitesse modifiée par la charge du moteur, c'est le taux de PWM appliqué par le micro au driver.
    Mais il faut réguler la position du moteur pour s’arrêter à la bonne place. Il faut donc compter les impulsions en retour par les deux canaux du codeur (Encoder Channel A et B). Mais faudrait déjà connaitre les spécificité de ces signaux: carré ou sinus?

    Donc les étapes c'est
    - d'identifier dans le programme actuel la consigne de vitesse et de déplacement, puis supprimer la commande moteur qui est après.
    - de trouver un moyen de compter le retour du codeur pour savoir ou en est le moteur. Est-ce que le Loop() est suffisamment rapide pour compter avec une simple lecture dans Loop() ou faut-il utiliser les interruptions sur les entrées, mais dans ce cas les entrées à dispo ne sont pas les bonne (il faut les PCINTx selon la datascheet du micro).
    - En premier on peut essayer une simple régulation on/off: la vitesse est appliquée en tant que consigne PWM tant que le moteur n'est pas à la bonne place, mais si cela ne va pas il faudra passer par une régulation PID.

    Delias.

  9. #9
    Nouveau Candidat au Club
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Février 2017
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Responsable de service informatique

    Informations forums :
    Inscription : Février 2017
    Messages : 7
    Points : 1
    Points
    1
    Par défaut
    Bonsoir Delais
    Merci beaucoup pour tout les infos.
    Je vais demandé pour avior des reponses aux problemes.

    J'ai trouvé un thread sur un projet arduino tres similaire. Le moteur est du meme fabricant que la mienne et de ce que je comprends ca avoque des sujet proche par apport au signaux.

    Le moteur dans mon heden est un faulhaber 2342s024cr
    https://fmcc.faulhaber.com/details/o...8_13813/fr/DE/

  10. #10
    Nouveau Candidat au Club
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Février 2017
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Responsable de service informatique

    Informations forums :
    Inscription : Février 2017
    Messages : 7
    Points : 1
    Points
    1
    Par défaut
    Bonjour
    Je partage la reponse que j'ai eu:

    The SoftPWM library will be an additional library to include with the rest of the Lenzhound system as you expected. Another library you might want to take advantage of that's bundled with the Arduino platform is the Encoder library, this library may simplify using the data for position feedback from your motor.

    The DIR pin can be directly re-mapped to the DIR pin on the Cytron DC driver.

    Here's a short rundown of the Lenzhound systems hardware:

    Both the controller and receiver use an ATMEGA32U4 16-bit microcontroller and an nRF24L01+ 2.4Ghz wireless transceiver.

    As for the controller, the remaining available pins on the microcontroller are used for the LEDs, buttons, rotary encoder, focus knob/potentiometer, and a few pins for ISP programming.

    On the receiver, the stepper driver is an Allego A3967, the datasheets may be helpful in understanding what all the macro functions you've discovered in the code do - ENABLE, SLEEP, DIR, STEP, MS1, MS2
    http://www.allegromicro.com/en/Produ...ers/A3967.aspx

    Below is the softpwm code used in this youtube test

    Also, here's the code I used to connect a potentiometer and run my DC motor; http://pastebin.com/GxVTxX86

    "With the motor I have, once at full speed, a lot of electrical noise is introduced on the motors position feedback line. I added a couple 0.1uF capacitors between my GND and pin that provides position. Many motors use encoders, my old school motor has a potentiometer on it. More modern industry motors are using encoders with A/B channels (which helps improve accuracy) so code would need to be adjusted for that difference.

    Cobbled together some code for absolute bare minimum functionality. With a little accel/decel code improvements this could be quite viable."

  11. #11
    Modérateur

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

    Informations professionnelles :
    Activité : Ingénieur électricien

    Informations forums :
    Inscription : Septembre 2008
    Messages : 1 267
    Points : 4 829
    Points
    4 829
    Par défaut
    Bonsoir

    Il n'y a plus qu'a!

    SoftPWM pour le moteur, Encoder Library pour le codeur.

    Mais il faut y aller par étape:
    - Reprendre un projet vide
    - Faire aller juste le moteur (1sec à différent palier de vitesse, en avant et en arrière) cela permet de déterminer quel est la vitesse maxi.
    - Faire aller le moteur et l'encodeur, le programme se contente d'aller à une position, une petite attente, une autre position, une petite attente etc... Le faire à basse vitesse en premier, puis augmenter pour voir quand la lecture du codeur décroche
    - Puis repérage dans le soft original des consignes de vitesse et position et reprise du code depuis ce point.

    Régulateur PID: au début on essaie sans! Il y a de forte chance que cela fonction avec du simple on/off comme décrit dans l'exemple de code.

    Après je remarque que la discussion dans le forum motiondogs se termine par: "Then the final missing piece is the code to make it all work."
    Que l'exemple de fonctionnement du moteur est dans un projet vide, sans rien du code de gestion.

    Donc après pour moi 50/50 que le système ne marche pas car le micro n'a pas assez de temps processeurs libre pour gérer proprement l'encodeur et le moteur.

    Une dernière chose, je n'irai pas décortiquer le code du projet initial pour faire le travail à ta place. Je n'ai ni le temps ni surtout la motivation pour, d'autant plus que je prendrais une toute autre voie, avec un hard qui a les signaux sur les bonnes pattes, pour ne pas avoir à traiter le PWM et le codeur par le soft et surtout un soft en C sans quasi aucune libraire histoire de maitriser le micro à 100%.

    Delias

  12. #12
    Nouveau Candidat au Club
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Février 2017
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Responsable de service informatique

    Informations forums :
    Inscription : Février 2017
    Messages : 7
    Points : 1
    Points
    1
    Par défaut
    Delias
    Merci mille fois pour tout. Je comprends maitenant l'enjeu, le risque et la méthode. Je peux me lancer dans cette aventure en connaissance de cause.
    Je comprends très bien que vous ne voulez pas aller plus loin. Ce n'était pas mon but. Vous m'avez donné les clés pour commencer, qui est déjà beaucoup.
    Encore Merci
    Christopher

Discussions similaires

  1. Intégration de JasperReports avec ApEx
    Par TiteTalou dans le forum Jasper
    Réponses: 1
    Dernier message: 08/07/2008, 00h32
  2. Réponses: 1
    Dernier message: 12/05/2008, 12h14
  3. [CR 2008]Intégration de CR avec visual studio 2008
    Par bcgetpause dans le forum SDK
    Réponses: 0
    Dernier message: 02/05/2008, 09h42
  4. Intégration Office Communicator avec SharePoint
    Par ghaziabassi dans le forum SharePoint
    Réponses: 2
    Dernier message: 21/04/2008, 15h04

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