Outils pour utilisateurs

Outils du site


issue195:micro-ci_micro-la

Last month, I promised that we would be looking at a motor drive using the RPi Pico-W. And for once, that’s what we will do. We’ll need a number of parts for this project. Here is a part list. In reality, you need only one motor to see the project work, but it is more impressive with two, and, in reality, since the motors are less than $1 USD each, it’s easy to get two. You can also use more. Also, you can substitute a RPi Pico-W for the RPi Pico, since for this project, we won’t be using the WiFi or Bluetooth, but for later projects, the Pico-W will be needed. Before we get started with the wiring, let’s take a close look at the MakerDrive board.

Le mois dernier, j'ai promis que nous allions étudier un pilote de moteur en utilisant le RPi Pico-W. Et pour une fois, c'est ce que nous allons faire.

Nous aurons besoin d'un certain nombre de pièces pour ce projet. Voici la liste des pièces.

En réalité, vous n'avez besoin que d'un seul moteur pour que le projet fonctionne, mais il est plus impressionnant avec deux, et, en réalité, comme les moteurs coûtent moins de 1 $ US chacun, il est facile de s'en procurer deux. Vous pouvez également en utiliser plus.

Vous pouvez également remplacer le RPi Pico par un RPi Pico-W, car pour ce projet, nous n'utiliserons pas le WiFi ou le Bluetooth, mais pour des projets ultérieurs, le Pico-W sera nécessaire.

Avant de commencer le câblage, regardons de près la carte MakerDrive.

On one side of the board is a six position terminal block. This is where you will connect the motors and the battery pack (or 5-volt source). One motor goes to the top two terminals, the other to the bottom two terminals and the battery pack to the center terminals. On the other side of the board are six male pins that will allow connections to the RPi Pico. The top two pins go to a pair of pins that will control the first motor, the bottom two go to another pair of pins that control the second motor, and the middle two pins to +5 VDC and ground on the Pico. Next page (top right) is the actual wiring of the project for this month. To make things simple for you, here is a table (below) that shows where each pin should connect. Once you have the project wired, we normally would be able to jump into the code, but we need to understand how the code will work first.

Sur l'un des côtés de la carte se trouve un bornier à six positions. C'est là que vous connecterez les moteurs et la batterie (ou une source de 5 volts). Un moteur se connecte aux deux bornes supérieures, l'autre aux deux bornes inférieures et la batterie aux bornes centrales.

De l'autre côté de la carte se trouvent six broches mâles qui permettront de connecter le RPi Pico. Les deux broches du haut vont à une paire de broches qui contrôlent le premier moteur, les deux broches du bas vont à une autre paire de broches qui contrôlent le second moteur, et les deux broches du milieu au +5 VDC et à la masse sur le Pico.

La page suivante (en haut à droite) présente le câblage du projet de ce mois.

Pour vous simplifier la tâche, voici un tableau (ci-dessous) qui indique où chaque broche doit être connectée.

Une fois le projet câblé, nous devrions normalement pouvoir passer au code, mais nous devons d'abord comprendre comment le code fonctionnera.

PWM Knowing Pulse-Width Modulation (PWM) is very important to understand how the project works. The output of digital pins of the microcontroller can only be On or Off, a 1 or a 0. For us to be able to control the MakerDrive board, we need to provide not only an On signal, but we need to control the speed of the motors as well. Normally, to control the speed of the motor(s), we would provide a variable voltage. The higher the voltage, the faster the motor runs, and the lower the voltage, the slower the motor speed. But as I just said, we don’t have a way to provide the voltage in an analog manner. If we just set the drive signal for the motor to an On state, the motor would run at full speed as long as the On state exists. This is where PWM comes in. By sending pulses of 1’s and 0’s, we can make the motor think that we are sending an analog voltage. The following image is from https://en.wikipedia.org/wiki/Pulse-width_modulation and should give you a good visual idea of what is going on.

PWM

Il est très important de connaître la modulation de largeur d'impulsion (MLI, en anglais PWM - Pulse Width Modulation) pour comprendre le fonctionnement du projet.

La sortie des broches numériques du microcontrôleur ne peut être que On ou Off, un 1 ou un 0. Pour pouvoir contrôler la carte MakerDrive, nous devons fournir non seulement un signal On, mais aussi contrôler la vitesse des moteurs.

Normalement, pour contrôler la vitesse du (des) moteur(s), nous fournissons une tension variable. Plus la tension est élevée, plus le moteur tourne vite, et plus la tension est faible, plus la vitesse du moteur est lente. Mais comme je viens de le dire, nous n'avons aucun moyen de fournir la tension de manière analogique. Si nous réglons simplement le signal de commande du moteur sur un état de marche, le moteur tournera à pleine vitesse tant que l'état de marche existera.

C'est là qu'intervient le PWM. En envoyant des impulsions de 1 et de 0, nous pouvons faire croire au moteur que nous lui envoyons une tension analogique.

L'image suivante provient de https://en.wikipedia.org/wiki/Pulse-width_modulation et devrait vous donner une bonne idée visuelle de ce qui se passe.

The Code First the driver code (top right). The driver module is saved as “motor_driver.py” The convert function basically takes the value and converts it to an integer (code shown top right). The speed function takes two integer values (one for the left motor and one for the right), and uses the convert function to turn this into the duty cycle value for the PWM signal. The above code is for the left motor and the code bottom right is for the right motor. We tell the two motors to run at speed 50 (50%) which would, if the motors were to be connected to wheels, move forward. We keep that speed for 5 seconds (the sleep(5)) before doing something different (see below). The last block of code then runs the left motor for 5 seconds, the right motor for 5 more seconds, and then backwards (-50,-50) for another 5 seconds, and then stops. That’s about it. You can find the MakerDrive from Cytron at https://www.cytron.io/p-maker-drive-simplifying-h-bridge-motor-driver-for-beginner. It’s a good all-round h-bridge driver, and costs only about $5 USD. As I usually do, I’ve created a repository at https://github.com/gregwa1953/FCM195_MTMT to hold the code files. Until then, as always; stay safe, healthy, positive and creative!

Le code

Tout d'abord, le code du pilote (en haut à droite). Le module du pilote est sauvegardé sous le nom de « motor_driver.py ».

La fonction convert prend la valeur et la convertit en un entier (code en haut à droite).

La fonction speed prend deux valeurs entières (une pour le moteur gauche et une pour le moteur droit) et utilise la fonction convert pour les transformer en valeur de rapport cyclique pour le signal PWM. Le code ci-dessus est pour le moteur gauche et le code en bas à droite est pour le moteur droit.

Nous demandons aux deux moteurs de tourner à la vitesse 50 (50 %), ce qui, si les moteurs étaient connectés à des roues, permettrait d'avancer. Nous maintenons cette vitesse pendant 5 secondes (sleep(5)) avant de faire quelque chose de différent (voir ci-dessous).

Le dernier bloc de code fait tourner le moteur gauche pendant 5 secondes, le moteur droit pendant 5 secondes supplémentaires, puis en arrière (-50,-50) pendant encore 5 secondes, avant de s'arrêter. C'est à peu près tout. Vous pouvez trouver le MakerDrive de Cytron sur https://www.cytron.io/p-maker-drive-simplifying-h-bridge-motor-driver-for-beginner. Il s'agit d'un bon pilote de pont en H polyvalent, qui ne coûte qu'environ 5 $ US.

Comme je le fais habituellement, j'ai créé un dépôt sur https://github.com/gregwa1953/FCM195_MTMT pour contenir les fichiers de code.

Comme toujours, restez en sécurité, en bonne santé, positifs et créatifs !

Traduction des lignes noires de l'encadré p 43 In the init function, we define the PWM pins and the frequency for each. The frequency is set to 1000 pulses per second. We define the duty cycle when we call the speed function.

Dans la fonction init, nous définissons les broches PWM et la fréquence de chacune d'entre elles. La fréquence est fixée à 1000 impulsions par seconde. Nous définissons le rapport cyclique lorsque nous appelons la fonction speed.

Traduction des lignes noires de l'encadré p 44 Finally, we have the brake function which simply sets both motors to a 0 speed. Enfin, nous avons la fonction de freinage qui met simplement la vitesse des deux moteurs à 0.

Now the demo code. This module is named “drive_motor.py”. Voici maintenant le code de démonstration. Ce module s'appelle “drive_motor.py”.

Here we define the GPIO pins for each motor. Ici, nous définissons les broches de GPIO pour chaque moteur.

issue195/micro-ci_micro-la.txt · Dernière modification : 2023/08/03 11:55 de auntiee