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



Teraz jest 16 kwi 2026, o 11:29


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 8 ] 
Autor Wiadomość
PostNapisane: 30 gru 2015, o 17:00 
Offline
Nowy

Dołączył(a): 30 gru 2015
Posty: 4
Pomógł: 0

Dzień Dobry, Dobry Wieczór
Muszę wygenerować 3 sygnały PWM.
Pierwszy sygnał Częstotliwość: 1 kHz Wypełnienie: 4%
Drugi sygnał musi być opóźniony od pierwszego o 40 μs i czasie trwania 15 μs
Trzeci sygnał powinien być opóźniony o 15 μs i jego czas trwania wynosić musi 15 μs

Jaki μC może do tego się nadać chciałbym aby był jak najmniej obszerny. Wytłumaczy mi ktoś jak to napisać?

Dodaje plik podglądowy. Jak to ma wyglądać.
Obrazek



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 30 gru 2015, o 17:26 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 11 mar 2014
Posty: 1475
Pomógł: 167

Do tego nada się nawet atmega8.
Jakiej dokładności wymagasz?
Jak nic innego nie potrzebujesz robić na procesorze, to możesz to zrobić całkowicie liniowo (delay-ami). Możesz też zrobić odliczanie czasu przy użyciu timera.

--
Pozdrawiam,
Robert



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 30 gru 2015, o 17:30 
Offline
Nowy

Dołączył(a): 30 gru 2015
Posty: 4
Pomógł: 0

A jaka najbliższa wartość?
Tak na oko max 80hz różnicy.
A da się delay'ami to zrobić? bo każdy z trzech sygnałów powinien mieć 1 kHz tylko odpowiednio opóźnione od siebie.

Ale chyba z delay nic nie wyjdzie, bo w późniejszej fazie planuje dopisywać kod



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 30 gru 2015, o 18:56 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 11 mar 2014
Posty: 1475
Pomógł: 167

Na początek zrób na timerze generowanie zdarzeń co 1 ms (1KHz). I od niej wyzwalaj sekwencję kolejnych impulsów po zadanym czasie. Z obrazka wynika, że różnica między początkiem pierwszego a końcem trzeciego sygnału to 15 + 40 + 15 + 15 + 15 => 100 us. Dlatego zostaje ci 90% czasu na inne działania.
W zależności co potrzebujesz więcej robić, to albo będziesz wchodził w jakieś zaawansowane mechanizmy lub zostawisz takie coś.

--
Pozdrawiam,
Robert

------------------------ [ Dodano po: 2 minutach ]

Czy wartości czasowe dla sygnałów będą się zmieniały czy są stałe?

------------------------ [ Dodano po: 3 minutach ]

Ten pierwszy sygnał ma także impuls o czasie 15us czy wypełnienie 4% lub 5%?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 30 gru 2015, o 19:57 
Offline
Nowy

Dołączył(a): 30 gru 2015
Posty: 4
Pomógł: 0

Wartości będą stałe pierwszy sygnał ma wypełnienie 4% pomyliło mi się na obrazku
A mógłbyś mi to wytłumaczyć jak to zrobić na Timer'ze?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 30 gru 2015, o 23:31 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 11 mar 2014
Posty: 1475
Pomógł: 167

Ustawiasz timer np. T0 w trybie CTC z okresem 1 ms (1kHz).
W pętli programu sprawdzasz znacznik przepełnienia i jak wystąpiło to go zerujesz i zaczynasz generowanie przebiegów:
- ustawiasz pin OUT1 na 1
- czekasz 40 us (wypełnienie 4%)
- kasujesz pin OUT1 na 0
- czekasz 40 us
- ustawiasz pin OUT2 na 1
- czekasz 15 us
- kasujesz pin OUT2 na 0
- czekasz 15 us
- ustawiasz pin OUT3 na 1
- czekasz 15 us
- kasujesz pin OUT3 na 0
Po czym znowu czekasz na wystąpienie przepełnienia timera.

Nawet jak będzie stosował blokującą pętlę i delay-e, to zajmuje ona 125 us. A pozostałe 875us masz wolne na inne działania.

Problem pojawi się gdy będziesz chciał dodawać inne czasochłonne elementy, bo będziesz musiał dobrze zarządzać czasem zajmowanym przez nie.
Możesz teoretycznie użyć przerwania timera, ale 125us to trochę dużo jak na procedurę obsługi przerwania. Więc zaproponowanie tego na tym forum byłoby świętokractwem. Ale jak będziesz wiedział co robisz i ta procedura byłaby bardzo krytyczną czasowo i nie korzystałbyś z innych częstych przerwań to możesz też coś takiego rozważyć.

--
Pozdrawiam,
Robert



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 31 gru 2015, o 09:30 
Offline
Nowy

Dołączył(a): 30 gru 2015
Posty: 4
Pomógł: 0

Tak coś przeczuwałem że będę musiał zrobić tak jak ty sądzisz
Raczej tam nie będzie nic innego obszernego. Program ma służyć jako wsad do wykrywacza metali z procesorem AVR
Sygnał 1 służy do generowania impulsów na cewkę. Odpowiednio zmieniając czas występowania sygnału 2 i 3 uzyskam dyskryminację wielkościową czyli nie będzie mi wykrywać gwoździ itp. :D

Ja również pozdrawiam, Szymon :D



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 1 sty 2016, o 01:39 
Offline
Użytkownik
Avatar użytkownika

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

Witam
Trochę "poglądowo" ale może taki sposób by zdał egzamin:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Dzielisz całkowity czas na najmniejszą jednostkę czasu która Cię interesuje i wyjdzie Ci ilość taktów w danym przedziale. Te warunki "takt>20..." wzięte z kapelusza, musisz sobie to policzyć; porty wyjściowe też jako przykład.

Pozdr.



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

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