In deze tutorial zullen we zien hoe we de meest voorkomende typen motoren kunnen aansluiten op de SBC. Ook laten we u aan de hand van enkele voorbeelden zien hoe u hiermee om kunt gaan. De meest voorkomende typen motoren zijn:
- DC-motoren zijn goedkoop en eenvoudig te besturen, er is slechts één vermogensuitgang nodig en deze kan worden geactiveerd met een PWM-signaal.
- Servomotoren zijn vergelijkbaar met DC-motoren, maar ze bevatten kleine elektronica en een interne potentiometer om een gesloten regellus te vormen, waarmee de rotatiehoek kan worden geregeld. De besturing is ook door PWM, maar in dit geval is het stuursignaal van laag vermogen en is de vermogenstrap geïntegreerd in de servomotor zelf.
- Stappenmotoren hebben verschillende wikkelingen en vereisen een sequentie die moet worden bestuurd, maar in ruil daarvoor bieden ze een grote precisie omdat ze stap voor stap vooruitgaan telkens wanneer de polariteit van hun wikkelingen wordt omgekeerd.
1. DC-motoren
Om een gelijkstroommotor aan te sturen, zullen we deze op de SBC aansluiten zoals aangegeven in het volgende schema:
We zullen enkele parameters van onze motor moeten kennen, met name de relatie tussen aangelegde volt en motorsnelheid of Kv.
De klasse Dc_Motor vertegenwoordigt de gelijkstroommotor, bestuurd door een PWM op 50 Hz. Zoals te zien is, moeten enkele parameters worden opgegeven, zoals de voedingsspanning en de Kv-constante, evenals de te gebruiken pin. In ruil daarvoor krijgen we twee functies: set_voltage en set_speed.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | klasse DC_Motor: FREQ_Hz = 50 def __in het__( zelf, pin, vm, kv): zelf.vm = vm zelf.kv = kv zelf.pijnboom = pijnboom zelf.twijfel = sbc.niet() zelf.twijfel.set_pwm( zelf.pijnboom, zelf.FREQ_Hz, 0 ) zelf.ingestelde_spanning( 0 ) def ingestelde_spanning( zelf, v ): pulse_percent_on = 100 *v/zelf.vm zelf.twijfel.set_pwm( zelf.pijnboom, zelf.FREQ_Hz, 100-pulse_percent_on ) def set_snelheid( zelf, toeren ): zelf.set_voltage (rpm/zelf.kv) |
Een voorbeeld van gebruik zou het volgende zijn:
>>> import tijd
>>> importeer sbc_mtr
>>> motor = sbc_mtr.Dc_Motor ("DOUT3", vm=12, kv=0.5 )
>>> print( "Spanningscontrole")
Spanningsregeling
>>> motor.set_voltage( 6 )
>>> tijd.slaap( 1 )
>>> motor.set_voltage( 0 )
>>> print( "Snelheidsregeling")
Snelheidscontrole
>>> motor.set_speed( 100)
>>> tijd.slaap( 1 )
>>> motor.set_speed( 0)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | klasse Servomotor: FREQ_Hz = 50 DUTY_MIN_ms = 0.5 DUTY_MAX_ms = 2.5 def __in het__( zelf, pinnen): zelf.pijnboom = pijnboom zelf.twijfel = sbc.niet() zelf.twijfel.set_pwm( zelf.pijnboom, zelf.FREQ_Hz, 0 ) def set_hoek( zelf, angle_deg ): duty_ms = zelf.DUTY_MIN_ms + (zelf.DUTY_MAX_ms-zelf.DUTY_MIN_ms)*hoek_deg/ 180 pulse_percent_aan = zelf.FREQ_Hz*duty_ms/ 10 zelf.twijfel.set_pwm( zelf.pijnboom, zelf.FREQ_Hz, 100-pulse_percent_on ) |
En een voorbeeld van gebruik:
>>> import tijd
>>> importeer sbc_mtr
>>> motor = sbc_mtr.Servo_Motor ("DOUT3")
>>> print( "Stel de hoek in op 90 graden")
Hoek instellen op 90 graden
>>> motor.set_hoek( 90 )
>>> tijd.slaap( 1 )
>>> print( "Stel de hoek in op 0 graden")
Hoek instellen op 0 graden
>>> motor.set_hoek( 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 | klasse Stappenmotor: def __in het__( zelf, pinnen): zelf.pijnboom = pijnboom zelf.twijfel = sbc.niet() zelf.staat = 0 zelf.stappen = 0 zelf.dir = 1 zelf.timer = machine.Tijdopnemer( -1 ) def stap( zelf, richting ): if( zelf.staat == 0 ): zelf.twijfel.schrijven( zelf.pinnen0], 1 ) zelf.twijfel.schrijven( zelf.pinnen1], 1 ) zelf.twijfel.schrijven( zelf.pinnen2], 0 ) zelf.twijfel.schrijven( zelf.pinnen3], 0 ) elif( zelf.staat == 1 ): zelf.twijfel.schrijven( zelf.pinnen0], 0 ) zelf.twijfel.schrijven( zelf.pinnen1], 1 ) zelf.twijfel.schrijven( zelf.pinnen2], 1 ) zelf.twijfel.schrijven( zelf.pinnen3], 0 ) elif( zelf.staat == 2 ): zelf.twijfel.schrijven( zelf.pinnen0], 0 ) zelf.twijfel.schrijven( zelf.pinnen1], 0 ) zelf.twijfel.schrijven( zelf.pinnen2], 1 ) zelf.twijfel.schrijven( zelf.pinnen3], 1 ) elif( zelf.staat == 3 ): zelf.twijfel.schrijven( zelf.pinnen0], 1 ) zelf.twijfel.schrijven( zelf.pinnen1], 0 ) zelf.twijfel.schrijven( zelf.pinnen2], 0 ) zelf.twijfel.schrijven( zelf.pinnen3], 1 ) zelf.stappen += richting zelf.staat = (zelf.staat + richting) & 0x03 def set_snelheid( zelf, stappen_s, richting): if(steps_s en richting): zelf.timer.init( punt)=int(1000 /stappen_s), modus=machine.Uren.PERIODIEK, terugbellen=lambda tmr: zelf.stap (richting)) anders: zelf.timer.deinit() |
Tot slot nog een gebruiksvoorbeeld:
>>> import tijd
>>> importeer sbc_mtr
>>> motor = sbc_mtr.Stepper_Motor( ["DOUT1", "DOUT2", "DOUT3", "DOUT4"] )
>>> print( "Stap voor stap")
Stap voor stap
>>> voor i binnen bereik ( 100 ):
... motor.stap( 1 )
... tijd.slaap_ms( 10 )
>>> afdrukken( "Continu")
Doorlopend
>>> motor.set_speed( 100, -1 )
>>> tijd.slaap( 1 )
>>> motor.set_speed (0, 0)