• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
ATTINY24, a PWM z wyjściem przeciwsobnym
#1
Witajcie.
Sytuacja wygląda w ten sposób; potrzebuję zaprogramować uC attiny24 do generowania przebiegu PWM o zmiennym wypełnieniu na wyjściu OC1A oraz tego samego przebiegu, ale o odwróconym stanie i w zgodnej fazie na wyjściu OC1B. W zasadzie najprościej byłoby generować tylko jeden sygnał PWM, a następnie przy pomocy tranzystora PNP dorobić drugie, przeciwsobne wyjście, ale;
- skomplikuje to konstrukcję
- potrzebuję mieć również możliwość programowego ustawienia stanu niskiego na obu tych wyjściach (to też da się zrobić na tranzystorach, ale jeszcze bardziej skomplikuje układ, a miejsca jest niewiele)

Podsumowując; nie wiem w jaki sposób ustawić rejestry timera żeby na dwóch wyjściach generował komplementarny PWM w taki sposób aby nie występowała sytuacja, w której na obu wyjściach jednocześnie będzie stan wysoki. Natomiast, w moim przypadku, kwestię deadtime-u oraz częstotliwości generowanego przebiegu można pominąć.

Pamiętam, że kiedyś chyba zrobiłem coś podobnego na arduino z użyciem biblioteki TimerOne, ale w tym przypadku arduino jest jedynie programatorem dla wspomnianego uC, natomiast biblioteka TimerOne go nie obsługuje.

Będę wdzięczny za pomoc Smile
 
Odpowiedź
#2
A nie da się w ten deseń:
digitalWrite(OC1B,!digitalRead(OC1A));
Pomysł z kategorii zwariowanych Smile
 
Odpowiedź
#3
Ty tak na poważnie?
 
Odpowiedź
#4
No nie próbowałem, zwykle jak odpowiadam to albo wiem albo to przetestowałem. Ta odpowiedź była na zasadzie spróbuj. Jak nie działa to do kosza i już.
Jak wiesz, że takie coś jest niemożliwe to napisz słówko.
Ja raczkuję w programowaniu i na pewno nigdy nie będę sprinterem Smile
 
Odpowiedź
#5
Zobacz ten temat: PWM przesuniete w fazie
Miło być decenianym https://buycoffee.to/kaczakat
 
Odpowiedź
#6
Chyba nie do końca o to chodzi, a przynajmniej tak wynika z filmów zamieszczanych tam przez autorów.
Owszem, mają dwa wyjścia PWM i zależność, że jeśli na wyjściu A jest wypełnienie 25% to na wyjściu B jest 75%, ale brakuje tej synchronizacji, że stan wysoki na wyjściu B jest _tylko_ wtedy, gdy na wyjściu A jest stan niski.
 
Odpowiedź
#7
Naprawdę, nikt nic?
 
Odpowiedź
#8
Nie można timer ustawić na przepełnienie, i przerwaniu machać pinami?? Timer w locie prze konfigurować i mamy zmienną PWM i częstotliwość. A jedno wyjście jest synchronizowane z drugim i mozemy mieć przeciwne stany..

Tylko pewnie zbyt dużej częstotliwości nie można mówić..
Arduino zostało wymyślone po to, by robić dobrze jedną prostą rzecz – migać diodą. 
 
Odpowiedź
#9
Generalnie nie zależy mi na częstotliwości. Myślę, że te kilkaset Hz wystarczy. Jak ustawić ten timer?
 
Odpowiedź
#10
to zalezy jaką chcesz częstotliwość

Ale to będzie wyglądało mniej więcej tak,

Ustaw timer1 do przerwania ISR(TIMER1_COMPA_vect)

w przerwaniu ISR(TIMER1_COMPA_vect) prze konfiguruj timer na przerwanie ISR(TIMER1_COMPB_vect)

a w przerwaniu ISR(TIMER1_COMPB_vect) prze konfiguruj go na przerwanie ISR(TIMER1_COMPA_vect)

i w każdym przerwaniu machaj pinami dwóch wyjść ....

w jednym i drugim przerwaniu będzie trzeba ustawić OCR1A i OCR1B a wypełnienie to własnie stosunek ich czasów... Wiec jak chcesz częstotliwość stała 1kHz to suma OCR1A i OCR1B musi być zawsze równa 1ms...
Arduino zostało wymyślone po to, by robić dobrze jedną prostą rzecz – migać diodą. 
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości