Aller au contenu


Photo
- - - - -

Controle d'un grand nombre de moteurs DC avec encodeur


4 réponses à ce sujet

#1 Sandro

Sandro

    Pilier du forum

  • Modérateur
  • PipPipPipPipPip
  • 1 260 messages
  • Gender:Male

Posté 12 décembre 2019 - 09:09

Bonjour,

Dans le cadre de mon robot spéléo, je vais avoir beaucoup de moteurs DC à commander (16 à priori : 8 pour les roues, 8 pour les élastiques qui tendent les bras (ou pour contrôler directement les bras et "simuler" l’élasticité)). Parmi ces moteurs, au moins 8 (ceux des roues) seront muni d'un encodeur à quadrature, et au moins 8 (ceux des bras) seront muni d'un contrôle en courant (donc en couple).

Il est possible que je décidé d'ajouter la mesure du courant sur les moteurs des roues et/ou la mesure de position sur les moteurs des bras (pour ce dernier c'est même quasi sur, mais je ne sais pas encore si ce sera un encodeur sur le moteur de l'élastique et/ou un encodeur sur l'axe du bras et/ou un simple potentiomètre sur l'axe du bras).

 

Donc pour résumer :

- 16 moteurs DC (donc 16PWM + 16 sorties digitales)

- 8 ou 16 encodeurs à quadrature (donc 16 ou 32 interruptions à compter)

- 8 ou 16 mesures de courant (probablement résistance shunt donc 8 entrées analogique)

- 0 ou 8 mesures de position par potentiomètre (donc 8 entrées analogiques)

- quelques autres éléments en plus petit nombre (probablement 4 servos, 2 télémètres (I2C ou UART), mesure de tension de batterie, probablement 2 PWM pour gérer l'éclairage (avant et arrière), peut-être des moteurs en plus pour tourner 1 ou 2 caméras.

 

Bref, un grand nombre d'I/O, dont 16 ou 32 signaux interruptions.

 

Je me demandais donc quelle était la meilleur manière de gérer tout ça (sachant que j'aurais un raspberry pi comme maître)?

Pour l'instant, je vois :

- réseau d'Atmega328P (ceux des Arduinos Uno, nano, ...) en minimaliste (juste le circuit intégré et 2 condensateurs, donc environ 2€/microcontroleur), à 8MHz (au delà il faut un quartz). L’inconvénient est qu'il n'y a que 2 pins d'interruption par microcontrôleur, donc il m'en faudrait 8 ou 16 pour gérer toutes les interruptions. L'ensemble serait connecté en I2C au raspi (on aurait donc un Atmega par ensemble {bras+roue} voir un par bras et un par roue

- idem, mais en utilisant "boostant" le nombre d'interruption possible  : on met un circuit logique xor entre tous les signaux des encodeurs, et seul la sortie du xor vas sur le pin d'interruption : quand l'interruption survient, on va lire tous les signaux d'interruption (qui sont sur des pins I/O normaux). On peut optimiser un peu la lecture en groupant 8 signaux sur un port. L’inconvénient est que la détection du signal se fait en soft, donc risque de rater des signaux le temps d'aller lire.

- idem, mais en utilisant "Pin change interrupts" qui permet de détecter un changement sur une entrée d'un port (ie groupe de 8 I/O) : même problème qu'au dessus, il faut aller lire en soft de quel pin il s'agit.

- utiliser un/des microcontrôleurs gérant plus de pin d'interruption : des suggestions?

- ne pas gérer le comptage des fronts montant/descendants des encodeurs depuis un micro-controleur mais avec des circuits logiques + compteur, et on ne vas que lire le compteur de temps en temps.

- utiliser une carte dédiée à la gestion d'un grand nombre d'encodeurs : vous en connaissez?

- utiliser un FPGA pour gérer le contrôle des moteurs (avec un ADC ou un arduino pour gérer les entrées numériques). Est-ce que vous connaissez une carte FPGA pas trop chère, avec beaucoup d'IO, fonctionnant en 3.3 ou 5V?

 

Nb : je peux probablement me permettre de ne pas profiter pleinement de la résolution des encodeurs et de n'utiliser qu'un des signaux en interruption et l'autre que pour la direction (ie renoncer à la multiplication par 2 de la résolution qu'on obtient en exploitant les fronts du second signal)

 

Merci d'avance

Sandro


Aidez-nous à vous aider : partagez toutes les informations pertinentes : description précise du problème, contexte, schéma de câblage, liens vers la documentation des composants, votre code (ou encore mieux un code minimal reproduisant le bug), ...

Vous recevrez ainsi plus de réponses, et elles seront plus pertinentes.


#2 Mike118

Mike118

    Staff Robot Maker

  • Administrateur
  • PipPipPipPipPip
  • 9 959 messages
  • Gender:Male
  • Location:Anglet

Posté 12 décembre 2019 - 10:01

Je ne visualise pas bien ton architecture hardware, mais moi je chercherais à regrouper en bloc qui se répètent à l'identique et mettre un µc par bloc. 

Imaginons que ton robot soit composé de 8 bras identiques, je mettrais 1 µc par bras  qui aurait donc le même code et le même câblage avec juste un système d'adresse pour la com ... ce qui revient à ta solution " réseau d'atmega " ... Après tu peux utiliser autre chose aussi ... Stm32 ou autre il y a des truc pas forcément plus cher qu'une nano qui sont plus puissant si jamais une nano c'est un peu limite ... 

Quoi qu'il en soit avant de décider de l'architecture final il faudrait être sur de tout ce dont tu as besoin en capteur et en actionneurs à piloter ... 


Si mon commentaire vous a plus laissez nous un avis  !  :thank_you:

Nouveau sur Robot Maker ? 

Jetez un oeil aux blogs, aux tutoriels, aux ouvrages, au robotscope  aux articles,  à la boutique  et aux différents services disponible !
En attendant qu'une bibliothèque de fichiers 3D soit mise en place n'hésitez pas à demander si vous avez besoin du fichier 3D d'un des produits de la boutique... On l'a peut être ! 
Si vous souhaitez un robot pilotable par internet n'hésitez pas à visiter www.vigibot.com et à lire le sous forum dédié à vigibot!

 

Les réalisations de Mike118  

 

 

 


#3 Sandro

Sandro

    Pilier du forum

  • Modérateur
  • PipPipPipPipPip
  • 1 260 messages
  • Gender:Male

Posté 12 décembre 2019 - 10:51

Pour l'architecture hardware, j'avais mis une photo de "maquette" sur le sujet de présentation du robot : https://www.robot-ma...tion-de-speleo/

(il y aura un moteur pour chaque roue, et un moteur soit directement sur l'axe qui relie le bras au robot soit qui tende les élastiques rouges).

 

Il y a bien 8 bras identiques, d'où l'idée d'utiliser 8 microcontroleurs (+1 pour le reste).

 

Si je pars sur de l'arduino, j'hésite encore, mais il y a des chances que je partes sur des Atmega "nu", principalement pour des raisons de place (dans ce cas, il faudra que je décide si je me facilite la vie en les prennant en traversant, ou si je prends la version plus compacte en montage de surface).

 

Pour la charge de calcul, un Atmega328 est largement suffisent (il aura a controler (PID) 1 ou 2 moteurs avec feedback via encodeur et/ou mesure de courant). L'avantage d'un STM32 est que j'ai l'impression qu'il peut gérer plus interruptions sur pins, donc qu'on peut probablement mettre 2 bras sur le même STM32


Aidez-nous à vous aider : partagez toutes les informations pertinentes : description précise du problème, contexte, schéma de câblage, liens vers la documentation des composants, votre code (ou encore mieux un code minimal reproduisant le bug), ...

Vous recevrez ainsi plus de réponses, et elles seront plus pertinentes.


#4 Mike118

Mike118

    Staff Robot Maker

  • Administrateur
  • PipPipPipPipPip
  • 9 959 messages
  • Gender:Male
  • Location:Anglet

Posté 12 décembre 2019 - 12:45

Je te recommende de pas te prendre la tête et de prendre une arduino pro mini. C'est encore plus petit qu'une nano et il y a tout dessus... ça vaut pas le coup de se faire une carte ... 


Si mon commentaire vous a plus laissez nous un avis  !  :thank_you:

Nouveau sur Robot Maker ? 

Jetez un oeil aux blogs, aux tutoriels, aux ouvrages, au robotscope  aux articles,  à la boutique  et aux différents services disponible !
En attendant qu'une bibliothèque de fichiers 3D soit mise en place n'hésitez pas à demander si vous avez besoin du fichier 3D d'un des produits de la boutique... On l'a peut être ! 
Si vous souhaitez un robot pilotable par internet n'hésitez pas à visiter www.vigibot.com et à lire le sous forum dédié à vigibot!

 

Les réalisations de Mike118  

 

 

 


#5 Sandro

Sandro

    Pilier du forum

  • Modérateur
  • PipPipPipPipPip
  • 1 260 messages
  • Gender:Male

Posté 12 décembre 2019 - 01:06

A voir.

La pro mini plutôt que la nano, je suis d'accord.

Pour la carte, je me pose encore la question : ça dépendra entre autre si je me décide de prendre des modules pour les drivers de moteurs ou si je le fait moi même (tout regrouper sur un PCB sera bien plus compact, et dans ce cadre un Atmga est bien plus compact même qu'un pro mini).

Après, il y a aussi la solution intermédiaire, à savoir utiliser un PCB de prototypage.


Aidez-nous à vous aider : partagez toutes les informations pertinentes : description précise du problème, contexte, schéma de câblage, liens vers la documentation des composants, votre code (ou encore mieux un code minimal reproduisant le bug), ...

Vous recevrez ainsi plus de réponses, et elles seront plus pertinentes.




Répondre à ce sujet



  


0 utilisateur(s) li(sen)t ce sujet

0 members, 0 guests, 0 anonymous users