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.
{: .question}
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