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 ---
- 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 ---
Modérateur : mazertoc
Rampe démarrage PAP
- ducran lapoigne
Débutant- Messages : 96
- Enregistré en : septembre 2015
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 )
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
pour JC: 400uS pour une pulse, c' est pas un peu long (ou alors j' ai mal lu en diagonale )
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
Expert- Messages : 1413
- Âge : 70
- Enregistré en : décembre 2017
- Localisation : Furtif je suis.
- Contact :
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
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 . Dommage que MPlab ne fasse pas une grosse erreur de compilation pour çà ce serait plus simple à corriger (je suis assez binaire comme garçon)
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
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 . 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
Rampe démarrage PAP
Bonjour ducran lapoigne, F6FCO, et tout le forum,
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é
Voici le Schéma d'un composant assez récent le A4988 :
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.
F6FCO plus aucune erreur, et en plus c'est très propre.
A+
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é
Voici le Schéma d'un composant assez récent le A4988 :
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.
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.
Rampe démarrage PAP
- F6FCO
Expert- Messages : 1413
- Âge : 70
- Enregistré en : décembre 2017
- Localisation : Furtif je suis.
- Contact :
Temps-x a écrit : 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 .
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.
Retourner vers « Langage ASM »
Qui est en ligne
Utilisateurs parcourant ce forum : Majestic-12 [Bot] et 68 invités