Skocz do zawartości

Raspberry pi - sterowanie za pomocą 3 GPIO.PWM po 127 powtórzeniu pętli brak PWM


Tadzik

Pomocna odpowiedź

witam,
proszę o pomoc:

za pomocą maliny steruję 2 silnikami krokowymi i serwem, sterowanie zawarte jest w pętli - za każdym powtórzeniem pętli każdy z tych elementów rusza się raz z określoną prędkością (serwo 2 razy tam i z powrotem). Wszystko pięknie działa do czasu, a mianowicie do 127 zapętlenia. Po 127 razie działają wszystkie "stabilne" sterowania za wyjątkiem PWM'ów.

Ewidentnie coś tu jest zamknięte w 8 bitach ale co i jak to wyzerować w pythonie?

Powtarzana operacja "GPIO.cleanup()" zamyka (tak mi się wydaję) jedynie tranzystory przed samymi pinami natomiast same przypisania do pinów zostają takie jakie były.\

Nie wypacam z siebie więcej gdybań bo pewnie odpowiedź (mam taką nadzieję) zawarta będzie w 1 linijce 😉

Link do komentarza
Share on other sites

Schemat jest co prawda w paincie ale widać na nim co i jak - co prawda nie ująłem na nim zasilania zewnętrznych układów - to bez znaczenia.

Kod programu ma nawrzucane trochę "naddatków" typu garbage collector czy zerowanie GPIO za każdym powtórzeniem - to ze względu na moje kombinowanie, nie zmieniałem tego - jest tak jak jest.

import RPi.GPIO as GPIO
import time
import gc


def ustawienia():
   GPIO.setmode(GPIO.BOARD)
   GPIO.setup(11,GPIO.OUT)
   GPIO.setup(13,GPIO.OUT)
   GPIO.setup(12,GPIO.OUT)
   GPIO.setup(16,GPIO.OUT)
   GPIO.setup(7,GPIO.OUT)
   GPIO.setup(18,GPIO.OUT)
   global skn
   global sko
   global serwo
   skn = GPIO.PWM(12,400)
   sko = GPIO.PWM(13,1000)
   serwo = GPIO.PWM(7,46)
   GPIO.output(18,False)


def zerowanie():
   gc.enable()
   reload(PWM)
   GPIO.setup(11,GPIO.ALT0)
   GPIO.setup(13,GPIO.ALT0)
   GPIO.setup(12,GPIO.ALT0)
   GPIO.setup(16,GPIO.ALT0)
   GPIO.setup(7,GPIO.ALT0)
   GPIO.setup(18,GPIO.ALT0)


licznik = 0


def licz():
   global licznik
   licznik = licznik + 1
   print "zrobione %i sztuk" % licznik


for licznik in range(2000):
   try:
       ustawienia()
       GPIO.output(18,True)
       skn.start(50)
       time.sleep(0.4)
       sko.start(40)
       time.sleep(0.5)
       sko.stop()
       time.sleep(0.1)
       serwo.start(7.5)
       serwo.ChangeDutyCycle(7.5)
       time.sleep(0.25)
       serwo.ChangeDutyCycle(10)
       time.sleep(0.115)
       skn.stop()
       time.sleep(0.135)
       serwo.stop()
       GPIO.output(18,False)
       licz()
       time.sleep(1)


   except KeyboardInterrupt:
       pass
       serwo.stop()
       skn.stop()
       sko.stop()
       GPIO.cleanup()
       zerowanie()

Schemat.thumb.jpg.857f977634c41a8fc52d6f67b3f2ff22.jpg

Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • 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.