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

Atmega8 PWM uzależnienie regulacji częstotliwości oraz wypełnienia

mario987 17 Mar 2011 09:31 3655 14
REKLAMA
  • #1 9286645
    mario987
    Poziom 14  
    Witam szanownych forumowiczów.
    Mam mały problem z programem.
    Znalazłem trochę artykułów opisujących jak bawić się wypełnieniem, problem zaczyna się gdy chcę zrobić regulację częstotliwości, oraz jak uzależnić od siebie te dwa wyjścia..
    Nie mogę znaleźć odpowiedzi na ten temat jakiegoś przykładu.


    Opiszę może jak ma działać ten program:
    Na dwóch wyjściach at ma być zależnie regulowana częstotliwość oraz wypełnienie.
    Zależnie to znaczy że jeżeli mam wypełnienie np.25% to częstotliwość tych impulsów na jednym wyjściu odpowiada zadanej częstotliwości czyli np. 150Hz na drugim.
    Impuls wyjściowy regulujący częstotliwość ma powstawać przy zboczu opadającym regulacji wypełnienia
    Regulacja tych dwóch wyjść za pomocą ADC i dwóch potencjometrów.
    zobrazowny wygląd przebiegu

    Proszę o jakąkolwiek pomoc w tym problemie.
    Pozdrawiam
  • REKLAMA
  • #2 9286729
    kamyczek
    Poziom 38  
    Musisz jeszcze podać rozdzielczość PWM bo to ważne w każdym razie stosując jeden timer ,który odliacza 20ms jeśli sygnał ma zakres od 1 do 2 ms czyli 1/20 otrzymasz 1/20 rozdzielczości PWM czyli przy 1024 krokach PWM uzyskasz około 51 kroków PWM Lepszy wynik da bardziej złożonego programu.
  • #3 9286939
    mario987
    Poziom 14  
    Dzięki za odpowiedź:)

    Czy można prosić o jakiś przykład wiem o co chodzi tak mniej więcej ale nie potrafię tego napisać w bascom

    Ja myślałem że muszę uruchomić dwa timery i je połączyć.
    Ale tu masz rację że jeden timer uzależni od siebie jedno i drugie.
    No i najważniejsze jak oddzielić wypełnienie od częstotliwości bo na jednym timerze to może być trochę skomplikowane... Chodzi o to że na jednym wyjściu jest częstotliwość a na drugim wypełnienie..

    wykorzystuję kwarc zewnętrzny 8Mhz
  • #4 9289775
    kamyczek
    Poziom 38  
    Sygnał o którym napisałeś można generować nie tylko korzystając z timera . Można również zrobić to programowo. Z tego co napisałeś jest to sygnał sterujący do serwomechanizmów modelarskich Od 1 do 2 ms i przerwa 20 ms . Bascom z tego co pamiętam ma coś gotowego w stylu config servo ... Jeśli chcesz zrobić to za pomocą timera lepszym rozwiązaniem jest tryb CTC (Clear Timer on Compare Match ) i proponuje poczytać w dokumentacji układu na stronie atmela ...
  • REKLAMA
  • #5 9289987
    tadzik85
    Poziom 38  
    licznik i jego przerwania:

    compc zeruje wy1 setuje wy2
    compb zeruje wy2
    compa setuje wy 1

    tryb ctc
    sprawdziłbym czy czegoś sprzętowo nie da się zrealizować
  • #6 9290926
    mario987
    Poziom 14  
    Będę próbował to zrobić w tym trybie CTC. Na początek na "sztywno".
    Pytanie czy będę mógł regulować częstotliwość i wypełnienie "płynnie" za pomocą ADC bo takie jest założenie że muszę zrobić regulację na potencjometrach.
  • #7 9290953
    tadzik85
    Poziom 38  
    wszystko zalezy od zakresów regulacji. Poza tym twoj rysunek nic nie mowi o zmianie regulacji a jedynie synchronizacji 2 sygnału pierwszym
  • #8 9291012
    mario987
    Poziom 14  
    Zakres regulacji wypełnienie od 1% do 99%, natomiast częstotliwość od 20 Hz do 150Hz. Czy to jest do zrealizowania w trybie CTC oraz regulacji za pomocą ADC?
  • REKLAMA
  • #9 9291019
    tadzik85
    Poziom 38  
    a 2 sygnał? rozumiem ze jego częstotliwość musi być taka sama? a czas trwania impulsu?

    Tak to jest do zrobienia
  • #10 9291215
    mario987
    Poziom 14  
    Wyjścia mają posłużyć do otwierania 2 tyrystorów jeden ma regulować częstotliwość a drugi moc.
    Pierwszy sygnał służy do regulacji tej mocy czyli wypełnienie
    Drugi sygnał służy do regulacji częstotliwości.
    dokładnie częstotliwość tego drugiego impulsu musi być taka sama jak pierwszego.
    Chodzi o synchronizację jest to bardzo ważne, przy otwarciu tyrystora sterującego wypełnienie drugi zadaje odpowiednią częstotliwość w zakresie który wyżej podałem. Na wyjściu uzyskamy wtedy regulowaną moc o określonej częstotliwości.

    Czas trwania drugiego impulsu to czas otwarcia tyrystora.
  • #11 9291228
    tadzik85
    Poziom 38  
    więc moj sposób powinien byc odpowiedni.
    Dobrać tylko preskaler i co ważne compa musi odpowiadać za okres.

    compb i compc musi byc wzgledem compa wyliczane
  • #12 9291259
    mario987
    Poziom 14  
    Masz może jakiś przykładowy kod jak to zrealizować?
    Znalazłem w nocie katalogowej coś takiego ale niestety nie za bardzo wiem jak tego użyć i z czym to się je :) ...
    Jest to część tablicy wektorami przerwań
    18 $0022 TIMER1 COMPA Timer/Counter1 Compare Match A
    19 $0024 TIMER1 COMPB Timer/Counter1 Compare Match B
    20 $0026 TIMER1 COMPC Timer/Counter1 Compare Match C
  • #13 9291269
    tadzik85
    Poziom 38  
    w jakim jezyku chcesz pisac? po chcesz zrobić coś trudniejszego a pytasz o podstawy
  • REKLAMA
  • #14 9291778
    kamyczek
    Poziom 38  
    Sprawa jest dość prosta robisz pomiar ADC obrabiasz wpisujesz do OCR1A generujesz impuls potem ładujesz wartość przerwy i tak w kółko ....
    Jeśli będziesz pomysłowy to na 1 liczniku i jednym wyjściu PWM można zrealizować nawet 10 serwomechanizmów ... Proponuje zerknąc na dekoder stosowany w odbiornikach modelarskich zbudowany na CMOS-ie 4017 proponuje poczytać pomyśleć i będzie efekt ;)
  • #15 9292338
    tadzik85
    Poziom 38  
    kolego to naprawdę proste.
    bierzesz datasheet na rozdział mówiący o 16bitowym liczniku nr 1 i patrzysz na jego rejestry.

    Przyjmujemy częstotliwość taktowania i wyliczamy przeskalować tak by uzyskać przepełnienie licznika po czasie dłuższym od najdłuższego okresu który chcesz uzyskać.

    wyliczasz wartości compa dla których okres bedzie wynosił twoje minimum i maksimum.

    Uzyskujesz przedział regulacji tego rejestru dla częstotliwości które chcesz uzyskać

    chcesz ja regulować PRkiem? proszę bardzo zrealizuj funkcje która zakres 0-1023 przemieni w zakres otrzymany wyżej.

    Mamy już częstotliwość.

    Dobór czasu trwania sygnału 1?

    przedział 0-1023 (zakres przetwornika AC) przeliczamy na przedział 0-compA i zapisujemy co compB

    czas trwania sygnału 2? wylicz i dopilnuj by compc bylo < compA

    teraz włączasz 3 przerwania i robisz w nich to co napisałem w poprzednich postach.


    reszta to obsluga przerwań to polecam help bascoma w w nich zwykle instrukcje
    set lub clr pinX.X
REKLAMA