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.

Atmega16, regulacja PWM z CTC

grzegorzreszel 10 Gru 2011 19:25 2889 12
  • #1 10 Gru 2011 19:25
    grzegorzreszel
    Poziom 8  

    Witam

    Mam problem z wykorzystaniem regulatora PWM wbudowanego w atmega. Zbudowany układ wykonawczy pracuje prawidłowo i wykonany jest następująco:

    Atmega16, regulacja PWM z CTC

    Elementy:
    MOC3042
    BTA136
    2x rezystor 330R

    Układ wykonawczy działa i podanie wysokiego stanu zapala żarówkę, zadanie niskiego ją gasi. Jako obciążenie wpiąłem zwykłą żarówkę.

    Chciałbym wykorzystać sterowanie w trybie CTC i póżniej w oparciu o niego wykonać regulator PI.

    Napisany program do obsługi CTC:

    Kod: C
    Zaloguj się, aby zobaczyć kod


    Prosty program który niestety nie działa tak jak powinien miał za zadanie na postawie wartości pwm (w zakresie od 0-255) zmieniać jasność świecenia żarówki. Program jednak nie działa i zachowuje stan z inicjalizacji (czyli świeci żarówka cały czas). Atmega taktowana na 8Mhz. Proszę o jakąkolwiek rade w czym może być problem.

    0 12
  • #2 10 Gru 2011 19:44
    INTOUCH
    Poziom 30  

    Spróbuj tego
    Program poprawiany na kolanie.


    Kod: c
    Zaloguj się, aby zobaczyć kod

    I po co tak ciągle odświeżać w pętli tą samą wartość {pwm=200;}
    Radzę zapoznać się z trybem fast PWM. Do niektórych celów może być lepszy.

    0
  • #4 10 Gru 2011 20:16
    INTOUCH
    Poziom 30  

    W sumie racja, ale mikrokontrolerem też by nie posterował.

    0
  • #5 10 Gru 2011 20:23
    grzegorzreszel
    Poziom 8  

    Kod: C
    Zaloguj się, aby zobaczyć kod


    Fakt na początku był błąd, coś jest nie tak z Twoja pętlą na końcu dodaną. Nie kompiluje się.[/quote]

    0
  • #6 10 Gru 2011 20:28
    INTOUCH
    Poziom 30  

    Teraz bez tej pętelki to mikrokontroler przeczyta cały Flasz; :D :D :D :D

    0
  • #7 10 Gru 2011 20:32
    grzegorzreszel
    Poziom 8  

    Mimo wszystko nadal nie działa, nie za bardzo rozumiem tego co napisałeś INTOUCH chodzi ci o usuniecie petli while(1)??

    Lepiej zastosować układ MOC bez detekcji zera??

    Czy problemem może być w tym że MOC załącza tak jak wspomniałeś załącza co 50hz a programowo ustawiłem przerwanie co 200Hz??

    0
  • #9 10 Gru 2011 20:38
    INTOUCH
    Poziom 30  

    Przed chwilą poprawiłem.
    Gdzieś nie potrzebnie zostawiłem ";"
    Sprawdź czy się kompiluje.
    Czy działa tak jak autor tematu tego oczekuje, to nie wiem bo nie sprawdzałem.
    Ale zmienia wartość rejestru OCR0.

    0
  • #10 10 Gru 2011 21:11
    grzegorzreszel
    Poziom 8  

    Kuniarz co w takim razie wykrywa przejście przez zero?? Nie mam żadnego układu detekcji.

    0
  • #13 12 Gru 2011 10:07
    SylwekK
    Poziom 28  

    Weź co z serii MOC 302x - to bez detekcji i do regulacji fazowej się nadają, natomiast te z przejściem to jako zwykłe włączniki albo do regulacji grupowej (tyle, że do żarówki się nie nadaje tylko np. do grzałki, albo silnika od pompki czy nadmuchu CO)

    0