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

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

radekwrc85 18 Mar 2023 22:18 1548 36
  • #1 20496577
    radekwrc85
    Poziom 5  
    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 20496679
    JacekCz
    Poziom 42  
    Jesli rozumiem, to potrzebujesz mocy obliczeniowej tak ze 10x większej niz uK tworzacy te PWM.

    radekwrc85 napisał:
    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 20497283
    radekwrc85
    Poziom 5  
    Poleć jakąś literaturę, sporo jest różnych książek w necie. Temat mikrokontrolerów jest ciekawy. Może łatwiej będzie w C++
  • Pomocny post
    #4 20497399
    ZbeeGin
    Poziom 39  
    JacekCz napisał:
    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 napisał:
    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 20497403
    mpier
    Poziom 29  
    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 20497766
    tmf
    VIP Zasłużony dla elektroda
    @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 20500408
    radekwrc85
    Poziom 5  
    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 20501073
    JacekCz
    Poziom 42  
    @radekwrc85
    Noo, teraz to materiał konkretny
  • Pomocny post
    #9 20501408
    tmf
    VIP Zasłużony dla elektroda
    radekwrc85 napisał:
    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 20502598
    miszcz310
    Poziom 24  
    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 napisał:
    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 20503802
    radekwrc85
    Poziom 5  
    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.
  • Pomocny post
    #12 20503850
    miszcz310
    Poziom 24  
    radekwrc85 napisał:
    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 20505438
    radekwrc85
    Poziom 5  
    Ok, Czy na Atmega też się da?
  • Pomocny post
    #14 20505448
    miszcz310
    Poziom 24  
    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ę. (⁠✯⁠ᴗ⁠✯⁠)
  • Pomocny post
    #15 20505566
    tmf
    VIP Zasłużony dla elektroda
    radekwrc85 napisał:
    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.
  • #16 20508670
    radekwrc85
    Poziom 5  
    Czyli ogólnie lepiej i prościej pójść w stronę STM?
  • Pomocny post
    #17 20508677
    miszcz310
    Poziom 24  
    radekwrc85 napisał:
    Czyli ogólnie lepiej i prościej pójść w stronę STM?

    Nie ma obiektywnej odpowiedzi na to pytanie. Sam musisz sobie zrobić rachunek zysków i strat i podjąć jakąś decyzję.
    Podczas procesu wybierania proca warto wziąć pod uwagę, cenę, środowisko programistyczne, wsparcie techniczne, dokumentację, metody debugowania i testowania, wymagania stawiane przed systemem w tej konkretnej aplikacji, ewentualne marginesy na przyszłościowe zmiany, wspierane biblioteki i języki programowania, w ostatnim czasie również dostępność, czas życia danej linii mikrokontrolerów, i na pewno jeszcze wiele rzeczy o których zapomniałem tutaj napisać.

    Sam musisz podjąć decyzję. Zawsze możesz się zapytać o cudze opinie lub te zagadnienia w stosunku do różnych procow, ale ostatecznie to Ty będziesz musiał to programować.
  • Pomocny post
    #18 20509038
    tmf
    VIP Zasłużony dla elektroda
    radekwrc85 napisał:
    Czyli ogólnie lepiej i prościej pójść w stronę STM?

    Zależy od charakteru powyższego pytania. Jeśli pytasz, czy prościej zrealizować ten konkretny, opisany przez ciebie problem na AVR, czy STM to odpowiem - dużo prościej na AVR. A to dlatego, że problem jest banalny dla podanych założeń i jak pisałem każdy MCU da radę. Więc im prostszy MCU tym szybciej rozwiążesz problem. Dla przykładu - podano ci, i generalnie jest to właściwe podejście, rozwiązanie jakim jest użycie sprzętu - timera. Jeśli ogólnie idziesz w kierunku programowania, to jest to właściwe podejście. Jednak wymaga poczytania noty MCU, poznania i zrozumienia jak działa timer itd. Można to zrobić inaczej - po prostu zapomnieć o sprzęcie i całość zrobić programowo. Rozwiązanie nieeleganckie, ale w tym konkretnym przypadku jeszcze prostsze i szybsze.
    Natomiast jeśli twoje pytanie było bardziej natury filozoficznej, to odpowiedź zależy od tego dokąd chcesz dojść. Jeśli twoim celem jest bycie programistą embedded to możesz sobie pozwolić na zainwestowanie znacznych środków - głównie czasu i rzucić się na głębszą wodę. Jeśli jesteś hobbystą, który chce sobie zbudować dla zabawy parę projektów tyku knight rider, to prostszy MCU da ci szybciej satysfakcję z efektu i stosunek kosztów do efektów będzie lepszy.
  • Pomocny post
    #19 20509104
    mpier
    Poziom 29  
    W internecie znajdziesz kilka projektów podobnych do twojego (modyfikacja sterowania wtryskiwaczem), albo całkowicie zastępujących sterownik. Są też gotowe urządzenia. Te na które się nadziałem są akurat na AVR, np. fuelino, speeduino, emu. Na stm32 też jakiś jest.
  • #20 20522140
    radekwrc85
    Poziom 5  
    Speeduino, Emu znałem, ale takich projektów jak sterowanie wtryskiwaczem, nie udało mi się znaleść. Fuelino nie znałem i widzę że jest stosowany w motocyklach i wydaje się być prosty, ciekawe.
    No to hobbystycznie idę w AVRka.
  • #21 20523933
    radekwrc85
    Poziom 5  
    Zastanawiam się jeszcze, dlaczego jeżyk C jest bardziej popularny od C++, skoro ten drugi wydaje się być łatwiejszy?
  • #22 20524105
    _lazor_
    Moderator Projektowanie
    C++ jest bardzo złożony za co idzie bardzo trudnym językiem. To że ktoś nauczy się składni to jeszcze bardzo daleko by mówił że potrafi posługiwać się tym językiem. Nie pomaga w tym wszystkim co jakiś czas wypuszczanie nowych wersji, które często bardzo mocno zmieniają podejście do pisania kodu to złożoność języka tylko rośnie. Dodajmy wisienkę w postaci programowania wieloparadygmatowego, wykorzystywania bibliotek z C (i utrzymywanie względnej kopatybilności z C) oraz utrzymywaniem że jest to język i do wysokopoziomowego programowania jak i niskopoziomowego to mamy bardzo złożony twór (inaczej bardzo trudny)
    Najgorszym błędem ludzi w cpp jest używanie mechanik języka bez zrozumienia po co ta mechanika została stworzona i kiedy ją stosować. Potem widzę kwiatki jak lambdy na kilkadziesiąt linii czy używanie auto dla podów... kompilatorów to łyka, człowiek zadowolony bo kod się kompiluje a seniorzy się wkurzają bo kolejny programista z sieciowych tutoriali.

    Język C jest popularny bo jest stabilny od lat, kernel land w linuksie pisze się w C, jest sporo legacy projektów, których nikt nie chce przepisywać na cpp oraz C umożliwia zablokowanie używania bezwiednie mechanik C++ przez ludzi nie potrafiących z nich korzystać :D
  • #23 20525201
    radekwrc85
    Poziom 5  
    Ok, ale jak to się ma w moim konkretnym przypadku?
  • #24 20525405
    _lazor_
    Moderator Projektowanie
    radekwrc85 napisał:
    Ok, ale jak to się ma w moim konkretnym przypadku?


    nie wiem, zapytałeś dlaczego jeżyk C jest bardziej popularny od C++, gdy Twoim zdaniem ten drugi jest łatwiejszy. Ja się z tym nie zgadzam bo jeżyk C++ ma więcej kolców na które można się nadziać.

    Nie czytałem całego wątku bo aż tak wiele czasu nie mam, bo jeszcze bym musiał z tmf dyskutować dlaczego cortex-m jest łatwiejszy od avr.
  • #25 20526126
    miszcz310
    Poziom 24  
    radekwrc85 napisał:
    Zastanawiam się jeszcze, dlaczego jeżyk C jest bardziej popularny od C++, skoro ten drugi wydaje się być łatwiejszy?

    Czy masz na mysli C++ arduino, czy chcesz tutaj burzę rozpętać? :-)

    C jest językiem dużo mniejszym niż C++. C powstawał w latach 70tych, dlatego też ma wiele zaszyłości (ja bym to nazwał idiomami), zwłaszcza jeśli chodzi o zarządzanie projektem i pamięcią.
    C++ jest to język ogólnego przeznaczenia i nastawiony na wydajność. Dużo idiomów i wbudowanych mechanizmów w C++ miało na celu wymuszanie nie robienia błędów z C (problematyczne zarządzanie pamięcią). Dodatkowo C++ stał się trochę nabrzmiały od funkcjonalności jaką zapewnia. Prawa jest taka, że żeby dobrze poznać C to trzeba po prostu ogarnąć pewną skończoną liczbę idiomów. Żeby powiedzieć, że zna się C++ to trzeba znać duuuuużo więcej zagadnień z teorii programowania i mieć chociaż jako takie pojęcie jak i kiedy z nich korzystać (tutaj jest problem bo to wyczucie wyrabia się, pewnie po latach kodzenia w C++, czytaj po latach zgłębiania samego języka!). Aczkolwiek jeżeli ograniczyć się w funkcjonalności do tego co może się przydać w embedded to pewnie można by szybciej.
  • #26 20526327
    khoam
    Poziom 42  
    radekwrc85 napisał:
    Zastanawiam się jeszcze, dlaczego jeżyk C jest bardziej popularny od C++, skoro ten drugi wydaje się być łatwiejszy?

    Może wydawać się łatwiejszy, jeżeli korzysta się z podstawowej funkcjonalności, czyli takiej, jaka była dostępna w C++98, zwanej pieszczotliwie "cplusik". W Arduino Core przez wiele lat w ten właśnie sposób korzystano z C++, aby nie zniechęcić użytkowników.
    Współczesne C++, tzn. dialekt C++20 to już inna sprawa, ale nadal można programować w stylu "cplusik" i stopniowo nabywać wiedzę.
  • #27 20526948
    radekwrc85
    Poziom 5  
    Ok, niech będzie że C++ jest trudniejszy. Ale chodzi mi konkretnie tutaj o mój przypadek:)
  • #28 20526982
    _lazor_
    Moderator Projektowanie
    Dla Twojego przypadku to wybierz co uważasz i zacznij rzeźbić. Wybierz coś konkretnego i zacznij rozwiązywać problem.

    Kodu gotowego nie dostaniesz, jak zaczniesz natrafiać na problemy to będziesz dostawać porady do konkretnych problemów, prawdopodobnie nie gotowe rozwiązania.
  • #29 20532563
    radekwrc85
    Poziom 5  
    Chodziło mi o język w Arduino. Pomyliło mi się, że to C++, a to jakiś pochodny C/C++ i on wydaje się być najłatwiejszy na początek. Zacząć od Arduino.
  • #30 20532590
    khoam
    Poziom 42  
    radekwrc85 napisał:
    Chodziło mi o język w Arduino. Pomyliło mi się, że to C++

    Nie pomyliło Ci się. Nie ma czegoś takiego, jak język Arduino. Jest natomiast C++, który używa Arduino.

Podsumowanie tematu

Użytkownik planuje stworzyć program w języku C do pomiaru parametrów sygnału PWM, takich jak okres i czas wypełnienia, z możliwością generowania sygnału o zmiennej częstotliwości i wypełnieniu. W dyskusji poruszono wybór mikrokontrolera, sugerując modele STM8, STM32 oraz AVR, takie jak ATMega8 i ATMega328, które mogą spełnić wymagania projektu. Uczestnicy podkreślili znaczenie zapoznania się z dokumentacją techniczną, w tym notami aplikacyjnymi, oraz wskazali na możliwość wykorzystania sprzętowych timerów do realizacji pomiarów. W kontekście zmniejszenia częstotliwości sygnału, zaproponowano różne metody, w tym użycie tranzystorów do podnoszenia napięcia sygnału. Użytkownik wyraził zainteresowanie literaturą oraz kursami związanymi z mikrokontrolerami, a także zadał pytania dotyczące popularności języka C w porównaniu do C++.
Podsumowanie wygenerowane przez model językowy.
REKLAMA