Répondre à la discussion
Affichage des résultats 1 à 15 sur 15

Transformer un servo-moteur en moteur à courant continu



  1. #1
    taz6cle

    Transformer un servo-moteur en moteur à courant continu


    ------

    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

    -----

  2. Publicité
  3. #2
    amgab2003

    Re : Transformer un servo-moteur en moteur à courant continu

    Bonjour,
    J'utilise le même modèle(S3003) et ça marche très bien avec les 2 méthodes:
    Pour le première il suffit de déterminer expérimentalement la valeur qui arrête le servo et de modifier le programme pic(pas besoin d'être parfait)
    pour la deuxième méthode élimine le potentiomètre et remplace le par un diviseur à 2 résistances identiques(pas besoin de connaitre l'électronique de commande)
    Bonne continuation
    Amine

  4. #3
    taz6cle

    Re : Transformer un servo-moteur en moteur à courant continu

    cool vraiment ce forum on trouve a chaque fois des reponses a nos question,

    peut tu me donner plus de detailles sur les deux methode
    ton fichier asm pour que je gete un oeil et pour les resistance je sais pas trop comment les mettre sur mon potentiometre j'ai 3 barre mais je sais pas quoi cela correspond ,

    dit moi si j'ai bon
    1er resitance sur la barre 1 a 2 ,et la 2eme sur la barre 2 a 3 ,


    merci encore et super la reactivite

  5. #4
    amgab2003

    Re : Transformer un servo-moteur en moteur à courant continu

    Citation Envoyé par taz6cle Voir le message
    cool vraiment ce forum on trouve a chaque fois des reponses a nos question,

    peut tu me donner plus de detailles sur les deux methode
    ton fichier asm pour que je gete un oeil et pour les resistance je sais pas trop comment les mettre sur mon potentiometre j'ai 3 barre mais je sais pas quoi cela correspond ,

    dit moi si j'ai bon
    1er resitance sur la barre 1 a 2 ,et la 2eme sur la barre 2 a 3 ,


    merci encore et super la reactivite
    Salut,
    Je posterai des photos des servos modifiés.
    Pour le code j'utilise un compilateur:delay_us(xx) le asm n'est pas compréhensible si tu veux je te compile un exemple pour tester.
    @+
    Amine

  6. #5
    amgab2003

    Re : Transformer un servo-moteur en moteur à courant continu

    Bonjour,

    Pour le photos j'ai pas pu prendre des photos nets de prés.
    Ci joint une photo qui pourra te donner une idée.

    Tu supprime le potentiomètre tu soude sur la broche centrale(du potentiomètre) deux résistances 2,2K puis tu soude chacune aux 2 autres extrémités.
    Images attachées Images attachées
    Amine

  7. A voir en vidéo sur Futura
  8. #6
    taz6cle

    Re : Transformer un servo-moteur en moteur à courant continu

    hummm merci pour la petite image j'ai vue que t'avais des resistances a 2.2 kohms
    moi j'ai fais la meme chose mais j'ai mis des resistance de 1.5 khom
    quand j'envoi par mon pic 1.5 ms mon sevo fais de mini aller-retour quand meme et a force avance

    je vais essayer de changer les resistances par 2.2 mais je sais pas trop pourquoi plus 2.2 que 1.5

    pour ton programme je veut bien a mon avis tu le fais en c , je me lance aussi a la programmmation de pic en c le asm ma l'air trop lourd a coder

    donc envoi nous ton code c stp et dit qu'elle compilateur tu utilise et s'il faut faire qq chose de plus ,en se moment je prend un max d'information pour essayer de faire le tour

  9. Publicité
  10. #7
    amgab2003

    Re : Transformer un servo-moteur en moteur à courant continu

    Citation Envoyé par taz6cle Voir le message
    pour ton programme je veut bien a mon avis tu le fais en c , je me lance aussi a la programmmation de pic en c le asm ma l'air trop lourd a coder

    donc envoi nous ton code c stp et dit qu'elle compilateur tu utilise et s'il faut faire qq chose de plus ,en se moment je prend un max d'information pour essayer de faire le tour
    Bonjour,

    Code:
    TRISB.0=0;
    #define servo PORTB.F0
    
    void    main()
            {
    loop:
    servo=1;
    delay_us(1000);// à toi de choisir la valeur qui te convient 
    servo=0;
    delay_ms(15);
    goto loop;
    }
    Il suffit de télécharger la version demo de mikroC pour le compiler.
    @+
    Amine

  11. #8
    taz6cle

    Re : Transformer un servo-moteur en moteur à courant continu

    ok merci beaucoup mais ta pas repondu a ma question sur les resistances ,
    il faut vraiment du 2.2 K parce que j'en est plus lol

    mais s'il faut vraiment ces resistance la pour que ça marche bien je les acheterais bientot , parce que j'ai essayer plusieurs mais j'arrive pas a avoir l'etat en arret avec 1.5 ms

    merci

  12. #9
    amgab2003

    Re : Transformer un servo-moteur en moteur à courant continu

    Citation Envoyé par taz6cle Voir le message
    ok merci beaucoup mais ta pas repondu a ma question sur les resistances ,
    il faut vraiment du 2.2 K parce que j'en est plus lol

    mais s'il faut vraiment ces resistance la pour que ça marche bien je les acheterais bientot , parce que j'ai essayer plusieurs mais j'arrive pas a avoir l'etat en arret avec 1.5 ms

    merci
    Bonsoir,
    je ne sais pas si c vraiment necessaire.
    Si tu trouve personne dans ce forum qui te donne la bonne réponse.Il faut essayer!
    Amine

  13. #10
    vinceLGE

    Re : Transformer un servo-moteur en moteur à courant continu

    Bonjour,
    je déterre ce post:
    j'aurais voulu transformer un servo en moteur CC.
    Le modèle choisi est un MG995 (pour son couple important).
    Ce servo est un modèle numérique: la manip peut-elle fonctionner pour ce type de servo ?
    Merci

  14. #11
    ftorama

    Re : Transformer un servo-moteur en moteur à courant continu

    Citation Envoyé par vinceLGE Voir le message
    Bonjour,
    je déterre ce post:
    j'aurais voulu transformer un servo en moteur CC.
    Le modèle choisi est un MG995 (pour son couple important).
    Ce servo est un modèle numérique: la manip peut-elle fonctionner pour ce type de servo ?
    Merci
    Même numériques, la plupart des servos sont toujours équipés de potentiomètres.

    Si tu as un doute, tu peux déjà faire un test en démontant le servo et en désaccouplant le potar.

    Si ça n'est pas concluant, tu n'auras qu'à remonter le servo comme avant....

  15. #12
    ftorama

    Re : Transformer un servo-moteur en moteur à courant continu

    Trop tard pour éditer, si un modo veut fusionner.....

    Attention quand même à deux points. Tout d'abord, le couple indiqué est le couple de blocage et non le couple utile. Sur des servos de marque réputée, le couple utile est environ du tiers du couple de blocage. Donc si tu as besoin de 13kg.cm de couple moteur, il faut un servo d'au moins 40kg.cm.

    L'autre point important est la qualité des servos. J'ai souvenir d'un produit commercial avec des servos A2Pro qui était pourri de parasites, de Resets intempestifs du PIC, etc...il fallait ajouter des condos de découplage sur les servos, et encore, ça restait tendu. Après remplacement par des servos Futaba, plus un seul problème, et les emplacements des condos de découplage sont restés vides.

  16. Publicité
  17. #13
    vinceLGE

    Re : Transformer un servo-moteur en moteur à courant continu

    Merci pour cette réponse. Je ne pensais pas que c'était le couple de blocage
    d'après mes recherches, ces servos ont bien un potentiomètre, mais les avis sont partagés sur sa qualité ...
    Je ne suis en plus pas bien sûr du couple nécessaire: mes premiers calculs me donnent un couple de 2kg.cm, ce qui me semble peu pour ce que je veux faire. Si ça se confirme, ils répondraient sur ce point ...

  18. #14
    ftorama

    Re : Transformer un servo-moteur en moteur à courant continu

    Citation Envoyé par vinceLGE Voir le message
    Merci pour cette réponse. Je ne pensais pas que c'était le couple de blocage
    d'après mes recherches, ces servos ont bien un potentiomètre, mais les avis sont partagés sur sa qualité ...
    Je ne suis en plus pas bien sûr du couple nécessaire: mes premiers calculs me donnent un couple de 2kg.cm, ce qui me semble peu pour ce que je veux faire. Si ça se confirme, ils répondraient sur ce point ...
    Si tu as un contrôleur blindé, pas de soucis....ou pas..

    c'est un peu la loterie avec ces sous-marques, mais j'ai déjà eu des Hitec HS en sortie de boite aussi, comme quoi....

    D'expérience, je préfère largement les Futaba...C'est plus cher, mais y'a pas besoin de les changer régulièrement, donc au final c'est plus rentable

  19. #15
    vinceLGE

    Re : Transformer un servo-moteur en moteur à courant continu

    Pas de contrôleur blindé.
    Les moteurs seront commandés via un Arduino et un étage de puissance (ou des opto coupleurs.
    Le but est de remplacer des moteurs pas adaptés sur ceci

Discussions similaires

  1. moteur a courant continu
    Par paolo123 dans le forum Physique
    Réponses: 9
    Dernier message: 05/07/2008, 18h34
  2. Commander un moteur à courant continu.
    Par kioub dans le forum Électronique
    Réponses: 24
    Dernier message: 19/12/2007, 14h01
  3. moteur a courant continu
    Par iori_00 dans le forum Électronique
    Réponses: 19
    Dernier message: 19/06/2007, 09h34
  4. moteur à courant continu, asservissement
    Par heleneb dans le forum Électronique
    Réponses: 1
    Dernier message: 13/03/2007, 17h37
  5. moteur à courant continu
    Par piupiuvb dans le forum Électronique
    Réponses: 1
    Dernier message: 20/02/2007, 11h11
Découvrez nos comparatifs produits sur l'informatique et les technologies.