Bienvenue aux nouveaux arrivants sur FantasPic !

- Pensez à lire les règles durant votre visite, il n'y en a pas beaucoup, mais encore faut-il les respecter .
- N’hésitez pas à faire des remarques et/ou suggestions sur le Forum, dans le but de l'améliorer et de rendre vos prochaines visites plus agréables.
- Vous pouvez regarder votre "panneau de l'utilisateur" afin de configurer vos préférences.
- Un passage par "l'utilisation du forum" est recommandé pour connaître les fonctionnalités du forum.

--- L’équipe FantasPic ---
Forum général sur l'Assembleur !

Modérateur : mazertoc

[Realisation] 4L1C3, soft de pilotage CNC en asm
F6FCO
Avatar de l’utilisateur
Expert
Expert
Messages : 1412
Âge : 70
Enregistré en : décembre 2017
Localisation : Furtif je suis.
Contact :

#1 Message par F6FCO » jeu. 19 avr. 2018 15:45

Bonjour les gens,
Perso pour mes CNC j'utilise LinuxCNC et en suis très content, je ne ferai jamais aussi bien et performant mais juste pour le fun j'ai envie de me pencher sur un système d'exploitation (simplifié) pour CNC. Maintenant que j'ai mis le nez dedans avec ma rampe d'accélération, je suis parti à cogiter sur la rampe de décélération. Quand ce sera fait (plus quelques petits détails à régler) çà donnera une commande d'axe valide et ce serait idiot de ne pas pousser plus loin.
Alors j'ouvre ce sujet pour en discuter ici. Et coder un décodeur Gcode doit être bien passionnant.
Peut-être ce projet n'aboutira-t'il pas mais çà me fera toujours progresser en asm. J'avais déjà fait un soft pour CNC sur ma première en médium, programmé sur arduino, çà fonctionnait bien mais c'était lourd d'emploi car il fallait intégrer le gcode au programme et de ce fait j'étais très limité en mémoire, c'est ce qui m'a fait migrer sur LinuxCNC.
:wink:
Modifié en dernier par F6FCO le jeu. 28 mai 2020 20:31, modifié 4 fois.
Une porte nand prend 2 bits en entrée... la cochonne !!! :langue:

Soft de commande CNC en asm
F6FCO
Avatar de l’utilisateur
Expert
Expert
Messages : 1412
Âge : 70
Enregistré en : décembre 2017
Localisation : Furtif je suis.
Contact :

#2 Message par F6FCO » jeu. 19 avr. 2018 19:37

Bonsoir les gens,
J'ai codé cet a/m la routine de décélération. Pour l'essai je lui ai attribué une décélération sur 30 pulses. Codé sur 8bits on pourrait monter jusqu'à 255 pulses, pour l'instant je n'ai pas assez d'infos précises sur ce genre de détail, les essais en charge seront peut-être parlants.

Deceleration.JPG


Code : Tout sélectionner



;**********************************************************************
;
                                                                     
;    NOM:        rampe de décélération pour moteur PAP                                        
;    Date:       19/04/2018                                           
;    Auteur:     F6FCO  JC Buisson                                       
;     xtal:       4Mhz                                                 
;    
;    Commande de moteur PAP en PFM
;   
;
;
                                                                     
;**********************************************************************
    
    Errorlevel
-302
    
    List p
=16F88    
    
#include <p16F88.inc>

    __CONFIG    _CONFIG1, _CP_OFF & _CCP1_RB0 & _DEBUG_OFF & _WRT_PROTECT_OFF & _CPD_OFF & _LVP_OFF & _BODEN_OFF & _MCLR_ON & _PWRTE_OFF & _WDT_OFF & _XT_OSC
    __CONFIG    _CONFIG2
, _IESO_OFF & _FCMEN_OFF
      
OPTIONVAL    EQU    H
'0008'            

; --------------------------------------------------------------------------------------------
#define clock PORTB,0              ; clock
#define dir PORTB,1              ; direction

BANK0    macro
        bcf    STATUS
,RP0            ; passer banque0
        endm

BANK1    macro
        bsf    STATUS
,RP0            ; passer banque1
        endm

pulse_haut macro
    bsf        clock
    call     tempo_base
    endm
    
pulse_bas macro
    bcf        clock
    call     tempo_base
    endm


;*********************************************************************

    CBLOCK 0x020                   
        decel                    
; temps morts entre deux pulses_haut en fin de rampe
        decelmax                
; nb maxi de temps morts
        nb_pulses                
; variable tampon
        tampon
:2                ; variable tampon
        valeur1
:2                 ; pour la soustraction 16 bits
        valeur2
:2                ; pour la soustraction 16 bits
        Reg_1
        Reg_2
        Reg_3
    ENDC                                                                                  

;**********************************************************************

    org     0x0000                 ; Adresse de départ après reset
init
;
    BANK1                        ; bank1
    clrf    ANSEL                
; broches du CAN en I/O
    movlw    OPTIONVAL            
; charger masque
    movwf    OPTION_REG            
; initialiser registre option
    clrf    TRISB                
; PORTB en sortie 
    BANK0                        
; bank0
    

;*********************************************************************
;
                      Routine de décélération                       *
;*********************************************************************

main
  
init_variables
    
; ------------------- ; initialisation du nb temps morts par alternance au départ rampe 
    movlw    d
'30'
    movwf    decelmax                
    clrf    nb_pulses
    clrf    decel
    incf    decel
,f

loopD
    pulse_haut
    pulse_bas
    
;test de decel, pour le tester sans le déformer on le transfère et on travaille dans la variable tampon
    movf    decel
,W
    movwf    tampon
    movf    decelmax
,w
    subwf    tampon
,f
    btfsc    STATUS
,Z
    goto    findecel            
; si Z=1 on a fini la déceleration et de fait le trajet du chariot
    incf    decel
,f                ; sinon on rentre dans la routine de deceleration pour ajouter des pulses bas entre deux pulses haut
    clrf    nb_pulses
loop_ecart_D
    pulse_bas
    incf    nb_pulses
,f
    movf    nb_pulses
,w
    subwf    decel
,w
    btfss    STATUS
,Z
    goto    loop_ecart_D
    goto    loopD
    
findecel
    call     tempo_fin_de_programme    
; juste pour séparer chaque éxécution du programme et pouvoir les différencier sur l'analyseur logique
    goto     main
    
    
tempo_base        ; temps de base d'
un pulse (demi_alternance)
;
 Délai 100 Cycles de la machine
; Durée du délai 100 microsecond
; Fréquence de l'oscillateur 4 MHZ
            movlw       .33
            movwf       Reg_1
            decfsz      Reg_1,F
            goto        $-1
              return
            
tempo_fin_de_programme
; Délai 200 000 Cycles de la machine
; Durée du délai 200 millisecond
; Fréquence de l'
oscillateur 4 MHZ
            movlw       .186
            movwf       Reg_1
            movlw       .4
            movwf       Reg_2
            movlw       .2
            movwf       Reg_3
            decfsz      Reg_1
,F
            goto        
$-1
            decfsz      Reg_2
,F
            goto        
$-3
            decfsz      Reg_3
,F
            goto        
$-5
            nop
            return
            
    END             


Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
Une porte nand prend 2 bits en entrée... la cochonne !!! :langue:

Soft de commande CNC en asm
F6FCO
Avatar de l’utilisateur
Expert
Expert
Messages : 1412
Âge : 70
Enregistré en : décembre 2017
Localisation : Furtif je suis.
Contact :

#3 Message par F6FCO » jeu. 19 avr. 2018 19:52

L'accélération et la décélération sont opérationnelles, reste le plus compliqué à faire, l'assemblage de l'accélération, du trajet à pleine vitesse et de la décélération, tout en veillant à ce que l'ensemble respecte scrupuleusement le nombre de pas total envoyé par le gcode.
Une porte nand prend 2 bits en entrée... la cochonne !!! :langue:

Soft de commande CNC en asm
Temps-x
Avatar de l’utilisateur
Expert
Expert
Messages : 2585
Enregistré en : juillet 2016
Localisation : Terre

#4 Message par Temps-x » jeu. 19 avr. 2018 21:52

Bonsoir F6FCO, et tout le forum

F6FCO a écrit :
Source du message Perso pour mes CNC j'utilise LinuxCNC et en suis très content


je préfère écrit mon programme sur PC sans passer par un tas de logiciel, après coté pilotage des moteurs j'utiliserai les microcontrôleur Pic.

Coté PC il faut faire un programme qui gère les contours de figure, pour créer le Gcode, le reste n'est plus que de la lecture.

Personnellement je sais pas comment fonctionne un Gcode, car d'après le peu de documentation que j'ai pu avoir il y aurait plusieurs
système qui sont en évolutions permanent.

Pour faire fonctionner ma CNC, j'ai inventé mon propre protocole, mais j'aimerai le standardisé au protocole présent sur la plupart
des CNC.

F6FCO à écrit :

il fallait intégrer le gcode au programme et de ce fait j'étais très limité en mémoire


Oui tu as fait un lecteur de Gcode, mais pour créer un Gcode il te faut un programme sur ordinateur.

Ou as tu trouvés la documentation sur le standard du Gcode ?

==> A+
:roll: Les requins, c'est comme le langage ASM, c'est le sommet de la chaîne alimentaire. :wink:

Soft de commande CNC en asm
ducran lapoigne
Avatar de l’utilisateur
Débutant
Débutant
Messages : 96
Enregistré en : septembre 2015

#5 Message par ducran lapoigne » jeu. 19 avr. 2018 23:29

bonsoir le forum,

pour débuter en cnc gcode etc ...

http://id-conception.fr/

onglet tutoriels

Soft de commande CNC en asm
F6FCO
Avatar de l’utilisateur
Expert
Expert
Messages : 1412
Âge : 70
Enregistré en : décembre 2017
Localisation : Furtif je suis.
Contact :

#6 Message par F6FCO » jeu. 19 avr. 2018 23:47

Bonsoir Temps-X, Antoine et les gens,
Le Gcode est un "langage" très simple à comprendre, mais écrire un vrai programme qui crée du gcode à partir d'un fichier STL ou DXF au niveau amateur relève de l'utopie, il doit savoir gérer les cercles, les tangentes, les arcs de cercles, approcher les tangentes au plus près tout en respectant les différents diamètres d'outils, les perçages, les trajets rapides, lents, et j'en passe. Çà c'est pour la partie simple, il doit aussi être capable de gérer mes vitesses d'avance de l'outil, plongée de l'outil dans la matière en spirale ou pas, la vitesse de rotation de la broche, de créer du gcode à partir d'une pièce complexe pour faire de l'usinage 3D. Bref, une vraie usine à gaz.

J'utilise Sketchup et Freecad pour la création de mes pièces et leur exportation en .STL, (certains travaillent en .DXF) et ensuite Cambam pour convertir le modèle STL en Gcode. Pour les pièces simples on peut s'affranchir des softs 3D et les dessiner directement dans Cambam.
Çà c'est pour le travail en amont, le soft de pilotage d'une CNC ne s'occupe pas de çà.

Pour la partie CNC c'est "juste" (entre guillemets parce que c'est quand même quelque chose de très complexe) un lecteur de gcode et de commande des moteurs. Mais pas seulement, il doit aussi gérer les rampes, interrompre ces rampes, pouvoir lire tous les ordres de gcode, mais aussi gérer les limites et origines de la machine (limites matérialisées par des capteurs) en connaissant l'espace réel d'usinage suivant la machine, gérer la broche d'usinage, gérer l'arrosage, etc. etc.

Pour ma part ce que je me propose d'essayer de faire c'est un système très simplifié pour lire les ordres gcodes les plus simples et piloter trois axes. Evidemment pas pour piloter mes CNC au final, LinuxCNC fera toujours çà mieux que moi :lol:, c'est juste pour m'amuser, un prétexte sans prétentions pour faire de l'assembleur et progresser.
Une porte nand prend 2 bits en entrée... la cochonne !!! :langue:

Soft de commande CNC en asm
Temps-x
Avatar de l’utilisateur
Expert
Expert
Messages : 2585
Enregistré en : juillet 2016
Localisation : Terre

#7 Message par Temps-x » ven. 20 avr. 2018 02:14

Bonsoir ducran lapoigne, F6FCO et le forum,

Je tiens à vous remercier pour toute cette documentation, en ce qui concert le logiciel de création Gcode j'en reparlerai avec vous.

Une fois que j'aurais fini le mien.

Bon aller comme ça fait partie de mon cahier des charges, et pour apprendre à coder un petit projet, alors je vais lui donner comme non.

Lecteur de Gcode à mémoire externe géré par écran

Bon, le langage pratiqué sera ASM, tout autre langage ne sera pas toléré, comme le C++ :langue:

il faudra avoir 3 moteurs ou 4 moteurs pas à pas, pour effectuer les essais, ou une CNC :sifflotte:

1) En premier lieu, Il faudra mettre les fichier Gcode sur un support de stockage( Micro carte, carte SD, USB, ou autre....)

2) Après avec microcontrôleur(hors connexion PC) on devra choisir avec un écran(LCD, ou autre, du moment qu'il y et un visuel)
un fichier qui a était mis sur votre support de stockage, et l’exécuté.

C'est à dire qu'il sera lu par notre microcontrôleur, les moteurs pas à pas son libre de choix( unipolaire, bipolaire, ....)

Tous le monde peux participer : Gérard (qui adore l'assembleur), F6FCO, ducran lapoigne, papeete, paulfjujo, satinas, Jérémy, cyril13110, adede5000, JJE, venom, jeanyves1976, Pikachu, JMarc, Bigonoff...... :sifflotte:

==> A+
Modifié en dernier par Temps-x le ven. 20 avr. 2018 15:52, modifié 10 fois.
:roll: Les requins, c'est comme le langage ASM, c'est le sommet de la chaîne alimentaire. :wink:

Soft de commande CNC en asm
F6FCO
Avatar de l’utilisateur
Expert
Expert
Messages : 1412
Âge : 70
Enregistré en : décembre 2017
Localisation : Furtif je suis.
Contact :

#8 Message par F6FCO » ven. 20 avr. 2018 08:18

Bonjour les gens,

Bonne idée de mettre les cerveaux et les routines en commun :-D. On garde ce sujet comme terrain de jeu. Et en assembleur évidemment.

Je me demandais justement comment stocker le gcode, en datas dans le programme comme je l'ai déjà fait avec arduino ?, lourd d'emploi et limité en taille gcode, surtout sur un UNO. Sur carte SD ? j'ai déjà fait çà en arduino pour un robot et eu beaucoup de déboires, la lecture à bien fonctionné pendant quelques temps et est finalement devenue erratique. J'ai résolu le pbm en changeant le lecteur (chinois) jusqu'à ce que çà recommence. C'a ma couflé ! Le C Arduino ou le C++ sont dés langages très puissants mais on est tributaire de librairies plus ou moins opaques, on ne sait pas vraiment ce qui se passe derrière et quand un pbm aléatoire de ce genre survient on n'a plus la main et c'est difficile à gérer.

Je suis curieux de voir si çà fonctionne mieux en PIC.
Pour l'instant je vais continuer à travailler sur la commande de moteur, maintenant il faut assembler les deux rampes avec un trajet à pleine vitesse. Tout en sachant tout en sachant que le nombre de pas à parcourir peut-être inférieur à celui des deux rampes assemblées, pas simple du tout :roll:
Une porte nand prend 2 bits en entrée... la cochonne !!! :langue:

Soft de commande CNC en asm
Gérard
Avatar de l’utilisateur
Expert
Expert
Messages : 1640
Âge : 65
Enregistré en : septembre 2015
Localisation : Alsace - Haut-Rhin

#9 Message par Gérard » ven. 20 avr. 2018 09:10

Hello tous,
Temps-X, il n'y a aucune chance que je participe, mon niveau en asm est du genre maternelle. :shock:
Le 18/04/19 je suis devenu papy de jumeaux, le 01/09/23 une petite cousine des jumeaux est née.

Soft de commande CNC en asm
Temps-x
Avatar de l’utilisateur
Expert
Expert
Messages : 2585
Enregistré en : juillet 2016
Localisation : Terre

#10 Message par Temps-x » ven. 20 avr. 2018 15:25

Bonjour,

Pour le stockage au choix (Micro carte, carte SD, USB, ou autre....)

Pour la visualisation au choix (écran Lcd, écran tactile, ou autre, du moment qu'il y et un visuel)

Je vous conseille de prendre un Pic qui à au moins 40 pattes

Gérard va se régaler avec toutes ces routines ASM. :sifflotte: exit dehors!!

==> A+
:roll: Les requins, c'est comme le langage ASM, c'est le sommet de la chaîne alimentaire. :wink:


Retourner vers « Langage ASM »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 5 invités