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] Motorisation d'une table de fraiseuse
F6FCO
Avatar de l’utilisateur
Expert
Expert
Messages : 1413
Âge : 70
Enregistré en : décembre 2017
Localisation : Furtif je suis.
Contact :

#61 Message par F6FCO » mer. 7 avr. 2021 14:35

Hello tout le monde,

J'ai continué à persister. J'ai voulu améliorer la gestion du moteur pap en lui ajoutant une pente d'accélération, essayez de démarrer votre voiture en 4eme et vous comprendrez pourquoi :wink:,. Je me suis dit que ce serait une bonne chose à faire et que ce serait intéressant à coder.
Sur mes cnc par exemple LinuxCNC gère les pentes d'accélération et décélération pour chaque axe, donc si LinuxCNC le fait c'est que c'est utile.
Oui mais accélérer comment ?
Sur quelle période, un tour, plusieurs tours, pente raide, pente douce, de quelle manière, etc, ???
Si je veux programmer un truc comme çà il me faut des infos concrètes.
Je suis allé à la recherche d'infos sur le sujet... le désert complet, on dirait que c'est du secret défense. Alors j'ai pris mon oscillo et je suis allé faire des mesures sur ma grosse CNC de 400kg, en me disant qu'en observant les pap emmener des axes très lourds j'en comprendrais le principe.
Ben non même pas, l'accélération change suivant la distance à parcourir par l'axe, suivant la vitesse de déplacement, ajoutons à cela qu'on paramètre les accel et decel par soft pour chaque cnc suivant ses caractéristiques mécaniques, çà rajoute encore des inconnues.

Bref, impossible d'en tirer une loi quelconque, du coup j'ai réinventé la roue tout seul dans mon coin.

Voici ce à quoi je voudrai arriver:

doc3.jpg


Comme il faut bien prendre des décisions j'ai décrété que je ferai une accélération sur 1 tour avec un moteur pap réglé en pas 1/1:

doc2 (2).jpg


J'ai d'abord essayé en élargissant les impulsions négatives, çà fonctionne bien et çà a donné çà:

Acceleration simple negative.JPG


puis en jouant sur les pulses positives:

Acceleration simple positive.JPG


Concrètement sur le moteur çà n'a rien changé, il accélère aussi bien en négatif qu'en positif.

Ensuite mon moteur utilisé sur la fraiseuse est réglé en 1/8e de pas, ce qui donne 200x8=1600pas pour effectuer un tour.

L'ordinogramme ressemble maintenant à çà:

doc2 (1).jpg


Il a fallu modifier un peu le schéma, pas de quoi refaire un PCB, juste rajout d'une 10k et quelques fils.

doc4.jpg


Après j'ai fais des trucs compliqués, genre garder la même accel sur plusieurs pas pour lisser la pente, modification des pulses positifs et négatifs en même temps, etc.

Résultat: le principe fonctionne admirablement bien sur table... moins sur la fraiseuse :furieux: . C'est une chose de faire des tests sur table sans charge et une autre sur un axe mécanique qui emmène une charge d'une vingtaine de kg. J'ai des pertes de pas, pour arriver à quelque chose de stable je me retrouve avec une vitesse plus lente que sans accel, donc c'est pas valable cette affaire. Nul doute que çà vient de mon principe et qu'il faut aborder la chose d'une autre manière. Manière que je ne connais pas pour l'instant.

Vous connaissez le proverbe "Le mieux est l'ennemi du bien" ? donc je suis revenu au principe de départ sans accélération, et çà fonctionne très bien ainsi . Mais je me suis bien amusé, c'est tout ce qui compte :-D

Pour ceux qui seraient intéressé par le concept voici quand même le code de gestion table de fraiseuse avec accélération, c'est juste la transposition en code asm de l'ordinogramme 1/8e de pas ci-dessus:

Le fichier init:

Code : Tout sélectionner

;**********************************************************************
;
                                                                     
;    NOM:    Commande moteur PAP 16F88                                          
;    Date:    mai 2020                                           
;    Auteur:    F6FCO  JC Buisson                                       
;         xtal:       8Mhz interne                                                 
;         Driver réglé en 1/8 pas
;         Vezsion V.3 avec rampe accélération sur dégagement table
;                                                                     
;**********************************************************************
    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 &_HS_OSC
    __CONFIG    _CONFIG2
, _IESO_OFF & _FCMEN_OFF
      
OPTIONVAL    EQU    H
'0008'            

; ---------------------------------------------------------------------

#DEFINE EtatHaut      bsf PORTA,0
#DEFINE EtatBas     bcf PORTA,0


#define btn_down    PORTB,0        ; bouton décrémentation vitesse 
#define btn_up        PORTB,1        ; bouton incrémentation vitesse
#define btn_speed    PORTB,2        ; inter commutation vitesses lente/rapide
#define    depart        PORTB,4        ; démarrage
;#define    Pente        d'30'        ; valeur pour Speed
;#define    Repetitions    d'80'        ; valeur pour Speed
#define    Pente        d'20'         ; valeur usinage
#define    Repetitions    d'20'         ; valeur usinage    

BANK0    macro
    bcf    STATUS
,RP0            ; passer banque0
    endm

BANK1    macro
    bsf    STATUS
,RP0            ; passer banque1
    endm

    CBLOCK 0x020                   
        Reg_1            
:1
        Reg_2            
:1
        Reg_3            
:1
        accel            
:1
        repet            
:1
        step            
:1
        valspeed        
:1
        pente            
:1
        repetitions        
:1
        tampon            
:1
        consigne        
:; garde en mémoire la valeur de vitesse d'usinage
    ENDC                                             

    org     0x0000            ; Adresse de départ après reset  
init
    BANK1
    clrf    ANSEL            ; broches du CAN en I/O
    movlw    OPTIONVAL        ; charger masque
    movwf    OPTION_REG        ; initialiser registre option
    
    movlw    b'
00000000'
    movwf    TRISA
    movlw    b'
00000111'
    movwf    TRISB            ; 
    BANK0
    clrf    PORTA            ; sorties portA Ã  0
    
    movlw    d'
126'
    movwf    consigne
    movlw    d'
30'
    movwf    pente
    movlw    d'
80'
    movwf    repetitions    

    ;   vers main
    
    


Le main

Code : Tout sélectionner



#include <S24BF_V.3_init.asm>
    
;********************************************************************* 
;                      PROGRAMME PRINCIPAL                           *
;*********************************************************************

main
    btfss    btn_down
    call    reglages_down
    btfss    btn_up
    call    reglages_up
    btfsc    depart
    goto    main
    call    tourne
    goto     main        
    

#include <S24BF_V.3_Fonctions.asm>
#include <S24BF_V.3_Tempos.asm>

        END     


Le fichier fonctions:

Code : Tout sélectionner

; ---------------------- fonctions ----------------------------------

pulseHaut
    EtatHaut
    call    LargeurPulseBase
    return
;-------------------------------    
    
pulseBas
    EtatBas
    call    LargeurPulseBase
    return    
;-------------------------------    

tourne    
; pour PAP réglé en pas 1/16e 
    
; si on n'est pas en speed on saute l'accélération
    
    btfss    btn_speed        
; test si bouton speed pressé    
    goto     partieSpeed
    movf    consigne
,w
    movwf    valspeed
    goto    finrampe
partieSpeed    
; vitesse de dégagement avec accélération    
    movlw    d
'15'
    movwf    valspeed
    movlw    Repetitions
    movwf    repet
    movlw    pente
    movwf    accel
rampe1
    movf    accel
,w
    movwf    step
    call    pulseHaut    
rampe2
    call     pulseBas
    decf    step
    movf    step
,step
    btfss    STATUS
,Z
    goto    rampe2
    movf    repet
,repet
    btfss    STATUS
,Z
    goto    rampe3
    decf    accel
    movlw    repetitions
    movwf    repet
    movf    accel
,accel
    btfss    STATUS
,Z    
    goto    rampe1
    
; à ce niveau on a atteint la vitesse de croisière
    
; et on tourne tant que l'inter est positionné
finrampe
    btfsc    depart
    goto    fintourne
    nop
    call    pulseHaut
    call    pulseBas
    goto     finrampe
rampe3
    decf    repet
    goto    rampe1
fintourne    
    return
;-------------------------------
    
reglages_up
    call    tempoAntiRebond
    movlw    d'
15'
    subwf    consigne,f
    ; on vérifie si consigne < 30
    movlw    d'
29'        ; meme1
    subwf    consigne,w    ; mem2
    btfsc    STATUS,Z
    return
    btfsc    STATUS,C
    return
    ; si oui on force consigne à 30
    movlw    d'
30'
    movwf    consigne
    return
;-------------------------------
    
reglages_down
    call    tempoAntiRebond
    movlw    d'
15'
    addwf    consigne,f
    ; on vérifie si consigne > 222
    movlw    d'
237'        ; mem1
    subwf    consigne,w    ; mem2
    btfsc    STATUS,Z    
    return
    btfss    STATUS,C    
    return
    ; si oui on force consigne à 222
    movlw    d'
222'
    movwf    consigne
    return
    


Le fichier tempos:

Code : Tout sélectionner


LargeurPulseBase
    
;movlw       d'237'     ; vitesse 7 usinage
    
;movlw       d'222'     ; vitesse 7 usinage
    
;movlw       d'190'     ; vitesse 6 usinage
    
;movlw       d'158'     ; vitesse 5 usinage
    
;movlw       d'126'     ; vitesse 4 usinage
    
;movlw       d'94'     ; vitesse 3 usinage
    
;movlw       d'62'     ; vitesse 2 usinage
    
;movlw       d'30'     ; vitesse 1 usinage
    
;movlw       d'8'    ; Speed dégagement outil
    movf        valspeed
,w
    movwf       Reg_1
    decfsz      Reg_1
,F
    goto        
$-1
    return

tempoAntiRebond
; 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
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:


Retourner vers « Langage ASM »

Qui est en ligne

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