CH32V003 : banc d'essai de moteurs

Ce que vous allez faire

Ce travail est un projet libre qui comporte un exercice de conception et une phase d'intégration de travaux déjà effectués.

Dans un premier temps, vous allez développer une fonction permettant d'afficher un menu et d'y naviguer avec un encodeur rotatif, à la manière des systèmes de billetterie automatique. Repartez pour cela des sources du cours CH32V003 : I2C et afficheur LCD.Il vous faudra traiter les points suivants :

  • Définir une structure pour représenter les menus.

  • Un menu peut proposer des choix de plusieurs types (un seul type pour tout le menu) :

    • Numérique (entier). La définition de menu comporte une valeur minimale, une valeur maximale et une valeur d'incrément. La valeur choisie est celle du nombre affiché.

    • Texte. La définition de menu contient la liste des différentes chaînes. La valeur choisie est l'indice de la chaîne correspondante.

  • Un menu peut être actif (en cours de sélection) ou inactif (affichage du choix effectué).

  • Lorsqu'un menu est actif, tourner l'encodeur modifie le choix courant.

  • Appuyer sur l'encodeur sélectionne le choix courant et rend le menu inactif.

  • Un menu peut être affiché sur plusieurs lignes. Le choix courant est mis en évidence, par exemple sous la forme [Choix 1] ou >Choix 1<.

  • Un menu peut être affiché sur une seule ligne. Les choix défilent entre les [] ou >< quand on tourne l'encodeur.

  • Lorsqu'un menu est inactif, ses [] ou >< sont remplacés par des espaces.

Dans un second temps, vous allez réaliser un banc d'essai de moteurs à courant continu, moteurs pas à pas et de servos. Vous créerez une série d'écrans dans lesquels vous naviguerez pour réaliser des tests. Il vous faudra traiter les points suivants :

  • Choisir le type de moteur que vous voulez tester.

  • Pour un moteur à courant continu :

    • Choisir le sens de rotation du moteur.

    • Démarrer / arrêter le moteur.

    • Faire varier sa vitesse (PWM).

    • Quand le moteur est démarré, on ne peut pas changer son sens de rotation.

  • Pour un moteur pas à pas :

    • Choisir le mode de fonctionnement du moteur (wave drive, full-step, half-step).

    • Choisir le sens de rotation du moteur.

    • Démarrer / arrêter le moteur.

    • Faire varier sa vitesse (timer).

    • Quand le moteur est démarré, on ne peut pas changer son sens de rotation ni son mode de fonctionnement.

  • Pour un servo :

    • Choisir l'incrément de la durée de l'impulsion de commande (50 / 100 / 250 / 500 μs).

    • Remarque  la durée de l'impulsion de commande peut varier entre 500 μs et 2500 μs.

    • Choisir le mode de contrôle du servo et le démarrer :

      • Manuel : vous faites varier la durée d'impulsion en tournant l'encodeur.

      • Neutre : la durée d'impulsion est fixe à 1500 μs. Pratique pour repérer avec précision la position neutre du servo.

      • Auto swing : vous faites varier la durée d'impulsion varie entre 500 μs et 2500 μs à la manière d'un essuie-glace.

    • Quand on arrête le servo, on peut de nouveau changer incrément et mode.

Le matériel

Voici le schéma complet du banc de test :

Et la manière de câbler les moteurs :

Les ports utilisés par l'encodeur sont :

  • PD2 = SW

  • PD3 = T2CH2 = DT

  • PD4 = T2CH1 = CLK

  • Le timer 2 est utilisé en mode encodeur.

Les ports utilisés par le module d'affichage LCD sont :

  • PC1 = SDA

  • PC2 = SCL

Le port utilisé par le servo est :

  • PC3 = T1CH3 = PWM

  • Le timer 1 est utilisé en mode PWM, et son overflow comme base de temps pour le mode Auto Swing.

Les ports utilisés par le moteur à courant continu sont :

  • PC3 = T1CH3 = A-IA

  • PC4 = T1CH4 = A-IB

  • Le timer 1 est utilisé en mode PWM.

Les ports utilisés par le moteur pas à pas sont :

  • PC3 = A-IA

  • PC4 = A-IB

  • PC4 = B-IA

  • PC5 = B-IB

  • Le timer 1 est utilisé comme base de temps pour faire tourner le moteur.


Copyright (c) 2024 Vincent DEFERT - Tous droits réservés