Connectez différents moteurs à votre SBC

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 à courant continu, contrôlé par un PWM à 50Hz. Comme on peut le voir, certains paramètres doivent être fournis, tels que la tension d'alimentation et le Kv constant, 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, Séries 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 )

2. Servomoteurs

Le servomoteur utilise une seule broche de commande pour contrôler l'angle de rotation d'un moteur.

 Le code de la classe Servo_Motor :

 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, Séries 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 )

3. Moteurs pas à pas

Pour connecter un moteur pas à pas, nous suivrons un schéma similaire à celui de la figure :

Le code de la classe Stepper_Motor est essentiellement une machine à états qui implémente le tableau ci-dessus.

 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) & Assistance 
    
    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" )
Cyber ​​reconnaissance
>>> moteur.set_speed( 100, -1 )
>>> time.sleep( 1 )
>>> moteur.set_speed( 0, 0 )

Si vous avez aimé ce contenu, vous pouvez nous suivre sur Twitter, YouTube, Facebook or LinkedIn pour rester à jour de contenu comme celui-ci.

Want en savoir plus sur le GPS/RTK ?

1. Notre équipe d'ingénieurs vous contactera pour résoudre toutes les questions
2. Nous vous tiendrons au courant des promotions et des nouvelles versions de produits
3. Vous n'entendrez parler de nous que lorsque nous aurons importéant nouvelles, nous ne spammerons pas votre e-mail