Carte de commande de 2 servomoteurs optocouplée
Date d'initialisation : Février 2005
Etat actuel : Terminé
Sommaire
- Liste des sous-projets
- Description générale
- Photos
- Schéma et Circuit Imprimé
- Commentaires des visiteurs
![]()
Sous-projets
| Titre | Date | Etat |
| Librairie en C de génération de signal PWM pour servomoteurs | Mai 2005 | Terminé |
Description générale
Caractéristiques techniques :
- Contrôle de deux servomoteurs (facilement extensible pour plus de servomoteurs)
- Condensateur de 3300µF pour être paré à toutes les microcoupures et gros appels de courant (cette valeur paraît démesurée mais c'est tout ce que j'avais sous la main)
- Interrupteur + led témoin
- Utilisation d'optocoupleurs 4n35 pour séparer totalement l'alimentation logique de l'alimentation puissance.
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
Schéma et Circuit Imprimé
Commentaires des visiteurs
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.




