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 ---
Servomoteur puissant, asservissement en position d'un moteur CC
- F6FCO

Expert- Messages : 2846
- Âge : 99
- Enregistré en : décembre 2017
- Localisation : Banlieue sud de Klyntar
- Contact :
Hello tout le monde,
Ce sujet est en lien avec le sujet Rub1k et le défi de réaliser un servomoteur plus puissant que les petits servos de modélisme.
Le but étant de pouvoir élever un moteur NEMA16 glissant sur un rail vertical, les servos de modélisme ne peuvent le garder en haut une fois dé-alimentés. Le moteur redescend sous l'effet de son poids, l'idée est de partir sur un moteur CC avec une boite de démultiplication pour avoir du couple à vide et pouvoir contrer le poids du NEMA16 tenant son cube.
Il faut que le moteur soit équipé d'un disque codeur sur son axe, quand le moteur tourne il envoie des ticks sur l'entée T0CKI avec le Timer0 en mode compteur et le nombre de ticks est stocké dans TMR0L (et TMR0H si on veut faire beaucoup de tours et que le nb de ticks nécessaires dépasse 255). Quand le nombre de ticks atteint la consigne le moteur s'arrête. Une fois stoppé le moteur reste en position par la force de sa démultiplication.
Pour repartir dans l'autre sens on met TMR0L à zéro et on recommence en inversant l'alim.
Le moteur est interfaçé par un pont en H L298, il suffit de mettre les deux entrées du pont à 10, 01 ou 00 pour le faire tourner dans un sens, dans l'autre ou le stopper.
La course de déplacement du moteur est réglable par la valeur de consigne stipulée dans les #define
Fichier main
https://www.youtube.com/watch?v=i0zfHCr5XsE
EDIT: je me suis gouré de forum, je voulais poster dans le forum ASM
. Jéremy, si tu passes par là.
Ce sujet est en lien avec le sujet Rub1k et le défi de réaliser un servomoteur plus puissant que les petits servos de modélisme.
Le but étant de pouvoir élever un moteur NEMA16 glissant sur un rail vertical, les servos de modélisme ne peuvent le garder en haut une fois dé-alimentés. Le moteur redescend sous l'effet de son poids, l'idée est de partir sur un moteur CC avec une boite de démultiplication pour avoir du couple à vide et pouvoir contrer le poids du NEMA16 tenant son cube.
Il faut que le moteur soit équipé d'un disque codeur sur son axe, quand le moteur tourne il envoie des ticks sur l'entée T0CKI avec le Timer0 en mode compteur et le nombre de ticks est stocké dans TMR0L (et TMR0H si on veut faire beaucoup de tours et que le nb de ticks nécessaires dépasse 255). Quand le nombre de ticks atteint la consigne le moteur s'arrête. Une fois stoppé le moteur reste en position par la force de sa démultiplication.
Pour repartir dans l'autre sens on met TMR0L à zéro et on recommence en inversant l'alim.
Le moteur est interfaçé par un pont en H L298, il suffit de mettre les deux entrées du pont à 10, 01 ou 00 pour le faire tourner dans un sens, dans l'autre ou le stopper.
La course de déplacement du moteur est réglable par la valeur de consigne stipulée dans les #define
Code : Tout sélectionner
;**********************************************************************
;
; Asservissement en position moteur CC
; F6FCO - juin 2024
;
;**********************************************************************
Errorlevel-302 ; Supprime le message "Ensure that bank bits are correct"
list p=18f4525 ; processeur utilisé
#include <p18f4525.inc> ; Définitions des constantes PIC
CONFIG OSC = INTIO67 ; Oscillateur interne 8MHz
CONFIG IESO = OFF ; Délai au démarrage (ON/OFF)
CONFIG BOREN = OFF ; Reset si chute de tension (ON/OFF)
CONFIG PWRT = ON ; Délai au démarrage (ON/OFF)
CONFIG BORV = 0 ; Tension de reset en 1/10ème Volts
CONFIG WDT = OFF ; Mise hors service du watchdog (ON/OFF)
CONFIG PBADEN = OFF ; PORTB<4:0> les broches sont configurées comme E/S numériques lors de la réinitialisation
CONFIG LPT1OSC = OFF ; Timer1 configuré pour un fonctionnement plus puissant
CONFIG MCLRE = ON ; Mclr configuré comme entrée
CONFIG STVREN = ON ; Reset sur débordement de pile (ON/OFF)
CONFIG LVP = OFF ; Programmation basse tension autorisée (ON/OFF)
CONFIG XINST = OFF ; L'extension du jeu d'instructions et le mode d'adressage indexé sont désactivés(mode hérité)
CONFIG DEBUG = OFF ; Debugger hors service
CONFIG CP0 = OFF ; Code protection sur block 0 (ON/OFF)
CONFIG CP1 = OFF ; Code protection sur block 1 (ON/OFF)
CONFIG CP2 = OFF ; Code protection sur block 2 (ON/OFF)
CONFIG CPB = OFF ; Code protection sur bootblock (ON/OFF)
CONFIG CPD = OFF ; Code protection sur eeprom (ON/OFF)
CONFIG WRT0 = OFF ; Protection écriture block 0 (ON/OFF)
CONFIG WRT1 = OFF ; Protection écriture block 1 (ON/OFF)
CONFIG WRT2 = OFF ; Protection écriture block 2 (ON/OFF)
CONFIG WRTB = OFF ; Protection écriture bootblock (ON/OFF)
CONFIG WRTC = OFF ; Protection écriture configurations (ON/OFF)
CONFIG WRTD = OFF ; Protection écriture zone eeprom (ON/OFF)
CONFIG EBTR0 = OFF ; Protection lecture de table block 0 (ON/OFF)
CONFIG EBTR1 = OFF ; Protection lecture de table block 1 (ON/OFF)
CONFIG EBTR2 = OFF ; Protection lecture de table block 2 (ON/OFF)
CONFIG EBTRB = OFF ; Protection lecture de table bootblock (ON/OFF)
; --------- moteur à asservir
#define Namiki_mot1 PORTA,0
#define Namiki_mot2 PORTA,1
#define Namiki_opto PORTA,4 ; optocoupleur du moteur
#define consigne d'100'
CBLOCK 0x000C
w_temp :1 ; Sauvegarde du registre W
status_temp :1 ; Sauvegarde du registre STATUS
Reg_1 :1
Reg_2 :1
Reg_3 :1
conchita :2 ; variable bonne à tout faire
ENDC
org 0x0000 ; Adresse de départ après reset
bra init ; Adresse 0: initialiser
; ------------------------ Routines Interruptions
; sauvegarder registres
org 0x0008 ; adresse d'interruption
movwf w_temp ; sauver registre W
swapf STATUS,w ; swap status avec résultat dans w
movwf status_temp ; sauver status swappé
; Interrupt TIMER0
btfsc INTCON,TMR0IE ; bit5. interrupt timer0 autorisée ?
btfss INTCON,TMR0IF ; bit2. si oui, tester si interrupt timer en cours
bra restorereg
call inttimer0 ; vers routine interrupt timer0
bcf INTCON,TMR0IF ; effacer flag interrupt timer0
; restaurer registres
restorereg
swapf status_temp,w ; swap ancien status, résultat dans w
movwf STATUS ; restaurer status
swapf w_temp,f ; Inversion L et H de l'ancien W, sans modifier Z
swapf w_temp,w ; Réinversion de L et H dans W, W restauré sans modifier status
retfie ; return from interrupt
; Routine d'interruption TIMER 0
inttimer0 return
; ------------------------ Init
init clrf EEADR ; diminue la consommation
movlw 0xff ; init oscillateur à 8MHz
movwf OSCCON
; init Timer0
movlw 0xA8 ; compteur 16bits sur pin TOCKI sans prescaler
movwf T0CON
; init TMR0
clrf TMR0L
clrf TMR0
; inti ports
clrf PORTA
movlw 0x0F
movwf ADCON1 ; mode digital
movlw b'00010000'
movwf TRISA
movlw b'10100000' ; masque interruption
movwf INTCON ; charger interrupt control
clrf conchita
; goto main
; -----------------------------------
Fichier main
Code : Tout sélectionner
#include<Asserv_CC_init.asm>
; Le moteur est branché sur un driver pont en H L298
; il nécessite des niveaux haut et/ou bas sur Namiki_mot1 et Namiki_mot2
; pour tourner dans un sens, dans l'autre ou stopper.
; Quand le nombre de ticks issus de l'optocoupleur du moteur atteint
; la valeur de consigne le moteur stoppe.
main
call Namiki
bra main
Namiki
; tourne sens horaire
clrf TMR0L
bcf Namiki_mot1
bsf Namiki_mot2
nm1 ; teste si consigne atteinte
movff TMR0L,conchita
movf conchita,w
sublw consigne
bnz nm1
; stop moteur
bcf Namiki_mot1
bcf Namiki_mot2
call tempo1s
; tourne dans le sens anti-horaire
clrf TMR0L
bsf Namiki_mot1
bcf Namiki_mot2
nm2 ; teste si consigne atteinte
movff TMR0L,conchita
movf conchita,w
sublw consigne
bnz nm2
; stop moteur
bcf Namiki_mot1
bcf Namiki_mot2
call tempo1s
return
tempo1s
movlw .93
movwf Reg_1,1
movlw .38
movwf Reg_2
movlw .11
movwf Reg_3
decfsz Reg_1,F,1
bra $-2
decfsz Reg_2
bra $-6
decfsz Reg_3
bra $-.10
nop
nop
return
END
https://www.youtube.com/watch?v=i0zfHCr5XsE
EDIT: je me suis gouré de forum, je voulais poster dans le forum ASM
Modifié en dernier par F6FCO le jeu. 27 juin 2024 20:32, modifié 4 fois.
Asservissement en position d'un moteur CC. Gros servo.
- F6FCO

Expert- Messages : 2846
- Âge : 99
- Enregistré en : décembre 2017
- Localisation : Banlieue sud de Klyntar
- Contact :
Je me suis amusé à faire un test sur un moteur plus puissant avec boite de démultiplication. Ce moteur n'étant pas équipé de disque codeur je l'ai bidouillé pour lui en rajouter une en rajoutant un axe sur le premier pignon.
Essai concluant, le moteur fait du bruit mais c'était un moteur en panne que j'ai rafistolé pour le remettre en fonction.
https://www.youtube.com/watch?v=yUvOqXMw2i8
Essai concluant, le moteur fait du bruit mais c'était un moteur en panne que j'ai rafistolé pour le remettre en fonction.
https://www.youtube.com/watch?v=yUvOqXMw2i8
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
Servomoteur puissant, asservissement en position d'un moteur CC
- F6FCO

Expert- Messages : 2846
- Âge : 99
- Enregistré en : décembre 2017
- Localisation : Banlieue sud de Klyntar
- Contact :
Hello,
Pause dans le projet Rub1k pour cause de matos défaillant, on va faire du DIY.
Le premier prototype était simple et fonctionnel mais se contentait de faire tourner l'axe jusqu'à une certaine position, c'est la force de la démultiplication du jeu de pignons qui le maintenait sur cette position, c'est déjà pas mal mais on va essayer de faire mieux.
Ayant des déboires en ce moment avec les servos de mon projet Rub1k qui ne tiennent pas la route, ce qui est normal n'étant pas conçus pour ce que je leur demande il me faut système qui maintienne la position avec un torque puissant. On va penser à un système similaire au premier mais avec une consigne, en cas d'efforts contraires il devra faire ce qu'il faut pour tenir cette consigne. J'ai trois petits moteurs démultipliés 12vcc, je ne sais pas si ce sera suffisant pour monter et maintenir le pap et sa pince dans le projet Rub1k mais le principe pourra se reporter sur des moteurs plus costauds au cas-ou.
Encore de la méca, la première chose est de rallonger un axe existant dans la boite de démultiplication du moteur pour y fixer soit une roue codeuse, soit un encodeur en quadrature. Je pars sur un encodeur, une roue codeuse nécessiterait deux fourches optiques et ce serait plus compliqué à mettre en place.
Les trois moteurs qui vont être DIYisés
J'ai percé la partie arrière du boitier pour laisser sortir la rallonge d'axe. J'ai soudé à l'étain cette rallonge sur le pignon de sortie moteur, le choix à été arbitraire en espérant qu'il ne tournera pas trop vite et ne fournira pas plus de 255 impulsions pour le travail demandé, sinon çà compliquera un peu le code. On verra çà aux essais et si çà ne va pas je rallongerai le deuxième train de pignons sur les deux autres. J'ai vu un peu court, les prochaines auront quelques mm de plus.
La modif terminée, reste à y fixer et rendre solidaire l'encodeur, çà reste de la bricole il risque de ne pas tourner très rond mais on fera avec.
Pause dans le projet Rub1k pour cause de matos défaillant, on va faire du DIY.
Le premier prototype était simple et fonctionnel mais se contentait de faire tourner l'axe jusqu'à une certaine position, c'est la force de la démultiplication du jeu de pignons qui le maintenait sur cette position, c'est déjà pas mal mais on va essayer de faire mieux.
Ayant des déboires en ce moment avec les servos de mon projet Rub1k qui ne tiennent pas la route, ce qui est normal n'étant pas conçus pour ce que je leur demande il me faut système qui maintienne la position avec un torque puissant. On va penser à un système similaire au premier mais avec une consigne, en cas d'efforts contraires il devra faire ce qu'il faut pour tenir cette consigne. J'ai trois petits moteurs démultipliés 12vcc, je ne sais pas si ce sera suffisant pour monter et maintenir le pap et sa pince dans le projet Rub1k mais le principe pourra se reporter sur des moteurs plus costauds au cas-ou.
Encore de la méca, la première chose est de rallonger un axe existant dans la boite de démultiplication du moteur pour y fixer soit une roue codeuse, soit un encodeur en quadrature. Je pars sur un encodeur, une roue codeuse nécessiterait deux fourches optiques et ce serait plus compliqué à mettre en place.
Les trois moteurs qui vont être DIYisés
J'ai percé la partie arrière du boitier pour laisser sortir la rallonge d'axe. J'ai soudé à l'étain cette rallonge sur le pignon de sortie moteur, le choix à été arbitraire en espérant qu'il ne tournera pas trop vite et ne fournira pas plus de 255 impulsions pour le travail demandé, sinon çà compliquera un peu le code. On verra çà aux essais et si çà ne va pas je rallongerai le deuxième train de pignons sur les deux autres. J'ai vu un peu court, les prochaines auront quelques mm de plus.
La modif terminée, reste à y fixer et rendre solidaire l'encodeur, çà reste de la bricole il risque de ne pas tourner très rond mais on fera avec.
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
Servomoteur puissant, asservissement en position d'un moteur CC
Servomoteur puissant, asservissement en position d'un moteur CC
- F6FCO

Expert- Messages : 2846
- Âge : 99
- Enregistré en : décembre 2017
- Localisation : Banlieue sud de Klyntar
- Contact :
J'en ai utilisé ici, çà aurait pu être une solution mais çà implique de construire un lecteur de disque comme celui utilisé dans le lien, en plus simple mais quand même plus lourd à installer qu'un simple encodeur.
Mais si j'avais du utiliser un disque codeur plutôt qu'un code Gray j'aurai opté pour un disque à deux pistes, la première qui sert à l'incrémentation et la deuxième à la décrémentation, le code s'en serait trouvé simplifié.
Mais si j'avais du utiliser un disque codeur plutôt qu'un code Gray j'aurai opté pour un disque à deux pistes, la première qui sert à l'incrémentation et la deuxième à la décrémentation, le code s'en serait trouvé simplifié.
Servomoteur puissant, asservissement en position d'un moteur CC
Servomoteur puissant, asservissement en position d'un moteur CC
- F6FCO

Expert- Messages : 2846
- Âge : 99
- Enregistré en : décembre 2017
- Localisation : Banlieue sud de Klyntar
- Contact :
Tu ne trouves pas qu'elle est déjà bien assez compliquée comme çà
Au contraire çà aurait simplifié, plus simple que de gérer la quadrature car on aurait pu compter en avant ou en arrière plus simplement. Mais juste une histoire de place, vu la taille des fourches disponibles sur le marché ou de celles que j'ai en stock il aurait fallu faire des disques assez conséquents, surélever les moteurs et çà aurait pris trop de place sur le châssis, sans compter que dans tous les cas il va falloir rajouter un driver pour chaque moteur.
Par contre tu soulèves un problème auquel je n'avais pas pensé au départ et qui n'existait pas avec les servos conventionnels, que ce soit avec Gray ou en quadrature: connaître la position au démarrage !
Et connaître la position avec Gray n'aurait été valable seulement si le disque n'effectuait pas un tour complet entre pap reculé et pap avancé, dans ce cas il y a de fortes chances que je n'ai pas choisi le bon axe de sorti de boite du moteur. Ou alors faire un disque Gray avec un code plus conséquent ce qui augmenterait sa taille, pas jouable. Ou alors faire un système de comptage de tours du disque, çà devient compliqué.
Je ne vais pas non plus rajouter des prises de POM pour les trois servos, Rub1k est déjà assez usine à gaz comme çà.
A cogiter !!!
Re:
Peut-être mettre une butée solide en position (reculée) basse du pap et on le positionne manuellement contre avant de démarrer le système. Une POM mécanique.
Re Re: Quand on a la mémoire courte !!! j'avais déjà été confronté au problème des POM dans ce cas-là, voir deuxième vidéo ici
Voilà pourquoi j'ai créé ce site web, c'est un aide-mémoire pour papy !
Au contraire çà aurait simplifié, plus simple que de gérer la quadrature car on aurait pu compter en avant ou en arrière plus simplement. Mais juste une histoire de place, vu la taille des fourches disponibles sur le marché ou de celles que j'ai en stock il aurait fallu faire des disques assez conséquents, surélever les moteurs et çà aurait pris trop de place sur le châssis, sans compter que dans tous les cas il va falloir rajouter un driver pour chaque moteur.
Par contre tu soulèves un problème auquel je n'avais pas pensé au départ et qui n'existait pas avec les servos conventionnels, que ce soit avec Gray ou en quadrature: connaître la position au démarrage !
Et connaître la position avec Gray n'aurait été valable seulement si le disque n'effectuait pas un tour complet entre pap reculé et pap avancé, dans ce cas il y a de fortes chances que je n'ai pas choisi le bon axe de sorti de boite du moteur. Ou alors faire un disque Gray avec un code plus conséquent ce qui augmenterait sa taille, pas jouable. Ou alors faire un système de comptage de tours du disque, çà devient compliqué.
Je ne vais pas non plus rajouter des prises de POM pour les trois servos, Rub1k est déjà assez usine à gaz comme çà.
A cogiter !!!
Re:
Peut-être mettre une butée solide en position (reculée) basse du pap et on le positionne manuellement contre avant de démarrer le système. Une POM mécanique.Re Re: Quand on a la mémoire courte !!! j'avais déjà été confronté au problème des POM dans ce cas-là, voir deuxième vidéo ici
Voilà pourquoi j'ai créé ce site web, c'est un aide-mémoire pour papy !
Servomoteur puissant, asservissement en position d'un moteur CC
- cyril13110

Expert- Messages : 1679
- Âge : 43
- Enregistré en : avril 2016
- Localisation : 13
coucou tous le monde,
Et bein avec tous ca terminator n'est pas pret de courir avec sarha connord
Rien qua imaginer la pince pour le cube ca fait une sacré usine à gaz , du coup la video qui a été mis au tous debut de la discution quel type de moteur le mec avait utilisé? pour que ca ne soit pas si complexe?
Et bein avec tous ca terminator n'est pas pret de courir avec sarha connord
Rien qua imaginer la pince pour le cube ca fait une sacré usine à gaz , du coup la video qui a été mis au tous debut de la discution quel type de moteur le mec avait utilisé? pour que ca ne soit pas si complexe?
Servomoteur puissant, asservissement en position d'un moteur CC
Servomoteur puissant, asservissement en position d'un moteur CC
- F6FCO

Expert- Messages : 2846
- Âge : 99
- Enregistré en : décembre 2017
- Localisation : Banlieue sud de Klyntar
- Contact :
Servomoteur Steampunk. Il me faut à tout prix un chapeau haut de forme et des lunettes de soudeur.
https://www.youtube.com/watch?v=HgSYF3GeFus
https://www.youtube.com/watch?v=HgSYF3GeFus
Retourner vers « Coin Fourre-tout »
Qui est en ligne
Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 2 invités
