Dans ce tutoriel, nous verrons comment connecter les types de moteurs les plus courants au SBC. Nous vous montrerons également comment les manipuler avec quelques exemples. Les types de moteurs les plus courants sont :
- Les moteurs à courant continu sont bon marché et faciles à contrôler, une seule sortie de puissance est nécessaire et celle-ci peut être activée avec un signal PWM.
- Les servomoteurs sont similaires aux moteurs à courant continu, mais ils comprennent une petite électronique et un potentiomètre interne pour former une boucle de contrôle fermée, ceux-ci permettent de contrôler l'angle de rotation. La commande se fait également par PWM, mais dans ce cas le signal de commande est de faible puissance et l'étage de puissance est intégré au servomoteur lui-même.
- Les moteurs pas à pas ont plusieurs bobinages et nécessitent une séquence à contrôler, mais en contrepartie ils apportent une grande précision puisqu'ils avancent pas à pas à chaque inversion de polarité de leurs bobinages.
1. Moteurs à courant continu
Pour piloter un moteur à courant continu, on le raccordera au SBC comme indiqué dans le schéma suivant :


Nous aurons besoin de connaître certains paramètres de notre moteur, en particulier la relation entre les volts appliqués et la vitesse du moteur ou Kv.

La classe Dc_Motor représente le moteur DC, contrôlé par un PWM à 50 Hz. Comme on peut le constater, certains paramètres doivent être fournis, comme la tension d'alimentation et la constante Kv, ainsi que la broche à utiliser. En retour nous obtenons deux fonctions : set_voltage et set_speed.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | classe Docteur moteur: FREQ_Hz = 50 def __init__( soi, broche, vm, kv ): soi.vm = vm soi.kv = kv soi.épingle = épingle soi.doute = SBC.Doute() soi.doute.set_pwm( soi.épingle, soi.FREQ_Hz, 0 ) soi.set_voltage( 0 ) def set_voltage( soi, v ): pulse_percent_on = 100 *v/soi.vm soi.doute.set_pwm( soi.épingle, soi.FREQ_Hz, 100-pulse_percent_on ) def set_speed( soi, tr/min ): soi.set_voltage (rpm/soi.kv) |
Un exemple d'utilisation serait le suivant :
>>> temps d'importation
>>> importer sbc_mtr
>>> moteur = sbc_mtr.Dc_Motor( "DOUT3", vm=12, kv=0.5 )
>>> print( "Contrôle de tension" )
Contrôle de tension
>>> moteur.set_voltage( 6 )
>>> time.sleep( 1 )
>>> moteur.set_voltage( 0 )
>>> print( "Contrôle de vitesse" )
Contrôle de la vitesse
>>> moteur.set_speed( 100 )
>>> time.sleep( 1 )
>>> moteur.set_speed( 0 )
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | classe Servomoteur: FREQ_Hz = 50 DUTY_MIN_ms = 0.5 DUTY_MAX_ms = 2.5 def __init__( soi, broche ): soi.épingle = épingle soi.doute = SBC.Doute() soi.doute.set_pwm( soi.épingle, soi.FREQ_Hz, 0 ) def définir_angle( soi, angle_deg ): duty_ms = soi.DUTY_MIN_ms + (soi.DUTY_MAX_ms-soi.DUTY_MIN_ms)*angle_deg/ 180 pulse_percent_on = soi.FREQ_Hz*devoir_ms/ 10 soi.doute.set_pwm( soi.épingle, soi.FREQ_Hz, 100-pulse_percent_on ) |
Et un exemple d'utilisation :
>>> temps d'importation
>>> importer sbc_mtr
>>> moteur = sbc_mtr.Servo_Motor( "DOUT3" )
>>> print( "Définir l'angle à 90 degrés" )
Réglez l'angle à 90 degrés
>>> moteur.set_angle( 90 )
>>> time.sleep( 1 )
>>> print( "Définir l'angle à 0 degrés" )
Réglez l'angle à 0 degrés
>>> moteur.set_angle( 0 )
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | classe Moteur_pas-à-pas: def __init__( soi, épingles ): soi.broches = broches soi.doute = SBC.Doute() soi.Etat = 0 soi.mesures = 0 soi.dir = 1 soi.minuteur = click.Minuteur( -1 ) def étape( soi, direction ): if( soi.Etat == 0 ): soi.doute.écrivez( soi.épingles[0], 1 ) soi.doute.écrivez( soi.épingles[1], 1 ) soi.doute.écrivez( soi.épingles[2], 0 ) soi.doute.écrivez( soi.épingles[3], 0 ) Elif( soi.Etat == 1 ): soi.doute.écrivez( soi.épingles[0], 0 ) soi.doute.écrivez( soi.épingles[1], 1 ) soi.doute.écrivez( soi.épingles[2], 1 ) soi.doute.écrivez( soi.épingles[3], 0 ) Elif( soi.Etat == 2 ): soi.doute.écrivez( soi.épingles[0], 0 ) soi.doute.écrivez( soi.épingles[1], 0 ) soi.doute.écrivez( soi.épingles[2], 1 ) soi.doute.écrivez( soi.épingles[3], 1 ) Elif( soi.Etat == 3 ): soi.doute.écrivez( soi.épingles[0], 1 ) soi.doute.écrivez( soi.épingles[1], 0 ) soi.doute.écrivez( soi.épingles[2], 0 ) soi.doute.écrivez( soi.épingles[3], 1 ) soi.mesures += direction soi.Etat = (soi.Etat + direction) & MONITORING def set_speed( soi, étapes_s, direction ): if( étapes_s et direction ): soi.minuteur.init( période=int(1000 /étapes_s), mode=click.Minuteur.PÉRIODIQUE, rappel=lambda cmr : soi.pas (direction) ) d'autre: soi.minuteur.init() |
Enfin, un exemple d'utilisation :
>>> temps d'importation
>>> importer sbc_mtr
>>> moteur = sbc_mtr.Stepper_Motor( ["DOUT1", "DOUT2", "DOUT3", "DOUT4"] )
>>> print( "Pas à pas" )
Pas à pas
>>> pour je dans la plage (100) :
... pas.moteur( 1 )
... time.sleep_ms( 10 )
>>> print( "Continu" )
Continu
>>> moteur.set_speed( 100, -1 )
>>> time.sleep( 1 )
>>> moteur.set_speed( 0, 0 )