Elektroda.pl
Elektroda.pl
X

Search our partners

Find the latest content on electronic components. Datasheets.com
Elektroda.pl
Computer ControlsComputer Controls
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

Generator PWM 1-99% 5 kHz

23 Aug 2016 21:25 2463 14
  • Level 11  
    Witam kolegów.

    Potrzebuję wykonać generator PWM z wyświetlaczem o parametrach:

    - częstotliwość regulowana w kilku zakresach (2, 3, 4, 5 kHz)
    - amplituda 5 V
    - współczynnik wypełnienia regulowany w zakresie (1-99%)

    Częstotliwość chciałbym ustawiać pokrętłem.

    Będę bardzo wdzięczny za pomoc
    w doborze układu i napisaniu programu
    (maksymalna częstotliwość 5 kHz)
    Generator PWM 1-99% 5 kHz
    [30.03.2021, darmowy webinar] Nowoczesna diagnostyka maszyn, monitorowanie i przewidywanie awarii. Zarejestruj się
  • Computer ControlsComputer Controls
  • Computer ControlsComputer Controls
  • Level 40  
    Jakikolwiek mikrokontroler z 16-bitowym licznikiem i zegarem co najmniej 1MHz.
  • Helpful post
    Level 37  
    Tadziorek wrote:
    - częstotliwość regulowana w kilku zakresach (2, 3, 4, 5 kHz)
    - amplituda 5 V
    - współczynnik wypełnienia regulowany w zakresie (1-99%)


    Brakuje konkretnego określenia rozdzielczości nastawy współczynnika wypełnienia i wymagań dokładności częstotliwości PWM. Bo od tego zależy, czy w ogóle na Arduino lub innych ATMEGA da się to zrealizować. Te kostki mają n.p. dość skromny zestaw nastaw preskalera.
  • Level 11  
    Żeby było prościej na początek.
    Stała częstotliwość 5 kHz
    Zmienny współczynnik (1, 2, 3 ..... 99%)
  • Level 43  
    Akurat to da się uzyskać dość dokładnie.
    Dajesz taktowanie 8MHz. I tym taktujesz Timer bez preskalera.
    Timer ma liczyć do 1600. Wychodzi 5kHz. I masz 1600 kroków PWMa czyli 1, 2, 3% uzyska się z zerowym błędem (na 1% przypadało będzie równo 16 wartości z Timera). O dokładności zadecyduje tylko dokładność rezonatora kwarcowego.
    Dla 2 i 4 kHz też się da dobrać nastawy żeby uzyskać zerowy błąd samych nastaw.
    Dla 4kHz Timer ma dzielić na 2000, dla 2kHz na 4000.
    Dla 3kHz będzie mały błąd bo trzeba zaokrąglić teoretyczną wartość 2666.666666 do całkowitej 2667. Błąd częstotliwości wyniesie 0.0125%. Błąd ustawiania wypełnienia 1.25%. To wystarczająco mało?
    Można jeszcze 2-krotnie zmniejszyć błędy przechodząc na taktowanie 16MHz.
  • Level 37  
    atom1477 wrote:
    Dla 2, 3, 4 kHz też się da dobrać nastawy żeby uzyskać zerowy błąd samych nastaw.


    Ale choćby dla 4kHz to już nie jest już tak różowo. Trzeba kombinować z doborem podziału timera i odpowiednio skalować wartość zadaną. Jeśli jeszcze wyjdzie że rozdzielczość 1% to za grubo, to się robi masakra.

    Ale na potrzeby zmodyfikowanych wymagań autora wątku to ok.
  • Level 37  
    atom1477 wrote:
    No jak? Przecież dla 4kHz wychodzi dokładny podział.


    Wychodzi. Owszem. Ale trzeba jednak kombinować z doborem dwóch wartości. A jak sam przyznałeś, brak dokładnego rozwiązania dla 3kHz.
    Nie jest tak żebym się czepiał, ale z ograniczeniami PWM w atmelkach się już dużo naszarpałem, a jak wszedłem w STM32 to się okazało że precyzyjne PWM jest praktycznie bezstresowe. Taka sobie refleksja.
  • MCUs specialist
    A tak uczciwie:

    Zaczynamy od określenia wymagań na częstotliwość wejściową timera. Musi ona być wielokrotnością wszytskich możliwych wartości częstotliwości pomnożonych przez wymaganą liczbę stopni wypelnienia. Jeśli np. chcemy mieć 100 stopni i częstotliwości 2, 3, 4 i 5 kHz, to częstotliwość wejściowa timera musi być wielokrotnością 200, 300, 400 i 500 kHz. Czyli inaczej wielokrotnością 6 MHz. W przypadku ATmega oznacza to konieczność pracy z kwarcem o takiej częstotliwości (np. 6 lub 12 MHz, ale nie 8 ani 16 MHz. Tymczasem typowo współczesne uC można popędzić na n*6MHz z dowolnym kwarcem.

    Jak zwykle złośliwie napomknę, że gotowa płytka STM32F103 MDB za 7 zł może działać np. na 72 lub 48 MHz, czyli pasuje. Koledzy od AVR za chwilę napiszą, o ile droższa lub tańsza będzie płytka z ATmega (proszę doliczyć koszt odpowiedniego kwarcu i przelutowania go). ;)

    Poprawka: miało być Arduino, to trzeba jeszcze doliczyć koszt przeróbki bootloadera Arduino do tego kwarcu.

    Na F103MDB można wgrać oprogramowanie STM32duino i będzie Arduino jak jasna ... za 7 zł.
  • Level 37  
    BlueDraco wrote:
    gotowa płytka STM32F103 MDB za 7 zł


    BTW. a masz jakiś namiar (oprócz Chińczyka w Chinach) na takie płytki za 7zł? Ja płaciłem sporo drożej.
  • Level 11  
    Generator PWM 1-99% 5 kHz

    Chyba, że gotowca zastosować?
    Ktoś testował?

    Dodano po 20 [minuty]:

    Albo coś takiego: LTC6992
  • User removed account  
  • Level 43  
    rb401 wrote:
    atom1477 wrote:
    No jak? Przecież dla 4kHz wychodzi dokładny podział.


    Wychodzi. Owszem. Ale trzeba jednak kombinować z doborem dwóch wartości. A jak sam przyznałeś, brak dokładnego rozwiązania dla 3kHz.
    Nie jest tak żebym się czepiał.

    No właśnie czepiasz się.
    Napisałeś:
    Quote:
    Ale choćby dla 4kHz to już nie jest już tak różowo.

    A nie jest już. Jest dokładnie tak samo jak dla 5kHz.
    I dla 5kHz trzeba było dobrać 2 wartości, i dla 4kHz trzeba dobrać 2 wartości (z tym samym stopniem trudności).
    Dopiero 3kHz to problem, ale Ty pisałeś o 4kHz.

    Zacząć trzeba od określenia wymagań.
    Do tej pory Tadziorek nie sprecyzował wymagań co do dokładności.
    Więc póki co dyskutowanie o trudności doboru nastaw nie ma wielkiego sensu.
  • Level 32  
    Zrób sobie programowy modulator Delta Sigma rzędu drugiego i po kłopocie - możesz tez użyć wyższego rzędu DS w połączeniu z jakimś kilku bitowym PWM.

    https://hackaday.io/project/6356-delta-sigma-versus-pwm
    http://memweb.newsguy.com/~rhuang/DeltaSigma/DeltaSigma.html

    Dobra, nie pomyślałem ze tu chodzi o sztukę dla sztuki - w takim razie proponuje sprawdzony już pomysł DDS i sprawdzanie najstarszego bitu - w software nie będziesz ograniczony rozdzielczością sprzętowego PWM.