Différences
Ci-dessous, les différences entre deux révisions de la page.
| Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente | ||
|
fr:informatics:piloter_les_moteurs [28/01/2025 14:50] Keuronde [Initialisation des moteurs] |
fr:informatics:piloter_les_moteurs [10/01/2026 18:54] (Version actuelle) Keuronde [Structure du code] |
||
|---|---|---|---|
| Ligne 26: | Ligne 26: | ||
| * **La fréquence : | * **La fréquence : | ||
| * **Le rapport cyclique : | * **Le rapport cyclique : | ||
| - | Le fonctionnement exact du module PWM va dépendre de votre microcontrôleur. Nous vous conseillons fortement de lire le chapitre associé dans la fiche technique de votre microcontrôleur (ici celle du RP2040) et le SDK en C (ici celui du RP2040). Lisez bien les documents dans cet ordre ! | + | Le fonctionnement exact du module PWM va dépendre de votre microcontrôleur. Nous vous conseillons fortement de lire le chapitre associé dans la fiche technique de votre microcontrôleur ({{ : |
| ==== Initialisation des moteurs ==== | ==== Initialisation des moteurs ==== | ||
| Ligne 32: | Ligne 32: | ||
| Initialisez les broches de sens en sortie, configurez la broche « Enable » en PWM. | Initialisez les broches de sens en sortie, configurez la broche « Enable » en PWM. | ||
| - | Configurez la fonction PWM à une fréquence de 40kHz. Pour cela, vous avez en général deux paramètres sur lesquels jouer : | + | Idéalement nous aimerions configurer notre fonction PWM à une fréquence comprise entre 20 kHz et 40 kHz, ce qui limite les sifflements du moteur. Seulement, notre pont en H est un peu vieux et le fabriquant conseille de ne pas dépasser 5 kHz. |
| * Un diviseur de fréquence en entrée du bloc PWM | * Un diviseur de fréquence en entrée du bloc PWM | ||
| * La valeur de rebouclage du module PWM | * La valeur de rebouclage du module PWM | ||
| Ligne 39: | Ligne 40: | ||
| Si votre valeur de rebouclage est plus grande que celle admise par votre microcontrôleur, | Si votre valeur de rebouclage est plus grande que celle admise par votre microcontrôleur, | ||
| - | Dans notre cas, F_microcontrôleur = 125 MHz, F_désirée = 40 kHz. Nous trouvons une valeur de rebouclage à 3 125. cette valeur est admissible par le module PWM qui est sur 16 bits (max 65 535). | + | Dans notre cas, F_microcontrôleur = 125 MHz, F_désirée = 5 kHz. Nous trouvons une valeur de rebouclage à 25 000. cette valeur est admissible par le module PWM qui est sur 16 bits (max 65 535). |
| ==== Commande en vitesse ==== | ==== Commande en vitesse ==== | ||
| - | Le module PWM du RP2040 fonctionne sur 16 bits. 16 bits permet de coder des nombres de 0 à 65535. Tel que nous avons initialisé le module PWM, nous profitons de toute la plage des 16bits. | + | Le module PWM du RP2040 fonctionne sur 16 bits. 16 bits permet de coder des nombres de 0 à 65535. Tel que nous avons initialisé le module PWM, nous profitons |
| ^ Vitesse souhaitée ^ Commande ^ | ^ Vitesse souhaitée ^ Commande ^ | ||
| | 0 % | 0 | | | 0 % | 0 | | ||
| - | | 10 % | 6554 | | + | | 10 % | 2500 | |
| - | | 50 % | 32768 | | + | | 50 % | 12500 | |
| - | | 90 % | 58982 | | + | | 90 % | 22500 | |
| - | | 100 % | 65536 | | + | | 100 % | 25000 | |
| Voici qui est vrai pour le module PWM, mais pour notre fonction qui gère la commande de la vitesse du moteur, nous souhaitons gérer une subtilité supplémentaire : | Voici qui est vrai pour le module PWM, mais pour notre fonction qui gère la commande de la vitesse du moteur, nous souhaitons gérer une subtilité supplémentaire : | ||
| ===== Structure du code ===== | ===== Structure du code ===== | ||
| Ligne 59: | Ligne 60: | ||
| La fonction pour envoyer une commande de vitesse. Cette fonction comporte plusieurs subtilités : | La fonction pour envoyer une commande de vitesse. Cette fonction comporte plusieurs subtilités : | ||
| - | * L’argument vitesse, est un entier de 32 bits signé et nous envoyons au module PWM un entier de 16bits non signé. Le signe doit commande | + | * L’argument vitesse, est un entier de 32 bits signé et nous envoyons au module PWM un entier de 16bits non signé. Le signe doit commander |
| * Nous voulons que cette fonction prenne en argument le moteur à piloter. Ceci afin de simplifier le code qui utilisera cette fonction. | * Nous voulons que cette fonction prenne en argument le moteur à piloter. Ceci afin de simplifier le code qui utilisera cette fonction. | ||
| + | Dans le fichier .h, définissez une constante MOTEUR_COMMANDE_MAX, | ||
| ==== Module PWM et Raspberry Pi Pico ==== | ==== Module PWM et Raspberry Pi Pico ==== | ||
| Attention, pour utiliser le module PWM, vous devez éditer votre fichier CMakeLists.txt pour ajouter hardware_pwm dans « target_ling_libraries », | Attention, pour utiliser le module PWM, vous devez éditer votre fichier CMakeLists.txt pour ajouter hardware_pwm dans « target_ling_libraries », | ||
| target_link_libraries(PAMI_Cours_Moteurs | target_link_libraries(PAMI_Cours_Moteurs | ||
| - | | + | |
| - | hardware_pwm | + | hardware_pwm |
| - | ... | + | ... |
| ) | ) | ||
| Ligne 97: | Ligne 99: | ||
| Avec ce bout de code, votre robot avance et recule comme s’il accélérait progressivement. | Avec ce bout de code, votre robot avance et recule comme s’il accélérait progressivement. | ||
| + | |||
| + | Voir la branche [[https:// | ||
| Aller, courage ! Encore une étape et nous pourrons entrer dans le vif du sujet. | Aller, courage ! Encore une étape et nous pourrons entrer dans le vif du sujet. | ||