logo elektroda
logo elektroda
X
logo elektroda
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Sterowanie silnikiem krokowym z Raspberry Pi3B i DRV8825 - sygnał PWM

JohnReese 04 Gru 2019 14:34 609 3
  • #1 18319189
    JohnReese
    Poziom 11  
    Posty: 67
    Pomógł: 6
    Ocena: 1
    Witam!

    Na wstepie chce powiedziec ze to moja pierwsza przygoda z raspberry pi.
    Chce uzyc raspberry to sterowania silnikiem krokowym z pomaca microstep driver (Np. DRV8825). Silnik musi koniecznie przyspieszac i zwalniac w formie trapezu czyli predkosc musi byc zmienna (mozliwosc ustawienia przyspieszenia). Silnik ma tez zawsze wykonywac bardzo dokladne ruchy (czyli musi wykonac dana ilosc krokow). Musze wiec napisac program ktory wytworzy mi cos na ksztalt sygnalu PWM (max 180 000 Hz) o zmiennej czestotliwosci i mozliwosci liczenia flank . Wykorzystuje do tego biblioteke wiringPI (wersje na python) i tu pojawiaja sie pewne problemy. Najpierw probowalem sygnal wytworzyc samemu zapomoca timera wiringPI.
    Np:
    Kod: Python
    Zaloguj się, aby zobaczyć kod


    Jednak czestotliwosc sie nie zgadza i sygnal jest ogolnie dosyc "nerwowy"

    Probowalem tez uzyc funkcji PWM z wiringpi i tutaj sygnal jest juz dobry ale raz ze nie mam mozliwosci liczenia krokow a dwa ze do ustawienia przyspieszenia dalej potrzebuje timera ktory nie dziala dobrze.

    W skrocie problemem jest precyzyjne odmierzanie czasu. Jest w ogole jakas prosta mozliwosc by to zrobic czy mam odrazu podlaczyc pod raspberry microcontroler?
  • #3 18321459
    JohnReese
    Poziom 11  
    Posty: 67
    Pomógł: 6
    Ocena: 1
    Rzeczywiscie, drobna pomylka ale nie o to chodzi.
  • #4 18323038
    szelus
    Poziom 34  
    Posty: 1508
    Pomógł: 315
    Ocena: 53
    Odpowiedź jest, jak zwykle, skomplikowana.
    Jeżeli wystarczy Ci tylko jeden kanał (jeden silnik), to technicznie da się to zrobić na RPi, chociaż nie w Pythonie i nie z wykorzystaniem tej biblioteki.
    I oczywiście nie w taki sposób, jak próbujesz to robić. Programowo - zapomnij. Przeczytaj choćby opis do funkcji delayMicroseconds().
    Musiałbyś wykorzystać możliwości sprzętowego układu PWM, ale biblioteka wiringPi nie daje do nich dostępu (tzn. nie do wszystkich). Żeby dokładnie zliczać impulsy, musiałbyś korzystać ze sprzętowego fifo, a tego nie ma w tej bibliotece.
REKLAMA