W tym samouczku zobaczymy, jak podłączyć najpopularniejsze typy silników do SBC. Na kilku przykładach pokażemy Ci również, jak sobie z nimi radzić. Najczęstsze typy silników to:
- Silniki prądu stałego są tanie i łatwe w sterowaniu, potrzebne jest tylko jedno wyjście zasilania, które można aktywować sygnałem PWM.
- Serwosilniki są podobne do silników prądu stałego, ale zawierają małą elektronikę i wewnętrzny potencjometr tworzący zamkniętą pętlę sterowania, co pozwala kontrolować kąt obrotu. Sterowanie odbywa się również przez PWM, ale w tym przypadku sygnał sterujący ma małą moc, a stopień mocy jest zintegrowany w samym serwomotorze.
- Silniki krokowe mają kilka uzwojeń i wymagają sterowania sekwencją, ale w zamian zapewniają dużą precyzję, ponieważ przesuwają się krok po kroku za każdym razem, gdy polaryzacja ich uzwojeń jest odwrócona.
1. Silniki prądu stałego
Aby sterować silnikiem prądu stałego, podłączymy go do SBC, jak pokazano na poniższym schemacie:


Będziemy musieli znać niektóre parametry naszego silnika, w szczególności związek między przyłożonymi woltami a prędkością silnika lub Kv.

Klasa Dc_Motor reprezentuje silnik prądu stałego, sterowany przez PWM przy 50 Hz. Jak widać, należy podać pewne parametry, takie jak napięcie zasilania i stała Kv, a także pin, który ma być użyty. W zamian otrzymujemy dwie funkcje: set_voltage i set_speed.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | klasa Silnik prądu stałego: FREQ_Hz = 50 def __init__( samego siebie, szpilka, vm, kv ): samego siebie.vm = vm samego siebie.kv = kv samego siebie.sosna = sosna samego siebie.niepewność = Sbc.Dout() samego siebie.niepewność.set_pwm( samego siebie.Szpilka, samego siebie.FREQ_Hz, 0 ) samego siebie.ustaw_napięcie( 0 ) def ustawione_napięcie( samego siebie, v ): puls_procent_włączony = 100 *v/samego siebie.vm samego siebie.niepewność.set_pwm( samego siebie.Szpilka, samego siebie.FREQ_Hz, 100-puls_procent_włączony ) def Ustaw prędkość( samego siebie, obr/min ): samego siebie.ustawione_napięcie (rpm/samego siebie.kv) |
Przykładem użycia może być:
>>> czas importu
>>> importuj sbc_mtr
>>> silnik = sbc_mtr.Dc_Motor( "DOUT3", vm=12, kv=0.5 )
>>> print( "Kontrola napięcia" )
Kontrola napięcia
>>> nap.silnika( 6 )
>>> czas.sen( 1 )
>>> nap.silnika( 0 )
>>> print( "Kontrola prędkości" )
Kontrola prędkości
>>> motor.set_speed( 100 )
>>> czas.sen( 1 )
>>> motor.set_speed( 0 )
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | klasa Siłownik: FREQ_Hz = 50 DUTY_MIN_ms = 0.5 DUTY_MAX_ms = 2.5 def __init__( samego siebie, szpilka ): samego siebie.sosna = sosna samego siebie.niepewność = Sbc.Dout() samego siebie.niepewność.set_pwm( samego siebie.Szpilka, samego siebie.FREQ_Hz, 0 ) def ustawiony_kąt( samego siebie, kąt_stopnia ): obowiązek_ms = samego siebie.DUTY_MIN_ms + (samego siebie.DUTY_MAX_ms-samego siebie.DUTY_MIN_ms)*kąt_stopnia/ 180 puls_procent_włączony = samego siebie.CZĘSTOTLIWOŚĆ_Hz*obowiązek_ms/ 10 samego siebie.niepewność.set_pwm( samego siebie.Szpilka, samego siebie.FREQ_Hz, 100-puls_procent_włączony ) |
I jeden przykład użycia:
>>> czas importu
>>> importuj sbc_mtr
>>> silnik = sbc_mtr.Servo_Motor( "DOUT3" )
>>> print( "Ustaw kąt na 90 stopni" )
Ustaw kąt na 90 stopni
>>> motor.set_angle( 90 )
>>> czas.sen( 1 )
>>> print( "Ustaw kąt na 0 stopni" )
Ustaw kąt na 0 stopni
>>> 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 | klasa Silnik krokowy: def __init__( samego siebie, szpilki ): samego siebie.kołki = kołki samego siebie.niepewność = Sbc.Dout() samego siebie.były = 0 samego siebie.kroki = 0 samego siebie.reż = 1 samego siebie.Timer = maszyna.Regulator czasowy( -1 ) def krok( samego siebie, kierunek ): if( samego siebie.były == 0 ): samego siebie.niepewność.pisać( samego siebie.szpilki0], 1 ) samego siebie.niepewność.pisać( samego siebie.szpilki1], 1 ) samego siebie.niepewność.pisać( samego siebie.szpilki2], 0 ) samego siebie.niepewność.pisać( samego siebie.szpilki3], 0 ) Elif( samego siebie.były == 1 ): samego siebie.niepewność.pisać( samego siebie.szpilki0], 0 ) samego siebie.niepewność.pisać( samego siebie.szpilki1], 1 ) samego siebie.niepewność.pisać( samego siebie.szpilki2], 1 ) samego siebie.niepewność.pisać( samego siebie.szpilki3], 0 ) Elif( samego siebie.były == 2 ): samego siebie.niepewność.pisać( samego siebie.szpilki0], 0 ) samego siebie.niepewność.pisać( samego siebie.szpilki1], 0 ) samego siebie.niepewność.pisać( samego siebie.szpilki2], 1 ) samego siebie.niepewność.pisać( samego siebie.szpilki3], 1 ) Elif( samego siebie.były == 3 ): samego siebie.niepewność.pisać( samego siebie.szpilki0], 1 ) samego siebie.niepewność.pisać( samego siebie.szpilki1], 0 ) samego siebie.niepewność.pisać( samego siebie.szpilki2], 0 ) samego siebie.niepewność.pisać( samego siebie.szpilki3], 1 ) samego siebie.kroki += kierunek samego siebie.były = (samego siebie.były + kierunek) & 0x03 def Ustaw prędkość( samego siebie, kroki_s, kierunek ): if( kroki_s i kierunek ): samego siebie.Timer.początek( okres=int(1000 /kroki_s), tryb=maszyna.Regulator czasowy.OKRESOWE, oddzwonienie=lambda TMR: samego siebie.krok (kierunek) ) więcej: samego siebie.Timer.deinicja() |
Na koniec przykład użycia:
>>> czas importu
>>> importuj sbc_mtr
>>> motor = sbc_mtr.Stepper_Motor( ["WYJ1", "WYJ2", "WYJ3", "WYJ4"] )
>>> print( "Krok po kroku" )
Krok po kroku
>>> dla i w zakresie( 100 ):
...silnik.krok( 1 )
... czas.sleep_ms( 10 )
>>> print( "Ciągły" )
Ciągły
>>> motor.set_speed( 100, -1 )
>>> czas.sen( 1 )
>>> motor.set_speed( 0, 0 )