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
- F6FCO
Expert- Messages : 1413
- Âge : 70
- Enregistré en : décembre 2017
- Localisation : Furtif je suis.
- Contact :
Bonsoir les gens,
Je me suis amusé à coder une routine de génération de rampe d'accélération PAP, pour l'instant juste sur l'accélération, je verrai la décélération ensuite, une chose à la fois et le problème est plus complexe car il faut gérer le moment ou elle doit démarrer. Le nombre de pas et le nombre de pulses de la rampe sont paramétrables en jouant sur la valeur des variables nb_pas et accel. Pour faire simple et compréhensible j'ai laissé les calculs de pas en 8bits, ce qui fait qu'on est limité pour l'instant à 255pas, valeurs choisies dans l'exemple nb_pas=0xFF, accel=0x9.
Je travaille sur un calcul en 16bits.
Le chronogramme vu par l'analyseur logique, les valeurs choisies ici ne sont pas réalistes, juste pour tout avoir sur l'écran. Nb_pas=nombre de pas à effectuer, accel contient le nombre d'espaces à mettre entre deux pulses, quand accel arrive à zéro on a atteint la vitesse maxi de travail.
Largeur d'un espace=largeur d'un pulse:
L'ordinogramme de la routine:
Le code:
Petite vidéo en fonctionnement, on voit bien les pulses sur la led du driver:
https://www.youtube.com/watch?v=A9xCDQ7RGCY&feature=youtu.be
Je me suis amusé à coder une routine de génération de rampe d'accélération PAP, pour l'instant juste sur l'accélération, je verrai la décélération ensuite, une chose à la fois et le problème est plus complexe car il faut gérer le moment ou elle doit démarrer. Le nombre de pas et le nombre de pulses de la rampe sont paramétrables en jouant sur la valeur des variables nb_pas et accel. Pour faire simple et compréhensible j'ai laissé les calculs de pas en 8bits, ce qui fait qu'on est limité pour l'instant à 255pas, valeurs choisies dans l'exemple nb_pas=0xFF, accel=0x9.
Je travaille sur un calcul en 16bits.
Le chronogramme vu par l'analyseur logique, les valeurs choisies ici ne sont pas réalistes, juste pour tout avoir sur l'écran. Nb_pas=nombre de pas à effectuer, accel contient le nombre d'espaces à mettre entre deux pulses, quand accel arrive à zéro on a atteint la vitesse maxi de travail.
Largeur d'un espace=largeur d'un pulse:
L'ordinogramme de la routine:
Le code:
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
;
;
;
;**********************************************************************
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
accel ; nombre de temps morts entre deux pulses_haut au départ de la rampe
nb_pulses ; variable tampon
tampon ; variable tampon
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
movlw d'255'
movwf nb_pas ; nombre de pas à réaliser par le moteur pap
movlw d'90'
movwf accel ; nb temps morts par alternance au départ rampe
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
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 ; 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
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
movf nb_pas,W
movwf tampon
movlw 1
subwf tampon
btfss STATUS,Z
goto loop1
call tempo_fin_de_programme ; juste pour séparer chaque éxécution du programme
goto main
loop1
decf nb_pas
goto loop
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 350 Cycles de la machine
; Durée du délai 350 microsecond
; Fréquence de l'oscillateur 4 MHZ
movlw .116
movwf Reg_1
decfsz Reg_1,F
goto $-1
nop
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
Petite vidéo en fonctionnement, on voit bien les pulses sur la led du driver:
https://www.youtube.com/watch?v=A9xCDQ7RGCY&feature=youtu.be
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
Modifié en dernier par F6FCO le jeu. 12 avr. 2018 14:41, modifié 6 fois.
Rampe démarrage PAP
Bonsoir F6FCO, et tout le forum,
Déjà je te remercie pour l'aide que tu m'apportes, mais je vais te gronder combien de fois il va falloir le dire
toujours regarder le fichier d'extension *.err, et ne pas oublier de mettre Errorlevel-302 au début de la configuration du Pic.
Mais bon comme le dit Jérémy : C'est en faisant des erreurs, que l'on apprend le mieux !!!
Regarde ton fichier d'erreur.
------------------------------------------------------------------------------------------------------------------------------------
Trouver sur un site, mais pour les passionnés voici une explication simple, et qu'il faut lire Alimentation des moteurs pas à pas
Tout est expliquer dans le lien, mais ducran lapoigne souléve un problème, qui est la variation linéaire de la fréquence.
C'est important si l'on veut avoir un réglage avec PWM, je parle pas de l'avance du moteur, je parle du PWM qui contrôle la tension
et l'intensité par rapport à la vitesse du moteur pas à pas.
A+
Déjà je te remercie pour l'aide que tu m'apportes, mais je vais te gronder combien de fois il va falloir le dire
toujours regarder le fichier d'extension *.err, et ne pas oublier de mettre Errorlevel-302 au début de la configuration du Pic.
Mais bon comme le dit Jérémy : C'est en faisant des erreurs, que l'on apprend le mieux !!!
Regarde ton fichier d'erreur.
------------------------------------------------------------------------------------------------------------------------------------
F6FCO a écrit :
Source du message Tu es sur de ton schéma ?
Trouver sur un site, mais pour les passionnés voici une explication simple, et qu'il faut lire Alimentation des moteurs pas à pas
Tout est expliquer dans le lien, mais ducran lapoigne souléve un problème, qui est la variation linéaire de la fréquence.
C'est important si l'on veut avoir un réglage avec PWM, je parle pas de l'avance du moteur, je parle du PWM qui contrôle la tension
et l'intensité par rapport à la vitesse du moteur pas à pas.
A+
Rampe démarrage PAP
- F6FCO
Expert- Messages : 1413
- Âge : 70
- Enregistré en : décembre 2017
- Localisation : Furtif je suis.
- Contact :
Temps-x a écrit :Bonsoir F6FCO, et tout le forum,
Déjà je te remercie pour l'aide que tu m'apportes, mais je vais te gronder combien de fois il va falloir le dire
toujours regarder le fichier d'extension *.err, et ne pas oublier de mettre Errorlevel-302 au début de la configuration du Pic.
Sans vouloir te froisser hein , d'après ce' que j'ai pu remarquer le fichier .err est une recopie de la fenêtre d'assemblage, s'il n'y a pas d'erreur et que tout s'est bien passé pourquoi aller ouvrir un fichier supplémentaire à chaque assemblage pour revoir ce qu'on a déjà vu dans la fenêtre, surtout quand on fait des modifs dans le programme et qu'on n'arrete pas de faire des build c'est lourd.
F6FCO a écrit :Trouver sur un site, mais pour les passionnés voici une explication simple, et qu'il faut lire Alimentation des moteurs pas à pas
Tout est expliquer dans le lien, mais ducran lapoigne souléve un problème, qui est la variation linéaire de la fréquence.
C'est important si l'on veut avoir un réglage avec PWM, je parle pas de l'avance du moteur, je parle du PWM qui contrôle la tension
et l'intensité par rapport à la vitesse du moteur pas à pas.
A+
Encore une fois sans vouloir te froisser je suis dubitatif, après l'intervention d'Antoine dans mon sujet sur la rampe PWM viewtopic.php?p=9073#p9073, j'ai fais des mesures à l'oscillo sur la sortie de LinuxCNC et c'est bien du PFM (Pulses Frequency Modulation) qui sort et non du PWM (Pulse Widht Modulation), c'est à dire des créneaux égaux en largeur mais dont la fréquence change suivant la progression de la rampe.
Ceci dit je travaille avec des bipolaires pilotés par des drivers, il est possible que ce soit les drivers qui gèrent cette étape.
Rampe démarrage PAP
Bonsoir F6FCO, et tout le forum,
Dans ton fichier ASM il y a des erreurs.
Exemple :
il y en a d'autre.
A+
Dans ton fichier ASM il y a des erreurs.
Exemple :
Code : Tout sélectionner
init_variables
movlw D'400'
Code : Tout sélectionner
decf nb_pulses
il y en a d'autre.
A+
Rampe démarrage PAP
- F6FCO
Expert- Messages : 1413
- Âge : 70
- Enregistré en : décembre 2017
- Localisation : Furtif je suis.
- Contact :
Oups, je n'avais pas fourni le bon fichier, celui plus haut est un fichier test, (voilà, j'ai édité pour le remplacer ). Le movlw D'400' servait à voir comment le programme se comportait avec une valeur plus grande que 0xff.
Par contre je ne vois pas ou est l'erreur avec decf nb_pulses, le programme fait bien son job et nb_pulses est bien décrémenté, si tu peux m'expliquer.
Je n'aime pas affirmer des choses sur les forums sans être sur de ce que j'avance, alors ce matin je suis retourné faire des mesures à l'oscillo sur ma CNC. Il s'avère que tout le monde à raison , enfin tu as presque raison car ce n'est pas du vrai PWM, mais les largeurs d'impulsions varient bien.
Donc pour être précis:
- J'avais fais des mesures en sortie de LinuxCNC, avant les drivers et on a bien du PFM, pulses de largeur égale, seuls les espaces varient en fonction de la rampe. Arrivé au stade fin de rampe les créneaux haut=creneaux bas.
- ce matin j'ai fais des mesures en sortie de driver, donc sur le moteur et là les pulses varient toujours en PFM (espacés mais se rapprochant de plus en plus en fonction de la montée en rampe). Mais également variables en largeur, larges en début de rampe et se rétrécissant au fur et a mesure de la montée. C'est donc bien le driver qui gère cela.
Je dis que ce n'est pas du vrai PWM car en PWM la fréquence est fixe, seul le rapport cyclique change, après intégration on obtient ainsi une tension variable entre le zéro et la tension max des pulses. Par exemple sur le PWM arduino la fréquence est d'environ 490hz et ne change jamais.
A la sortie de mes drivers le rapport cyclique est de 1/1 en permanence, quand les pulses sont larges les niveaux bas sont toujours égaux aux niveaux haut, donc pas du PWM mais bien du PFM.
Par contre je ne vois pas ou est l'erreur avec decf nb_pulses, le programme fait bien son job et nb_pulses est bien décrémenté, si tu peux m'expliquer.
Je n'aime pas affirmer des choses sur les forums sans être sur de ce que j'avance, alors ce matin je suis retourné faire des mesures à l'oscillo sur ma CNC. Il s'avère que tout le monde à raison , enfin tu as presque raison car ce n'est pas du vrai PWM, mais les largeurs d'impulsions varient bien.
Donc pour être précis:
- J'avais fais des mesures en sortie de LinuxCNC, avant les drivers et on a bien du PFM, pulses de largeur égale, seuls les espaces varient en fonction de la rampe. Arrivé au stade fin de rampe les créneaux haut=creneaux bas.
- ce matin j'ai fais des mesures en sortie de driver, donc sur le moteur et là les pulses varient toujours en PFM (espacés mais se rapprochant de plus en plus en fonction de la montée en rampe). Mais également variables en largeur, larges en début de rampe et se rétrécissant au fur et a mesure de la montée. C'est donc bien le driver qui gère cela.
Je dis que ce n'est pas du vrai PWM car en PWM la fréquence est fixe, seul le rapport cyclique change, après intégration on obtient ainsi une tension variable entre le zéro et la tension max des pulses. Par exemple sur le PWM arduino la fréquence est d'environ 490hz et ne change jamais.
A la sortie de mes drivers le rapport cyclique est de 1/1 en permanence, quand les pulses sont larges les niveaux bas sont toujours égaux aux niveaux haut, donc pas du PWM mais bien du PFM.
Rampe démarrage PAP
Bonsoir F6FCO, et tout le forum,
Voilà l'explication elle est toute simple, mais pas facile à comprendre
Décrémente d'une unité le contenu de F et met le résultat dans W ou F
Exemple 1: Avant l'instruction, peu importe le contenu de W la variable Casemem contient D'123'
decf Casemem,W ; après l'instruction W contient D'122', Casemem contient toujours D'123'
Exemple 2: Avant l'instruction peu importe le contenu de W , la variable Casemem contient D'123'
decf Casemem,F ; après l'instruction le contenu de W n'a pas changé et Casemem contient D'122'
Le compilateur ne sais pas ou il faut déposer le résultat, sois dans ta variable, ou dans le registre de travail (W), donc le compilateur
va t'avertir qu'il y a risque d'erreur, mais le programme va se compilé a ton désavantage.
C'est comme ça quand passe des heures, voir des jours à chercher d’où vient l'erreur, c'est de l'assembleur, c'est pas du C++
D'autre part quand tu déclares un label, écrit le bien sur le bord de ton éditeur.
Exemple :
Sinon l'assembleur va croire à une macro.
pour ta déduction, effectivement on ne peu pas appeler PWM, mais pour éviter les ennuies c'est celui-ci que je vais utiliser.
A+
F6FCO a écrit :
Source du message Par contre je ne vois pas ou est l'erreur avec decf nb_pulses
Voilà l'explication elle est toute simple, mais pas facile à comprendre
Décrémente d'une unité le contenu de F et met le résultat dans W ou F
Exemple 1: Avant l'instruction, peu importe le contenu de W la variable Casemem contient D'123'
decf Casemem,W ; après l'instruction W contient D'122', Casemem contient toujours D'123'
Exemple 2: Avant l'instruction peu importe le contenu de W , la variable Casemem contient D'123'
decf Casemem,F ; après l'instruction le contenu de W n'a pas changé et Casemem contient D'122'
Le compilateur ne sais pas ou il faut déposer le résultat, sois dans ta variable, ou dans le registre de travail (W), donc le compilateur
va t'avertir qu'il y a risque d'erreur, mais le programme va se compilé a ton désavantage.
C'est comme ça quand passe des heures, voir des jours à chercher d’où vient l'erreur, c'est de l'assembleur, c'est pas du C++
D'autre part quand tu déclares un label, écrit le bien sur le bord de ton éditeur.
Exemple :
Code : Tout sélectionner
mauvais_label
bon_label
Sinon l'assembleur va croire à une macro.
pour ta déduction, effectivement on ne peu pas appeler PWM, mais pour éviter les ennuies c'est celui-ci que je vais utiliser.
A+
Rampe démarrage PAP
- F6FCO
Expert- Messages : 1413
- Âge : 70
- Enregistré en : décembre 2017
- Localisation : Furtif je suis.
- Contact :
Bonsoir,
D'accord, donc dans mon cas j'aurai du écrire decf nb_pulses,f. Je n'avais pas trop compris cette affaire de f avant ce soir merci.
Pour les labels ils sont bien écrits tous à gauche, c'est quand je fais un copier/coller dans la balise code du forum que çà part dans tous les sens, je suis un fanatique de la belle mise en page, même les commentaires sont bien alignés . Voici à quoi ressemble mon éditeur:
J'ai terminé la version 16bits opérationnelle de mon programme mais avant de la poster je vais vérifier tous les "f" manquant
D'accord, donc dans mon cas j'aurai du écrire decf nb_pulses,f. Je n'avais pas trop compris cette affaire de f avant ce soir merci.
Pour les labels ils sont bien écrits tous à gauche, c'est quand je fais un copier/coller dans la balise code du forum que çà part dans tous les sens, je suis un fanatique de la belle mise en page, même les commentaires sont bien alignés . Voici à quoi ressemble mon éditeur:
J'ai terminé la version 16bits opérationnelle de mon programme mais avant de la poster je vais vérifier tous les "f" manquant
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
Modifié en dernier par F6FCO le jeu. 12 avr. 2018 23:14, modifié 3 fois.
Rampe démarrage PAP
- F6FCO
Expert- Messages : 1413
- Âge : 70
- Enregistré en : décembre 2017
- Localisation : Furtif je suis.
- Contact :
Voilà. nombre de pas max=65535 ce qui devrait suffire pour une petite cnc d'amateur.
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
;
;
;
;**********************************************************************
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
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
; 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
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
Bonsoir F6FCO, et tout le forum,
Oui c'est exactement ça, j'avais bien compris ce que tu voulais faire, mais le compilateur n'avais pas compris......
Je sais je t'embête mais il y encore des erreurs dans ton nouveau code, à voir les lignes ci dessous.
Message[305] D:\DATAPIC\PICSOUR\16F88\DIVERS\DIVERS-2.ASM 99 : Using default destination of 1 (file).
Message[305] D:\DATAPIC\PICSOUR\16F88\DIVERS\DIVERS-2.ASM 156 : Using default destination of 1 (file).
Message[305] D:\DATAPIC\PICSOUR\16F88\DIVERS\DIVERS-2.ASM 163 : Using default destination of 1 (file).
ça prouve que je regarde ton code, et je trouve que tu as beaucoup d'idée.
Bon je monte un Pic16F88 sur Breadboard, et je teste ton code, si j'ai le temps je tourne une petite vidéo.
pour ta participation
A+
F6FCO a écrit :
Source du message D'accord, donc dans mon cas j'aurai du écrire decf nb_pulses,f
Oui c'est exactement ça, j'avais bien compris ce que tu voulais faire, mais le compilateur n'avais pas compris......
Je sais je t'embête mais il y encore des erreurs dans ton nouveau code, à voir les lignes ci dessous.
Message[305] D:\DATAPIC\PICSOUR\16F88\DIVERS\DIVERS-2.ASM 99 : Using default destination of 1 (file).
Message[305] D:\DATAPIC\PICSOUR\16F88\DIVERS\DIVERS-2.ASM 156 : Using default destination of 1 (file).
Message[305] D:\DATAPIC\PICSOUR\16F88\DIVERS\DIVERS-2.ASM 163 : Using default destination of 1 (file).
ça prouve que je regarde ton code, et je trouve que tu as beaucoup d'idée.
Bon je monte un Pic16F88 sur Breadboard, et je teste ton code, si j'ai le temps je tourne une petite vidéo.
pour ta participation
A+
Rampe démarrage PAP
- F6FCO
Expert- Messages : 1413
- Âge : 70
- Enregistré en : décembre 2017
- Localisation : Furtif je suis.
- Contact :
Temps-x a écrit : mais le compilateur n'avais pas compris......
Ben je pense que si puisque malgré l'erreur d'écriture nb_pulses est bien décrémenté.
Temps-x a écrit :Je sais je t'embête
Non, continue comme çà, çà me fait progresser
Temps-x a écrit :Bon je monte un Pic16F88 sur Breadboard, et je teste ton code, si j'ai le temps je tourne une petite vidéo.
Une bonne occasion d'essayer ton analyseur logique. Le code fonctionne au poil chez moi (bipolaire+driver) mais je ne sais pas ce que çà donnera sur ton unipolaire avec pont en H qui ne gère pas le pseudo PWM.
Bon maintenant il faut s’intéresser à la décélération, coder des pulses qui s'espacent çà devrait le faire mais il y a un joli problème qui se pose: à quel moment la commencer suivant le nombre de pas à effectuer ? Par exemple si on dit qu'on va faire une accélération sur 90 pulses et pareil pour la décélération, ok si on a au moins 180 pas ou plus à effectuer, mais si on en a moins ?
Retourner vers « Langage ASM »
Qui est en ligne
Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 56 invités