Go Down

Topic: Choix de Shield pour contrôler 5 moteurs boucle de controle. (Read 206 times) previous topic - next topic

bvking

Bonjour,

Pour un projet artistique, je dois contrôler dans les deux sens au moins 5 moteurs de 6Volt avec encodeurs à quadrature.

J'aurais besoin de:

5 sorties analogiques pour contrôler la vitesse des 5 moteurs.

10 entrées "attachinterrup" pour récupérer la vitesse et les sens de chaque moteur

10 sorties digitales pour contrôler le sens de chaque moteur.

Je vais devoir acheter des L298 pour l'interface de puissance et du controle du sens des moteurs.

Si vous avez un site pour acheter tous ça, je prends vos conseils aussi.

PS: J'ai deja un Arduino Uno.


Merci pour vos idées.

hameau

Salut,

Quelques commentaires concernant ton projet :
- La commande permettant la variation de vitesses des moteurs passant par des PINS numériques, pas analogiques
- la carte arduino possède 2 pins pour interuptions
- Quels type de L298 D ou N ?
- Courant consommé par les  moteurs ?

@+
Digital Pins With Interrupts

[th]Board[/th]
[th]Digital Pins Usable For Interrupts[/th]
Uno, Nano, Mini, other 328-based2, 3
Uno WiFi Rev.2all digital pins
Mega, Mega2560, MegaADK2, 3, 18, 19, 20, 21

68tjs

Ça c'est pour les interruptions directes sur un avr, il existe d'autre interruptions qui affectent n'importe quelles Entrée/Sortie (au moins sur le 328p de la UNO à vérifier sur la Méga)

Ces interruptions sont les "PCint_xx", elles ne sont pas prises en charges par les fonctions Wiring/arduino, il faut ouvrir la datasheet.
Il faut aussi oublier la dénomination des sorties Wiring/arduino et ne s'occuper que de la dénomination du fabricant du micro Atmel qui gère les E/S par PORT et indice dans le PORT.
Il faut oublier aussi la fonction Wiring/arduino "attachInterrupt" et utiliser directement la macro "ISR" -> attachInterrupt n'est qu'une surcouche à ISR.

Une interruption "PCint_xy" indique simplement le PORT qui a généré une interruption, connaissant cette information c'est au programmeur de terminer le travail et de détecter quelle sortie dans le PORT à générée une interruption.

C'est moins direct que int0 ou int1 mais c'est faisable.

Quand j'avais voulu utiliser les PCint je m'étais fait un pense bête que j'avais publié.
Cela vaut ce que ça vaut et c'est ici dans Tutoriel et Cours :  http://forum.arduino.cc/index.php?topic=100906.0

Jpbbricole a dernièrement publié un plan de brochage très bien fait pour la UNO où justement toutes les PCIntxx étaient référencées.

fdufnews

Enfin moi je vois surtout que gérer 5 moteurs et les réguler en vitesse à partir d'encodeurs (simple supposition mais si on considère les questions posées par bvking ces derniers temps je pense ne pas prendre un gros risque) avec un UNO ça risque d'être un peu compliqué.
Si tu regardes sur le net tu trouves des lots de nano à moins de 2€ pièce port compris. Et je pense que tu te prendras moins la tête pour la mise au point. S'il doit y avoir interaction entre les différents "moteurs" il suffit de mettre en place un lien de communication entre les arduino. En plus les éléments seront plus facilement réutilisables dans d'autres projets.

jpbbricole

Bonjour bvking

Et je pense que tu te prendras moins la tête pour la mise au point. S'il doit y avoir interaction entre les différents "moteurs" il suffit de mettre en place un lien de communication entre les arduino. En plus les éléments seront plus facilement réutilisables dans d'autres projets.
Daccord avec @fdufnews , commander 5 moteurs sur un seul UNO, ç*a va être difficile et tu sera à la limite partout. Une solution, un "petit" Arduinoi comme un Nano par moteur, connectées entre eux par un bus i2C avec un UNO comme maître. J'ai déjà fait un bus i2C avec 12 Arduino, sans problème.

5 sorties analogiques pour contrôler la vitesse des 5 moteurs.
10 entrées "attachinterrup" pour récupérer la vitesse et les sens de chaque moteur
10 sorties digitales pour contrôler le sens de chaque moteur.
Je vais devoir acheter des L298 pour l'interface de puissance et du controle du sens des moteurs.
Pour le contrôle de vitesse, le digital en PWM est mieux.
Les entrées attachinterrupt, si c'est juste pour lire la vitesse, un interrupt par moteur est suffisant et une entrée sur l'Arduino (A ou B du codeur). Le double interrupt est utile si l'on veut contrôler le nombre de pas par tour avec une résolution x4.
Pour contrôler le sens, une sortie par moteur est suffisante, le On/Off du moteur serait assurée par le PWM.
Pour la commande du moteur, en puissance, j'utilise ce genre de H-Bridge, il peut commander 2 moteurs.

C'est ce genre de moteur que tu utilises?


Cordialement
jpbbricole
L'expérience est la seule chose qu'il ne faut acheter que d'occasion!

bvking

Bonjour JPBbricole.

Quand vous parlez de Arduino Nano par moteur controlé par un bus I2C vous parlez de bien ça?


USB Nano V3.0 ATMEGA328P CH340G 5V 16M Micro-Controller Board Kit For Arduino à 1€ pièce?


https://www.ebay.fr/itm/USB-Nano-V3-0-ATMEGA328P-CH340G-5V-16M-Micro-Controller-Board-Kit-For-Arduino-/263028175684?var=

parce que y'en a sur Ebay, mais faudra faire de la soudure et attendre longtemps avant de recevoir le lot.

Et sur un autre site, il y a:

https://www.francerobotique.com/contr%C3%B4leurs-interfaces/208-arduino-nano-art0208-arduinodimensions-45-x-18-x-18-mm-tension-dalimentation-7-12v-micro-controleur-atmega328-tension-de-fonctio.html.

Est ce bien la même chose, sauf que dans un cas la carte est toute prête et bcp plus chère?


Sinon, pour faire " plus simple " je pensais peut être acheter une carte MKR ZERO car elle a 8 External Interrupts 8 (0, 1, 4, 5, 6, 7, 8, A1 -or 16-, A2 - or 17) donc ca fera 10 broches attacinterrupt en communiquant la Uno avec la Zero.
En plus si plus tard, je veux faire avancer mon projet: par exemple faire tourner mes moteurs en fonction de l'intensité de certaine fréquence musicale, cette carte peut lire  des fichiers musicaux directement depuis le lecteur de carte SD qui est integré et sortir des informations sonores grâce à un protocole I2S (si j'ai bien compris).

Pour l'instant, je viens de commander ce moteur+encodeur car il est silencieux et tourne à 3 tours par secondes max.
Je vais voir s'il fonctionne bien avec mon programme de controle de vitesse basé sur un algorithme PID.

J'ai besoin des deux broches interrupt par moteur car j'ai besoin de savoir la vitesse et le sens du moteur.
Car quand le moteur change de sens, mon algorithme PID envoye des valeurs negatives, qui me servent à dire au programme si valeurs negatives et vitesse=x alors fait tel chose.

Donc, la MKR zero me semble un bon choix, mais je crois qu'il ya des shield qu'on peut  brancher par dessus la UNO, la MKR2UNO ADAPTER mais je croix qu'il pas de communication I2C possible ni l'attach interrupt supplémentaire donc je comprends pas trop l'intérêt de cette dernière shield.

Merci pour votre attention.

Pour communiquer en I2C entre de Arduino, il y a pas besoin de composants speciaux?? Juste deux fils?

68tjs

Va voir chez Rakuten (ex price minister) les dépôts sont en France donc peu de délais. C'est un peu plus cher que si les dépôts étaient en Chine mais les prix restent (étaient) très raisonnables.

La nano à un port USB, si tu ne t'en sert pas la carte consommera pour rien.
Si la consommation est un point important pour toi il existe la version simplifiée de la nano : la mini-pro qui  est dépourvues d'interface USB/série. Pour la programmer c'est un peu moins simple qu'avec la nano, mais cela reste simple quand même !  Il faut juste connecter une interface USB/série à chaque fois qu'il faut la reprogrammer.

Va faire un tour sur le blog d'hbachetti il me semble qu'il en a parlé.

Quote
Pour communiquer en I2C entre de Arduino, il y a pas besoin de composants speciaux?? Juste deux fils?
Non 3 fils --> il ne faut Jamais oublier le fil de masse.

L'I2C n'a jamais été prévue pour des grandes longueurs : au départ c'était juste pour faire dialoguer des circuits intégrés situés sur la même carte de circuit imprimé soit quelques centimètre et non pas des mètres.
Depuis on a fait des "répéteurs I2C" mais ils ne sont pas trouvablent facilement dans les boutiques de composant "amateurs", je ne connais pas leur prix, espérons qu'il ne soit pas  "professionnel".

Pour les grandes distances il y a le RS485 qui  associé à un bon protocole pourrait convenir. Désolé je ne connais que son existence (et surtout le coté électronique) mais d'autres ici en connaissent beaucoup plus, donc attendons qu'ils se manifestent.
Le RS485 est un protocole  uniquement électronique, il a été conçu pour le transport de signaux sur des grandes longueurs.
Le RS485 doit être associé à un protocole logiciel. Le plus connus semble être Modbus.

hameau

Salut,

Sur le site Bangood, les nano sont  à moins de 3 € soudé, dispo sous moins de 15 jours pour 5 € port compris
Nano
Sinon depuis dépot EU
nano EU

fdufnews

Si la consommation est un point important pour toi il existe la version simplifiée de la nano : la mini-pro
Vu qu'il veut piloter 5 moteurs je pense que la consommation doit être le cadet de ses soucis  :D

jpbbricole2

Bonjour bvking

Contactes-moi en MP, j'ai une solution concrète pour toi.

Cordialement
jpbbricole (bis)

Go Up