Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

[ATmega1280][Bascom] - PWM i przerwania INT

M.R.O. 04 Lut 2013 02:24 1674 8
  • #1 04 Lut 2013 02:24
    M.R.O.
    Poziom 9  

    Witam

    Posiadam silnik z dołączonym enkoderem i tarczą (z drukarki), steruję prędkością obrotową za pomocą PWM, natomiast przerwanie INT wykorzystuje do zliczania obrotów silnika. Problem polega na tym że zliczanie obrotów silnika bez uruchomionego PWM działa poprawnie, gdy go włączę szaleje (nawet gdy obracam tarczkę palcem). Sygnały od enkodera są poprawne (sprawdzałem oscyloskopem), czy jest możliwość że sprzętowo nie da się tego obsłużyć ?

    Pod spodem prosty program, jak nacisnę guzik wrzuca mi na LCD wartość zmiennej D. Niestety nie działa poprawnie, wystarczy wyłączyć PWM i poprawnie wyświetla

    Kod: basic4gl
    Zaloguj się, aby zobaczyć kod


    Pozdrawiam
    M.R.O.

    0 8
  • #2 04 Lut 2013 17:14
    janoo0
    Poziom 10  

    Miałem podobny problem. Jeśli sterujesz silnikiem przez tranzystor z nogi mikrokontrolera to najprawdopodobniej zakłócenia generowane przez tranzystor wywołują niekontrolowane przerwania INT. Polecam temat:
    https://www.elektroda.pl/rtvforum/viewtopic.php?t=2487918&highlight=
    4 post: "Przez pojemność bramka-źródło przedostają się szpilki do procesora powodując jego zakłócanie".
    Zamówiłem układ TLP250, w tym tygodniu dam odpowiedź jak się sprawdził.

    0
  • #3 04 Lut 2013 17:22
    BlueDraco
    Specjalista - Mikrokontrolery

    1. Włączasz przerwanie przed skonfigurowaniem procedury obsługi przerwania.

    2. Całkowicie niepotrzebnie wyłączasz i włączasz przerwanie w obsłudze przerwania.

    3. Nie zauważyłem, żebyś włączył podciąganie linii, po której jest zgłaszana przerwanie. Czy masz tam zewnętrzny rezystor podciągający? Jeśli nie - to to jest źródło problemu.

    0
  • #4 04 Lut 2013 21:59
    M.R.O.
    Poziom 9  

    BlueDraco nie w tym rzecz. Janoo0 ja steruje silnikiem za pomocą L298 i problem wydaje mi się rozwiązany (nie testowałem jeszcze wszystkich silników). Sprawa była taka że mostek może przyjąć sygnał max 50KHz, przy prescale = 1 częstotliwość PWM równa się częstotliwości krwarcu czyli 16MHz (trochę za dużo :)). Po zmianie prescalera na 1024 silnik zaczął działać poprawnie. Co dziwne mam drugi taki sam mostek i silnik przy prescale = 1 tylko czasami gubi krok.

    PS. Janoo0 ciekawi mnie czy u Ciebie zmiana prescalera pomoże, daj znać :)

    0
  • Pomocny post
    #5 05 Lut 2013 03:40
    emarcus
    Poziom 35  

    M.R.O. napisał:
    ............... przy prescale = 1 częstotliwość PWM równa się częstotliwości krwarcu czyli 16MHz (trochę za dużo :)). ..........


    Co takiego?
    Timer5 skonfigurowany u ciebie do pracy w trybie1 generuje falę o częstotliwości 31 kHz (dokładniej 31250Hz), zgodnie z wzorem :

    [ATmega1280][Bascom] - PWM i przerwania INT

    gdzie TOP = "fixed value 0x00FF", czyli 256

    e marcus

    0
  • Pomocny post
    #6 05 Lut 2013 18:11
    janoo0
    Poziom 10  

    emarcus ma rację
    dla rozdzielczości PWM 8 bit częstotliwość PWM wynosi= częstotliwość oscylatora/preskaler/510
    Jeśli sterujesz za pomocą L298 to faktycznie raczej nie wina zakłóceń.
    U mnie na prescale większym od 64 zawór wchodzi w częstotliwość słyszalną i słychać piski, ale sprawdzę z czystej ciekawości :)

    0
  • #7 06 Lut 2013 00:05
    M.R.O.
    Poziom 9  

    Tak racja, mój błąd. W każdym razie działa tylko teraz nie wiem dlaczego, przy prescalerze = 1 mostek nie reaguje, przy 1024 wszystko działa.

    0
  • #8 06 Lut 2013 04:39
    emarcus
    Poziom 35  

    M.R.O. napisał:
    W każdym razie działa tylko teraz nie wiem dlaczego, przy prescalerze = 1 mostek nie reaguje, przy 1024 wszystko działa.


    To nie jest wina mostka(!).
    Popatrz na poniższą tabelę częstotliwosci PWM w funkcji prescalera:

    [ATmega1280][Bascom] - PWM i przerwania INT

    Nie każdy elektryczny motor DC radzi sobie dobrze z wysokimi częstotliwościami PWM. Poziom strat w funkcji (f) może byc zbyt wysoki aby obrócic wirnik.
    Nie każdy ma te same wartości R,L. (reszte doczytaj odnośnie stałej czasowej t=L/R).
    Niektóre motory mogą doskonale i cicho pracować przy wyższych, powyżej akustycznych częstotliwości (np. 20kHz), inne te 'lichsze' lepiej sprawują sie przy częstotliwościach PWM w zakresie kilkudziesięciu Hz.
    Przy zasilaniu ciągłym ten problem nie wystąpi, natomiast przy PWM jest to zasadniczy szczegół wymagający uwagi w dobraniu odpowiedniej częstotliwości i wypełnienia aby uzyskać maxymalny moment obrotowy przy założonych parametrach.

    e marcus

    0
  • #9 06 Lut 2013 23:01
    M.R.O.
    Poziom 9  

    Dziękuję za wyjaśnienie problemu!. Temat zamykam

    0