L293D Moteur CC

Commander un moteur à courant continu

L293D01

DataSheet LD293D
DataSheet SN754410

Câbler le moteur

L293D-RPi-Moteur_bb
(La tension de la pile du moteur est à adapter en fonction de l’alimentation du moteur)

#!/usr/bin/python
# -*-coding:UTF-8 -*
#
# Controle d'un moteur CC via le L293D

#-- classes python à mettre ici
import RPi.GPIO as GPIO
from time import sleep

#-- déclaration des variables et des constantes
Moteur1E = 8 ## enable du premier moteur, pin 8
Moteur1A = 10 # premiere sortie du premier moteur, pin 10
Moteur1B = 36 # deuxieme sortie de premier moteur, pin 36

def setup(): # Fonction d'initialisation
   #Gestion des entrées sorties...
   GPIO.setmode(GPIO.BOARD) # Numérotation des pins de connecteur
   GPIO.setup(Moteur1A,GPIO.OUT) # 3 ports en sortie
   GPIO.setup(Moteur1B,GPIO.OUT)
   GPIO.setup(Moteur1E,GPIO.OUT)
   return # Parce que tout est initialisé

def loop(): # Fonction ou boucle principale
   pwm = GPIO.PWM(Moteur1E,50) # pwm à une fréquence de 50 Hz
   pwm.start(100) ## on commemnce avec un rapport cyclique de 100%
   print "Rotation sens direct, vitesse maximale (rapport cyclique 100%)"
   GPIO.output(Moteur1A,GPIO.HIGH)
   GPIO.output(Moteur1B,GPIO.LOW)
   GPIO.output(Moteur1E,GPIO.HIGH)
   sleep(5)
   pwm.ChangeDutyCycle(20) #modification du rapport cyclique à 20%
   print "Rotation sens direct, au ralenti (rapport cyclique 20%)"
   sleep(5)
   print "Rotation sens inverse, au ralenti (rapport cyclique 20%)"
   GPIO.output(Moteur1A,GPIO.LOW)
   GPIO.output(Moteur1B,GPIO.HIGH)
   sleep(5)
   pwm.ChangeDutyCycle(100)
   print"Rotation sens inverse, vitesse maximale (rapport cyclique 100%)"
   sleep(5)
   print "Arret du moteur"
   GPIO.output(Moteur1E,GPIO.LOW)
   pwm.stop() # interruption de la pwm
   GPIO.cleanup()

if __name__ == "__main__": # si la condition est vraie on lance le programme
   setup()
   loop()
   # Fin du programme

ça fonctionne….

Pour un ami « F6FCO » je vais tester le maintien du moteur

On passe le dutycycle à 0 en laissant Enable actif

#!/usr/bin/python
# -*-coding:UTF-8 -*
#
# Controle d'un moteur CC via le L293D

#-- classes python à mettre ici
import RPi.GPIO as GPIO 
from time import sleep

#-- déclaration des variables et des constantes
Moteur1E = 8 ## enable du premier moteur, pin 8 
Moteur1A = 10 # premiere sortie du premier moteur, pin 10 
Moteur1B = 36 # deuxieme sortie de premier moteur, pin 36

def setup(): # Fonction d'initialisation
   #Gestion des entrées sorties...
   GPIO.setmode(GPIO.BOARD) # Numérotation des pins de connecteur
   GPIO.setup(Moteur1A,GPIO.OUT) # 3 ports en sortie
   GPIO.setup(Moteur1B,GPIO.OUT)
   GPIO.setup(Moteur1E,GPIO.OUT)
   return # Parce que tout est initialisé
def loop(): # Fonction ou bocle principale
   pwm = GPIO.PWM(Moteur1E,50) ## pwm de la pin 22 a une frequence de 50 Hz 
   pwm.start(50) ## on commemnce avec un rapport cyclique de 100% 
   GPIO.output(Moteur1A,GPIO.HIGH) 
   GPIO.output(Moteur1B,GPIO.LOW) 
   GPIO.output(Moteur1E,GPIO.HIGH) 
   sleep(10) 
   pwm.ChangeDutyCycle(0) #modification du rapport cyclique à 0% 
   print "PWM à 0 pour tenter un couple de maintien" 
   sleep(10) 
   print "Rotation au ralenti (rapport cyclique 20%)" 
   pwm.ChangeDutyCycle(20)
   sleep(10) 
   print "Arret du moteur" 
   GPIO.output(Moteur1E,GPIO.LOW) 
   pwm.stop() # interruption du pwm 
   GPIO.cleanup()
if __name__ == "__main__": # si la condition est vraie on lance le programme
   setup()
   loop()
   # Fin du programme

Pas de couple de maintien avec cette méthode.

Autre test pour F6FCO

Mode frein du datasheet..

#!/usr/bin/python
# -*-coding:UTF-8 -*
#
# Controle d'un moteur CC via le L293D

#-- classes python à mettre ici
import RPi.GPIO as GPIO 
from time import sleep

#-- déclaration des variables et des constantes
Moteur1E = 8 ## enable du premier moteur, pin 8 
Moteur1A = 10 # premiere sortie du premier moteur, pin 10 
Moteur1B = 36 # deuxieme sortie de premier moteur, pin 36

def setup(): # Fonction d'initialisation
   #Gestion des entrées sorties...
   GPIO.setmode(GPIO.BOARD) # Numérotation des pins de connecteur
   GPIO.setup(Moteur1A,GPIO.OUT) # 3 ports en sortie
   GPIO.setup(Moteur1B,GPIO.OUT)
   GPIO.setup(Moteur1E,GPIO.OUT)
   return # Parce que tout est initialisé
def loop(): # Fonction ou bocle principale
   pwm = GPIO.PWM(Moteur1E,50) ## pwm de la pin 22 a une frequence de 50 Hz 
   pwm.start(50) ## on commemnce avec un rapport cyclique de 100% 
   GPIO.output(Moteur1A,GPIO.HIGH) 
   GPIO.output(Moteur1B,GPIO.LOW) 
   GPIO.output(Moteur1E,GPIO.HIGH) 
   sleep(10) 
   GPIO.output(Moteur1B,GPIO.HIGH) 
   print "Moteur1A = Moteur1B=HIGH" 
   sleep(10) 
   print "Rotation au ralenti (rapport cyclique 20%)" 
   GPIO.output(Moteur1B,GPIO.LOW)
   sleep(10) 
   print "Arret du moteur" 
   GPIO.output(Moteur1E,GPIO.LOW) 
   pwm.stop() # interruption du pwm 
   GPIO.cleanup()
if __name__ == "__main__": # si la condition est vraie on lance le programme
   setup()
   loop()
   # Fin du programme

Pas de couple à l’arrêt, ils parlaient bien de frein dans le datasheet.

Adapté de electroniqueamateur