Aggiornamento (20 / 06 / 2025): Abbiamo un ampio stock di tutti i nostri prodotti, trovaci anche in e    Acquista ora

Collega diversi motori al tuo SBC

In questo tutorial vedremo come collegare le più comuni tipologie di motori al SBC. Ti mostreremo anche come gestirli con alcuni esempi. I tipi più comuni di motori sono:

  • I motori DC sono economici e facili da controllare, è necessaria una sola uscita di potenza e questa può essere attivata con un segnale PWM.

  • I servomotori sono simili ai motori CC, ma includono una piccola elettronica e un potenziometro interno per formare un circuito di controllo chiuso, che consente di controllare l'angolo di rotazione. Anche il controllo è PWM, ma in questo caso il segnale di controllo è di bassa potenza e lo stadio di potenza è integrato nel servomotore stesso.

  • I motori passo-passo hanno diversi avvolgimenti e richiedono una sequenza da controllare, ma in cambio forniscono una grande precisione poiché avanzano passo dopo passo ogni volta che la polarità dei loro avvolgimenti viene invertita.

1. Motori a corrente continua

Per controllare un motore a corrente continua, lo collegheremo all'SBC come indicato nello schema seguente:

Avremo bisogno di conoscere alcuni parametri del nostro motore, in particolare il rapporto tra i volt applicati e la velocità del motore o Kv.

La classe Dc_Motor rappresenta il motore DC, controllato da un PWM a 50Hz. Come si vede occorre fornire alcuni parametri, come la tensione di alimentazione e la costante Kv, oltre al pin da utilizzare. In cambio otteniamo due funzioni: set_voltage e set_speed.

 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
classe Motore a corrente continua: FREQ_Hz = 50
    def __init__( auto, perno, vm, kv ):
        auto.vm = vm
        auto.kv = kv
        auto.perno = perno
        auto.fuori = sbc.Dout()
        auto.fuori.set_pwm( auto.perno, auto.FREQ_Hz, 0 )
        auto.set_voltaggio( 0 )
    
    def set_voltaggio( auto, v ): impulso_percentuale_on = 100v/auto.vm
        auto.fuori.set_pwm( auto.perno, auto.FREQ_Hz, 100-impulso_percent_on )
    
    def imposta_velocità( auto, giri/min):
        auto.set_voltaggio( rpm/auto.kv)

Un esempio di utilizzo potrebbe essere il seguente:

>>> ora di importazione
>>> importa sbc_mtr
>>> motore = sbc_mtr.Dc_Motor( "DOUT3", vm=12, kv=0.5 )
>>> print( "Controllo di tensione" )
Controllo della tensione
>>> motor.set_voltage( 6 )
>>> tempo.sonno( 1 )
>>> motor.set_voltage( 0 )
>>> print( "Controllo velocità")
Controllo della velocità
>>> motore.set_speed( 100 )
>>> tempo.sonno( 1 )
>>> motore.set_speed( 0 )

2. Servomotori

Il servomotore utilizza un unico perno di controllo per controllare l'angolo di rotazione di un motore.

 Il codice della classe Servo_Motor:

 1 2 3 4 5 6 7 8 9 10 11 12 13 14
classe Servomotore: FREQ_Hz = 50
    DUTY_MIN_ms = 0.5
    DUTY_MAX_ms = 2.5
    
    def __init__( auto, spillo ):
        auto.perno = perno
        auto.fuori = sbc.Dout()
        auto.fuori.set_pwm( auto.perno, auto.FREQ_Hz, 0 )
        
    def set_angolo( auto, angle_deg ): duty_ms = auto.DUTY_MIN_ms + (auto.DUTY_MAX_ms-auto.DUTY_MIN_ms)*angolo_gradi/ 180
        pulsazioni_percentuali = auto.FREQ_Hz*dovere_ms/ 10
        auto.fuori.set_pwm( auto.perno, auto.FREQ_Hz, 100-impulso_percent_on )

E un esempio di utilizzo:

>>> ora di importazione
>>> importa sbc_mtr
>>> motore = sbc_mtr.Servo_Motor( "DOUT3" )
>>> print("Imposta l'angolo a 90 gradi" )
Impostare l'angolo a 90 gradi
>>> angolo_set_motore( 90 )
>>> tempo.sonno( 1 )
>>> print("Imposta l'angolo a 0 gradi" )
Impostare l'angolo a 0 gradi
>>> angolo_set_motore( 0 )

3. Motori passo-passo

Per collegare un motore passo-passo seguiremo uno schema simile a quello in figura:

Il codice della classe Stepper_Motor è fondamentalmente una macchina a stati che implementa la tabella mostrata sopra.

 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 Stepper_Motore:
   
    def __init__( auto, spille ):
        auto.pino = pino
        auto.fuori = sbc.Dout()
        auto.stato = 0
        auto.passi = 0
        auto.dir = 1
        auto.timer = macchina.Timer( -1 )
    
    def passo( auto, direzione ):
        if( auto.stato == 0 ):
            auto.fuori.scrivere( auto.spille[0], 1 )
            auto.fuori.scrivere( auto.spille[1], 1 )
            auto.fuori.scrivere( auto.spille[2], 0 )
            auto.fuori.scrivere( auto.spille[3], 0 )
        Elif( auto.stato == 1 ):
            auto.fuori.scrivere( auto.spille[0], 0 )
            auto.fuori.scrivere( auto.spille[1], 1 )
            auto.fuori.scrivere( auto.spille[2], 1 )
            auto.fuori.scrivere( auto.spille[3], 0 )
        Elif( auto.stato == 2 ):
            auto.fuori.scrivere( auto.spille[0], 0 )
            auto.fuori.scrivere( auto.spille[1], 0 )
            auto.fuori.scrivere( auto.spille[2], 1 )
            auto.fuori.scrivere( auto.spille[3], 1 )
        Elif( auto.stato == 3 ):
            auto.fuori.scrivere( auto.spille[0], 1 )
            auto.fuori.scrivere( auto.spille[1], 0 )
            auto.fuori.scrivere( auto.spille[2], 0 )
            auto.fuori.scrivere( auto.spille[3], 1 )
        auto.passi += direzione
        auto.stato = (auto.stato + direzione) & 0x03
    
    def imposta_velocità( auto, passi_s, direzione ):
        if( passi_s e direzione):
            auto.timer.init( punto=int(1000 /passi_s), modalità=macchina.Timer.PERIODICO, richiamata=lambda signor: auto.passo(direzione))
        altro:
            auto.timer.deinit()

Infine un esempio di utilizzo:

>>> ora di importazione
>>> importa sbc_mtr
>>> motore = sbc_mtr.Stepper_Motor( ["DOUT1", "DOUT2", "DOUT3", "DOUT4"] )
>>> print( "Passo dopo passo" )
Passo dopo passo
>>> per i nell'intervallo( 100 ):
... passo.motore( 1 )
... tempo.sleep_ms( 10 )
>>> print( "Continuo")
Educazione
>>> motore.set_speed( 100, -1 )
>>> tempo.sonno( 1 )
>>> motore.set_speed( 0, 0 )

Se ti è piaciuto questo contenuto, puoi seguirci su Twitter, YouTube, Facebook or LinkedIn per rimanere aggiornato su contenuti come questo.

Hai domande o richieste?
Contattaci! Risponderemo <24 ore!

Icona
Contatti ArduSimple
Chiudi

Vuoi saperne di più su GPS/RTK?

1. Il nostro team di ingegneri ti contatterà per risolvere qualsiasi domanda
2. Ti terremo aggiornato sulle promozioni e sul rilascio di nuovi prodotti
3. Riceverai nostre notizie solo quando avremo notizie importanti, non invieremo spam alla tua email