Gestion 6 ports serie RS232 pour cnc full servo

  • Auteur de la discussion erolhc
  • Date de début
E

erolhc

Guest
Bonjour

J'ai actuellement en chantier la réalisation d'un petit portique CNC en profilés alu 80*40 et rail prisamtiques à billes 15mm (usinage taile A3 sur Z=150mm). La partie mécanique a été réalisée (mais pas encore montée) sur ma BF20 CNC (maintenant démontée pour cause de déménagement provisoire en appartement) mais certaines pièces restent à finaliser (perçage surtout) sur une petite proxxon FF400 CNC aussi. Il reste quelques éléments mécaniques à acheter dont notamment les vis à billes.
Une présentation de cette petite machine viendra en temps et en heure j'espère avant la fin de l été.

Actuellement je planche sur l'électronique.
La machine est full servo AC.
  • X,Y,Z : 100W
  • A : 100W devant un harmonic drive 100:1 pour indexation et un autre axe A équipé d'un servo 750W capable de travailler avec une réduction par poulie de 2:1 (mode tour) ou de 1:6 (mode indexation). Cette dernière version de l'axe sera plutôt destinée en final à ma BF20.
  • B : 100W devant un harmonic drive 50:1 (pour cela la machine sera refaite je pense car je me tate encore comment seront placés les 4eme et 5eme axes et il faut bien que j'avance)
  • Broche : servo de 750W.(travail classique en mode vitesse ou bien indexation pour faire du hobbing par exemple ou du taraudage : a voir je n'ai pas encore vraiment étudié la question car si la carte Pulsar fait de l'interpolation 3D, je ne sais encore comment Galaad gère ça).

La carte Breakeout est en fait une carte interpolatrice Pulsar de Axemotion capable de gérer 5 axes + broche, fonctionnant sous Galaad.
Le PC de commandes est basé sur carte mini ITX core duo et un écran de 8" tactile en 4:3 et formant un ensemble intégré dans un seul boitier qui reste à faire.

Après cette petite présentation j'en viens à ce qui m'amène dans cette rubrique électronique du forum.

Si la carte Pulsar est capable de gérer sans problème les drivers de servo comme si c'était des PAP (step/dir, enable, arret d'urgence, etc ..) je perds certaines possibilité que m'offrent les drivers dont principalement :
  • la gestion des limites (plus rapide de traiter directement les limites par un driver de servo puis de le dire au logiciel FAO que de passer par la carte interpolatrice qui envoie l'info au logiciel/driver, ...),
  • la gestion des éventuelles causes d'erreurs sur les servo,
  • extinction des axes non utilisés,
  • extinction des alim 24V (I/O servo) et alim 12V pour PC (mini PSU) et écran.
  • arret d'urgence (plus évolué que sur carte breakout)
  • etc, ...

Pour gérer ces petites choses je vais donc utiliser une carte µ-C, certainement une arduino Mega2560 et affichage sur écran LCD (ou possibilité sur PC par l'USB mais bof).
Cette carte pourra aussi faire fonctionner la machine en mode manuel dans avoir à utiliser le PC car en fait j'ai remarqué que sur ma BF20

j'utilise beaucoup le mode manuel plutôt que de générer du G-code pour les pièce simples et/ou qui demandent de la précision (des fois je fais de la sur-qualité en m'amusant à viser le 1/100eme :D )

Reste le problème des changement de modes de fonctionnement (vitesse, position) sur les servos. Pour cela il faut passer par une reprogrammation des drivers qui se fait par liaison RS232. Cerise sur le gâteau cette liaison permet aussi de faire du monitoring quasi temps réel (surveillance du couple fourni, vitesse (mode tour ou broche), angle ou retard de pas par exemple, la surveillance de la position n'a que peu d’intérêt)

Deux cas s'offrent à moi.
  • J’achète une carte (mini PCI à environ 80€) qui rajoute 4 ports aux 2 RS232 déjà présents sur ma carte et je développe un petit programme. Problème : le PC doit tout le temps être allumé (si je veux faire du monitoring) ou faire une gestions des ports série par l'arduino.
  • Je suis obligé de toute façon de faire un PCB pour mettre des driver de lignes 74HC174/175 pour traiter les signaux step/dir et les signaux quadratures de l'encodeur) pour bénéficier de la bande passante des drivers et garder l'immunité aux bruit (en open collector la bande passante est divisée par 2). De même pour récupérer les autres I/O des drivers pour les rediriger vers l'arduino/pulsar (6 prises HE10-26) et 5 prises RJ12 vers la pulsar.

Donc si je gère les ports série par la carte arduino et comme celle-ci n'en que deux il faut que j'en rajoute 4 autres ,je me contente que de la programmation des drivers et là un simple multiplexage à base de 74HC451/4052 suffit (programmation que d'un seul driver à la fois)

si je veux faire du monitoring je suis obligé de rajouter 4 ports serie minimum (en software trop de risque de louper des info et surtout de déconnecter les drivers) et là j'en arrive à la question qui justifie le post : comment faire ?

J'ai bien quelques 8250 qui trainent dans une boite mais bon c'est en parallèle et cela complique pas mal la programmation
Il existe la serie de max3100 qui dialogue en I2C avec le µC mais le prix des bestiaux et leur disponibilité....
Ou bien je prend un pic simple et je m'en sert comme UART
LE PIC 12F1822 semble remplir les conditions (un port série et un port I2C et tres peux cher) mais j'aimerais avoir une confirmation par un spécialiste car j'ai quand même un doute sur la dispo en même temps des deux ports. Sinon merci de m'indiquer un qui pourrais être utilisé (pas cher, dispo, peu de pins)

Faudra juste que je me replonge de la programmation des PIC.

Pardon pour ce long post pour une toute petite question mais cela vous permet de placer le contexte et à l'avantage aussi de poser clairement les options qui s'offrent à moi pour en choisir une définitivement car plus ça va plus je complique le truc et en définitive je n'avance pas.
 
B

BBenj

Apprenti
La Mega2560 possède 4 ports série hardware et non deux :wink:
Ensuite tu peux rajouter des ports série logiciels (SoftwareSerial chez Arduino), à la limite près qu'un seul peut recevoir des données à la fois (si tu en utilise plusieurs).

La Mega2560 possède également un port I2C.

L'Arduino est la meilleur solution à mon goût ! :)
 
E

erolhc

Guest
Bonjour

Exact merci d'avoir relevé cette erreur.
Par contre un des ports est en parallèle avec le port USB. Bon c'est pas un gros problème puisque je préfère envoyer les info sur un LCD 4x20 ou 4X40.
Reste les deux à faire en soft ... et là je pense que cela va pas le faire d’après ce que j'ai pu lire sur les forum arduino. Il faut pas oublier que la carte va gérer autre chose que les ports série donc à coup sur je vais louper des infos.
Enfin je verrais ça quand j'aurais fini de décoder le protocole de communication des drivers et je ferais un essais.
 
B

BBenj

Apprenti
chlore a dit:
Par contre un des ports est en parallèle avec le port USB.
Exact.

Le mieux serait d'utiliser les 2 ports logiciels pour des communications qui n'arrivent pas en même temps ou qui n'ont pas besoin de recevoir (si possible). Ou bien faire un genre de multiplexage, un coup on lit sur l'un, un coup sur l'autre... mais il faut boucler en permanence pour lire les données, il n'y a pas d'appel de fonction asynchrone pour ça comme c'est le cas pour l'hardware.
 
E

erolhc

Guest
Le problème c'est que tous les servo vont principalement envoyer des info plutôt qu'en recevoir sauf lors de la programmation :???:
 
T

tranquille

Compagnon
Si les servos font du pulling, et que tu veux tout en permanence, tu n'as pas le choix, c'est gestion d'interruption et une ligne par servo
Si c'est selon un protocole maitre/esclave adressé, tu peux utiliser du RS485, soit derriere du RS232, de l'USB, ou mieux du TCP/IP
Si c'est du maitre/esclave non adressé, tu mets des convertisseurs TCP/IP pour avoir autant de RS232 que tu veux
 
B

BBenj

Apprenti
L'autre solution c'est de trouver un micro qui gère 6 ports séries en hardware directement... je ne sais pas si ça existe, ça me semble beaucoup 6. Ou bien diviser en 2 micro, avec 3 ports chacun. Ou bien 3, le dernier gérant l'affichage et la com' avec les 2 autres... :)
 
E

erolhc

Guest
@tranquille :
Les servo sont en RS232, une paire Tx/Rx
Convertir en TC/IP ? pourquoi pas mais cela me semble compliqué et guère plus efficace que ce que j’évoquais : un circuit qui va bufferiser un rs232 et que la carte arduino va interroger via I²C. Comme ça je peux mettre autant de circuits (et donc autant de servo) que je veux sur le bus I²C.
Un PIC 12F1822 coute 1.5€ et possède semble-t-il un port RS232 et un port I²C utilisable en même temps mais cela reste à confirmer par quelqu'un de plus calé que moi sur les PIC.

@BBenj : bien sur je pourrais mettre 2 carte arduino, chacune gérant 3 ports mais cela me semble un peu .. un gaspillage de ressources et cela coute 20 fois plus que des PIC 12F1822 dédiés
 
T

tranquille

Compagnon
Tu ne pourras jamais avoir le meme débit sur la RS232 vers l'arduino, que de l'arduino vers les 6 servos, même si tu as un buffer
C'est pour cela qu'il me parraissait important d'avoir un débit supérieur
Faudrait connaitre le volume d'information qui transite, c'est ce qui va te guider dans ton choix
 
B

BBenj

Apprenti
chlore a dit:
@BBenj : bien sur je pourrais mettre 2 carte arduino, chacune gérant 3 ports mais cela me semble un peu .. un gaspillage de ressources et cela coute 20 fois plus que des PIC 12F1822 dédiés
Pas des cartes arduino évidemment, mais un micro "tout seul". Tel un PIC, par exemple.
 
E

erolhc

Guest
Bonjour

@Tranquile :
je suis d'accord avec toi mais j'ai l'impression que l'on se comprend pas
Les servo communiquent à 9600 bauds. Je pense que même si l'arduino n'est pas un foudre de guerre il arrivera à multiplexer 6 ports via un bus (bien sur plus rapide que 6*9600 =57 600 octets/s)

@BBenj : ok. Pourquoi pas

Bon j'ai trouvé : le pic 12F1822 peut servir de bridge RS232 / SPI (ce qui à la limite me plait mieux que l'I2C) en servant de buffer 80 octets. Il y a même les sources
A voir si il est possible d'aller jusqu'à 6 interfaces : les 500kHz du bus SPI (62500 octets/s) me semblent un peu faible, sinon j’emploierais 3 ports de la carte arduino et 3 interfaces (mais la programmation sera moins élégante :) ) ce qui reviendrais en gros à la proposition de BBenj

Edit : ouch ... il n'y a que la ligne Rx :???:
 

Sujets similaires

D
Réponses
33
Affichages
1 060
dh42
I
Réponses
1
Affichages
252
JLuc69
JLuc69
El Zorro
Réponses
12
Affichages
566
El Zorro
El Zorro
D
Réponses
3
Affichages
581
djalex1664
D
esloch
Réponses
52
Affichages
2 067
esloch
esloch
Haut