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
[Realisation] Motorisation d'une table de fraiseuse
- F6FCO
Expert- Messages : 1413
- Âge : 70
- Enregistré en : décembre 2017
- Localisation : Furtif je suis.
- Contact :
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 ,. 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:
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:
J'ai d'abord essayé en élargissant les impulsions négatives, çà fonctionne bien et çà a donné çà:
puis en jouant sur les pulses positives:
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 à çà:
Il a fallu modifier un peu le schéma, pas de quoi refaire un PCB, juste rajout d'une 10k et quelques fils.
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 . 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
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:
Le main
Le fichier fonctions:
Le fichier tempos:
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 ,. 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:
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:
J'ai d'abord essayé en élargissant les impulsions négatives, çà fonctionne bien et çà a donné çà:
puis en jouant sur les pulses positives:
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 à çà:
Il a fallu modifier un peu le schéma, pas de quoi refaire un PCB, juste rajout d'une 10k et quelques fils.
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 . 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
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 :1 ; 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.
Retourner vers « Langage ASM »
Qui est en ligne
Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 38 invités