Bonjour,
Je suis entrain de construire un petit robot autonome. Je viens de rencontrer ma premiere difficulté, la commande des servo (utilisé comme propulseur). Les servo sont modifié pour une rotation de 360°.
J'utilise MikroC ainsi que l'EasyPic4 pour la programmation de mon 16F877A.
D'après ce que j'ai lu sur le net , il faut que je génère des signaux PWM sur le port RC1 ou RC2, ayant une période de 20us. Ainsi je pourrais jouer sur le rapport de cycle pour créé des impulsion de 2ms(marche avant) ou 1ms(AR).
Plus facile à dire qu'à faire.. Comment puis-je créé un signal pwm de 20us à l'aide de mon PIC cadencé a 8Mhz par exemple ? (parait qu'il faut utiliser les timer et prescaler...)
Je sais qu'il existe des bibliothèques (pwm_init1() , pwm_start() ) dans MikroC mais je ne sais pas comment et quand les utilisers.
Quelqu'un ne pourrait pas me taper un petit bout de code permettant de faire de la pwm et en me disant comment faire varier le rapport de cycle ?
Merci d'avance,
Quicky !

Commande d'un servomoteur
Débuté par Quicky, juil. 12 2008 04:36
6 réponses à ce sujet
#2
Posté 12 juillet 2008 - 10:02
http://fribotte.free.fr/bdtech/pic/pic_et_servo.html
Tu as 2 façon de faire :
Problème pour gérer tout , s'est pas terrible , donc si j'était toi , j'utiliserai les timers et dans le while 1 test si 0 ou 1 ...
Sinon EasyPic4 sa m'as l'air pas trop mal tu as déjà utiliser le LCD graphique ? ( son mode graphique ? )
( mais bon , je suis plus interessé par ses version suivante , mais le probléme une fois utiliser , tu n'as plus d'utilité ... )
Tu as 2 façon de faire :
while(1){ S=1; delayms(1); S=0; delayms(19); }
Problème pour gérer tout , s'est pas terrible , donc si j'était toi , j'utiliserai les timers et dans le while 1 test si 0 ou 1 ...
Sinon EasyPic4 sa m'as l'air pas trop mal tu as déjà utiliser le LCD graphique ? ( son mode graphique ? )
( mais bon , je suis plus interessé par ses version suivante , mais le probléme une fois utiliser , tu n'as plus d'utilité ... )
#3
Posté 24 juillet 2008 - 04:59
Bonjour,
J'ai plusieurs problème avec mes servo
1)Le code que j'utilise ne sert a rien je pense , je peux brancher mon servo sur n'importe qu'elle sortie de mon pic et il tourne en continu (car servo modifié). En modifiant dans mon code le temps de 1ms à 2ms ca ne change rien , le moteur tourne tjs dans le même sens et à la même vitesse. Je peux mettre mon fil blanc de commande sur n'importe qu'elle pin (0V ou +5V) le moteur tourne tjs ...
Quel est mon problème ? servo mal modifié (j'ai supprimé la butée et soudé au potentiomètre 2 résistance montée en pont diviseur) ? Quelque chose de fondamental m'échappe ?
2) Le moteur commence a tourner a partir du moment ou j'appuie sur mon pack de 4 pile (1,5V)... Quand je relâche la pression le moteur s'arrête de tourner ! Pourtant j'ai tjs bien 5,8V en sortie de mon pack quand le moteur ne tourne pas (et donc quand j'appuie pas sur le pack). Je ne comprends pas ce qu'il se passe
(Le pack n'est pas artisanal)
Help !!
Merci d'avance
Quicky
J'ai plusieurs problème avec mes servo

1)Le code que j'utilise ne sert a rien je pense , je peux brancher mon servo sur n'importe qu'elle sortie de mon pic et il tourne en continu (car servo modifié). En modifiant dans mon code le temps de 1ms à 2ms ca ne change rien , le moteur tourne tjs dans le même sens et à la même vitesse. Je peux mettre mon fil blanc de commande sur n'importe qu'elle pin (0V ou +5V) le moteur tourne tjs ...
void main(){ TRISC=0; PORTC.F2=1; PORTC.F4=0; do{ PORTC.F0=1; Delay_ms(1); PORTC.F0=0; Delay_ms(19); }while(1); }
Quel est mon problème ? servo mal modifié (j'ai supprimé la butée et soudé au potentiomètre 2 résistance montée en pont diviseur) ? Quelque chose de fondamental m'échappe ?
2) Le moteur commence a tourner a partir du moment ou j'appuie sur mon pack de 4 pile (1,5V)... Quand je relâche la pression le moteur s'arrête de tourner ! Pourtant j'ai tjs bien 5,8V en sortie de mon pack quand le moteur ne tourne pas (et donc quand j'appuie pas sur le pack). Je ne comprends pas ce qu'il se passe

(Le pack n'est pas artisanal)
Help !!

Merci d'avance
Quicky
#5
Posté 25 juillet 2008 - 12:56
Tu as couper les fils du potentiomètre ? et remplacer par 2 résistance de même valeur ?
Si oui si t'en a un qui est d'origine , test 1 et 2 ms , pour voir si il fait buté droit / buté gauche .
Le potentiomètre est toujours là mais il n'est plus relié mécaniquement au reste. Par contre il est toujours soudé à la carte, j'ai soudé sur ces pattes 2 résistances. J'ai fait quelque chose qu'il fallait pas ?
Répondre à ce sujet

1 utilisateur(s) li(sen)t ce sujet
0 members, 1 guests, 0 anonymous users