Kategorie

Raspberry Pi Motor Driver Board v1.0 - sterownik

Raspberry Pi Motor Driver Board v1.0 to sterownik silników na bazie układu scalonego podwójnego mostka H Freescale MC33932, który może kontrolować obciążenia indukcyjne o natężeniu do 5,0 A na pojedynczy mostek. Pozwala sterować dwoma silnikami DC za pomocą Raspberry Pi B/B+/A+ i Pi 2 Model B, niezależnie kontrolując ich prędkość i kierunek.

 

Sterownik silników obsługuje bardzo szeroki zakres napięcia wejściowego 6V~28V. Poza tym, znajdujący się na płytce konwerter DC/DC również obsługuje bardzo szeroki zakres napięcia wejściowego, a także zasila Raspberry Pi z 5V przy maksymalnym natężeniu 1000mA. Jeden zasilacz wystarczy zatem zarówno do napędzania silników, jak i zasilania Raspberry Pi.

 

Kup Teraz

Charakterystyka

  • Ochrona przeciwzwarciowa wyjścia (VPWR lub GND)
  • Ograniczenie nadprądowe (regulacja) przez wewnętrzny PWM o stałym czasie wyłączenia
  • Zmniejszenie wartości granicznej prądu zależnego od temperatury
  • Kompatybilny z Raspberry Pi

Specyfikacja techniczna

CechaMinTypoweMaxJednostka
Napięcie robocze6/28VDC
Wyjście DC/DC/5 V / 1000 mA/
Natężenie wyjściowe (dla każdego kanału)/2 (ciągła praca)5 (szczyt)A
Częstotliwość PWM//11kHz
Zakres obciążenia wyjściowego0/100%
Napięcie wejścia logicznego-0.3/7V
Temperatura robocza-40/120°C
Wymiary91 x 56.15 x 32mm

Przegląd sprzętu

  • J1: złącze wejścia.
  • J2: złącze wyjścia sterownika silników.
  • EN,FT: Zworki do sterowania EN i wykrywania błędów. W przypadku zwarcia zworki EN, sygnał EN zostanie zmapowany na pin D4, można sterować wyjściem mostku H lub zresetować błąd przez pin D4. W przypadku zwarcia zworki FT sygnał błędu zostanie zmapowany na pin D3, a błąd można odczytać z eteru pinu D3.
  • IO: zworka do wyboru poziomu napięcia logicznego.
  • Zasilanie: Nakładkę zasila się z J1(złącze wejścia DC). Zakres napięcia wejściowego może być ustawiony do 6Vdc ~ 28Vdc. Konwerter DC/DC może konwertować napięcie wejściowe DC na 5Vdc napięcie wyjściowe w celu zasilania układy logicznego. Konwerter DC/DC może również zasilać płytkę mikrokontrolera (Arduino/Seeeduino) z pinu "5V" przy maksymalnym natężeniu prądu 100mA.
  • Interfejs silnika:Out 1 i Out 2 (Out 3 i Out 4) podłącz Motor A(B) dla silnika DC.

Uwaga

Nie dotykaj układu scalonego mostka H lub płytki PCB podczas pracy. Ich temperatura może wynieść nawet 100 stopni w przypadku pracy z pełnym obciążeniem.

Wykorzystanie

To demo wykorzystuje Raspberry Pi B, aby pokazać, jak sterownik Raspberry Pi Motor Driver Board v1.0 może być wykorzystywany do sterowania silnikiem prądu stałego do przodu i do tyłu.

Montaż sprzętu

  • Raspberry Pi B oraz Raspberry Pi Motor Driver Board v1.0
  • Montaż sprzętu jak wskazano na obrazku

Podłącz do sieci i do zasilania.

Oprogramowanie

#!/usr/bin/python
import RPi.GPIO as GPIO
import time
import signal   

from PiSoftPwm import *

#print 'Go_1...'
#frequency = 1.0 / self.sc_1.GetValue()
#speed = self.sc_2.GetValue()

class Motor():
    def __init__(self):
    # MC33932 pins
        self.PWMA = 25  
        self.PWMB = 22
        self._IN1 = 23  
        self._IN2 = 24 
        self._IN3 = 17
        self._IN4 = 27

    # Initialize PWMA PWMB 
        GPIO.setmode(GPIO.BCM)
        GPIO.setup(self.PWMA, GPIO.OUT)
        GPIO.setup(self.PWMB, GPIO.OUT)
        GPIO.output(self.PWMA, True)
        GPIO.output(self.PWMB, True)

    # Initialize PWM outputs
        self.OUT_1  = PiSoftPwm(0.1, 100, self._IN1, GPIO.BCM)
        self.OUT_2  = PiSoftPwm(0.1, 100, self._IN2, GPIO.BCM)
        self.OUT_3  = PiSoftPwm(0.1, 100, self._IN3, GPIO.BCM)
        self.OUT_4  = PiSoftPwm(0.1, 100, self._IN4, GPIO.BCM)

        # Close pwm output
        self.OUT_1.start(0)
        self.OUT_2.start(0)
        self.OUT_3.start(0)
        self.OUT_4.start(0)

        self.frequency = 0.01
        self.duty = 60

    def Setting(self, frequency, duty):
        self.frequency = frequency
        self.duty = duty

    def Go_1(self):
        self.OUT_1.changeBaseTime(self.frequency)
        self.OUT_2.changeBaseTime(self.frequency)
        self.OUT_1.changeNbSlicesOn(self.duty)
        self.OUT_2.changeNbSlicesOn(0)

    def Back_1(self):
        self.OUT_1.changeBaseTime(self.frequency)
        self.OUT_2.changeBaseTime(self.frequency)
        self.OUT_1.changeNbSlicesOn(0)
        self.OUT_2.changeNbSlicesOn(self.duty)

    def Go_2(self):
        self.OUT_3.changeBaseTime(self.frequency)
        self.OUT_4.changeBaseTime(self.frequency)
        self.OUT_3.changeNbSlicesOn(0)
        self.OUT_4.changeNbSlicesOn(self.duty)

    def Back_2(self):
        self.OUT_3.changeBaseTime(self.frequency)
        self.OUT_4.changeBaseTime(self.frequency)
        self.OUT_3.changeNbSlicesOn(self.duty)
        self.OUT_4.changeNbSlicesOn(0)

    def Stop(self):
        self.OUT_1.changeNbSlicesOn(0)
        self.OUT_2.changeNbSlicesOn(0)
        self.OUT_3.changeNbSlicesOn(0)
        self.OUT_4.changeNbSlicesOn(0)

if __name__=="__main__":
    motor=Motor()
    # Called on process interruption. Set all pins to "Input" default mode.
    def endProcess(signalnum = None, handler = None):
        motor.OUT_1.stop()
        motor.OUT_2.stop()
        motor.OUT_3.stop()
        motor.OUT_4.stop()
        motor.GPIO.cleanup()
        exit(0)

    # Prepare handlers for process exit
    signal.signal(signal.SIGTERM, endProcess)
    signal.signal(signal.SIGINT, endProcess)
    signal.signal(signal.SIGHUP, endProcess)
    signal.signal (signal.SIGQUIT, endProcess)

    motor.Setting(0.01, 60)
    print 'motor start...'
    while True:
        print 'motor A turning forward...'
        motor.Go_1()
        time.sleep(1)
        print 'motor A turning backward...'
        motor.Back_1()
        time.sleep(1)
        print 'motor A stop...'
        motor.Stop()
        time.sleep(1)
        print 'motor B turning forward...'
        motor.Go_2()
        time.sleep(1)
        print 'motor B turning backward...'
        motor.Back_2()
        time.sleep(1)
        print 'motor B stop...'
        motor.Stop()
        time.sleep(1)
  • Włącz ten program. LED1, LED2 na Raspberry Pi Motor Driver Board v1.0 będą zapalać się naprzemiennie; LED3, LED4 także będą zapalać się na zmianę.

Oznacza to, że Out 1 oraz Out 2 (Out 3 oraz Out 4) łączą Motor A(B) do przodu i do tyłu.

  • Zjawisko prezentuje się następująco:

Konsola szeregowa:

Raspberry Pi Motor Driver Board v1.0: zielona dioda LED oraz niebieska dioda LED zapalą się na zmianę.

Linki