Skocz do zawartości

PWM - tryby pracy Timera1 w Atmega 8


meros

Pomocna odpowiedź

Witam,
PWM jest mi potrzebny do sterowania prędkością dwóch silniczków (np. ze stacji cd) niezależnie za pomocą Atmegi 8.

Po przeczytaniu dokumentacji dla Timera0 rozumiałem wszystko, natomiast dla Timera1 już się troche pogubiłem. Do sterowania silnikami mam zamiar użyć wyłącznie Timera1 dlatego to jest dla mnie ważne.

W Timerze0 sprawa była dość prosta, TCNT0 cały czas się zmieniał z 0 do 255, a za pomocą ORC0 sterowałem wypełnieniem. W Timerze1 natomiast jest OCR1A i OCR1B, i znacznie większa tabela jesli chodzi o tryby pracy (WGM1 3:0 ). Który tryb powinienem zastosować ?

Wg. tabeli ww większości trybów jako TOP jest OCR1A, a jak to sie ma do OCR1B ?

proszę o pomoc 🙂

Link do komentarza
Share on other sites

Bierz te z tabeli w których TOP jest określone jako ICR, albo jako stała wartość z określoną liczbą bitów. Wypełnieniem sterujesz poprzez OCR1A/B. Fast PWM czy phase correct nie ma dużego znaczenia (chociaż pc jest moim zdaniem lepsze do silników), warto przy korzystaniu z dwóch silników korzystać z negacji, powinny być mniejsze zakłócenia na zasilaniu.

Link do komentarza
Share on other sites

No właśnie tak zamierzałem zrobić, tzn jako TOP wykorzystać te tryby dla których jest stała wartość.

A mógłbyś dokładniej opisać o co chodzi z tym ICR ? Czy dobrze rozumiem, że licznik będzie liczył do wartości w ICR a OCR1A/B steruje wypełnieniem (wg. tego co napisałeś).

I jeszcze jedno, o co chodzi z tą negacją ?

dzięki za odpowiedz 🙂

[ Dodano: 23-12-2010, 09:54 ]

A i jeszcze pytanie. Jak w takim razie ustalić częstotliwość PWM'a ? Jeżeli korzystam z trybów ze stałej liczby bitów (8, 9, 10) to wartości są ustalone, a dla ICR moge dowolnie dobrać (jeżeli to wyżej było poprawnym rozumowaniem), tak 😃 ?

I jaka częstotliwość (wartośc) będzie dobra do takich silników ?

Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

Mi l293d działa na częstotiwości ponad 40kHz.

Fajnie, że działa ale mam nadzieję, że tego nie używasz. Do silników zazwyczaj odpowiednia jest częstotliwość rzędu pojedynczych kiloherców.

Link do komentarza
Share on other sites

@meros: ustawienia trybu pracy pinów jako inverted. W takim przypadku przy mniejszym wypełnieniu płynie mniejszy maksymalny prąd z akumulatora i przez krótszy czas, ponieważ jeden silnik jest załączany w momencie kiedy drugi jest odłączony od zasilania, albo za chwilę ma być odłączony (w takim przypadku prąd ma mniejszą wartość skuteczną). Częstotliwość zwykle dobra jest ok. 1kHz, bo wyżej zarówno sterownik się bardziej grzeje jak i pisk jest o wiele bardziej nieprzyjemny.

Link do komentarza
Share on other sites

Ustawilem PWM, Phase Correct, 9-bit z preskalerem = 8 co mi daje 978,47 Hz czyli blisko 1kHz. I za pomocą OCR1A steruje wypełnieniem silnika 1, natomiast OCR1B steruje wypełnieniem silnika 2. no właśnie ten drugi silnik coś mi wogóle nie działa... co robie źle ?

Link do komentarza
Share on other sites

Z tego co pamiętam, to ten timer może działać dwukanałowo, jeśli jest ustawiony w trybie 8bit, w 9 i 10 OCR1A i B są młodszą i starszą częścią 9 lub 10 bitowego wypełnienia. Teraz nie dam sobie reki uciąć, ale tak mi się wydaje.

Link do komentarza
Share on other sites

dwukanałowo, czyli rozumiem, ze to jest to o co mi chodzi, tzn. niezależne sterowanie dla OC1A i OC1B.

OCR1A i B są młodszą i starszą częścią

hmm.. ale OCR1A i B są oba 16 bitowe to jak mogą stanowić jednocześnie młodszą i starszą część w/w wypełnienia ? Jak mam tym sterowac ?

Link do komentarza
Share on other sites

Dobrze rozumiesz OCR1A i OCR1B zapewnia niezależne działanie dwóch kanałów 😉

Tu masz przykładowe ustawienie PWM w trybie Phase and Frequency Correct dla megi16/32:

	/* PWM */
DDRD |= (_BV(5))|(_BV(4));
ICR1  = 500;						// Max wartosc
OCR1A = 0;						// Watosc poczatkowa kanal 1
OCR1B = 0;                                              // Watosc poczatkowa kanal 2
TCCR1A = (1<<COM1A1)|(1<<COM1B1);	// Clear on compare match when up-counting
TCCR1B = (1<<WGM13)|(1<<CS11);		// Wartosci od 0 do ICR1 | preskaler 8
Link do komentarza
Share on other sites

hmm.. ale OCR1A i B są oba 16 bitowe to jak mogą stanowić jednocześnie młodszą i starszą część w/w wypełnienia ? Jak mam tym sterowac ?

Zapewne mój błąd, napisałem trochę analogicznie do ADC, którego wartość w AVRach jest rozbita na dwa rejestry.

Link do komentarza
Share on other sites

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.