Update (04 / 12 / 2024): We hebben voldoende voorraad van al onze producten, vind ons ook in en    Shop nu

Sluit verschillende motoren aan op uw SBC

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)

2. Servomotoren

De servomotor gebruikt een enkele stuurpen om de draaihoek van een motor te regelen.

 De code van de klasse Servo_Motor:

 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 )

3. Stappenmotoren

Om een ​​stappenmotor aan te sluiten, volgen we een schema dat vergelijkbaar is met dat in de afbeelding:

De klassecode Stepper_Motor is in feite een toestandsmachine die de hierboven getoonde tabel implementeert.

 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)

Als je deze inhoud leuk vond, kun je ons volgen Twitter, YouTube, Facebook or LinkedIn om op de hoogte te blijven van dit soort inhoud.

Heeft u vragen of verzoeken?
Neem contact met ons op! Wij antwoorden <24 uur!

icon
Contact ArduSimple
Sluiten

Meer weten over GPS/RTK?

1. Ons technische team zal contact met u opnemen om eventuele vragen op te lossen!
2. We houden u op de hoogte van promoties en nieuwe productreleases
3. U hoort alleen van ons als we belangrijk nieuws hebben, we zullen uw e-mail niet spammen