/home/totofweb/homepage
Christophe Le Lann's Homepage v0.8
 

Carte de commande de 2 servomoteurs optocouplée

Date d'initialisation : Février 2005
État actuel : Terminé

Sommaire

Carte de commande de 2 servomoteurs optocouplée

Sous-projets

Titre Date État
Librairie en C de génération de signal PWM pour servomoteurs Mai 2005 Terminé

Description générale

Caractéristiques techniques :

Son grand atout est d'utiliser des optocoupleurs pour séparer totalement l'alimentation logique de l'alimentation puissance. De cette manière, le pic est totalement protégé contre les remontées de parasites.

Le schéma est fait sous Eagle (soft windows/linux gratuit en version de démo limitée à des cartes de 100x80mm). Pour un montage aussi simple, il n'est pas utile de faire un circuit imprimé, un simple montage sur plaquette veroboard à pastilles suffira amplement.

Passons maintenant à la partie programmation. Pour plus d'informations sur la commande d'un servo, référez-vous à l'excellent site des fribotte. J'utilise le compilateur CCS, que je recommande pour sa simplicité d'utilisation, même si le compilateur développé par Microchip (C18) semble en passe de devenir la référence, je trouve CCS plus simple à l'utilisation (fonctions output() et input(), pas besoin de gérer les tris).

Pour générer le signal en PWM demandé par le servo, nous allons utiliser les interruptions du pic. J'ai choisi de générer une interruption toutes les 50µs, je peux donc contrôler le servo par pas de 0.9°, ce qui est une précision suffisante. Pour plus de précision, on poura utiliser des interruptions de 25µs ou 10µs, ce qui nécessite d'adapter légèrement le code.

Pour générer une interruption toutes les 50µs, il faut se référer à la datasheet du pic en question. Dans notre exemple, nous allons utiliser un pic 16F877A à 20MHz.

Le prescaler est une variable qui compte le nombre d'instructions effectuées. Chaque instruction du pic nécessite 4 tops d'horloge, le prescaler s'incrémentera donc toutes les 2µs (1/(2000000/4)). La datasheet nous informe que son timer 0 est un timer 8bits, c'est à dire qu'il sera appelé quand le prescaler atteindra 255. Le timer0 sera donc appelé toutes les 512µs (256/(2000000/4)). Nous souhaitons qu'il le fasse toutes les 50µs, nous allons donc initialiser directement le prescaler sur la valeur 204, comme ça il se passera 50 instructions (donc 50µs) avant l'appel du timer 0. A chaque appel de timer 0, on remet le prescaler sur 204 et il recontera encore 50 instructions, le tour est joué.

Photos


Vue globale de la carte.
global.jpg
Vue globale de la carte.

Schéma et Circuit Imprimé


Schéma du circuit (version Eagle téléchargeable).
schema.png
Schéma du circuit (version Eagle téléchargeable).
Schéma sous Eagle.
schema.sch
Schéma sous Eagle.

Commentaires des visiteurs

Laisser un commentaire

Par Eric le 08/08/2007

Salut Christophe,
Je me pose une question quant à la sécurité du montage que tu utilises ici. La plupart des connecteurs standards de servos étant assez peu détrompée, il n'est pas rare de brancher ce connecteur à l'envers. Or dans cette position, le photo-transistor du coupleur va directement relier le + et la masse de l'alimentation du servo dès qu'il devient passant. Tu n'es jamais tombé sur ce problème ?
En fait, je me le pose, car le montage en projet ne m'est pas destiné mais va être manipulé par des jeunes, et doit donc être autant que possible à l'épreuve des fausses manips.
Merci d'avance pour toute réaction.
Cordialement
Eric
(aka RicE sur le forum PS ;-)

Par Totofweb le 09/08/2007

Rice> Je n'avais effectivement pas conçu ce montage avec comme critère principal la sécurité d'utilisation.
Je pense que tu peux essayer de remanier un peu les signaux aux côtés du phototransistors : relier l'émetteur directement à la masse, et relier le collecteur d'une part au +5V par l'intermédiaire d'une résistance de 1k, et d'autre part à l'entrée de commande du servomoteur.
Ainsi, même en cas d'inversion du connecteur du servomoteur, la résistance de 1k empêchera de court-circuiter la masse avec le +5V.

Par mohcine le 04/06/2011

salut,en cherche le code ou le programe en assembleur ou autre langage c,c++ou pic basic pro de servomoteur avec pic16f84/877,svp merci davence

Par djo le 07/02/2013

salut
j'ai commencé ce projet mais j'ajoute a mon robot deux autres servo moteur le but de ce robot c'est de porter une piéce par une bras fixés sur lui a ce niveau je cherche les modications qui doivent apporté sur la carte et le programme???
il s'agit d'un robot porteur suiveur de ligne detecte l'obstacle puis il active le bras pour faire deplacer le piéce en dehors de la ligne suivie
merci ++++++++

Laisser un commentaire

Merci de ne poster ici que des questions ou commentaires concernant réellement le projet présenté sur cette page. Si vous recherchez de l'aide pour réaliser vos propres projets, merci de vous tourner vers des forums appropriés tel que celui de Planète-Sciences (où je suis très présent).


Pseudo
Mail (facultatif)
Votre message
erreur de génération du cryptogramme visuel. Veuillez recopier le cryptogramme visuel :