Elektroda.pl
Elektroda.pl
X
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

Program do badania i generowania sygnału pwm, literatura, kurs?

radekwrc85 18 Mar 2023 22:18 303 14
  • #1
    radekwrc85
    Level 4  
    Witam

    Chciałbym napisać program w C, który byłby w stanie mierzyć takie rzeczy jak okres, czas wypełnienia sygnału o charakterystyce sygnału PWM, tylko o zmiennej częstotliwości i wypełnieniu w czasie. Na podstawie tego sygnału mikrokontroler generowałby sygnał o tej samej częstotliwości, z mniejszym wypełnieniem i lekkim przesunięciem w czasie.
    I teraz pytanie jaki mikrokontroler jest mi do tego potrzebny, możliwie najtańszy?
    Oraz proszę o polecenie jakiegoś kursu lub książki, gdzie takie temat lub zbliżony byłby opisany, ponieważ ja jestem tylko po kursie programowania z "zaprojektuj i zbuduj" a tam taki temat nie był poruszany.
  • #2
    JacekCz
    Level 39  
    Jesli rozumiem, to potrzebujesz mocy obliczeniowej tak ze 10x większej niz uK tworzacy te PWM.

    radekwrc85 wrote:
    ponieważ ja jestem tylko po kursie programowania z "zaprojektuj i zbuduj" a tam taki temat nie był poruszany.


    Szukamy gotowca? Chyba się nie uda.

    Profesjonalne przygotowanie daje do ręki elementy, klocki Lego, których trzeba świadomie użyć, dzielą globalny zamiar na podproblemy ...
    plan metody pomiarowej (co mierzymy względem czego - dobrze wykształcony elektronik to sprawnie przemyśli)
    realizacja pomiaru / sprzęt
    analiza / przetwarzanie uzyskanych liczb
    zaprogramowanie własnych efektorów
  • #3
    radekwrc85
    Level 4  
    Poleć jakąś literaturę, sporo jest różnych książek w necie. Temat mikrokontrolerów jest ciekawy. Może łatwiej będzie w C++
  • #4
    ZbeeGin
    Level 39  
    JacekCz wrote:
    Jesli rozumiem, to potrzebujesz mocy obliczeniowej tak ze 10x większej niz uK tworzacy te PWM.

    Niekoniecznie. Niektóre mikrokontrolery mają liczniki umożliwiające to sprzętowo ogarnąć. Np. STM8, czy STM32.
    A w przypadku AVR można skorzystać ze wspomagania przerwań licznikiem.

    radekwrc85 wrote:
    Poleć jakąś literaturę, sporo jest różnych książek w necie. Temat mikrokontrolerów jest ciekawy. Może łatwiej będzie w C++

    Trzeba poświęcić trochę czasu na przeczytanie Reference Manual procesora, zwłaszcza rozdziału o licznikach (w STM najczęściej TIMER1 będzie miał takie możliwości).
    Dla układów AVR może zainteresuje Ciebie nota aplikacyjna AVR135.
  • #5
    mpier
    Level 28  
    Witam,
    napisz co budujesz, bo raczej o "badanie sygnałów" Ci nie chodzi. W najlepszym razie można określić parametry PWM zegarkiem. Raczej wiesz jak to zrobić.

    Pozdrawiam.
  • #6
    tmf
    Moderator of Microcontroller designs
    @radekwrc85
    Określ jakie są częstotliwości mierzonego sygnału, wymagana dokładność pomiaru wypełnienia, możliwe maksymalne przesunięcie sygnału generowanego względem mierzonego. Od tych parametrów m.in. zależy, czy zadanie które opisałeś jest wykonalne na prostym i tanim MCU, czy będzie wymagany jakieś bardziej złożone rozwiązanie oparte np. o FPGA.
  • #7
    radekwrc85
    Level 4  
    Częstotliwość od 15Hz do 80 Hz, przy 15Hz wypełnienie 3-4ms a okres 62ms. Przy 65Hz wypełnienie to 6ms, a okres ok 15ms.

    Przesunięcie sygnału na zasadzie pomiaru impulsu(sygnału) i wygenerowanie o 90% krótszego impulsu tak, żeby ten wygenerowany impuls pojawił się przed kolejnym i skończył się w momencie kiedy ten kolejny się zacznie, co w efekcie wydłuży ogólny czas trwania impulsu o 10%, czyli impuls(sygnał) będzie trwał 110%. To 10% to jest takie początkowe założenie tylko, a moment zakończenia wygenerowanego sygnału z początkiem otrzymanego, nie musi się idealnie pokrywać.

    Program do badania i generowania sygnału pwm, literatura, kurs? Program do badania i generowania sygnału pwm, literatura, kurs?

    Dodano po 4 [minuty]:

    >>20497403
    Chcę zwiększyć dawkę paliwa, poprzez dłuższy czas otwarcia wtryskiwacza w prostym, jednocylindrowym silniczku. Jeśli to się uda, spróbuje coś pooszukiwać z zapłonem, żeby podnieść max obroty. Obroty są blokowane na zasadzie opóźnienia zapłonu przez Ecu.
  • #8
    JacekCz
    Level 39  
    @radekwrc85
    Noo, teraz to materiał konkretny
  • Helpful post
    #9
    tmf
    Moderator of Microcontroller designs
    radekwrc85 wrote:
    Częstotliwość od 15Hz do 80 Hz, przy 15Hz wypełnienie 3-4ms a okres 62ms. Przy 65Hz wypełnienie to 6ms, a okres ok 15ms.

    Dla podanych przez ciebie warunków, może to być dowolny MCU. Czy wykorzystasz gardware - timery, czy zrobisz to całkowicie programowo, to każdy współczesny MCU da radę. Jeśli pobierzesz sobie darmowe przykłady do książki "Język C" z mojej stopki, to tam masz m.in. pomiar f i wypełnienia w oparciu o timery, do tego łatwo dodasz generowanie potrzebnego przebiegu. Czy użyjesz ATMega8, czy ATMega 328, czy innego MCU to obojętnie.
  • #10
    miszcz310
    Level 21  
    Pomiar częstotliwości i wypełnienia PWM realizują sprzętowo niektóre "zaawansowane" liczniki z STM32.
    1. Ściągasz za punkty to : https://www.elektroda.pl/rtvforum/topic3111562.html
    2. Czytasz tylko o gpio i licznikach
    3. Doczytujesz/poszukujesz gotowca do liczenia tego sygnału na podstawie licznika.
    4. Modyfikujesz to co potrzebujesz.
    Z tego co pamiętam (musisz sam sprawdzić) taki timer ma np. stm32f103, co znaczy, że cały programator + płytka startowa pewnie zamknie się w około 5$. Jeżeli nie chcesz używać debuggera (na pewno chcesz, tylko może ewentualnie jeszcze o tym nie wiesz), to wystarczy sam bluepill za 2$. Jak nie chcesz iść w "starodawne architektury" to bierz green/blackpilla za 15-30zł.
    Powodzenia!

    radekwrc85 wrote:
    Chcę zwiększyć dawkę paliwa, poprzez dłuższy czas otwarcia wtryskiwacza w prostym, jednocylindrowym silniczku. Jeśli to się uda, spróbuje coś pooszukiwać z zapłonem, żeby podnieść max obroty. Obroty są blokowane na zasadzie opóźnienia zapłonu przez Ecu.


    Ktoś tutaj chce kręcić kosiarką aż korba bokiem wyjdzie? :)
  • #11
    radekwrc85
    Level 4  
    Dziękuję, jest jeszcze jedna rzecz o której zapomniałem, a jest prostsza. Chciałbym zmniejszyć częstotliwość na wyjściu tak o 20-40 Hz. Czyli na wejściu jest 120 Hz a na wyjściu 15-30% mniej, ale to będę musiał eksperymentalnie dobrać. Budowałem kiedyś dzielnik częstotliwości przez 2 na CMOS 4013, działał, ale swojej funkcji nie spełnił.

    Jakbyście mogli mnie jeszcze tutaj naprowadzić.

    Program do badania i generowania sygnału pwm, literatura, kurs?

    Niebieskie sygnał wchodzi do modułu, za którym wychodzi żółty. Chodzi o to żeby zmniejszyć częstotliwość żółtego, czy to za modułem czy z pominięciem go.
  • Helpful post
    #12
    miszcz310
    Level 21  
    radekwrc85 wrote:
    Chciałbym zmniejszyć częstotliwość na wyjściu tak o 20-40 Hz. Czyli na wejściu jest 120 Hz a na wyjściu 15-30% mniej, ale to będę musiał eksperymentalnie dobrać. Budowałem kiedyś dzielnik częstotliwości przez 2 na CMOS 4013, działał, ale swojej funkcji nie spełnił.

    Jakbyście mogli mnie jeszcze tutaj naprowadzić.


    Może podejdź do tematu tak. Masz sygnał z którego wyciągasz dwa parametry, częstotliwość i wypełnienie (tak zrozumiałem).
    Teraz jakoś matematycznie je sobie skalujesz jakąś funckja, LUTem czy czym kolwiek i podajesz do czarnej skrzynki, timer (która też sobie zaprogramujesz). Czyli taki program by wyglądał tak.
    1. Pomiar i wyłuskanie potrzebnych informacji
    2. Przekształcenie tych informacji
    3. Podanie na "moduł wykonawczy" czyli timer z podłączonym pinem.
  • #13
    radekwrc85
    Level 4  
    Ok, Czy na Atmega też się da?
  • #14
    miszcz310
    Level 21  
    Przy tych częstotliwościach raczej też się powinno dać. Tylko w klasycznej atmedze wiele z tego będziesz musiał sam oprogramować. Najlepiej pewnie mierzyć czas na przerwaniach, z tego uzyskasz częstotliwość i wypełnienie. Atmegi mają sprzętowe timery więc pewnie jest jakaś nota aplikacyjna jak generować PWM o zadanych parametrach. Skalowanie to proste operacje na intach. Także powinno się dać. Problematyczne może się okazać debugowanie ale na tych nowych prockach ponoć te jest. Także da się. (⁠✯⁠ᴗ⁠✯⁠)
  • #15
    tmf
    Moderator of Microcontroller designs
    radekwrc85 wrote:
    Ok, Czy na Atmega też się da?

    Oczywiście, to zrobisz i na starym '51.
    Atmegi są bardzo różne - Atmega8 i ATmega4809 to dwa różne światy. Ale generalnie, każda ma timer, który może działać w trybie capture, w którym możesz mierzyć częstotliwość lub wypełnienie. Każda potrafi także sprzętowo generować PWM. Aczkolwiek przy podanych przez ciebie częstotliwościach równie dobrze możesz wszystko zrobić programowo - jeśli ci z hardware nie po drodze.