U ovom vodiču ćemo vidjeti kako spojiti najčešće tipove motora na SBC. Također ćemo vam pokazati kako s njima postupati uz nekoliko primjera. Najčešći tipovi motora su:
- DC motori su jeftini i lako ih je kontrolirati, potreban je samo jedan izlaz snage koji se može aktivirati PWM signalom.
- Servo motori slični su istosmjernim motorima, ali uključuju malu elektroniku i unutarnji potenciometar za formiranje zatvorene kontrolne petlje, što omogućuje kontrolu kuta rotacije. Upravljanje je također putem PWM-a, ali u ovom slučaju upravljački signal je male snage, a stupanj snage je integriran u sam servomotor.
- Koračni motori imaju nekoliko namota i zahtijevaju slijed kojim se upravlja, ali zauzvrat pružaju veliku preciznost jer napreduju korak po korak svaki put kada se polaritet njihovih namota obrne.
1. DC motori
Za upravljanje istosmjernim motorom, spojit ćemo ga na SBC kao što je prikazano na sljedećem dijagramu:
Morat ćemo znati neke parametre našeg motora, posebno odnos između primijenjenih voltaža i brzine motora ili Kv.
Klasa Dc_Motor predstavlja istosmjerni motor kojim upravlja PWM na 50Hz. Kao što se može vidjeti, moraju se osigurati neki parametri, kao što su napon napajanja i Kv konstanta, kao i pin koji će se koristiti. Zauzvrat dobivamo dvije funkcije: set_voltage i set_speed.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | razred Istosmjerni_motor: FREQ_Hz = 50 def __init__( samouprave, pin, vm, kv ): samouprave.vm = vm samouprave.kv = kv samouprave.bor = bor samouprave.dout = sbc.Dout() samouprave.dout.set_pwm( samouprave.igla, samouprave.FREQ_Hz, 0 ) samouprave.set_voltage( 0 ) def postavljen_napon( samouprave, v): postotak_uključenja_pulsa = 100 *v/samouprave.vm samouprave.dout.set_pwm( samouprave.igla, samouprave.FREQ_Hz, 100-postotak_pulsa_uključeno ) def postavljena_brzina( samouprave, o/min): samouprave.postavljen_napon (rpm/samouprave.kv ) |
Primjer upotrebe bio bi sljedeći:
>>> vrijeme uvoza
>>> import sbc_mtr
>>> motor = sbc_mtr.Dc_Motor( "DOUT3", vm=12, kv=0.5 )
>>> print( "Kontrola napona")
Regulacija napona
>>> motor.set_voltage( 6 )
>>> time.sleep( 1 )
>>> motor.set_voltage( 0 )
>>> print( "Kontrola brzine")
Kontrola brzine
>>> 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 | razred Servomotor: FREQ_Hz = 50 DUTY_MIN_ms = 0.5 DUTY_MAX_ms = 2.5 def __init__( samouprave, pribadača ): samouprave.bor = bor samouprave.dout = sbc.Dout() samouprave.dout.set_pwm( samouprave.igla, samouprave.FREQ_Hz, 0 ) def set_kut( samouprave, angle_deg ): duty_ms = samouprave.DUTY_MIN_ms + (samouprave.DUTY_MAX_ms-samouprave.DUTY_MIN_ms)*kut_stupnjeva/ 180 postotak_pulsa_uključeno = samouprave.FREQ_Hz*duty_ms/ 10 samouprave.dout.set_pwm( samouprave.igla, samouprave.FREQ_Hz, 100-postotak_pulsa_uključeno ) |
I jedan primjer korištenja:
>>> vrijeme uvoza
>>> import sbc_mtr
>>> motor = sbc_mtr.Servo_Motor( "DOUT3" )
>>> print( "Postavi kut na 90 stupnjeva" )
Postavite kut na 90 stupnjeva
>>> motor.set_angle( 90 )
>>> time.sleep( 1 )
>>> print( "Postavi kut na 0 stupnjeva" )
Postavite kut na 0 stupnjeva
>>> 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 | razred Koračni_motor: def __init__( samouprave, pribadače ): samouprave.igle = igle samouprave.dout = sbc.Dout() samouprave.su = 0 samouprave.koraci = 0 samouprave.vi = 1 samouprave.vremena = uređaj.Odbrojavanje ( -1 ) def korak( samouprave, smjer ): if( samouprave.su == 0 ): samouprave.dout.pisati( samouprave.igle[0], 1 ) samouprave.dout.pisati( samouprave.igle[1], 1 ) samouprave.dout.pisati( samouprave.igle[2], 0 ) samouprave.dout.pisati( samouprave.igle[3], 0 ) Elif( samouprave.su == 1 ): samouprave.dout.pisati( samouprave.igle[0], 0 ) samouprave.dout.pisati( samouprave.igle[1], 1 ) samouprave.dout.pisati( samouprave.igle[2], 1 ) samouprave.dout.pisati( samouprave.igle[3], 0 ) Elif( samouprave.su == 2 ): samouprave.dout.pisati( samouprave.igle[0], 0 ) samouprave.dout.pisati( samouprave.igle[1], 0 ) samouprave.dout.pisati( samouprave.igle[2], 1 ) samouprave.dout.pisati( samouprave.igle[3], 1 ) Elif( samouprave.su == 3 ): samouprave.dout.pisati( samouprave.igle[0], 1 ) samouprave.dout.pisati( samouprave.igle[1], 0 ) samouprave.dout.pisati( samouprave.igle[2], 0 ) samouprave.dout.pisati( samouprave.igle[3], 1 ) samouprave.koraci += smjer samouprave.su = (samouprave.su + smjer) & 0x03 def postavljena_brzina( samouprave, koraci_s, smjer ): if( koraci_s i smjer): samouprave.vremena.init(točka=int(1000 /koraci_s), način=uređaj.Odbrojavanje.PERIODIČNI, povratni poziv=À tmr: samouprave.korak (smjer) ) drugo: samouprave.vremena.deinit() |
Na kraju, primjer korištenja:
>>> vrijeme uvoza
>>> import sbc_mtr
>>> motor = sbc_mtr.Stepper_Motor( ["DOUT1", "DOUT2", "DOUT3", "DOUT4"] )
>>> print( "Korak po korak")
Korak po korak
>>> za i u rasponu (100):
... motor.step( 1 )
... time.sleep_ms( 10 )
>>> print( "Continuous")
Stalan
>>> motor.set_speed( 100, -1 )
>>> time.sleep( 1 )
>>> motor.set_speed( 0, 0 )