Kanał - ATNEL tech-forum
Wszystkie działy
Najnowsze wątki



Teraz jest 27 lis 2024, o 05:13


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 4 ] 
Autor Wiadomość
PostNapisane: 16 maja 2015, o 14:20 
Offline
Nowy

Dołączył(a): 16 maja 2015
Posty: 4
Pomógł: 0

Witam.

Potrzebuję zrobić dwa generatory o jednakowej częstotliwości z tym, że drugi generator ma być przesuwany w fazie w stosunku do pierwszego.

Próbowałem wykorzystać do tego przerwanie timera dla pierwszego generatora a drugim sterować poprzez wpisanie odpowiednich wartości do rejestru OCR1A i niby wszystko działa ale podczas zmian wartości OCR1A nagle sygnał odwracany jest o 180 stopni.
Dzieje się to przy różnych wartościach OCR1A.

Składnia: [ Pobierz ] [ Ukryj ]
język basic4gl
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Da się coś na to zaradzić? A może ktoś ma pomysł jak to inaczej zrealizować?

P.S. W załączniku wysłałem obrazek ilustrujący o jakie przesunięcie w fazie mi chodzi. Przepraszam, że w ten sposób go wrzucam ale opcja "Dodaj obrazek" otwiera główną stronę forum.


Załączniki:

Aby zobaczyć załączniki musisz się zalogować. Tylko zalogowani użytkownicy mogą oglądać i pobierać załączniki.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 16 maja 2015, o 19:31 
Offline
Nowy

Dołączył(a): 16 maja 2015
Posty: 4
Pomógł: 0

Przyznam, że o zerowaniu timera nie pomyślałem, a faktycznie lepiej to teraz pracuje.
Niestety nie jest tak różowo jak by się mogło na początku wydawać.
Przy zmniejszaniu wartości Compare1b z 68 na 67 następuje odwrócenie sygnału :( Podobnie jak w moim kodzie z tym, że w Twoim dzieje się to w konkretnym miejscu a nie jak u mnie w kilku.
Mam nadzieję, że w dalszej części projektu nie będzie miało to znaczenia gdyż prawdopodobnie do tak niskich wartości nie będzie potrzeby schodzić. Inaczej nie wiem co z tymi sygnałami wykombinować.

Mimo tego bardzo dziękuję za pomoc i wyjaśnienie kilku spraw. :)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 16 maja 2015, o 19:59 
Offline
Nowy

Dołączył(a): 16 maja 2015
Posty: 4
Pomógł: 0

Skoro kolega taki skłonny do pomocy (za co bardzo dziękuję) to takie małe sprostowanie co do projektu.

Kod który kol. napisał już mi dużo pomoże jednak dążę do troszkę innej wersji niż opisana w pierwszym poście. Celowo nie opisywałem całości aby jak najprościej opisać problem.
Zależy mi na tym aby na jednym pinie otrzymać stały sygnał o częstotliwości około 7-10KHz a na dwóch pozostałych przesunięcie względem pierwszego (sygnału wiodącego).
Pierwszy z sygnałów przesuniętych w fazie w okolicach 90 stopni, drugi natomiast w granicach 180-240 stopni.

Sygnał podstawowy robiłem na przerwaniu timera1 a dwa przesunięte w fazie po wpisywaniu wartości do OCR1A i dla drugiego sygnału OCR1B. Wszystko działało do czasu kiedy nagle jeden z sygnałów przesuniętych w fazie został odwrócony po zmianie wartości OCR.

Przepraszam za zamieszanie ale lepiej teraz jak później zakładać nowy temat czy też mieszać w obecnym.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 18 maja 2015, o 14:01 
Offline
Nowy

Dołączył(a): 16 maja 2015
Posty: 4
Pomógł: 0

Posiedziałem pokombinowałem i w końcu wpadłem na to dlaczego tak "dziwnie" się to zachowywało.
Otóż cała sprawa dotyczy momentu kiedy wpisuje się zmienna do rejestru OCR.
Nie można tego robić w głównej pętli programu a to dlatego, że jeśli przykładowo licznik liczy od 60000 i dajmy na to doliczy do 60050 (OCR = 60050, tutaj zmiana stanu na końcówce) i zaczniemy zwiększać zmienną w rejestrze OCR to dzieje się to na tyle szybko, że dochodzi jakby do wyprzedzenia wartości licznika (OCR=62000 a licznik doliczył dopiero do 61000) to siłą rzeczy nastąpi ponowna zmiana stanu.

Nie wiem czy dobrze to rozumiem ale robiąc to w ten sposób, że zmienną A zmieniam w pętli a w przerwaniu timera wpisuję ją do rejestru cały problem zniknął. Zmiana fazy działa płynnie w obie strony dla OCR1A lub OCR1B i nie występuje wcześniej opisana zmiana sygnału o 180 stopni.

Mam nadzieję, że dobrze zrozumiałem błąd jeśli nie to proszę o poprawienie mojego toku myślenia :)

Teraz zastanawiam się czy dałoby się zrobić coś podobnego z wykorzystaniem PWM. Mógłbym w ten sposób nie tylko zmieniać fazę sygnału ale też jego wypełnienie. Inaczej mówiąc dokładnie określać w jakim punkcie okresu pobieram próbkę.
Jak by ktoś mógł potwierdzić czy da się w ten sposób sterować PWM...?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
Wyświetl posty nie starsze niż:  Sortuj wg  
Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 4 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 1 gość


Nie możesz rozpoczynać nowych wątków
Nie możesz odpowiadać w wątkach
Nie możesz edytować swoich postów
Nie możesz usuwać swoich postów
Nie możesz dodawać załączników

Szukaj:
Skocz do:  
cron
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO