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



Teraz jest 9 mar 2025, o 23:36


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 17 ] 
Autor Wiadomość
PostNapisane: 15 kwi 2017, o 11:51 
Offline
Użytkownik

Dołączył(a): 17 mar 2017
Posty: 30
Pomógł: 0

Czy jest możliwe wygenerowanie impulsów o zmiennej szerokości z możliwością przesunięcia w fazie względem siebie?
Mój uC to ATmega16.
Np. takie przebiegi z regulacją czasu trwania tych impulsów.
Obrazek



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 15 kwi 2017, o 12:43 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 11 sty 2013
Posty: 1760
Pomógł: 196

Witam
Wypełnienie stałe czy zmienne/regulowane?
Jeśli stałe, to możesz wyodrębnić stałą czasową przy której następują zmiany na PIN_OUT.
Programowo zapisać:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

OUTx_ON itp. w #define (np.: ) OUT1_ON |= (1<<PB1) - tak samo z OFF'em.

Pozdr.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 15 kwi 2017, o 15:25 
Offline
Użytkownik

Dołączył(a): 17 mar 2017
Posty: 30
Pomógł: 0

Właśnie chciałbym zrobić zmienne wypełnienie. I do tego regulację częstotliwości tych impulsów.
Coś jak PWM tylko żeby była możliwość przesunięcia w fazie.
W PWM częstotliwość regulowałem przez zmianę rejestru ICR1 Timera1 i do tego dobierałem odpowiednią wartość OCR1A żeby ustalić wpsółczynnik wypełnienia.
Brałem pod uwagę, że przerwanie się generuje raz na jeden okres pożądanego przebiegu.
Jeśli dobrze to sobie wyobraziłem to w Twoim sposobie wygenerowanie po raz szósty przerwania będzie oznaczało cały okres, tak?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 15 kwi 2017, o 17:35 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 11 sty 2013
Posty: 1760
Pomógł: 196

Witam
filipbaza napisał(a):
w Twoim sposobie wygenerowanie po raz szósty przerwania będzie oznaczało cały okres, tak?

Jeśli wszystkie trzy impulsy będą miały swój start/stop w tym samym czasie, jeśli nie to musiałbyś obliczyć najmniejszą cząstkę czasu aby niezależnie sterować poszcz. wyjściami.
Obrazek
...ot taki nieudolny graf - wiem że tłumaczę mętnie ale ja wiem o co mi chodzi :) .
Tylko to mogłoby działać dla stałej częstości, gdy ją zmienisz to wszystko weźmie w łeb.

Pozdr.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 15 kwi 2017, o 18:18 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 01 lis 2015
Posty: 1448
Lokalizacja: okolice Warszawa
Pomógł: 149

a może coś w tę stronę, - takie rozwinięcie pomysłu kolegi "kicajek".
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

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



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 15 kwi 2017, o 18:25 
Offline
Użytkownik

Dołączył(a): 17 mar 2017
Posty: 30
Pomógł: 0

Więc mam:
Włączony tryb CTC
Preskaler 256
TOP ustawiony na ICR1 = 31250
Przerwanie od porównania:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

częstotliwość przerwania = CPU/256/31250 i wychodzi 1 Hz.
Czyli cały okres przebiegu trwa 6 *1s, bo mam 6 stanów wyjścia.
Każde wyjście jest załączone dokładnie przez połowę okresu.
Częstotliwość zmieniam wartością ICR1.
To już połowa sukcesu. :P
Czy teraz jest możliwe żeby regulować wypełnienie tych wyjść?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 15 kwi 2017, o 18:34 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 01 lis 2015
Posty: 1448
Lokalizacja: okolice Warszawa
Pomógł: 149

zwiększ częstotliwość przerwania ze 100 razy, w przerwaniu zliczaj cnt do np 100.
a porownania zrób do większych wartości w zakresie 0-99 lub 1-100.
jakoś. :)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 15 kwi 2017, o 20:04 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 11 sty 2013
Posty: 1760
Pomógł: 196

Witam
Ja też piszę na zasadzie " ja bym tak próbował" a nie "widziałem ...."
Myślę że można by zrobić taką rozpiskę każdego przebiegu: 1. start impulsu; 2.długość impulsu(zamiast stop impulsu) - tylko nie wiem ile pomieścisz w przerwaniu ale ( i to jest dobre :P )
Daro69 napisał(a):
jakoś :)


Pozdr.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 15 kwi 2017, o 20:27 
Offline
Użytkownik

Dołączył(a): 17 mar 2017
Posty: 30
Pomógł: 0

Wydaje mi się, że przy takim podziale dostanę coś takiego(przy wypełnieniu 50 %):
Obrazek



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 15 kwi 2017, o 22:50 
Offline
Użytkownik

Dołączył(a): 17 mar 2017
Posty: 30
Pomógł: 0

Już chyba załapałem Wasze podpowiedzi :D
Może jutro rano to skończę.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 17 kwi 2017, o 13:56 
Offline
Użytkownik

Dołączył(a): 17 mar 2017
Posty: 30
Pomógł: 0

Działa wszystko oprócz wyświetlenia procentu wypełnienia na LCD.
51 to długość półokresu czyli najdłuższa jaką może mieć każdy impuls.
t to koniec trwania impulsu.
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Jeśli wpiszę do wsp np. 45,77777 to normalnie wyświetla 45 na LCD.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 17 kwi 2017, o 14:53 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 01 lis 2015
Posty: 1448
Lokalizacja: okolice Warszawa
Pomógł: 149

Jeżeli wsp to np. double, xxx,xxx
To odejmij od niej rzutowanie uint8, zostanie 000,xxx
Teraz pomnożyć przez 1000. Będzie xxx, ...
Wyświetl przecinek i obliczaną wartość.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 17 kwi 2017, o 15:19 
Offline
Użytkownik

Dołączył(a): 17 mar 2017
Posty: 30
Pomógł: 0

wsp to też uint8_t.

Zmieniłem na:
wsp =(t*100)/51;
Już wszystko działa tak jak trzeba.
Dzięki za pomoc.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 18 kwi 2017, o 08:16 
Offline
Użytkownik

Dołączył(a): 26 cze 2016
Posty: 186
Pomógł: 7

filipbaza napisał(a):
Czy jest możliwe wygenerowanie impulsów o zmiennej szerokości z możliwością przesunięcia w fazie względem siebie?


Mnie jako radiowca trochę razi mówienie o fazie w przypadku sygnałów niesinusoidalnych. Prawidłowo w fazie
można porównać przebiegi sinusoidalne o tej same częstotliwości. Faza to jest kąt.
To tak na marginesie, wiem, że taki żargon ;)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 18 kwi 2017, o 08:51 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 31 mar 2015
Posty: 310
Pomógł: 18

A ja jestem min. automatykiem przemysłowym i mnie to nie razi ;) Przebiegi okresowe można przedstawić w Szeregu Fouriera. Fourier zajmował się rozchodzeniem ciepła - to tak na marginesie. Kolega @filipbaza powinien(moja propozycja) określić częstotliwość pierwszego PWM-a. Odwrotnością częstotliwości jest czas trwania okresu.
Dzieląc okres na np. 100 części - uzyska łatwość regulacji PWM(wypełnienia okresu). Powielenie sygnałów PWM już zrobił. Teraz to przesunięcie względem sygnałami - wzorem jest pierwszy sygnał, a kolejne aktywują się po kolejnej części pierwszego. :?: :idea:



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 19 kwi 2017, o 07:43 
Offline
Użytkownik

Dołączył(a): 26 cze 2016
Posty: 186
Pomógł: 7

Wirnick napisał(a):
A ja jestem min. automatykiem przemysłowym i mnie to nie razi ;) Przebiegi okresowe można przedstawić w Szeregu Fouriera.


No i tu jest podstawowa zagwozdka. Względem której harmonicznej liczyć ten kąt fazowy? Może być przypadek, że 1 harmoniczna jest silnie wytłumiona.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 19 kwi 2017, o 08:35 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 31 mar 2015
Posty: 310
Pomógł: 18

Cieszę się, że Filipowi to pięknie działa. Czarku - rozpatrywanie PWM(wypełnienia okresu) poprzez wykres wskazowy musielibyśmy rozpocząć od zera układu kartezjańskiego. Gdzie to zero jest. A jest pomiędzy zerem logicznym i jedynką logiczną. Czyli w strefie wysokiej impedancji. Łatwiej posługiwać się czasem okresu i przy 100%PWM jest miejsce na tik końca i zarazem początku nowego okresu. Nie wiem, czy sobie dobrze tłumaczę tom zagwozdkę?



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: 17 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

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


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:  
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO