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

Regulacja PWM silnika trójfazowego asynchronicznego pierścieniowego

bambli 26 Gru 2015 21:39 1776 10
  • #1 26 Gru 2015 21:39
    bambli
    Poziom 8  

    Witam wszystkich forumowiczów :)
    Dostałem Arduino dlatego chciałem coś pożytecznego z nim zrobić :) a mianowicie posiadam stary silnik asynchroniczny pierścieniowy 1 kW, który sterowany był poprzez PWM, i kręciłem potencjometrem zmieniając wypełnienie sygnału.

    Jak wspomniałem chciałbym sterować za pomocą PWM z arduino. Częstotliwość z arduino jaką potrzebuję to 50 lub 60 Hz.
    Dlatego tu mam pytanie do Państwa jak by to uzyskać ? Szukałem trochę w google ale nie jest to wyjaśnione do końca tak jak ja bym chciał,jak czegoś nie dopatrzyłem przepraszam.
    Myślałem tez może by wstawić jakiś dzielnik częstotliwości ale nie wiem jak to ugryźć dokładnie- Czy poprzez programową zmianę Hz czy zastosować jakiś dzielnik Hz.

    Proszę o pomoc i wyrozumiałość :)
    Bardzo dziękuję za wytłumaczenie i pomoc : ))

    0 10
  • #2 28 Gru 2015 10:26
    Walentynka
    Poziom 14  

    Najlepiej ustawić programowo na 50Hz,

    w dokumentacji AVR wszystko jest napisane jakie masz Arduino to coś poradzimy ?.

    0
  • #3 28 Gru 2015 16:50
    bambli
    Poziom 8  

    Witam :)
    Bardzo dziękuję za zainteresowanie tematem : ))
    Posiadam Arduino Uno R3 - > takie dostałem i dopiero zaczynam z nim przygodę oraz z programowaniem :)
    Więc za wszelkie wskazówki bardzo dziękuję : ))

    0
  • #5 29 Gru 2015 23:11
    bambli
    Poziom 8  

    Dziękuję :) jak czegoś nie będę wiedział odezwę się wkrótce he he : ))

    0
  • #6 03 Sty 2016 23:15
    bambli
    Poziom 8  

    Witam :)

    Tak jak pisałem chciałbym uzyskać 50 Hz a nie 490 Hz jak jest standardowo w arduino np na pinie 3.
    Znalazłem takie coś aby uzyskać te 50 Hz :

    Kod: c
    Zaloguj się, aby zobaczyć kod


    powyższy kod pochodzi ze stronki : http://forum.arduino.cc/index.php?topic=149957.0


    i chciałbym sterować poprzez arduino potencjometrem . Rysunek poniżej :

    Regulacja PWM silnika trójfazowego asynchronicznego pierścieniowego

    oczywiście tu zamiast diody led na końcu dam tranzystor.
    Do sterowania PWM tej diody mam już napisany program ze stronki :

    http://starter-kit.nettigo.pl/2012/08/potencjometr/
    czyli kod z tej stronki zrobiony pod ten rysunek z led:

    Kod: c
    Zaloguj się, aby zobaczyć kod


    i tak jak wspomniałem tu regulacja jest na stałej częstotliwości 490 Hz a ja chciałbym te 50 Hz.

    Wie ktoś może z Państwa jak wkleić ten pierwszy kod do kodu spod tego drugiego linku aby na wyjściu była stała ta częstotliwość 50 Hz ?
    Być może to nie jest takie proste dosłownie "wkleić" ten kod, ale w tych rzeczach programowych nie jestem aż tak obeznany wiec proszę o wyrozumiałość.
    Za pomóc albo jakieś wskazówki dziękuję ; ))

    0
  • Pomocny post
    #7 04 Sty 2016 09:32
    Walentynka
    Poziom 14  

    Hej,

    Przyznam że nie mogę do końca zrozumieć metody podanej w linku.

    Zaś z dokumentacji dla atmega328 wynika ze dostępne częstotliwości dla taktowania 16MHz to:
    7,6 Hz
    15,2 Hz
    30,4 Hz
    60,9 Hz

    wzory na policzenie częstotliwości są w rozdziałach modes of operation poszczególnych timerów. Trzeba by zmienić częstotliwość taktowania.

    0
  • Pomocny post
    #8 04 Sty 2016 19:05
    namok
    Poziom 25  

    Rejestr do którego wpisujesz wypełnienie dla pwm to OCR2B. Zakres jego wartości to 0-156.

    Kod: c
    Zaloguj się, aby zobaczyć kod

    0
  • #9 04 Sty 2016 20:11
    bambli
    Poziom 8  

    Wszystkim dziękuję bardzo za pomoc i zaangażowanie a szczególnie " namok" : )) jest 50 HZ !! : )

    0
  • Pomocny post
    #10 06 Sty 2016 06:14
    emarcus
    Poziom 35  

    Walentynka napisał:
    Hej,

    Przyznam że nie mogę do końca zrozumieć metody podanej w linku.

    .................
    (1)Trzeba by zmienić częstotliwość taktowania.
    (2)wzory na policzenie częstotliwości są w rozdziałach modes of operation poszczególnych timerów.
    ________________________________________




    Ad1. Nie trzeba -wyjaśnienie niżej... (poza tym, jak w Arduino chcesz zmienic częstotliwośc taktowania?)
    Ad2. Owszem jest tam kilka wzorów, ale nie na wszystko co jest potrzebne do obliczenia w tym konkretnym przykładzie. Na przykład: wzór na stosowany tu tryb pracy timera2 jest pominięty. Wzór podany w datasheet na str. 150 w rozdziale tyt. 'Phase Correrct PWM' pokrywa tylko tryb (mode) 1 z tabeli 18-8 gdzie wartośc TOP jest arbitralnie ustalona na FF (255). Niemniej jednak Datasheet zawiera dokladny (!) opis możliwych trybów pracy timera2 i utworzenie własnej formuły doboru parametrów pracy timera nie powinno sprawiac trudności pod warunkiem pełnego zrozumienia textu.

    Wyjaśnienie: może przyda sie też autorowi postu (?)

    Z uwagi na wymaganą relatywnie niską (50Hz) częstotliwośc wyjściową PWM, autor tego snippet zastosował tryb5 pracy timera2 - 'Phase Correct PWM, co oznacza że timer nalicza wartości do TCNT2 od zera w górę do określonej wartości przez OCR2A (jako TOP - patrz tabela 18-8), a następnie liczy w dół tą sama ilośc cykli do zera, w odróżnieniu od innych trybów pracy gdzie timery liczą tylko w górę do TOP i zerują się.
    Z tytułu podwójnego zbocza pracy timera, częstotliwośc wyjściowa jest o połowę niższa niż dla Fast PWM.
    Przejdźmy do konkretnych rachunków dla częstotliwości taktowania 16 MHz
    Wybierając najwyższy prescaler 1024 uzyskamy:
    1/16000000*1024 =0.000064 = 64 usec - rozdzielczośc dla timera2 - znacz to że każdy tick do timera tyle czasu zajmie.
    Z drugiej strony wiemy że dla f=50 Hz Okres T= 0.02 sec co jest równe czasowi pomiędzy dwoma wierzchołkami na diagramie przedstawionym (Figure 18-7).
    Nie trzeba byc tu bardzo biegłym w rachunkach aby obliczyc ile cykli Timera2 potrzeba na cały okres T.
    0.02/0.000064 = 312.5 co stanowi ilośc cykli liczonych przez dwa zbocza, zatem wartośc TOP wyniesie:
    TOP = 312.5/2 =156.25 - co stanowiłoby naszą wartośc OCR2A.
    Rejestr OCR2A przyjmie tylko wartości całkowite zatem finalna wartośc OCR2A = 156.
    Obliczmy jaką faktycznie częstotliwośc uzyskamy na wyjściu:
    f = 16000000/(1024 *2*156) = 50.08 Hz

    Ponieważ Timer2 w Mega328p ma dwa rejestry (A i B) z których jeden OCR2A został użyty do określenia częstotliwości wyjśc, zatem drugi rejestr możemy użyc do kontroli wypełnienia dla wyjścia OC2B, zachowując wspólną częstotliwośc oraz przechwytując przebiegi naliczania TCNT2 na określonych zboczach i edytując odpowiednie bity w TCCR2A (COM2B1 , COM2B0), które należy dobrac z tabeli 18-7 dla wymaganego przebiegu na wyjściu OC2B.

    Proponuję prześledzic ten przykład dla Timer2 i trybu 7 - (Fast PWM dla wyższych niż 50 Hz częstotliwości wyjściowych); oraz dla Timer1.

    e marcus

    0
  • #11 07 Sty 2016 20:50
    bambli
    Poziom 8  

    Dziękuje za wyczerpującą odpowiedź a tym samym pomoc w objaśnieniu kodu :)

    0