V tomto tutoriálu uvidíme, jak připojit nejběžnější typy motorů k SBC. Na několika příkladech vám také ukážeme, jak s nimi zacházet. Nejběžnější typy motorů jsou:
- Stejnosměrné motory jsou levné a snadno ovladatelné, je potřeba pouze jeden výkonový výstup a ten lze aktivovat signálem PWM.
- Servomotory jsou podobné stejnosměrným motorům, ale obsahují malou elektroniku a vnitřní potenciometr pro vytvoření uzavřené regulační smyčky, což umožňuje řídit úhel otáčení. Řízení je také PWM, ale v tomto případě má řídicí signál malý výkon a výkonový stupeň je integrován v samotném servomotoru.
- Krokové motory mají několik vinutí a vyžadují ovládání sekvence, ale na oplátku poskytují velkou přesnost, protože postupují krok za krokem pokaždé, když je polarita jejich vinutí obrácena.
1. Stejnosměrné motory
Pro ovládání stejnosměrného motoru jej připojíme k SBC, jak je znázorněno na následujícím schématu:
Budeme potřebovat znát některé parametry našeho motoru, konkrétně vztah mezi použitými volty a otáčkami motoru neboli Kv.
Třída Dc_Motor představuje stejnosměrný motor řízený PWM při 50 Hz. Jak je vidět, musí být poskytnuty některé parametry, jako je napájecí napětí a Kv konstanta, stejně jako pin, který se má použít. Na oplátku dostaneme dvě funkce: set_voltage a set_speed.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | třída DC_Motor: FREQ_Hz = 50 def __init__( vlastní, pin, vm, kv ): vlastní.vm = vm vlastní.kv = kv vlastní.pin = pin vlastní.dout = Sbc.Dout() vlastní.dout.set_pwm( vlastní.kolík, vlastní.FREQ_Hz, 0 ) vlastní.set_voltage( 0 ) def set_voltage( vlastní, v ): pulse_procent_on = 100 *v/vlastní.vm vlastní.dout.set_pwm( vlastní.kolík, vlastní.FREQ_Hz, 100-pulse_percent_on ) def set_speed( vlastní, otáčky za minutu): vlastní.set_voltage( ot./min/vlastní.kv) |
Příklad použití by byl následující:
>>> čas importu
>>> import sbc_mtr
>>> motor = sbc_mtr.Dc_Motor( "DOUT3", vm=12, kv=0.5 )
>>> tisk ( "Napěťová regulace" )
Řízení napětí
>>> motor.set_voltage( 6 )
>>> time.sleep( 1 )
>>> motor.set_voltage( 0 )
>>> tisk ( "Ovládání rychlosti" )
Kontrola rychlosti
>>> motor.set_speed( 100)
>>> time.sleep( 1 )
>>> motor.set_speed( 0)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | třída Servomotor: FREQ_Hz = 50 DUTY_MIN_ms = 0.5 DUTY_MAX_ms = 2.5 def __init__( vlastní, špendlík): vlastní.pin = pin vlastní.dout = Sbc.Dout() vlastní.dout.set_pwm( vlastní.kolík, vlastní.FREQ_Hz, 0 ) def nastavit_úhel( vlastní, úhel_deg ): duty_ms = vlastní.DUTY_MIN_ms + (vlastní.DUTY_MAX_ms-vlastní.DUTY_MIN_ms)*úhel_deg/ 180 pulse_procent_on = vlastní.FREQ_Hz*clo_ms/ 10 vlastní.dout.set_pwm( vlastní.kolík, vlastní.FREQ_Hz, 100-pulse_percent_on ) |
A jeden příklad použití:
>>> čas importu
>>> import sbc_mtr
>>> motor = sbc_mtr.Servo_Motor( "DOUT3" )
>>> print( "Nastavit úhel na 90 stupňů" )
Nastavte úhel na 90 stupňů
>>> motor.set_angle( 90 )
>>> time.sleep( 1 )
>>> print( "Nastavit úhel na 0 stupňů" )
Nastavte úhel na 0 stupňů
>>> motor.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 | třída Krokový_motor: def __init__( vlastní, špendlíky): vlastní.kolíky = kolíky vlastní.dout = Sbc.Dout() vlastní.stát = 0 vlastní.kroky = 0 vlastní.dir = 1 vlastní.Časovač = stroj.časovač ( -1 ) def krok( vlastní, směr): if( vlastní.stát == 0 ): vlastní.dout.napsat( vlastní.špendlíky[0], 1 ) vlastní.dout.napsat( vlastní.špendlíky[1], 1 ) vlastní.dout.napsat( vlastní.špendlíky[2], 0 ) vlastní.dout.napsat( vlastní.špendlíky[3], 0 ) Elif( vlastní.stát == 1 ): vlastní.dout.napsat( vlastní.špendlíky[0], 0 ) vlastní.dout.napsat( vlastní.špendlíky[1], 1 ) vlastní.dout.napsat( vlastní.špendlíky[2], 1 ) vlastní.dout.napsat( vlastní.špendlíky[3], 0 ) Elif( vlastní.stát == 2 ): vlastní.dout.napsat( vlastní.špendlíky[0], 0 ) vlastní.dout.napsat( vlastní.špendlíky[1], 0 ) vlastní.dout.napsat( vlastní.špendlíky[2], 1 ) vlastní.dout.napsat( vlastní.špendlíky[3], 1 ) Elif( vlastní.stát == 3 ): vlastní.dout.napsat( vlastní.špendlíky[0], 1 ) vlastní.dout.napsat( vlastní.špendlíky[1], 0 ) vlastní.dout.napsat( vlastní.špendlíky[2], 0 ) vlastní.dout.napsat( vlastní.špendlíky[3], 1 ) vlastní.kroky += směr vlastní.stát = (vlastní.stát + směr) & 0x03 def set_speed( vlastní, kroky_s, směr ): if( kroky_s a směr): vlastní.Časovač.init( období=int(1000 /kroky_s), režim=stroj.Časovač.PERIODIC (periodický), zpětné volání=lambda tmr: vlastní.krok (směr)) jiný: vlastní.Časovač.deinit() |
Na závěr příklad použití:
>>> čas importu
>>> import sbc_mtr
>>> motor = sbc_mtr.Stepper_Motor( ["DOUT1", "DOUT2", "DOUT3", "DOUT4"] )
>>> tisk ( "Krok za krokem")
Krok za krokem
>>> pro i v rozsahu (100):
... motor.step( 1 )
... time.sleep_ms( 10 )
>>> tisk ( "Nepřetržitě" )
Nepřetržitý
>>> motor.set_speed( 100, -1 )
>>> time.sleep( 1 )
>>> motor.set_speed( 0, 0 )