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

Rampe démarrage PAP
ducran lapoigne
Débutant
Débutant
Messages : 79
Enregistré en : septembre 2015

#11 Message par ducran lapoigne » ven. 13 avr. 2018 10:24

bonjour a ceux qui suivent ce post

pour JC: 400uS pour une pulse, c' est pas un peu long (ou alors j' ai mal lu en diagonale :-D )
en général, les drivers fonctionnent très bien avec des pulses de 10 uS

pour tempsx: on est un peu hors sujet : Si j' ai bien compris, dans ton projet, ton pic va gérer le PWM du driver ET l' accélération ?

Antoine

Rampe démarrage PAP
F6FCO
Avatar de l’utilisateur
Passioné
Passioné
Messages : 412
Âge : 64
Enregistré en : décembre 2017
Localisation : Furtif je suis.
Contact :

#12 Message par F6FCO » ven. 13 avr. 2018 10:35

Bonjour Antoine,
Oui c'est long et je suis d'accord avec les (environ) 10µs dans un fonctionnement normal, ici j'ai choisi volontairement plus grand pour qu'on voie bien l'accélération sur la vidéo sinon çà va trop vite :wink:
Bien sur la valeur de la tempo_base est à adapter suivant l'ensemble moteur/driver de chacun. Tout le monde n'a pas le même torque, même tension d'alim, etc.

Voilà, code corrigé et fichier error propre, effectivement il y avait des labels qui étaient à 1 espace de la marge et qui avaient échappés à ma vigilance :evil: . Dommage que MPlab ne fasse pas une grosse erreur de compilation pour çà ce serait plus simple à corriger (je suis assez binaire comme garçon)

Code : Tout sélectionner

;**********************************************************************
;
                                                                     
;    NOM:        rampe d'acceleration pour moteur PAP                                        
;    Date:       08/04/2018                                           
;    Auteur:     F6FCO  JC Buisson                                       
;     xtal:       4Mhz                                                 
;    
;    Commande de moteur PAP en PWM
;   
;
;                                                                     
;**********************************************************************
    
    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                   
        nb_pas:2                ; nombre de pas à effectuer sur 16 bits
        accel                    ; nombre de temps morts entre deux pulses_haut au départ de la rampe
        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
    

;*********************************************************************
;                      PROGRAMME PRINCIPAL                           *
;*********************************************************************

main
    ;call tourne_en_continu       ; pour test du moteur
    ;goto    main
    
init_variables
    ; ------------------- ; initialisation du nombre de pas à réaliser par le moteur pap
    movlw    0xff
    movwf    nb_pas            ; poids faible        
    movlw    0x5
    movwf    nb_pas+1        ; poids fort
    ; ------------------- ; initialisation du nb temps morts par alternance au départ rampe 
    movlw    d'
30'
    movwf    accel                
    clrf    nb_pulses

loop
    pulse_haut
    pulse_bas
    ;test de accel, pour le tester sans le déformer on le transfère et on travaille dans la variable tampon
    movf    accel,W
    movwf    tampon
    movlw    1
    subwf    tampon,f
    btfsc    STATUS,Z
    goto     test_pas        ; si accel=1 la rampe est terminée et on saute directement à test1 pour continuer à vitesse normale
    decf    accel,f            ; sinon on rentre dans la routine d'
acceleration pour ajouter des pulses bas entre deux pulses haut
    movf    accel
,W
    movwf    nb_pulses
loop_ecart
    pulse_bas
    decf    nb_pulses
,f
    btfss    STATUS
,Z
    goto    loop_ecart
    goto    loop
    
; test du nombre de pas parcourus, pour tester nb_pas sans déformer on transfère et travaille dans tampon    
test_pas
    
; test si nb_pas et nb_pas+1 sont à 0 (il faut tester les 16 bits). si oui programme fini, sinon goto loop1
    movf    nb_pas
,W
    btfss    STATUS
,Z
    goto     test_pas2
    goto    loop1
test_pas2
    movf    nb_pas
+1,W
    btfss    STATUS
,Z
    goto    loop1
    
    
    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
loop1
    ;decf    nb_pas
    ;goto loop
    ;--------------------- ici on va effectuer la décrémentation de nb_pas sur 16 bits
    movf    nb_pas,W        ; on transfère nb_pas dans valeur1
    movwf    valeur1
    movf    nb_pas+1,W
    movwf    valeur1+1
    movlw    1                ; on charge d'
1' dans valeur2
    movwf    valeur2            
    clrf    valeur2+1
    call    soustraction16
    ;--------------------
    movf    valeur2,W        ; on stocke le résultat (nb_pas-1) dans nb_pas
    movwf    nb_pas
    movf    valeur2+1,w
    movwf    nb_pas+1
    goto    loop
    
soustraction16
    ; on fait le complément à 2 de valeur2 et valeur2+1
    movf    valeur2,W
    xorlw    0xFF
    addlw    0x1
    movwf    valeur2
    movf    valeur2+1,w
    xorlw    0xFF
    movwf    valeur2+1
    ; addition des poids faibles
    movf    valeur1,W
    addwf    valeur2,f
    ; addition du carry
    movf    STATUS,W
    andlw    0x1
    addwf    valeur2+1,f
    ; addition des poids forts, résultat dans valeur2/valeur2+1
    movf     valeur1+1,W
    addwf    valeur2+1,f
    return
    
tourne_en_continu   ; routine pour tester le moteur en continu
    pulse_haut
    pulse_bas
    return
    
tempo_base        ; temps de base d'
un pulse (demi_alternance)
;
 Délai 400 Cycles de la machine
; Durée du délai 400 microsecond
; Fréquence de l'oscillateur 4 MHZ

            movlw       .133
            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
            
tempo1s
; Délai 1 000 000 Cycles de la machine
; Durée du délai 1 seconde
; Fréquence de l'oscillateur 4 MHZ
            movlw       .173
            movwf       Reg_1
            movlw       .19
            movwf       Reg_2
            movlw       .6
            movwf       Reg_3
            decfsz      Reg_1,F
            goto        $-1
            decfsz      Reg_2,F
            goto        $-3
            decfsz      Reg_3,F
            goto        $-5
            nop
            nop
            return
            

    END             


Quand Chuck Norris dit « Hein ? », personne ne dit 2…

Rampe démarrage PAP
Temps-x
Avatar de l’utilisateur
Confirmé
Confirmé
Messages : 792
Enregistré en : juillet 2016
Localisation : Terre

#13 Message par Temps-x » ven. 13 avr. 2018 16:33

Bonjour ducran lapoigne, F6FCO, et tout le forum,

ducran lapoigne a écrit :
Source du message pour tempsx: on est un peu hors sujet : Si j' ai bien compris, dans ton projet, ton pic va gérer le PWM du driver ET l' accélération ?


On est pas du tout hors sujet, as tu lu cette article : Alimentation des moteurs pas à pas

L'accélération des moteurs doit se faire avec une augmentation de tension, pour le maintient d'une intensité nominale, ce qui permets
d'atteindre de grande vitesse, et inversement pour la diminution de la vitesse, l'accélération ne peut être fait si tu règles pas ce problème.

Tu vas avoir une augmentation de vitesse si tu augmente ta fréquence, mais tu seras bridé :eek:

Voici le Schéma d'un composant assez récent le A4988 :

A4988 - Schémathique.jpg


Et en plus une vidéo pour bien comprendre

https://www.youtube.com/watch?v=VjUC8c1sIBk

J'ai testé ce drivers avec un moteur pas à pas unipolaire j'ai était surpris du résultat et de la puissance obtenu.

:bravo: F6FCO plus aucune erreur, et en plus c'est très propre.

==> A+
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
Modifié en dernier par Temps-x le ven. 13 avr. 2018 18:11, modifié 4 fois.
Quand la souris nargue le chat, c'est que son trou n'est pas loin.

Rampe démarrage PAP
F6FCO
Avatar de l’utilisateur
Passioné
Passioné
Messages : 412
Âge : 64
Enregistré en : décembre 2017
Localisation : Furtif je suis.
Contact :

#14 Message par F6FCO » ven. 13 avr. 2018 17:28

Temps-x a écrit : :bravo: F6FCO plus aucune erreur, et en plus c'est très propre.



Merci et grâce à toi, avec les cours de Bigonoff je n'avais pas vraiment saisi l'utilisation du f, c'est plus clair maintenant :wink: .

Le gars de la vidéo ne nous apprend pas grand chose de nouveau, mais par contre pour une CNC oublie ces petits drivers, ils sont destinés aux bricolages arduino et pour piloter des imprimantes 3D qui ne forcent pas, ils sont utilisés en général avec des petits moteurs Nema16 (imp3D).
Pour une application CNC il te faut du plus sérieux, une machine çà force, il y a des vis à billes qui emmènent des chariots avec des frottements, un moteur qui entraine un outil qui force dans la matière, etc., rien à voir avec une imprimante3D.
A vide sur table tout est joli, dans la réalité si tu sous-dimensionnes tout tu auras des pertes de pas, qui dit pertes de pas dit cassage d'outils et pièces foirées Pour limiter les pertes de pas tu baisseras l'accélération et la vitesse et tu te retrouveras avec machine hyper lente et complètement inefficace. Tu finiras par mettre ta cnc à la poubelle pour en refaire une nouvelle correcte, ou bien tu seras dégouté et tu laisseras tomber l'affaire. Vas faire un tour sur les forums CNC il y a plein de gars qui ont ce genre de déboires, autant faire bien tout de suite.
Si c'est juste pour le plaisir de développer ton programme, ok, tu fais un truc qui déplace juste les trois axes et ces petits drivers et des unipolaires suffiront pour faire des tests, mais si c'est pour monter une machine opérationnelle, il vaut mieux oublier et partir sur du correct.

Il te faut au minimum des moteurs Nema23 et des drivers capables d'avaler 4A sans sourciller, j'ai déjà donné des liens sur des moteurs et drivers qui tiennent la route.
Quand Chuck Norris dit « Hein ? », personne ne dit 2…


Retourner vers « Langage ASM »

Qui est en ligne

Utilisateurs parcourant ce forum : Bing [Bot] et 3 invités