Elektroda.pl
Elektroda.pl
X

Search our partners

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

Trójfazowy falownik na Arduino - zmiana częstotliwości PWM

Modelarz KP 04 Feb 2017 01:38 2949 10
Tespol
  • #1
    Modelarz KP
    Level 11  
    Witam!

    Udało mi się zrobić prototypowy falownik trójfazowy na Arduino UNO Rev3 i wszystko pięknie działa poza jednym - wyraźnie słyszalny jest z silnika dźwięk sygnału PWM o częstotliwości niecałego 1kHz (piny 5, 6 i 9)... Znalazłem działający sposób na zmianę częstotliwości PWM na pinie 9 na forum Arduino: KLIK. Skopiowany kod wklejam poniżej. Problem w tym, że nie potrafię zrozumieć, jak działają te wszystkie oznaczenia (liczniki, timery itd.), a do tego mój angielski trochę kuleje. W każdym razie czy mógłbym prosić o możliwie najprostsze wyjaśnienie, co konkretnie trzeba w tym kodzie dodać/zmienić, aby oprócz pinu 9 zmienić częstotliwość PWM na 20kHz na dwóch innych pinach (dowolnych, niekoniecznie 5 i 6) i móc sterować wypełnieniem na wszystkich trzech niezależnie? Czy to w ogóle możliwe tym sposobem?

    Próbowałem kombinować doświadczalnie, zmieniając niektóre cyferki "1" na "0" i próbując tym samym zmienić obsługiwany timer/licznik(?) z OC1A i OC1B na OC0A i OC0B, co miało dać obsługę pinu 5 zamiast 9, ale nic to nie dało.

    Code: c
    Log in, to see the code
    [/code]
    Do you have a problem with Arduino? Ask question. Visit our forum Arduino.
  • Tespol
  • Tespol
  • #3
    Modelarz KP
    Level 11  
    Chodzi mi tylko o zmianę częstotliwości PWM, czyli modyfikację kodu z poprzedniej wiadomości dla dwóch innych pinów, aby można było ustawiać wypełnienie przez "analogWrite([pin], [wartość])" lub "analogWriteD[pin]([wartość])". Z resztą sobie poradziłem (generowanienie tymi trzema PWMami trzech sinusów o regulowanej częstotliwości przesuniętych o 120st.) - można regulować obroty silnika synchronicznego w zakresie 0-800obr/min odczytem napięcia z pinu analogowego lub zadając wartość przez UART w zależności od potrzeb. Tylko piszczy niecałym 1kHz w całym zakresie obrotów przez to, że domyślny PWM w Arduino ma taką częstotliwość. Natomiast kiedy zastosowałem podany kod (trochę dostosowany) w swoim kodzie falownika i podłączyłem tylko jedną fazę pod pin 9, to LED od tej fazy migał odpowiednio, a z silnika nie wydobywał się żaden słyszalny dźwięk, choć przepływ prądu był na pewno (układ wzmacniający jest tak skonstruowany, że jeśli nie ma sygnału sterującego na danej fazie (w tym przypadku dwie pozostałe), to podaje na nią cały czas masę). Czyli zadziała, jeśli tylko uda się zrobić to samo dla jeszcze dwóch pinów.
  • #4
    Modelarz KP
    Level 11  
    Ok, więc po kolei... Chcę oprócz działającego już licznika 1 do obsługi pinu 9 użyć jeszcze licznika 0 do niezależnej obsługi pinu 6 (OC0A na pinie 6 i OC0B na pinie 5 według pinout'u Arduino UNO). Czy to znaczy, że na wzór tej linijki dla licznika 1:
    Code: c
    Log in, to see the code

    muszę dla licznika 0 wpisać taką linijkę?:
    Code: c
    Log in, to see the code

    Bo tak wywnioskowałem z datasheet'u ATmegi328P i kodu z pierwszej wiadomości, ale po wpisaniu tego w kompilator Arduino i próbie kompilacji wyskakuje mi, że TCNT07 do TCNT00 "was not declared in this scope". Czyli co, jest źle czy kompilator Arduino tego nie rozpoznaje?
  • #5
    User removed account
    User removed account  
  • #6
    tronics
    Level 38  
    Quote:
    Dalej jaki jest sens operacji 0 << cos tam? - zastanów się

    Teoretycznie żaden, bo przecież w ten sposób tego bitu się nie wyzeruje (a preprocesor to tylko obliczy i wywali bo wszędzie będzie 0 ;) wynikiem ) Niektórym jednak pomaga takie pisanie bo konfigurując rejestr wiedzą, których bitów nie ruszali i dlaczego. Trzeba tylko pamiętać o tym, że w ten sposób bitów się nie wyzeruje - dla początkujących tego typu zapis to ogromna pułapka!
  • #7
    Modelarz KP
    Level 11  
    Znalazłem inny sposób: http://playground.arduino.cc/Code/PwmFrequency Nawet działa, tylko powoduje zaprzestanie działania funkcji czasowych (w tym "delay()"), ale z tym też już sobie poradziłem. Problem tylko jest jeszcze taki, że silnik nie daje rady przy 31250Hz ("skacze" po 120st. zamiast płynnie się obracać), a niższa możliwa do ustawienia częstotliwość to dopiero 3906Hz, więc znowu słychać piszczenie - wykorzystuję piny 3, 9 i 10. Spróbuję dołożyć na wyjściu jakiś prosty filtr RC dla tych 31250Hz, to może silnik będzie się kręcił bez piszczenia, ale to dopiero w poniedziałek dam znać jak wyszło, bo dzisiaj już sklep elektroniczny zamknięty, a nie mam akurat potrzebnych kondensatorów (napięcie zasilania silnika 60V)...

    A co do operacji "0 << cos tam", to robiłem na wzór tego gotowego kodu dla pinu 9.
  • #8
    daron66
    Level 9  
    Modelarz KP czy udało Ci się z tymi częstotliwościami?
    Ja pracuję nad projektem motocykla elektrycznego. Chciałbym w nim zamontować silnik od hondy hybrydy. Mam falownik trójfazowy 10kW i chciałbym wykorzystać z niego końcówkę mocy a do sterowania arduino uno. Szukam kogoś, kto by mi mógł zrobić taki sterownik.
  • #9
    LChucki
    Level 31  
    daron66 wrote:
    Ja pracuję nad projektem motocykla elektrycznego. Chciałbym w nim zamontować silnik od hondy hybrydy. Mam falownik trójfazowy 10kW i chciałbym wykorzystać z niego końcówkę mocy a do sterowania arduino uno.

    Piszczenia się nie pozbędziesz. Wystarczy "posłuchać" współczesnych tramwajów i lokomotyw elektrycznych. ES64 (EU44 i EU45) to nawet fajne melodyjki wygrywają.
    Można próbować tak, że stratuje się z małą częstotliwością po czym się ją zwiększa (i tak to chyba działa w ES64) ale wszystko (sterownik, silnik) będzie się bardziej grzał przy 20kHz niż przy 1kHz.
    Jak chcesz dobry PWM to zrezygnuj z AVR i użyj STM32.
  • #10
    tronics
    Level 38  
    Quote:
    Piszcze się nie pozbędziesz

    Samego piszczenia nie, ale uciążliwości tak... po to jest modulacja stochastyczna. W rzeczywistości nadal niewiele produkowanych falowników to oferuje, bo z reguły nie jest to potrzebne.
  • #11
    LChucki
    Level 31  
    Zapomniałem napisać, że nie tylko silnik piszczy, triaki/tyrystory/tranzystory też. Tu warto przypomnieć sobie dawne ściemniacze do żarówek na tyrystorach/triakach.