- Qu'est-ce qu'un servomoteur?
- Interfaçage des servomoteurs avec des microcontrôleurs:
- Programmation du servomoteur avec le microcontrôleur PICF877A PIC:
- Schéma:
- Simulation et configuration matérielle:
Ceci est notre 11e tutoriel sur l' apprentissage des microcontrôleurs PIC utilisant MPLAB et XC8. Dans ce didacticiel, nous allons apprendre à contrôler le servomoteur avec le microcontrôleur PIC. Si vous avez déjà travaillé avec des servomoteurs, vous pouvez ignorer la première moitié de ce tutoriel, mais si vous êtes nouveau dans le servomoteur lui-même, continuez à lire.
Jusqu'à présent, nous avons couvert de nombreux tutoriels de base tels que le clignotement des LED avec PIC, les minuteries en PIC, l'interfaçage LCD, l'interfaçage à 7 segments, l'ADC utilisant PIC etc. Si vous êtes un débutant absolu, veuillez visiter la liste complète des tutoriels PIC ici et Commencer à apprendre.
Dans notre tutoriel précédent, nous avons appris à générer des signaux PWM à l'aide du microcontrôleur PIC, les signaux ont été générés en fonction de la valeur lue à partir du potentiomètre. Si vous avez compris tous les programmes, félicitations, vous avez déjà codé pour un servomoteur également. OUI, les servomoteurs répondent aux signaux PWM (que nous créons à l'aide de minuteries ici), nous allons apprendre pourquoi et comment dans ce tutoriel. Nous simulerons et construirons la configuration matérielle de ce projet et vous trouverez la vidéo détaillée à la fin de ce didacticiel.
Qu'est-ce qu'un servomoteur?
Un servomoteur est un type d'actionneur (principalement circulaire) qui permet un contrôle angulaire. Il existe de nombreux types de servomoteurs disponibles, mais dans ce didacticiel, concentrons-nous sur les servomoteurs de loisirs illustrés ci-dessous.
Les servos de loisir sont populaires car ils constituent la méthode peu coûteuse de contrôle de mouvement. Ils fournissent une solution standard pour la plupart des besoins des amateurs de R / C et de robotique. Ils éliminent également le besoin de concevoir un système de contrôle personnalisé pour chaque application.
La plupart des servomoteurs de loisirs ont un angle de rotation de 0 à 180 °, mais vous pouvez également obtenir un servomoteur à 360 ° si vous êtes intéressé. Ce tutoriel utilise un servomoteur 0-180 °. Il existe deux types de servomoteurs basés sur l'engrenage, l'un est le servomoteur à engrenages en plastique et l'autre est le servomoteur à engrenages métalliques. Les engrenages métalliques sont utilisés dans les endroits où le moteur est soumis à plus d'usure, mais il n'est proposé qu'à un prix élevé.
Les servomoteurs sont évalués en kg / cm (kilogramme par centimètre), la plupart des servomoteurs amateurs sont évalués à 3 kg / cm ou 6 kg / cm ou 12 kg / cm. Ce kg / cm vous indique le poids que votre servomoteur peut soulever à une distance donnée. Par exemple: un servomoteur de 6 kg / cm doit pouvoir soulever 6 kg si la charge est suspendue à 1 cm de l'arbre du moteur, plus la distance est grande, moins la capacité de charge est faible. Apprenez ici les bases du servomoteur.
Interfaçage des servomoteurs avec des microcontrôleurs:
L'interfaçage des servomoteurs hobby avec MCU est très facile. Les servos ont trois fils qui en sortent. Dont deux seront utilisés pour l'alimentation (positive et négative) et un sera utilisé pour le signal qui doit être envoyé à partir du MCU. Dans ce didacticiel, nous utiliserons un servomoteur à engrenages métalliques MG995 qui est le plus couramment utilisé pour les robots humanoïdes de voitures RC, etc. L'image de MG995 est illustrée ci-dessous:
Le code couleur de votre servomoteur peut différer, vérifiez donc votre fiche technique respective.
Tous les servomoteurs fonctionnent directement avec vos rails d'alimentation + 5V, mais nous devons faire attention à la quantité de courant que le moteur consommerait, si vous prévoyez d'utiliser plus de deux servomoteurs, un bouclier d'asservissement approprié doit être conçu. Dans ce tutoriel, nous utiliserons simplement un servomoteur pour montrer comment programmer notre PIC MCU pour contrôler le moteur. Vérifiez les liens ci-dessous pour l'interfaçage du servomoteur avec un autre microcontrôleur:
- Interfaçage du servomoteur avec le microcontrôleur 8051
- Contrôle du servomoteur à l'aide d'Arduino
- Tutoriel de servomoteur Raspberry Pi
- Servomoteur avec microcontrôleur AVR
Programmation du servomoteur avec le microcontrôleur PICF877A PIC:
Avant de pouvoir commencer la programmation du servomoteur, nous devons savoir quel type de signal doit être envoyé pour contrôler le servomoteur. Nous devons programmer le MCU pour envoyer des signaux PWM au fil de signal du servomoteur. Il y a un circuit de commande à l'intérieur du servomoteur qui lit le cycle de service du signal PWM et positionne l'arbre des servomoteurs à l'endroit respectif comme indiqué dans l'image ci-dessous
Chaque servomoteur fonctionne sur des fréquences PWM différentes (la fréquence la plus courante est 50HZ qui est utilisée dans ce tutoriel), alors obtenez la fiche technique de votre moteur pour vérifier la période PWM sur laquelle votre servomoteur fonctionne.
Les détails sur le signal PWM de notre Tower pro MG995 sont indiqués ci-dessous.
De cela, nous pouvons conclure que notre moteur fonctionne avec une période PWM de 20 ms (50 Hz). La fréquence de notre signal PWM doit donc être réglée sur 50 Hz. La fréquence du PWM que nous avions définie dans notre tutoriel précédent était de 5 KHz, l'utilisation de la même chose ne nous aidera pas ici.
Mais, nous avons un problème ici. Le PIC16F877A ne peut pas générer de signaux PWM basse fréquence à l'aide du module CCP. Selon la fiche technique, la valeur la plus basse possible pouvant être définie pour la fréquence PWM est de 1,2 KHz. Nous devons donc abandonner l'idée d'utiliser le module CCP et trouver un moyen de créer nos propres signaux PWM.
Par conséquent, dans ce tutoriel, nous utiliserons le module de minuterie pour générer les signaux PWM avec une fréquence de 50 Hz et faire varier leur cycle de service pour contrôler l'ange du servomoteur. Si vous êtes nouveau dans les minuteries ou ADC avec PIC, veuillez revenir à ce tutoriel, car je vais sauter la plupart des choses puisque nous les avons déjà couvertes là-bas.
Nous initialisons notre module Timer avec un prescaler de 32 et le faisons déborder pour chaque 1us. Selon notre fiche technique, le PWM devrait avoir une période de 20 ms seulement. Ainsi, notre temps libre et notre temps libre ensemble devraient être exactement égaux à 20 ms.
OPTION_REG = 0b00000100; // Timer0 avec freq externe et 32 comme prescaler TMR0 = 251; // Charge la valeur de temps pour 1us delayValue peut être entre 0-256 seulement TMR0IE = 1; // Activer le bit d'interruption du temporisateur dans le registre PIE1 GIE = 1; // Activer l'interruption globale PEIE = 1; // Activer l'interruption périphérique
Donc, dans notre fonction de routine d'interruption, nous activons la broche RB0 pendant le temps spécifié et l'éteignons pendant le temps d'alésage (20ms - on_time). La valeur du temps d'activation peut être spécifiée en utilisant le module potentiomètre et ADC. L'interruption est illustrée ci-dessous.
oid interruption timer_isr () {if (TMR0IF == 1) // La minuterie a dépassé {TMR0 = 252; / * Charge la valeur du minuteur, (Remarque: Timervalue est de 101 instaed de 100 car le TImer0 a besoin de deux cycles d'instructions pour commencer à incrémenter TMR0 * / TMR0IF = 0; // Effacer le drapeau d'interruption du minuteur count ++;} if (count> = on_time) { RB0 = 1; // complète la valeur de clignotement des LED} if (count> = (on_time + (200-on_time))) {RB0 = 0; count = 0;}}
A l' intérieur de notre en boucle, nous venons juste de lire la valeur du potentiomètre en utilisant le module ADC et mettre à jour à l' heure du PWM en utilisant la valeur de lecture.
tandis que (1) {pot_value = (ADC_Read (4)) * 0,039; on_time = (170-pot_value); }
De cette façon, nous avons créé un signal PWM dont la période est de 20 ms et qui a un cycle de service variable qui peut être réglé à l'aide d'un potentiomètre. Le code complet a été donné ci-dessous dans la section du code.
Maintenant, vérifions la sortie à l'aide de la simulation proteus et passons à notre matériel.
Schéma:
Si vous avez déjà rencontré le didacticiel PWM, les schémas de ce didacticiel seront les mêmes, sauf pour lequel nous ajouterons un servomoteur à la place de la lumière LED.
Simulation et configuration matérielle:
Avec l'aide de la simulation Proteus, nous pouvons vérifier le signal PWM à l'aide d'un oscilloscope et également vérifier l'ange rotatif du servomoteur. Quelques instantanés de la simulation sont présentés ci-dessous, où l'ange rotatif du servomoteur et le cycle de service PWM peuvent être remarqués pour changer en fonction du potentiomètre. Vérifiez en outre la vidéo complète, de la rotation à différents PWM, à la fin.
Comme nous pouvons le voir, l'ange de rotation du servo est modifié en fonction de la valeur du potentiomètre. Passons maintenant à notre configuration matérielle.
Dans la configuration matérielle, nous venons de retirer la carte LED et d'ajouter le servomoteur comme indiqué dans les schémas ci-dessus.
Le matériel est montré dans l'image ci-dessous:
La vidéo ci - dessous montre comment le servomoteur réagit aux différentes positions du potentiomètre.
C'est ça!! Nous avons interfacé un servomoteur avec un microcontrôleur PIC, vous pouvez maintenant utiliser votre propre créativité et découvrir des applications pour cela. Il existe de nombreux projets qui utilisent un servomoteur.