Skocz do zawartości

Raspberry i kontroler Motor Hat firmy MSX Elektronika


Pomocna odpowiedź

Witam,

Na podstawie tego artykułu usiłuję kontrolować pracę czterech silników. Nie wiem czemu, ale mam problem z silnikiem podpiętym pod A1 A2. Ma ktoś z Was doświadczenie z tym kontrolerem? Ten A1 A2 kręci naprzód, ale nie mogę odwrócić kierunku.

To mój pierwszy raz z elektroniką i Pythonem, zatem proszę o wyrozumiałość. Niestety nie potrafię się połąpać w schemacie tego kontrolera 🙁

from Adafruit_PWM_Servo_Driver import PWM

pwm = PWM(0x60)
pwm.setPWMFreq(1024)

# Tyl/Lewe - problematyczne :-(
# Obroty
pwm.setPWM(11, 0, 1300)
# Do tylu
pwm.setPWM(12, 0, 0)
# Naprzod
pwm.setPWM(13, 4096, 0)


# Sprawdzone - OK!

# Tyl/Prawe
# Obroty
pwm.setPWM(2, 0, 2000)
# Do tylu
pwm.setPWM(3, 0, 0)
# Naprzod
pwm.setPWM(4, 4096, 0)

# Przod/Prawe
# Obroty 
pwm.setPWM(7, 0, 2000)
# Do tylu
pwm.setPWM(6, 0, 0)
# Naprzod
pwm.setPWM(5, 4096, 0)

# Przod/Lewe
# Obroty
pwm.setPWM(8, 0, 2000)
# Do tylu
pwm.setPWM(9, 0, 0)
# Naprzod
pwm.setPWM(10, 4096, 0)

Chcąc uzyskać obroty do tyłu zmieniam:

# Przod/Lewe
# Obroty
pwm.setPWM(8, 0, 2000)
# Do tylu
pwm.setPWM(9, 4096, 0)
# Naprzod
pwm.setPWM(10, 0, 0)

Pozdrawiam,
Maciej

Link to post
Share on other sites

Zacznij od sprawdzenia podłączeń. Wtyczka ma pewną zmyłkę - między A2, a B3 oraz C2 i D2 jest wyprowadzona masa. Podłączenie silnika do niej nie popsuje modułu, ale może dawać podobny efekt.

Jak nie pomoże to sprawdzimy program.

[ Dodano: 18-01-2016, 10:08 ]

Kod dla koła tył-lewe ma odwróconą kolejność. Powinno być:

# Tyl/Lewe - problematyczne :-( 
# Obroty 
pwm.setPWM(13, 0, 1300) 
# Do tylu 
pwm.setPWM(12, 0, 0) 
# Naprzod 
pwm.setPWM(11, 4096, 0) 
  • Lubię! 1
Link to post
Share on other sites

Dziękuję za wskazówkę! Po południu sprawdzę i dam znać 🙂

M.

[ Dodano: 18-01-2016, 16:43 ]

Wszystko działa jak należy! Twoja wskazówka była kluczowa 🙂

Projekt będę rozwijał pod tym adresem. W grę wchodzi sterowanie za pomocą aplikacji na Androida i kontrolera do gier.

Trochę zmieniłem Twój kod:

import sys
from Adafruit_PWM_Servo_Driver import PWM

# <do osobnego pliku!>
class Channel:
   def __init__(self, pwm, in1, in2):
       self.pwm = pwm
       self.in1 = in1
       self.in2 = in2
# </do osobnego pliku!>

pwm = PWM(0x60)
pwm.setPWMFreq(1024)
speed = 0
a = Channel(2, 4, 3)
b = Channel(7, 5, 6)
c = Channel(8, 10, 9)
d = Channel(13, 11, 12)

def set_speed(channel):

   #sys.stdout.write(str(channel.pwm))
   #sys.stdout.write(str(channel.in1))
   #sys.stdout.write(str(channel.in2))

   if speed > 0:
       on1, on2 = 4096, 0
   elif speed < 0:
       on1, on2 = 0, 4096
   else:
       on1, on2 = 0, 0
   pwm.setPWM(channel.pwm, 0, abs(speed))
   pwm.setPWM(channel.in1, on1, 0)
   pwm.setPWM(channel.in2, on2, 0)

set_speed(a)
set_speed(b)
set_speed(c)
set_speed(d)

i kolejna koncepcja - więcej na GitHub-ie niebawem...

import sys
from Adafruit_PWM_Servo_Driver import PWM

# <do osobnego pliku!>

class Channel:
   def __init__(self, pwm, in1, in2):
       self.pwm = pwm
       self.in1 = in1
       self.in2 = in2

class Motor:
   def __init__(self, channel, speed):
       self.channel = channel
       self.speed = speed

# </do osobnego pliku!>

pwm = PWM(0x60)
pwm.setPWMFreq(1024)
speed = 0
a = Motor(Channel(2, 4, 3), speed)
b = Motor(Channel(7, 5, 6), speed)
c = Motor(Channel(8, 10, 9), speed)
d = Motor(Channel(13, 11, 12), speed)

def set_speed(motor):

   if speed > 0:
       on1, on2 = 4096, 0
   elif speed < 0:
       on1, on2 = 0, 4096
   else:
       on1, on2 = 0, 0

   pwm.setPWM(motor.channel.pwm, 0, abs(motor.speed))
   pwm.setPWM(motor.channel.in1, on1, 0)
   pwm.setPWM(motor.channel.in2, on2, 0)

set_speed(a)
set_speed(b)
set_speed(c)
set_speed(d)

Pozdrawiam,
Maciej

Link to post
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.