1. Ce site utilise des cookies. En continuant à utiliser ce site, vous acceptez l'utilisation des cookies. En savoir plus.

Controleur autonome de cnc

Discussion dans 'Electronique spécifique CNC' créé par arnaud2, 7 Juin 2008.

  1. arnaud2

    arnaud2 Ouvrier

    Messages:
    372
    Inscrit:
    15 Décembre 2006
    Localité:
    moselle 57
    Controleur autonome de cnc
    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
     
  2. arnaud2

    arnaud2 Ouvrier

    Messages:
    372
    Inscrit:
    15 Décembre 2006
    Localité:
    moselle 57
  3. arnaud2

    arnaud2 Ouvrier

    Messages:
    372
    Inscrit:
    15 Décembre 2006
    Localité:
    moselle 57
  4. romteb

    romteb Administrateur

    Messages:
    1 908
    Inscrit:
    23 Octobre 2006
    Controleur autonome de cnc
    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:
     
  5. arnaud2

    arnaud2 Ouvrier

    Messages:
    372
    Inscrit:
    15 Décembre 2006
    Localité:
    moselle 57
    Controleur autonome de cnc
    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
     
  6. arnaud2

    arnaud2 Ouvrier

    Messages:
    372
    Inscrit:
    15 Décembre 2006
    Localité:
    moselle 57
    Controleur autonome de cnc
    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
     
  7. arnaud2

    arnaud2 Ouvrier

    Messages:
    372
    Inscrit:
    15 Décembre 2006
    Localité:
    moselle 57
    Controleur autonome de cnc
    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
     
  8. romteb

    romteb Administrateur

    Messages:
    1 908
    Inscrit:
    23 Octobre 2006
    Controleur autonome de cnc
    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.
     
  9. phil916

    phil916 Administrateur

    Messages:
    5 490
    Inscrit:
    22 Août 2007
    Localité:
    Le pays du Comté
    Controleur autonome de cnc
    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)
     
  10. fred250

    fred250 Compagnon

    Messages:
    2 904
    Inscrit:
    8 Mai 2007
    Localité:
    Vienne Isére 38
  11. armaris

    armaris Compagnon

    Messages:
    750
    Inscrit:
    16 Janvier 2008
  12. arnaud2

    arnaud2 Ouvrier

    Messages:
    372
    Inscrit:
    15 Décembre 2006
    Localité:
    moselle 57
    Controleur autonome de cnc
    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
     
  13. MaX-MoD

    MaX-MoD Compagnon

    Messages:
    2 306
    Inscrit:
    17 Avril 2007
    Localité:
    Annecy (74)
    Controleur autonome de cnc
    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?
     
  14. arnaud2

    arnaud2 Ouvrier

    Messages:
    372
    Inscrit:
    15 Décembre 2006
    Localité:
    moselle 57
    Controleur autonome de cnc
    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 
     
  15. MaX-MoD

    MaX-MoD Compagnon

    Messages:
    2 306
    Inscrit:
    17 Avril 2007
    Localité:
    Annecy (74)
    Controleur autonome de cnc

    Volontier!


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

Partager cette page