PWM - piszczenie silnika - Wersja do druku +- Arduino Polska Forum (https://forum.arduinopolska.pl) +-- Dział: Korzystanie z Arduino (https://forum.arduinopolska.pl/dzial-korzystanie-z-arduino) +--- Dział: Piaskownica (https://forum.arduinopolska.pl/dzial-piaskownica) +--- Wątek: PWM - piszczenie silnika (/watek-pwm-piszczenie-silnika) Strony:
1
2
|
RE: PWM - piszczenie silnika - bako1987 - 21-02-2018 (20-02-2018, 10:07)Smaczek napisał(a): Witam, Z tego co zrozumiałem (może źle) : int pot = (analogRead(A0)); przypisz nazwie pot wartości odczytane z analog 0 int pot2 = (pot/4); przypisz nazwie pot2 wartość pot podzieloną przez 4 pinMode(3, pot2); pin wyjściowy 3 równy jest wartości pot2 tj a0/4 (0-1023/4=0-255) ??? dobrze to rozumiem ??? RE: PWM - piszczenie silnika - Smaczek - 21-02-2018 Witam, Funkcja pinMode(), według dokumentacji ustawia dany pin jako wejście, podciągnięte wejście albo wyjście. Do wpisywania wartości z zakresu 0-255 służy raczej funkcja analogWrite(). Pozdrawiam, Tomek. RE: PWM - piszczenie silnika - OMK - 21-02-2018 https://forbot.pl/blog/wszystko-co-musisz-wiedziec-aby-uruchomic-pwm-id5021 Tutaj jest fajnie opisane. RE: PWM - piszczenie silnika - bako1987 - 21-02-2018 (21-02-2018, 10:35)OMK napisał(a): https://forbot.pl/blog/wszystko-co-musisz-wiedziec-aby-uruchomic-pwm-id5021 Prawdopodobnie jeszcze będę musiał do tego dorosnąć by zrozumieć Niestety nie potrafię nigdzie poukładać moich linijek, aktualnie pominąłem efekt piszczenia poprzez wyeliminowanie momentu bezwładności zadziałania silnika: Kod: int pot = A0; // pin A0 =analogowe wejscie potencjometr PS: temat nie jest zakończony gdyż nadal chciałbym ruszyć silnikiem na innej częstotliwości. Chętnego na podanie prostego kodu od początku do końca z użyciem potencjometru który steruje wyjściem PWM z możliwością zmiany częstotliwości do zasilania silnikiem jak najbardziej potrzebuję . Aktualnie w skromnej samoocenie problem piszczenia tylko zatuszowałem :X RE: PWM - piszczenie silnika - bako1987 - 22-02-2018 Nie dawało mi to spokoju, i jednak coś wyszło Kod: #include <PWM.h> //zainklementowana biblioteka jakby ktoś nie mógł ściągną potrzebnej biblioteki : RE: PWM - piszczenie silnika - Robson Kerman - 22-02-2018 G woli ścisłości dla potomnych, wytłumaczmy sobie działanie programu z poprzedniej strony i dla czego nie robił tego co by autor chciał żeby robił. Zaznaczyć trzeba, że program robi zawsze to, do czego został napisany. W naszym przypadku te dziwne zaklęcia w stylu: TCCR2A = _BV(COM2B1) | _BV(WGM21) | _BV(WGM20); włączają dwa kanały timera. Kanał A na 38.4kHz (no nie do końca się zgodzę z autorem), kanał B na połowę kanału A. Po różnych czarodziejskich wyrażeniach na nogę PIN3 wystawiony zostaje sygnał o częstotliwości kanału A z wypełnieniem 50% (ponieważ B/A=0.5). Dopiero w funkcji loop(); mamy pinMode(3, pot2); To znaczy, że jak pot2>0, to PIN3 ustawiony zostaje jako wyjście i otrzymujemy na nim sygnał z zegara. Silnik nie pracuje na pełnych obrotach jak to napisał bako1987, tylko na 50%. Potencjometr po prostu włącza i wyłącza sygnał PWM na nodze 3. Chcąc rozwiązać nasz problem, musimy zacząć sterować wypełnieniem, czyli nomen omen wartością kanału B dla OCR2. I myślę, że w tym przypadku powinno to wyglądać tak: void loop(){ int pot = (analogRead(A0)); val = map(val, 0, 1023, 0, 51); OCR2B=val; } Rozwiązanie bako1987 z wykorzystaniem biblioteki PWM, jest dokładnie tym samym co ja tu napisałem, tylko że biblioteka jest opasła ze względu na zawartość wielu niepotrzebnych nam funkcji( niepotrzebnych w tym przypadku) Dla usprawnienia można jedynie użyć makra digitalPinToTimer. Pozdrawiam. RE: PWM - piszczenie silnika - Robson Kerman - 22-02-2018 Aha i jeszcze jedno. MOSFET piszczy, ponieważ sygnał kluczujący jest w zakresie częstotliwości słyszalnej. Dla 39kHz już tego nie słychać. |