Goto page 1, 2 Next
Robbo
Guest
Mon Aug 31, 2009 9:08 pm
Witam,
Przymierzam się do wykonania oprogramowania
mikrokontrolera Atmel AVR ATmega, które
służyłoby do generowania sinusoidy o częstotliwości
od 0 do 400Hz. Rozważam tu podejście polegające
na stablicowaniu próbek połówki sinusoidy i
"wysyłaniu" ich na zewnętrzny przetwornik cyfrowo
-analogowy. Zrobiłbym funkcję, która byłaby
przez "timer" wywoływana z odpowiednią
czestotliwością (np. 400*256Hz dla częstotliwości
400Hz i przetwornika 8-bitowego).
Problem jednak z płynną regulacją częstotliwości
od 0 do 400Hz. Tzn. wystarczyłaby mi rozdzielczość
1Hz. Niemniej i tak operując prescalerem i OCR2
nie da się uzyskać wszystkich możliwych częstotliwości.
Byłbym wdzięczny za radę, jak rozwiązać ten problem.
Pozdrawiam,
Robbo
Zbych
Guest
Mon Aug 31, 2009 9:18 pm
Robbo pisze:
Quote:
Byłbym wdzięczny za radę, jak rozwiązać ten problem.
To czego szukasz to DDS:
http://www.myplace.nu/avr/minidds/index.htm
--
przeciez moje rozumowanie bylo bez skazy,
no sam bym wskoczyl do tego wulkanu,
ale kto by tak pieknie gwizdal...
ici
Guest
Mon Aug 31, 2009 9:21 pm
Poszperaj na elektrodzie pod hasłem DAC Generator lub Generator sygnałowy.
Problem jest już rozwiązany i opisany przez innych chobbystów.
Tez się przymierzałem do tego tematu, znalazłem jedynie kody w Assemblerze i
skompilowany wsad do AVR-ka.
Szkoda, że więcej źródła nie znalazłem.
Łukasz Góralczyk
Guest
Mon Aug 31, 2009 11:40 pm
On Mon, 31 Aug 2009 22:08:03 +0200, Robbo wrote:
[ciach]
Quote:
do 400Hz. Rozwaam tu podejcie polegajce na stablicowaniu próbek
poówki sinusoidy i "wysyaniu" ich na zewntrzny przetwornik cyfrowo
Wystarczy zrobić tablicę dla 1/4 i potem odpowiednio czytać wartości (w
przód/w tył), ale jeśli pamięci w zapasie to można wrzucić 1/2.
Quote:
-analogowy. Zrobibym funkcj, która byaby przez "timer" wywoywana z
odpowiedni czestotliwoci (np. 400*256Hz dla czstotliwoci 400Hz i
przetwornika 8-bitowego).
Chyba bardziej poprawnie "400 Hz * 256" dla 256 próbek

.
Quote:
Problem jednak z pynn regulacj czstotliwoci od 0 do 400Hz. Tzn.
wystarczyaby mi rozdzielczo 1Hz. Niemniej i tak operujc prescalerem
i OCR2 nie da si uzyska wszystkich moliwych czstotliwoci. Bybym
wdziczny za rad, jak rozwiza ten problem.
Hmm... ciężko. Przyszło mi do głowy żeby generować sinusoidę ze zmienną
liczbą próbek na okres. Tę liczbę próbek tak dobierać aby pojedynczy
kwant czasu był wielokrotnością możliwego kwantu uzyskiwanego z
przerwania od timera. Np. dla 400 Hz i 100 próbek (na okres) musisz
wysyłać próbkę co 25 us. Ustalasz sobie tick zegara na np. 2,5 us (4 MHz,
8 MHz i prescaler na 2, itd.) i co dziesiąty tik timera wysyłasz próbkę
(korzystając z trybu CTC). Dla 399 Hz dobieramy ilość próbek tak alby
przerwanie generowało się co wielokrotność 2,5 us, np. dla 125 wychodzi
że trzeba wystawiać próbkę co 20,05 us czyli co ok. 8 taktów zegara
timera. Dla 398 Hz i 84 próbek generujesz przerwanie co 29,91 us ~= 30 us
=> 12 taktów zegara i tak dalej.
Lepiej zastosować szybkie taktowanie procesora, powinno być więcej
rezerwy, można zejść niżej z tym kwantem (dla 10 MHz masz cykl 0,1 us,
czyli 20 us to 200 instrukcji /realnie ze 140/). Do policzenia optymalnej
liczby próbek dla danego kwantu i częstotliwości lepiej użyć stacjonarny
komputer i zrobić z tego tabelkę - obliczenia raczej proste ale sinus by
się musiał wstrzymać na trochę. Przy tej metodzie zawsze będziesz miał
jakąś odchyłkę od całkowitej liczby Hz (błąd łatwo policzyć). Przy
wyższych częstotliwościach CPU będzie i czas na inne rzeczy (np. miganie
diodą).
Inne rozwiązanie to generator sterowany napięciem + precyzyjny
przetwornik D/A - ładny sinus, łatwe sterowanie.
--
Łukasz.
Sylwester Łazar
Guest
Tue Sep 01, 2009 9:59 am
Quote:
1Hz. Niemniej i tak operując prescalerem i OCR2
nie da się uzyskać wszystkich możliwych częstotliwości.
Byłbym wdzięczny za radę, jak rozwiązać ten problem.
Pozdrawiam,
Robbo
Tak jak kolega napisał, to czego Pan potrzebuje to pewnie koncepcja DDS.
Trzeba ją dobrze przestudiować. To nie jest trudne.
Najważniejsza sprawa to tzw. akumulator fazy np. 32- bitowy.
Wyjaśnia to karta:
www.alpro.pl/HSP45102.pdf
do takiego akumulatora dodaje się sprzętowo, co tak zegara (np. 40MHz)
wartość odpowiadającą częstotliwośc pożądanej.
Trzeba to policzyć.
Do tablicy, którą kolega chce zrobić, należy brać np. najstarsze 13 bitów z
akumulatora fazy
Trzeba mieć na uwadze, że sygnał z DDS jest stabilny częstotliwościowo, ale
słaby ze względu na glitche,
czyli drgania zboczy.
Zależy do czego ma służyć ten generator. Może RC sterowany uC będzie lepszy?
--
-- .
pozdrawiam
Sylwester Łazar
http://www.alpro.pl
http://www.rimu.pl -oprogramowanie do edycji schematów
i projektowania PCB
wt
Guest
Tue Sep 01, 2009 7:02 pm
Quote:
Przymierzam się do wykonania oprogramowania
mikrokontrolera Atmel AVR ATmega, które
służyłoby do generowania sinusoidy o częstotliwości
od 0 do 400Hz.
Dlaczego robi się takie komplikacje. Czy nie wystarczy przepuścić prostokąt
przez mały transformatorek i otrzymamy naturalną, ładną ekologiczną
sinusoidę.
Papa Smerf
Guest
Tue Sep 01, 2009 8:00 pm
Órzytkownik "wt" napisał:
Quote:
Dlaczego robi się takie komplikacje. Czy nie wystarczy przepuścić
prostokąt przez mały transformatorek i otrzymamy naturalną, ładną
ekologiczną sinusoidę.
bo to jest modne, na topie, w technologii mikroprocesorowej, na dodatek jak
sie wykona za pomocą wypasionych narzędzi programistycznych to będzie
zajebisty generator zwykłej sinusoidy:O)
J.F.
Guest
Tue Sep 01, 2009 8:48 pm
On Tue, 1 Sep 2009 20:02:05 +0200, wt wrote:
Quote:
Przymierzam się do wykonania oprogramowania
mikrokontrolera Atmel AVR ATmega, które
służyłoby do generowania sinusoidy o częstotliwości
od 0 do 400Hz.
Dlaczego robi się takie komplikacje. Czy nie wystarczy przepuścić prostokąt
przez mały transformatorek i otrzymamy naturalną, ładną ekologiczną
sinusoidę.
I otrzymamy nieladny prostokat
No chyba ze transformator bedzie za maly, to wtedy otrzymamy cos
zupelnie innego.
J.
Papa Smerf
Guest
Tue Sep 01, 2009 9:23 pm
Órzytkownik "J.F." napisał:
Quote:
I otrzymamy nieladny prostokat
No chyba ze transformator bedzie za maly, to wtedy otrzymamy cos
zupelnie innego.
to był tylko jeden z wielu pomysłów, podejrzewam że najprostszy,
a jak chcesz idealną sinusoidę to robisz prosty generator sinusoidalny
sterowany napięciem i to napięcie możesz podawać z procesorka, proste i
super wypasione?:O)
RoMan Mandziejewicz
Guest
Tue Sep 01, 2009 9:58 pm
Hello wt,
Tuesday, September 1, 2009, 8:02:05 PM, you wrote:
Quote:
Przymierzam się do wykonania oprogramowania
mikrokontrolera Atmel AVR ATmega, które
służyłoby do generowania sinusoidy o częstotliwości
od 0 do 400Hz.
Dlaczego robi się takie komplikacje. Czy nie wystarczy przepuścić prostokąt
przez mały transformatorek i otrzymamy naturalną, ładną ekologiczną
sinusoidę.
Że co?
--
Best regards,
RoMan mailto:roman@pik-net.pl
Spam:
http://www.allegro.pl/sklep/7416823_squadack
Sebastian BiaĹy
Guest
Tue Sep 01, 2009 11:22 pm
wt wrote:
Quote:
Dlaczego robi si takie komplikacje.
Bo te komplikacje w pewnych sytuacjach moga być najłatwiejszym i
najtańszym rozwiązaniem problemu. Juz się nawet nie opłaca mrygałki
robic na tranzystorach kiedy obok leży uC za $1.
marko1a
Guest
Wed Sep 02, 2009 1:39 pm
Użytkownik "Papa Smerf" <Papa@zagurami.zalasami.trala.la> napisał w
wiadomości news:h7k18a$n83$2@nemesis.news.neostrada.pl...
Quote:
to był tylko jeden z wielu pomysłów, podejrzewam że najprostszy,
a jak chcesz idealną sinusoidę to robisz prosty generator sinusoidalny
sterowany napięciem i to napięcie możesz podawać z procesorka, proste i
super wypasione?:O)
A ja bym zrobił na DDS np. AD9831. Zastosowałbym zegar wspólny z atmegą i
mamy piękny generatorek nie tylko do 400Hz ale spooro wyżej.
Marek
J.F.
Guest
Wed Sep 02, 2009 4:33 pm
Użytkownik "Papa Smerf" <Papa@zagurami.zalasami.trala.la> napisał w
wiadomości news:h7k18a$n83$2@nemesis.news.neostrada.pl...
Quote:
Órzytkownik "J.F." napisał:
I otrzymamy nieladny prostokat
No chyba ze transformator bedzie za maly, to wtedy otrzymamy cos
zupelnie innego.
to był tylko jeden z wielu pomysłów, podejrzewam że najprostszy,
ALe bledny :-)
Quote:
a jak chcesz idealną sinusoidę to robisz prosty generator
sinusoidalny sterowany napięciem i to napięcie możesz podawać z
procesorka, proste i super wypasione?:O)
Mozna to zrobic na wiele roznych sposobow, to i dyskusja sie
rozwija :-)
J.
Papa Smerf
Guest
Wed Sep 02, 2009 5:25 pm
Órzytkownik "marko1a" napisał:
Quote:
A ja bym zrobił na DDS np. AD9831. Zastosowałbym zegar wspólny z atmegą i
mamy piękny generatorek nie tylko do 400Hz ale spooro wyżej.
ale to nie będzie "czysta" sinusoida:O)
będziesz to musiał wyfiltrować, proste dla stałej częstotliwości, z
przestrajaniem moze być problem:O)
marko1a
Guest
Thu Sep 03, 2009 12:51 pm
Użytkownik "Papa Smerf" <Papa@zagurami.zalasami.trala.la> napisał w
wiadomości news:h7m8np$6l$1@nemesis.news.neostrada.pl...
Quote:
ale to nie będzie "czysta" sinusoida:O)
będziesz to musiał wyfiltrować, proste dla stałej częstotliwości, z
przestrajaniem moze być problem:O)
Eee tam. Wystarczy LPF i juz po problemie.
Myślisz ze prosto z atmela sinusoida nie będzie wymagała odfiltrowania
śmieci?
Marek
Goto page 1, 2 Next