Controleur autonome de cnc

  • Auteur de la discussion arnaud2
  • Date de début
A

arnaud2

Ouvrier
Salut tout le monde

J'avais deja ouvert un sujet il y a quelque temps pour demander quelques questions sur les algorithmes d'interpolation pour faire un controleur de cnc et ben ca y est c'est fait (pas completement fini mais bon)

alors le montage lis le gcode dans une carte sd-mmc , fait l'interpolation et pilote les moteurs pas a pas

voila les carracteristiques

-interpolation lineaire sur 3 axes aves sortie en step/dir st gestion de la rampe d'acceleration frequence de sortie maxi 50000hz (mesuré au fréquence metre et a l'oscillo)

-mode automatique

-mode pas a pas

-mode manuel

-commande a distance par rs232

-reglage de tout les parametres dirrectement sur la carte

-reglage de la vitesse de broche par pwm

-prise d'origine

par la suite d'autres fonctions seront ajouté les entrées sorties
sur la carte sont deja prévu

-changeur d'outil (256 outils max)

-correction automatique de la hauteur en Z par palpeur d'outil

j'y ai mis un bootloader pour pouvoir mettre a jour le firmware sans enlever de composants

niveau electronique rien de compliqué seulement 3 circuits intégré
(le pic , max232 , mcp23s17) circuit simple face , pas de cms

le programme non plus est pas tres compliqué bien qu'il soit long (entierement ecrit avec mikrobasic)

je metterai en ligne le typon et le .hex des que les quelques bug qui
restent seront corrigé

les menus je les ai ecris en anglais parce que j arrive pas a traduire tout les mot technique si quelqu'un pouvait les traduire en francais ca serait cool

DSC00957.JPG


DSC00958.JPG


DSC00959.JPG
 
R

romteb

Fondateur
Wow ca en jette :tumbsupe:

Ce que tu souhaite traduire est entièrement sur les photos ?

Au fait si tu as besoin que quelqu'un te fraise des ouvertures dans un boitier pour loger ta merveille je suis ton homme. :wink:
 
A

arnaud2

Ouvrier
merci

oui j aimerai bien traduire mais le probleme c'est surtout la longueur des mots ! sur les ecrans lcd KS0108 c'est un peu limite (128*64)

la prochaine version utilisera un ecran 240*128 type T6963 comme ca je pourait ajouter une representation graphique du deplacement des axes

pour le boitier j'ai commander un boitier avec face avant en plexi

le dessin de la face avant je pense l'imprimer sur papier photo puis le plastifier et le coller sur la face avant mais je sait pas trop quelle colle utiliser
 
A

arnaud2

Ouvrier
voila je rajoute le typon et l'implantation

pour le schema j'en ai meme pas encore fait (juste un gibouilis sur du pq lol)

le circuit imprimé fait 120*160mm

implantation.JPG


typon.jpg
 
A

arnaud2

Ouvrier
et sans oublier le firmware
attention l'arret d'urgence ne fonctionne pas correctement encore des qu'on enleve le boutton ca redémarre

defois aussi ca plante a la fin du fichier

il suffit de charger le fichier bootloader .hex dans le pic
apres il suffit d'utiliser le logicier de bootload pour mettre le programme
mais le programme peut aussi etre mis dirrectement dans le pic Voir la pièce jointe firmware_ver1.0.zip
 
R

romteb

Fondateur
spindle = broche

coolant = arrosage

ref home = prise origine

remote = telecommande ou à distance

setup = configuration

feed = avance

rpm = tpm

probe = palpeur

Display = affichage


Je sais pas si ca t'as aidé :7grat:

Pour ta facade si jamais t'as besoin n'hesites pas, j'ai du plexy blanc translucide de 3 mm et du plexi transparent de 5 mm, avec possibilté de gravure et decoupe.

Je peux egalement te faire ca dans de la tole d'alu.
 
P

phil916

Compagnon
Une très belle carte, bravo pour le soin apporté !
dommage que ce soit un PIC et pas un ATMEL :roll:
... je rigole, pitié pas la guéguerre AVR/PIC :lol:

rpm est aussi utilisé en français (rotation par mn)
 
A

arnaud2

Ouvrier
il n'y a pas a avoir de guerre entre pic et avr
j'ai utiliser un pic18f4620 donc 64k de flash 4k de ram et 1k d eeprom
j'equivanlent chez atmel c'est l'atmega64 qui existe uniquement en boitier qfp donc j ai preferé utiliser un pic bien que ca doit etre tres bien fesable avec un avr et surtout je connait pas trop bien les avr

j'avais vu un projet du meme genre je sait plus ou a base d' un AT91RM9200 mais la c'est tout a fait une autre histoire ce genre de microcontroleur est utiliser dans les cnc industrielle et les ugv mais pour un usage amateur je ne vois pas vraiment l'interet d'aller plus vite que 50000 pas par seconde (encore faut'il les moteurs et les drivers qui suivent derriere!)

le programme est relativement long (environ 2000 lignes de basic) mais pas comliqué pour autant (pas d'interruptions ,pas de timers ...)

ce qui est le plus long c'est tout les menus et l'affichage le reste c'est juste de lire le systeme de fichier d'interpreter le gcode puis de faire un algorithme de bresenham pour commander les moteurs
 
M

MaX-MoD

Compagnon
Chapeau bas!

50KHz avec un 18F, je n'y aurais pas cru... surtout en basic!
Il faut croire que tu ne codes pas avec les pieds et que microe est un bon compilo :wink:


Sinon, je me demandais comment gérer les rampes d'accélération/décélération... tu as fait comment?

Dernière chose, tu comptes partager les fichiers source?
 
A

arnaud2

Ouvrier
si tu veu je t envoi le code source en mp
je vais pas le mettre en ligne car certaines personnes risqueraient d'en tirer profit et ce programme doit rester entierement gratuit et j ai vraiment pas envie que certais se font des sous sur mon dos

voila l'algorithme d'interpolation

 
M

MaX-MoD

Compagnon
arnaud2 a dit:
si tu veu je t envoi le code source en mp


Volontier!


arnaud2 a dit:
je vais pas le mettre en ligne car certaines personnes risqueraient d'en tirer profit et ce programme doit rester entierement gratuit et j ai vraiment pas envie que certais se font des sous sur mon dos
Je comprends, c'est normal. Tu peux aussi le mettre en ligne sous licence GPL, sur sourceforge par exemple.
ça risque d'intéresser d'autres personnes, sur cnczone notamment, qui voudront peut-être ajouter des fonctions.

Bon WE
 
P

phil916

Compagnon
Merci des précisions, c'est vrai qu'ils sont bien plus rapides en mips mais je travail avec les AVR surtout parce qu'un ami m'a donner les kits de développements (STK500, platine moteur ASY/PAP puis dernièrement le Dragon) et que avec le basic c'est assez simple.
D'ailleurs vu que tu l'as fait en basic, ton code peut -être porté facilement sur AVR grâce à un soft super sympa comme BASCOM mais j'arrête le HS.

je n'ai pas de CNC en vue à ce jour mais la gestion du LCD par contre m'intéresse au plus haut point
si tu veux bien me faire passer le code source de cette partie (for my eyes only bien entendu :-D )
 
A

arnaud2

Ouvrier
dans mikrobasic il y a les librairies pour piloter les lcd graphiques normalement ou via spi (avec un mcp23s17) d'ailleur il existe une version pour avr de mikrobasic j'ai pas tester mais ca doit etre pareil
 
E

elliott

Compagnon
Slt arnaud2

Superbe réalisation

Je suis un peu comme certain içi curieux d'esprit,
moi c'est ta gestion des PAP qui m'intéressent donc
si tu veux bien ........ MP

c'est vrai que pour ça les compilos de Mikroelektronika sont très
fournis en librairies spéçifiques ça aide pas mal pour certain
module type lcd graphique,encore toutes mes féliçitations

PS:Mikrobasic is out
 
A

arnaud2

Ouvrier
je vais essayer d'expliquer simplement l'interpolation


sub procedure do_line 'interpolation lineaire

dx = ax - px
dy = ay - py
dz = az - pz


dx dy et dz sont les valeurs que les 3 axes doivent bouger
ax ay et az sont les positions des axes avant le mouvement
px py et pz sont les positions ou on veur aller

en gros on confertis les coordonées absolues en incrémental
les 6 variables sont des entiers 32bit

dx = dx * stepratio
dy = dy * stepratio
dz = dz * stepratio


ensuite on multiplie ces valeurs pas le nombre de pas par centieme de mm


speed2 = 50000/(speed*stepratio)
speed3 = 0


calcul de la vitesse en fonction du nombre de pas par 1/100

coord = 0
coord1 = 0
coord2 = 0

mx = 0
my = 0
mz = 0

inv = -1


on met a 0 les variables locales



if speed2 < stvel then speed3 = stvel vel = 1
else speed3 = speed2 vel = 0
end if


si la vitesse est superieure a la vitesse de démarage des moteurs alors la vitesse est egale a la vitesse de démarage sinon on garde la vitesse comme elle est

if dx < 0 then portb.6 = 1 dirx = 1 dx = dx*inv
else portb.6 = 0 dirx = 0 end if

if dy < 0 then portb.4 = 1 diry = 1 dy = dy*inv
else portb.4 = 0 diry = 0 end if

if dz < 0 then portb.2 = 1 dirz = 1 dz = dz*inv
else portb.2 = 0 dirz = 0 end if


ici on determine la direction du mouvement si la valeur de dx est negative on met la pin "dir" a 1 et on multiplie dx par -1 pour avoir toujours des valeurs positives pour l'algorithme sinon on met la pin dir a 0
et on laisse dx comme il est
pareil pour dy et dz

if dx > 0 then spi_glcd_write_text(" MOVE",15,1,1) end if

if dy > 0 then spi_glcd_write_text(" MOVE",15,2,1) end if

if dz > 0 then spi_glcd_write_text(" MOVE",15,3,1) end if


on affiche "move" sur l'ecran lcd si l'axe doit bouger


vm = 0
vm = vm + dx
vm = vm + dy
vm = vm + dz
vm2 = vm


on calcule la longueur totale du vecteur

while (vm>0)and(porta.4=1)

debut de la boucle d'interpolation tant que le vecteur n'est pas egale a 0 et qu'il n'y a pas d'arret d'urgence

if (portd.1=1)and(portc.0=0) then spi_glcd_write_text(" PAUSE ",2,4,1)
delay_ms (1000)
while (portd.1=0)and(portc.0=0) wend
end if

fonction pause si on apuye sur pause le mouvement est bloqué et des qu'on appuye sur reprise le mouvement continue

ct = ct +1
if (vel=1) and (speed3>speed2)
then if ct > acc
then speed3 = speed3 -1 ct = 0 end if
else speed3 = speed2 end if


gestion de la rampe d'acceleration
si la vitesse etait superieur a la vitesse de démarage alors on incrémente la vitesse (ou plutot on diminue le delai) en fonction du reglage d'acceleration jusq'a que la vitesse soit a la vitesse nominale

for delay = 0 to speed3
nop
next delay


delai de vitesse

vm = vm - 1

decremente le vecteur


if dx<>0 then
coord = coord + dx
if coord > dx then coord = coord - vm2
portb.7 = 1
mx = mx +1 end if end if


algorithne de bresenham
si l'axe x doit bouger alors on ajoute la valeur de dx au coordonées intermediaire de x
si la coordonée intermediaire est superieur a dx alors on soustrait la valeur du vecteur , on fait le pas et on inrémente le compteur de x

if dy<>0 then
coord1 = coord1 + dy
if coord1 > dy then coord1 = coord1 - vm2
portb.5 = 1
my = my + 1 end if end if
if dz<>0 then
coord2 = coord2 + dz
if coord2 > dz then coord2 = coord2 - vm2
portb.3 = 1
mz = mz + 1 end if end if


pareil pour y et z


delay_us (2)

delay pour que l'impulsion du pas dure au minimum 2 microseconde

portb.3 = 0
portb.5 = 0
portb.7 = 0


on met a 0 les pin de pas

wend

fin de la boucle d'interpolation

if dirx = 1 then ax = ax + (mx/stepratio)
else ax = ax - (mx/stepratio)
end if


on met a jour la position de x

if diry = 1 then ay = ay + (my/stepratio)
else ay = ay - (my/stepratio)
end if

if dirz = 1 then az = az + (mz/stepratio)
else az = az - (mz/stepratio)
end if


pareil pour y et z

end sub
 
A

arnaud2

Ouvrier
alors aujourd'hui j'ai mis la carte dans un boitier
je sait les boutons vert ca le fait pas trop mais j ai mis ca en attendant les boutons noir
pour faire la face avant j'ai imprimer sur papier normal puis decouper la fenetre du lcd et plastifier
apresil suffit de la coller dessus avec de la colle néoprene en fesant gaffe de pas en mettre partout
il faut encore que je fasse la decoupe pour mettre le DB25 pour la liaison avec la machine mais je l'ai pas encore il faut que j en prenne une demain au boulot

DSC00953.JPG
 
R

romteb

Fondateur
Nickel.

Je me prend à rever du même boitier avec un ecran plus grand voir un ecran tactile et un mpg :smt007
 
A

arnaud2

Ouvrier
ca viendra l'ecran 240*128
mais il faut que j'en trouve avec retroeclairage a led car ils sont presque tous a tube ccfl (et pour - de 50€)
 
C

ctoutmoi

Ouvrier
Très bon projet :smt038
Pour le LCD, Lextronic offre un large choix :
Afficheur tactile 240 x 160 à 178€ (va être dure de trouver à - 50€ :) Tu me fais signe si tu trouves .
Faut aussi prendre en compte les bibliothèques graphiques. C'est pas toujours de la tarte. :P

edit : N'y a t'il pas une solution de récuperer l'écran tactile d'un cadre photo numérique ??? Y'a même le connecteur de la SD à prendre. Ca se trouve pour 50€ assez facilement. Je me prends aussi à rêver (c'est contagieux :) )
 
A

arnaud2

Ouvrier
j'en ai trouvé !!!

http://www.mikroe.com/en/tools/components/

240*128 controleur T6963 et retroeclairage a led

le tout pour 48 dollars !

les ecrans des cadres photo n'ont pas de controleur intégré et ont un connecteur avec au moins 50 fil (j'en ai deja massacré un pour voir si il y avait qq chose a recuperer) sur la carte il y a qu'un seul circuit integré qui fait tout et c'est un morceau de scillicium colé sur le pcb avec une goute d'epoxy dessus surement un FPGA ou un ASIC donc inexploitable

pour les connecteur MMC ca coute un peu moins de 2€ chez farnell
 
D

Doctor_itchy

Compagnon
pas mal le projet !!!

peu on esperer controler une machine completement en lui uploadant simplement un gcode ??? et cela avec une grande vitesse d'avançe sur pas a pas et servo ? le µC est assez puissant pour ???

si oui alors on pourrais remplaçer le pc par ta carte , se serais hyper compact , juste a glisser une SD avec le Gcode ^^

ou interfaçer une carte reseaux et envoier le Gcode via reseaux ( ça se serais pas mal pour moi ça ^^ )

edit : j'ai relu la premiere page , oups , oui ça fait tout a partir du Gcode , exelent !!!! j'ai des lcd 640*480 en monocouleur de 7" enfin 1 seul qui vient d'un validateur de loto ^^ un epson , mais il n'y as pas de controleur type SED dessus , tu pense que c'est interfaçable ??? ou il faut le controleur type SED obligatoirement ??

j'ai aussi un 800*600 lcd 16couleur d'un vieux portable , en tout cas ton controleur m'interesse fortement , si tu veut un beta testeur et que tu est pret a en refaire un second je suis interesser , je pourrais peu etre voir pour interfaçer un ecran plus grand et peu etre plus de touche de fonction "rapide" ^^
 
A

arnaud2

Ouvrier
Doctor_itchy"]pas mal le projet !!!

peu on esperer controler une machine completement en lui uploadant simplement un gcode ??? et cela avec une grande vitesse d'avançe sur pas a pas et servo ? le µC est assez puissant pour ???


50khz en sortie avec courbes d'acceleration reglable donc oui du moment que les cartes de puissance sont en step/dir

si oui alors on pourrais remplaçer le pc par ta carte , se serais hyper compact , juste a glisser une SD avec le Gcode ^^

c'est le but les seules limitations dans la longueur du gcode sont celles imposé par le systeme de fichier fat16 et la carte sd maximum 2go

ou interfaçer une carte reseaux et envoier le Gcode via reseaux ( ça se serais pas mal pour moi ça ^^ )

c'est pas encore completement operationnel
il est prévu qu'il soit possible d'envoyer un ficher via rs232 a 115000bps et la carte le stocke dans la carte memoire

je vais ajouter la gestion du changeur d'outil jusqu'a 256 outils mais vu qu'il existe des centaines de systeme de changement d'outil ca sera gerer pas un autre microcontroleur je donnerai le protocole de communication pour le changement d'outil ou bien je peut adapter un protocole deja existant mais tout est deja prévi sur la carte il y a un 2eme port serie (l'usart est fait en soft) a 9600bps
pour l'istant les codes suportées sont

G00 : deplacement rapide

G01 : deplacement a vitesse controlé

M02 : fin de programme

M03 : marche broche

M05 : arret broche

M08 : marche lub

M09 : arret lub

X ,Y, Z : coordonées absolue des axes

F : vitesse d'avance

S : vitesse de rotation de la broche

il faut juste que je trouve un Gxx pour

-prise d'orrigine
-aller a l'origine programme
-cgangement d'outil

pour les interpolation circulaires si quelqu'un a un bout de code ca m'interesserait
 
M

MaX-MoD

Compagnon
arnaud2 a dit:
pour les interpolation circulaires si quelqu'un a un bout de code ca m'interesserait
Il y a des algos style Bresenh. mais le problème est dans le calcul de la période entre chaque "pixel"


concernant les cadres photo num, les premiers avaient un contrôleur type ARM dessus. Mais évidemment pas de datasheet=> impossible à utiliser.
Les LCD de 840*480 sont généralement en interface //, certains peuvent se brancher sur les cartes mères micro ITX avec port LCD. Mais il faut déjà un gros µC pour les gérer.
Plus grand c'est une interface LVDS dans la plus part des cas. Aussi sur certaines cartes mini ITX.

Sinon y'a la lib graphique (sur PIC24 et PIC32) de microchip, pour des écrans tactiles 320*240 en couleur. là aussi il y a des LCD QVGA tactiles compatibles pour moins de 75€. J'y ai jeté un oeuil, ça a l'air simple à utiliser.
Je me lancerais bien ds le dev d'une carte du genre à base de PIC32 avec USB (device et host), ethernet, SD, écrant tactile couleur etc. etc. mais c'est un gros projet, et puis la version gratuite de C32 est limités à 32Ko de code :cry:
Mais à ce niveau, on peut directement passer vers une carte micro ITX avec processeur intégré, EMC2 dessus et hop!
On peut s'en tirer pour ~200€ en comptant CM, (pross si micro ATX), RAM et écran 15"
donc...
 
C

ctoutmoi

Ouvrier
Je me lancerais bien ds le dev d'une carte du genre à base de PIC32 avec USB (device et host),..
Idem mais c'est le temps qui me manque. J'ai négligé ces 2 dernières années mon clone ICD2 de développement... (Eh oui un PICuser de + :wink: )
 
M

MaX-MoD

Compagnon
coredump a dit:
Par contre la sortie c'est direct 4 fils analogiques.
C'est le plus simple à interfacer je trouve.
Aussi la pile microchip gère ce genre de touchpad.
 

Sujets similaires

M
Réponses
6
Affichages
1 053
MitchCanon
M
Père-Pendiculaire
Réponses
23
Affichages
502
Père-Pendiculaire
Père-Pendiculaire
C
Réponses
5
Affichages
485
christt4
C
2
Réponses
27
Affichages
896
jean-jacques
J
R
Réponses
11
Affichages
1 216
Rico le bricolo
R
Haut