voila j'essaye de transformer un servomoteur en moteur continu commande par un pic
j'ai essaye la methode chez fribotte qui consiste a placer le potendiometre mecaniquement sur 1.5 ms , avec un programme , j'ai essayer avec mon 16f876
http://fribotte.free.fr/bdtech/pic/servoCC.html
le problemme c'est que je trouve pas le reglage parfait , le mieux que j ai trouver c'est que le moteur fais des minis coup a droite et a gauche mais s'arrete pas vraiment , de plus il chauffe quand il fais ça .
alors je me demande si on peut pas ameliorer le code voici mon asm modifier
Code:;********************************************************************** ; * ; Gestion d'un seul PWM * ; Precision de 256 increment * ; Envois en continu d'un PWM de reglage du neutre : 180 * ; sur tout le port B * ; * ;********************************************************************** ; * ; Filename: reglages.asm * ; Date: 24/8/99 * ; File Version: 1 * ; * ; Author: Julien * ; Company: Fribotte * ; * ; * ;********************************************************************** ; * ; Files required: rien * ; * ; * ;********************************************************************** ; * ; Notes: Quartz 4 Mhz * ; * ; * ;********************************************************************** LIST p=16F876 ; Définition de processeur #include <p16F876.inc> ; fichier include __CONFIG _CP_OFF & _DEBUG_OFF & _WRT_ENABLE_OFF & _CPD_OFF & _LVP_OFF & _BODEN_ON & _PWRTE_ON & _WDT_ON & _HS_OSC ;_CP_OFF Pas de protection ;_DEBUG_OFF RB6 et RB7 en utilisation normale ;_WRT_ENABLE_OFF Le programme ne peut pas écrire dans la flash ;_CPD_OFF Mémoire EEprom déprotégée ;_LVP_OFF RB3 en utilisation normale ; _BODEN_ON Reset tension en service ;_PWRTE_OFF Démarrage rapide ;_PWRTE_ON Démarrage temporisé ;_WDT_ON Watchdog en service ;_HS_OSC Oscillateur haute vitesse (4Mhz<F<20Mhz) ;********************************************************************** ; * ; Variables * ; * ; * ;********************************************************************** ;***** VARIABLE interruption w_temp EQU 0x0C ; variable used for context saving status_temp EQU 0x0D ; variable used for context saving ;***** VARIABLE PWM Pwm EQU 0x10 ; Valeur du PWM a appliquer entre 0 et 256. ;***** VARIABLE TIMER Phase EQU 0x13 ; Phase 0 ou 1 en sortie du PWM ;**************************************************************** DEBUT ORG 0x000 ; processor reset vector GOTO main ; go to beginning of program ;********************************************************************** ; * ; Interruption TimeR * ; * ; * ;********************************************************************** ORG 0x004 ; interrupt vector location ;***** Sauvegarde contexte MOVWF w_temp ; save off current W register contents MOVF STATUS,0 ; move status register into W register MOVWF status_temp ; save off contents of STATUS register ;***** Test de la phase actuelle BTFSC Phase,0 ; Phase a 0 ou a 1 ? GOTO Phase0 ; A 1, on passe a la phase 0 GOTO Phase1 ; A 0, on passe a la phase 1 ;***** Quand la phase doit repasser a 0 Phase0 MOVLW 0x00 ; On repasse B a 0 MOVWF PORTB ; / ;***** On regle le prescaler a 128 BSF STATUS, RP0 ; Bank 1 selectonnee MOVLW B'10000110' ; Timer interne, prescaler sur Timer, Prescaler a 128. MOVWF OPTION_REG ; / BCF STATUS, RP0 ; Bank 0 selectonnee MOVLW 0x8C ; Nouveau reglage du timer a 140 (128*140 = 18 ms en tout) MOVWF TMR0 ; / MOVLW 0x00 ; On repasse la Phase a 0 MOVWF Phase ; / GOTO FinInter ;***** Quand la phase doit repasser a 1 Phase1 MOVLW 0xFF ; On repasse B a 255 MOVWF PORTB ; / ;***** On regle le prescaler a 8 BSF STATUS, RP0 ; Bank 1 selectonnee MOVLW B'10000010' ; Timer interne, prescaler sur Timer, Prescaler a 8. MOVWF OPTION_REG ; / BCF STATUS, RP0 ; Bank 0 selectonnee MOVF Pwm,0 ; Nouveau reglage du timer SUBLW 0xFF ; On enleve 255 au PWM MOVWF TMR0 ; On le regle a la valeur PWM MOVLW 0x01 ; On repasse la Phase a 1 MOVWF Phase ; / ;***** Redemarage interruption FinInter BCF INTCON, T0IF ; On efface l'interruption TimeR pour la relance ;***** Restitution contexte MOVF status_temp,0 ; retrieve copy of STATUS register MOVWF STATUS ; restore pre-isr STATUS register contents SWAPF w_temp,f SWAPF w_temp,w ; restore pre-isr W register contents RETFIE ; return from interrupt ;********************************************************************** ; * ; Programme Main * ; * ; * ;********************************************************************** main CALL InitIO ; On intialise les ports d'E/S (A et B) CALL InitRtcc ; On intialise l'interruption TimeR MOVLW 0xB4 ; On met le PWM a 180 (correspond a 8µs*180 = 1.44ms) MOVWF Pwm ; / boucle GOTO boucle ; Boucle infinie du main ;********************************************************************** ; * ; Initialisation des ports d'E/S * ; * ; * ;********************************************************************** InitIO CLRF PORTB ; Initialise le port A BSF STATUS, RP0 ; Bank 1 selectonnee MOVLW 0x0 ; Port RB7-RB0 en sortie MOVWF TRISB ; / BCF STATUS, RP0 ; Bank 0 selectonnee CLRF PORTA ; Initialise le port A BSF STATUS, RP0 ; Bank 1 selectonnee MOVLW 0x1F ; Port RA4-RA0 en entree RA5 en sortie MOVWF TRISA ; / BCF STATUS, RP0 ; Bank 0 selectonnee RETURN ;********************************************************************** ; * ; Initialisation de l'interruption TimeR * ; * ; * ;********************************************************************** InitRtcc ;***** On regle le prescaler CLRWDT ; Clear WDT and prescaler BSF STATUS, RP0 ; Bank 1 selectonnee MOVLW B'10000010' ; Timer interne, prescaler sur Timer, Prescaler a 8. MOVWF OPTION_REG ; / BCF STATUS, RP0 ; Bank 0 selectonnee ;***** On regle l'interruption MOVLW 0xFA ; Initialisation de la valeur du TimeR MOVWF TMR0 ; / MOVLW B'10100000' ; enable interrupts MOVWF INTCON ; / RETURN ;********************************************************************** ; * ; Fin * ; * ; * ;********************************************************************** END ; directive 'end of program'
ou alors essayer de trouver une autre methode par exemple une plus electrique avec des resistences sur le potentiometre
exemple ici http://www.robot-mobile-irbot.com/4-...bot-mobile.htm
le problemme la c'est que chaque marque de servo moteur, l'eletronique est diferente et la je m'en sort pas, je sais pas trop ou les metre , j'avais trouver un lien avec un tutorial sur un site en anglais qui montre comment faire avec la marque futaba de mon servomoteur mais le lien est casse ,
alors que pensez-vous la quelle methode il faut que je creuse , je veu bien mettre des photos de mon servomoteur futaba s3003 pour essayer de trouver la 2eme methode
merci a vous d'avance encore pour un petit coup de pate
-----