Les servomoteurs sont très utiles dans l'électronique et les systèmes embarqués. Vous pouvez trouver l'utilisation du servomoteur partout autour de vous, ils sont utilisés dans les jouets, les robots, le plateau de CD d'ordinateur, les voitures, les avions, etc. La raison de cette large portée est que le servomoteur est très fiable et précis. Nous pouvons le faire pivoter à n'importe quel angle particulier. Ils sont disponibles dans une large gamme, du moteur à couple élevé aux moteurs à faible couple. Dans ce tutoriel, nous allons interfacer un servomoteur avec un microcontrôleur 8051 (AT89S52).
Nous devons d'abord comprendre le principe de fonctionnement des servomoteurs. Le servomoteur fonctionne sur le principe PWM (Pulse width modulation), ce qui signifie que son angle de rotation est contrôlé par la durée de l'impulsion appliquée à son PIN de contrôle. Fondamentalement, le servomoteur est composé d'un moteur à courant continu contrôlé par une résistance variable (potentiomètre) et certains engrenages. La force à haute vitesse du moteur à courant continu est convertie en couple par les engrenages. Nous savons que TRAVAIL = FORCE X DISTANCE, dans le moteur à courant continu, la force est moindre et la distance (vitesse) est élevée et dans le servo, la force est élevée et la distance est moindre. Le potentiomètre est connecté à l'arbre de sortie du servo, pour calculer l'angle et arrêter le moteur à courant continu à l'angle requis.
Le servomoteur peut être tourné de 0 à 180 degrés, mais il peut aller jusqu'à 210 degrés, selon le fabricant. Ce degré de rotation peut être contrôlé en appliquant une impulsion de niveau LOGIC 1 pendant une durée comprise entre 1 ms et 2 ms. Un 1 ms peut faire tourner le servo à 0 degré, 1,5 ms peut tourner à 90 degrés et une impulsion de 2 ms peut le faire pivoter à 180 degrés. Une durée comprise entre 1 et 2 ms peut faire tourner le servomoteur à n'importe quel angle entre 0 et 180 degrés.
Schéma de circuit et explication de fonctionnement
Le servomoteur a trois fils Rouge pour Vcc (alimentation), Marron pour la terre et Orange est le fil de commande. Le fil de commande peut être connecté à 8051, nous l'avons connecté à la broche 2.1 de 8051. Maintenant, nous devons garder cette broche sur Logic 1 pendant 1 ms pour la faire pivoter de 0 degré, 1,5 ms pour 90 degrés, 2 ms pour 180 degrés. Nous avons utilisé des minuteries à puce de 8051 pour créer un retard. Nous avons créé un retard de 50us grâce à la fonction «servo_delay», et utilisé la boucle «for» pour créer un retard en multiple de 50us.
Nous utilisons la minuterie 0 et en mode 1, nous avons donc mis 01H dans le registre TMOD. Le mode 1 est un mode de minuterie 16 bits et TH0 contient l'octet haut et TL0 contient l'octet bas du minuteur 16 bits. Nous avons mis FFD2 dans le registre d'horloge 16 bits, FF dans TH0 et D2 dans TL0. Mettre FFD2 créera un délai d'env. 50 us avec le cristal de 11,0592 MHz. TR0 et TF0 sont les bits du registre TCON, la broche TR utilisée pour démarrer la minuterie lorsqu'elle est définie et s'arrêter lorsqu'elle est réinitialisée (0). TF est un indicateur de débordement, défini par le matériel en cas de dépassement de capacité et doit le réinitialiser par logiciel. Fondamentalement, TF indique l'achèvement de la minuterie et est défini par le matériel lorsque 16 temporisations transitent de FFFFH à 0000H. Vous pouvez lire sur les «8051 Timers» pour comprendre le calcul de la valeur dans les registres de minuteries, pour créer le délai de 50 us.
Maintenant, mesurés à partir de CRO, 13 boucles de la fonction servo_delay donneront le retard de 1 ms, nous avons donc commencé à partir de 1 ms (13 boucles) et sommes passés à 2 ms (26 boucles) pour faire pivoter le servo de 0 à 180 degrés. Mais nous avons lentement augmenté le délai de 1 ms, nous avons divisé la fenêtre de 1 ms à 2 ms en 7 parties telles que 1,14 ms, 1,28 ms, 1,42 ms et ainsi de suite, de sorte que le servo tournera par multiple d'env. 26 degrés (180/7). Après 180, il reviendra automatiquement à 0 degré.