4 - Contrôle d’un moteur "servo à rotation continue" avec un variateur PWM” : Différence entre versions

De Wiki L.A.B
Aller à : navigation, rechercher
(Page créée avec « =='''Contrôle d’un moteur "servo à rotation continue" avec un variateur PWM'''== Le PWM peut être utilisé pour le contrôle d’un moteur "servo à rotation continu... »)
 
(Configuration du timer du STM32)
Ligne 16 : Ligne 16 :
 
<br>
 
<br>
 
Avec un peu de marge sur les valeurs, on peut décrire le scénario suivant:
 
Avec un peu de marge sur les valeurs, on peut décrire le scénario suivant:
 +
 +
<syntaxhighlight lang="cpp" enclose="div">
  
 
   HAL_TIM_PWM_Start( &htim2, TIM_CHANNEL_1 );
 
   HAL_TIM_PWM_Start( &htim2, TIM_CHANNEL_1 );
Ligne 30 : Ligne 32 :
 
   HAL_Delay( 5000 );
 
   HAL_Delay( 5000 );
 
   }
 
   }
 +
 +
 +
<syntaxhighlight>

Version du 16 novembre 2017 à 16:18

Contrôle d’un moteur "servo à rotation continue" avec un variateur PWM

Le PWM peut être utilisé pour le contrôle d’un moteur "servo à rotation continue", comme ceux qui sont intégrés dans le robot du lab.
Dans ce tutoriel, on va utiliser le moteur de adafruit (https://www.adafruit.com/product/154). Sur la page internet, on trouve une information importante dans la section des détails techniques: "Required Pulse: 500us-2500us".

Configuration du timer du STM32

L'utilisation/configuration du timer se fait exactement la même façon comme pour commander une LED, mais il nous faut alors générer des pulses d’une longueur "t1" de 500 à 2500 micro secondes.
Ainsi dans la boite de dialogue de configuration du timer, il faut maintenant configurer la deuxième valeur "Counter Periode" à 2500. Ainsi la periode "T" est 2500 micro secondes.
Le fonctionnement du moteur est la suivante:

  • Si on envoie une impulsion "plus petite que la moitié" égale à (2500 + 500 ) / 2 = 1500 micro secondes, le moteur tourne "à gauche".
  • Si elle est "plus grande que la moitié", le moteur tourne "à droite".



Avec un peu de marge sur les valeurs, on peut décrire le scénario suivant:

  HAL_TIM_PWM_Start( &htim2, TIM_CHANNEL_1 );
  /* Infinite loop */
  while (1)
  {
   /* tourne à gauche... */
   __HAL_TIM_SET_COMPARE( &htim2, TIM_CHANNEL_1, 1000 );
   /* … pendant 5 secondes */
   HAL_Delay( 5000 );
   /* tourne à droite... */
   __HAL_TIM_SET_COMPARE( &htim2, TIM_CHANNEL_1, 2000 );
   /* … pendant 5 secondes */
   HAL_Delay( 5000 );
  }


<syntaxhighlight>