Sunday, January 17, 2016

Interfacing Servo-Motor With STM32


Interfacing Servo-Motor With STM32



Bonjour, Aujourd'hui on va discuter le fonctionnent du servo moteur en essayant de le contr�ler avec un STM32F4, contr�ler veut dire contr�ler quelle angle il la tourne vers. donc Commen�ons par une petite d�finition d'un servomoteur.

Un servomoteur est un syst�me motoris� capable d'atteindre des positions pr�d�termin�es, puis de les maintenir. La position est : dans le cas d�un moteur rotatif, une valeur d'angle et, dans le cas d�un moteur lin�aire une distance. On utilise des moteurs �lectriques (continu, asynchrone, brushless) aussi bien que des moteurs hydrauliques. Le d�marrage et la conservation de la position pr�d�termin�e sont command�s par un syst�me de r�glage.     

Mais savez vous que la commande de servo-moteur est pas totalement comme le moteur dc genre on l'alimente alors il tourne ? savez vous que chaque servo-moteur a sa propre m�thode de commande et de fonctionnement ?
On peut tout �tre d'accord que chaque servo moteur il fonctionne avec un signal PWM pulse with modulation que j'ai d�j� d�finit sur cet article PWM. Mais il faut bien comprendre que chaque servo a sa propre fa�on de commande qu'on peut seulement la comprendre sur son fichier technique.

Alors pour comprendre le fonctionnement de chaque un, on qu'aller a sa fichier technique et lire exactement le pulse associer a chaque angle par rapport au p�riode cyclique qu'il a chaque un . citons cette exemple 

les servomoteurs sont commander par les envoyer des pulsations. Ici le servo doit recevoir chaque 20 ms une pulsation ou le longueur de cette derni�re va indiquer a quelle angle exactement il doit tourner notre servomoteur. 

Voila cette exemple:
  • si a chaque 20 ms j'envoi une pulsation de longueur 1 ms le servo va tourner vers 0 degr� 
  • si a chaque 20 ms j'envoi une pulsation de 1.5 ms le servo va tourner pr�cis�ment vers 90 degr�
  • ......


D'ici on peut conclure la m�thode de la quelle le servo on doit le commander avec notre microcontr�leur, une seule sortie num�rique est capable de le commander si je la met on niveau haut pendant la p�riode ou pulsation est active et je la met en niveau bas pendant le reste de la p�riode (20ms - pulsation).

Aujourd'hui je vais commander ce servomoteur via une carte STM32 F4
R�sultat de recherche d'images pour "servomoteurs"
on se r�f�rant de sa fichier technique j'ai �cris le programme suivant:




//Let's electronic By Aymen Lachkhem
// Interfacing Servo-motor to STM32
// Letselectronic.blogspot.com
void servoRotate0() //0 Degree
{
unsigned int i;
for(i=0;i<50;i++)
{
gpiob_odr.f3 = 1;
Delay_us(1000);
gpiob_odr.f3 = 0;
Delay_us(19000);
}
}
void servoRotate90() //90 Degree
{
unsigned int i;
for(i=0;i<50;i++)
{
gpiob_odr.f3 = 1;
Delay_us(2500);
gpiob_odr.f3 = 0;
Delay_us(17500);
}
}
void servoRotate180() //180 Degree
{
unsigned int i;
for(i=0;i<50;i++)
{
gpiob_odr.f3 = 1;
Delay_us(4400);
gpiob_odr.f3 = 0;
Delay_us(16000);
}
}
void main(){


GPIO_Digital_Output(&GPIOB_ODR, _GPIO_PINMASK_3); // configuration of pb3 as Digital Output
GPIO_Digital_Input (&GPIOA_BASE, _GPIO_PINMASK_3 | _GPIO_PINMASK_4 | _GPIO_PINMASK_5); // configure PORTA pins as speed control input
while (1) {
if (GPIOA_IDR.B3) {
servoRotate0(); //0 Degree
Delay_ms(2000);}
if (GPIOA_IDR.B4) {
servoRotate90(); //90 Degree
Delay_ms(2000);}
if (GPIOA_IDR.B5) {
servoRotate180(); //180 Degree
Delay_ms(2000);}
}
}


Il est tout indiquer au commentaire de programme a propos la configuration, le principe est totalement simple ou j'aurai 3 entr�es num�riques que je vais utiliser comme des boutons poussoires qui vont forcer le servo moteur relier au  sortie num�rique a tourn�e vers une angle bien pr�cise comme il est citer au vid�o au dessous 


Une d�monstration vid�o qui r�sume tout le travail fait.



   




No comments:

Post a Comment