LAB4 : Table Linéaire

  • Les Labos précédents ont permis de contrôler notre moteur synchrone à vide en garantissant une vitesse constante.
  • Dans cette partie nous allons coupler le moteur à la table linéaire.
  • Cela suppose la prise en compte des fins de courses.
  • La modification de la commande se fera directement dans le code C (et non avec PysimCoder)

Prise en compte des fins de course

  • L’appui sur un bouton fin de course déclenche une interruption externe.
  • La fonction de callback associée HAL_GPIO_EXTI_Callback met à jour les variables FC1 et FC2.

Modifier le fichier main.c afin de changer de sens de rotation lorsqu’on appui sur un fin de course.

REM 1 : Il suffit de changer le signe de la consigne pour inverser le sens de rotation du moteur.

REM 2 : Cela rappelle le problème du chariot .

Il sera donc bienvenu d’envisager le codage d’une machine d’états en c.

REM 3 : Afin de présenter un code lisible, la solution la plus logique pour ce problème est de coder une machine d’états ( switch.. case..) dans la tache Fast_Task.


Pilotage du moteur par bus CAN

  • On souhaite désormais piloter le moteur via le bus CAN.
  • Le PC fait alors office d’automate, reçois les états des boutons depuis la carte via le bus CAN, et après décision transmet la vitesse de consigne à la carte.
  • Un message reçu sur le bus CAN déclenche une interruption dont la fonction de callback est can_callback().

Il doit être possible avec le bus CAN de :

  • Contrôler la consigne de vitesse
  • récupérer sur le PC l’état des fins de course
  • De fonctionner selon 3 modes :
    • Stop si on atteint le fin de course
    • Changement de sens de rotation si l’on atteint le fin de course
    • Positionnement avec :
      • Recherche de la position initiale (fin de course)
      • Atteinte (et arrêt) d’une position définie par l’utilisateur, avec un déplacement à vitesse constante.

REM :

  • La décision de la consigne à appliquer se fait alors au niveau du PC ( avec une machine d’états ).
  • Le positionnement doit se faire avec un asservissement de position linéaire