Controleur autonome de cnc

Ouvrier
15 Décembre 2006
415
moselle 57
  • Auteur de la discussion
  • #1
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
 
Fondateur
23 Octobre 2006
1 906
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:
 
Ouvrier
15 Décembre 2006
415
moselle 57
  • Auteur de la discussion
  • #5
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
 
Ouvrier
15 Décembre 2006
415
moselle 57
  • Auteur de la discussion
  • #7
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 picVoir la pièce jointe firmware_ver1.0.zip
 
Fondateur
23 Octobre 2006
1 906
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.
 
Ouvrier
15 Décembre 2006
415
moselle 57
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
 
Compagnon
17 Avril 2007
2 306
Annecy (74)
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?
 
Ouvrier
15 Décembre 2006
415
moselle 57
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

Code:
sub procedure do_line                                  'interpolation lineaire

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

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


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

coord = 0
coord1 = 0
coord2 = 0

mx = 0
my = 0
mz = 0

inv = -1



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

   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
             
   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


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

      while (vm>0)and(porta.4=1)
      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
      
      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

      for delay = 0 to speed3
      nop
      next delay

      vm = vm - 1
      if dx<>0 then
      coord = coord + dx
      if coord > dx then coord = coord - vm2
                         portb.7 = 1
                         mx = mx +1 end if end if
      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


      delay_us (2)

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

      wend

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

   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

end sub
 
Compagnon
17 Avril 2007
2 306
Annecy (74)
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
 
Sujets similaires

Haut