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

Atmega8A - Sterowanie PWM przy użyciu potencjometru.

07 Maj 2016 20:18 3081 26
  • Poziom 6  
    Witam,

    mam problem ze sterowaniem wypełnienia PWM, używam takiego kodu:

    Kod: c
    Zaloguj się, aby zobaczyć kod


    Przetwornik chce wykorzystać do sterowania wypełnienia PWM, a komparator do przerwań.
    Jeśli jedna z tych rzeczy jest włączona, wszystko działa poprawnie, natomiast przy używaniu ich dwóch jednocześnie, żadna nie działa

    Ja robię coś źle czy fabrycznie nie można używać ich obu ?
    Jeśli nie można obu naraz, to w jaki sposób mogę sterować wypełnieniem PWM ?
  • Pomocny post
    Użytkownik usunął konto  
  • Poziom 6  
    No okej.. w takim razie ustawiam wyjście na ADC3:

    Kod: c
    Zaloguj się, aby zobaczyć kod


    ale dalej to samo
  • Pomocny post
    Użytkownik usunął konto  
  • Poziom 6  
    Piotrus_999 napisał:


    Kolego Jeszcze nic nie pomogłem


    Jako jedyny od dwóch/trzech dni odpowiedziałeś i dałeś dobrą informacje więc coś tam pomogłeś


    Albo po prostu przed pomiarem wyłączę komparator a po go włączę, powinno być chyba ook
  • Użytkownik usunął konto  
  • Poziom 6  
    No ten sposób nie za bardzo chce działać..

    PWM'em chce sterować ilość prądu dostarczanego do silnika BLDC, wiec chyba najlepszym sposobem będzie użycie drugiego uC
  • Użytkownik usunął konto  
  • Poziom 6  
    Buduje sterownik silnika bezszczotkowego BLDC, który działa na zasadzie siły elektromotorycznej.

    //Komparator
    Są trzy przewody (3 fazy) każdy z nich jest podłączony do ADC[0-2] oraz suma ich wszystkich do AIN0,
    przerwanie generuje się wtedy gdy na odpowiedniej fazie napięcie jest równe sumie napięć.
    Załączam zdjęcia z mikrokontrolery.blogspot.com:
    Atmega8A - Sterowanie PWM przy użyciu potencjometru.BLDC-SumBE...dealny.jpg Download (23.02 kB) Atmega8A - Sterowanie PWM przy użyciu potencjometru.Sygnal-Bac...icznie.jpg Download (24.96 kB)

    -Niebieskie suma napięć
    -Zielone napięcie na poszczególnej fazie

    //ADC
    Chce ustalić wartość PWM na podstawie napięcia z potencjometru (V ~ wypełnienia PWM)
    wynik z pomiaru mnożę razy 0.249 aby przeskalować go do wartości z 0-1023 do 0-255
  • Użytkownik usunął konto  
  • Poziom 6  
    Piotrus_999 napisał:

    Cos chyba kolega przekombinowuje z tym projektem (tak się domyślam po metodzie zjechania z 10 bitów do 8). Proponuje zamiast mnożyc floaty zrobić V8bit = V10bit >> 2;


    Nie używam za dużo przesunięć bitowych, nawet nie wiedziałem, że jest taka możliwość. Dziękuje za wskazówkę.
  • Użytkownik usunął konto  
  • Poziom 6  
    Jeśli dam w programie stałe PWM to wszystko działa jak należy, tylko teraz potrzebuję zmierzyć napięcie z potencjometru i to wszystko

    Link może to pomoże w rozjaśnieniu sprawy
  • Użytkownik usunął konto  
  • Poziom 6  
    Tak i do tego używam komparatora, ale chce jeszcze ten pomiar z ADC uzyskać
  • Użytkownik usunął konto  
  • Poziom 6  
    Chyba najłatwiej będzie podłączyć drugi uC do sterowania PWM a w uC do sterowania silnikiem wyłączyć PWM

    Pozwoli to maksymalnie odciążyć uC
  • Użytkownik usunął konto  
  • Użytkownik usunął konto  
  • Poziom 6  
    Jak na razie 8MHz, 20 tyś obrotów to w końcowej wersji sterownika będę chciał obsługiwać
  • Użytkownik usunął konto  
  • Pomocny post
    Specjalista - Mikrokontrolery
    Nie żadna wredota, tylko typowy projekt, do którego zaprojektowano setki typów mikrokontrolerów z odpowiednimi ADC i potrójnymi imerami z wyjciami komplementarnymi, często tańszych od ATmega.

    Tak to jet, kiedy projekt zaczyna się od decyzji o typie uC bez spisania wymagań i zastanowienia się, czy dany uC pasuje do zadania.
    Weź odpowiedni mikrokontroler, a wszytkie Twoje problemy znikną.
  • Pomocny post
    Użytkownik usunął konto  
  • Pomocny post
    Poziom 26  
    aplov napisał:
    Piotrus_999 napisał:

    Cos chyba kolega przekombinowuje z tym projektem (tak się domyślam po metodzie zjechania z 10 bitów do 8). Proponuje zamiast mnożyc floaty zrobić V8bit = V10bit >> 2;


    Nie używam za dużo przesunięć bitowych, nawet nie wiedziałem, że jest taka możliwość. Dziękuje za wskazówkę.


    dodatkowo mnożąc przez ułamek używałeś do tego armaty w postaci biblioteki i skomplikowanych obliczeń. Łatwiej tak jak Piotrus_999 pisze, albo po prostu podzielić przez 4. Przy czym przesuwanie bitów jest o niebo szybszym/lepszym sposobem.


    Pozostałbym przy obecnym procesorze z powodów hmmm m edukacyjnych. Będzie potrzebna dobra optymalizacja.