Päivitys (13 / 02 / 2026): Meillä on runsaasti varastossa kaikkia tuotteitamme, löydät meidät myös täältä ja    Lue lisää

Liitä eri moottorit SBC:hen

Tässä opetusohjelmassa näemme, kuinka yleisimmät moottorityypit liitetään SBC. Näytämme sinulle myös, miten niitä käsitellään muutamilla esimerkeillä. Yleisimmät moottorityypit ovat:

  • Tasavirtamoottorit ovat halpoja ja helppoja ohjata, tarvitaan vain yksi teholähtö ja se voidaan aktivoida PWM-signaalilla.

  • Servomoottorit ovat samanlaisia ​​kuin tasavirtamoottorit, mutta niissä on pieni elektroniikka ja sisäinen potentiometri, jotka muodostavat suljetun säätöpiirin, mikä mahdollistaa pyörimiskulman säätelyn. Ohjaus on myös PWM:llä, mutta tässä tapauksessa ohjaussignaali on pienitehoinen ja tehoaste on integroitu itse servomoottoriin.

  • Askelmoottoreissa on useita käämejä ja ne vaativat sekvenssin ohjaamista, mutta vastineeksi ne tarjoavat suuren tarkkuuden, koska ne etenevät askel askeleelta aina, kun niiden käämien napaisuus käännetään.

1. DC-moottorit

Tasavirtamoottorin ohjaamiseksi yhdistämme sen SBC:hen seuraavan kaavion mukaisesti:

Meidän on tiedettävä joitain moottorimme parametreja, erityisesti käytettyjen volttien ja moottorin nopeuden tai Kv välinen suhde.

Dc_Motor-luokka edustaa DC-moottoria, jota ohjaa PWM 50 Hz:llä. Kuten voidaan nähdä, on annettava joitain parametreja, kuten syöttöjännite ja Kv-vakio sekä käytettävä nasta. Vastineeksi saamme kaksi funktiota: set_voltage ja set_speed.

 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
luokka Dc_Motor: FREQ_Hz = 50
    def __init__( itse, pin, vm, kv ):
        itse.vm = vm
        itse.kv = kv
        itse.mänty = mänty
        itse.dout = SBC.Dout()
        itse.dout.set_pwm( itse.mänty, itse.FREQ_Hz, 0 )
        itse.set_voltage( 0 )
    
    def set_voltage( itse, v ): pulse_percent_on = 100 *v/itse.vm
        itse.dout.set_pwm( itse.mänty, itse.FREQ_Hz, 100-pulse_percent_on )
    
    def set_speed( itse, rpm):
        itse.set_voltage( rpm/itse.kv)

Käyttöesimerkki olisi seuraava:

>>> tuontiaika
>>> tuonti sbc_mtr
>>> moottori = sbc_mtr.Dc_Motor( "DOUT3", vm=12, kv=0.5 )
>>> tulosta( "Jännitesäätö")
Jännitteen ohjaus
>>> motor.set_voltage( 6 )
>>> aika.uni( 1 )
>>> motor.set_voltage( 0 )
>>> tulosta ("Nopeussäätö")
Nopeuden säätö
>>> motor.set_speed( 100 )
>>> aika.uni( 1 )
>>> motor.set_speed( 0 )

2. Servomoottorit

Servomoottori käyttää yhtä ohjaustappia moottorin pyörimiskulman säätämiseen.

 Servo_Motor-luokan koodi:

 1 2 3 4 5 6 7 8 9 10 11 12 13 14
luokka Servo moottori: FREQ_Hz = 50
    DUTY_MIN_ms = 0.5
    DUTY_MAX_ms = 2.5
    
    def __init__( itse, pin):
        itse.mänty = mänty
        itse.dout = SBC.Dout()
        itse.dout.set_pwm( itse.mänty, itse.FREQ_Hz, 0 )
        
    def set_angle( itse, kulman_aste ): duty_ms = itse.DUTY_MIN_ms + (itse.DUTY_MAX_ms-itse.DUTY_MIN_ms)*kulma_aste/ 180
        pulse_percent_on = itse.FREQ_Hz*duty_ms/ 10
        itse.dout.set_pwm( itse.mänty, itse.FREQ_Hz, 100-pulse_percent_on )

Ja yksi esimerkki käytöstä:

>>> tuontiaika
>>> tuonti sbc_mtr
>>> moottori = sbc_mtr.Servo_Motor( "DOUT3" )
>>> print("Aseta kulma 90 asteeseen")
Aseta kulma 90 asteeseen
>>> motor.set_angle( 90 )
>>> aika.uni( 1 )
>>> print("Aseta kulma 0 asteeseen")
Aseta kulma 0 asteeseen
>>> motor.set_angle( 0 )

3. Askelmoottorit

Askelmoottorin kytkemiseksi noudatamme samanlaista kaaviota kuin kuvassa:

Stepper_Motor-luokkakoodi on pohjimmiltaan tilakone, joka toteuttaa yllä olevan taulukon.

 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
luokka Stepper_Motor:
   
    def __init__( itse, nastat ):
        itse.mänty = mänty
        itse.dout = SBC.Dout()
        itse.olivat = 0
        itse.vaiheet = 0
        itse.dir = 1
        itse.ajastin = kone.Ajastin( -1 )
    
    def vaihe( itse, suunta):
        if( itse.olivat == 0 ):
            itse.dout.kirjoittaa( itse.nastat[0], 1 )
            itse.dout.kirjoittaa( itse.nastat[1], 1 )
            itse.dout.kirjoittaa( itse.nastat[2], 0 )
            itse.dout.kirjoittaa( itse.nastat[3], 0 )
        elif( itse.olivat == 1 ):
            itse.dout.kirjoittaa( itse.nastat[0], 0 )
            itse.dout.kirjoittaa( itse.nastat[1], 1 )
            itse.dout.kirjoittaa( itse.nastat[2], 1 )
            itse.dout.kirjoittaa( itse.nastat[3], 0 )
        elif( itse.olivat == 2 ):
            itse.dout.kirjoittaa( itse.nastat[0], 0 )
            itse.dout.kirjoittaa( itse.nastat[1], 0 )
            itse.dout.kirjoittaa( itse.nastat[2], 1 )
            itse.dout.kirjoittaa( itse.nastat[3], 1 )
        elif( itse.olivat == 3 ):
            itse.dout.kirjoittaa( itse.nastat[0], 1 )
            itse.dout.kirjoittaa( itse.nastat[1], 0 )
            itse.dout.kirjoittaa( itse.nastat[2], 0 )
            itse.dout.kirjoittaa( itse.nastat[3], 1 )
        itse.vaiheet += suunta
        itse.olivat = (itse.olivat + suunta) & 0x03
    
    def set_speed( itse, steps_s, direction ):
        if(vaiheet_s ja suunta):
            itse.ajastin.init( piste=int(1000 /step_s), tila=kone.Ajastin.PERIODIC, takaisinsoitto=lambda tmr: itse.askel (suunta) )
        muu:
            itse.ajastin.deinit()

Lopuksi esimerkki käytöstä:

>>> tuontiaika
>>> tuonti sbc_mtr
>>> moottori = sbc_mtr.Stepper_Motor( ["DOUT1", "DOUT2", "DOUT3", "DOUT4"] )
>>> tulosta ("Askel askeleelta")
Askel askeleelta
>>> i alueella (100):
... moottori.vaihe ( 1 )
... time.sleep_ms( 10 )
>>> tulosta ("Jatkuva")
Jatkuva
>>> motor.set_speed( 100, -1 )
>>> aika.uni( 1 )
>>> motor.set_speed( 0, 0 )

Jos pidit tästä sisällöstä, voit seurata meitä Twitter, YouTube, Facebook or LinkedIn pysyäksesi ajan tasalla tällaisesta sisällöstä.

Onko sinulla kysyttävää tai pyyntöjä?
Ota meihin yhteyttä! Vastaamme <24 tuntia!

ikoni
Ota yhteyttä ArduSimple
lähellä
ArduSimple GNSS RTK -arviointitaulut on tehty helpoksi

Haluatko oppia lisää GPS:stä ja RTK:sta?

Jos olet juuri nyt kiireinen, insinöörimme voivat lähettää sinulle kolme lyhyttä sähköpostia, joissa kerrotaan kaikki tarvittavat tiedot projektisi aloittamiseksi.