Generator sinusoidy od 0 do 400Hz na uC

Do you have a question? Post it now! No Registration Necessary

Translate This Thread From Polish to

Threaded View
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



Re: Generator sinusoidy od 0 do 400Hz na uC
Robbo pisze:

Quoted text here. Click to load it

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,
We've slightly trimmed the long signature. Click to see the full one.
Re: Generator sinusoidy od 0 do 400Hz na uC
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.


Re: Generator sinusoidy od 0 do 400Hz na uC
[ciach]
Quoted text here. Click to load it

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.

Quoted text here. Click to load it

Chyba bardziej poprawnie "400 Hz * 256" dla 256 prĂłbek :) .

Quoted text here. Click to load it

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.

Re: Generator sinusoidy od 0 do 400Hz na uC
Quoted text here. Click to load it
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
We've slightly trimmed the long signature. Click to see the full one.
Re: Generator sinusoidy od 0 do 400Hz na uC
Quoted text here. Click to load it

Dlaczego robi się takie komplikacje. Czy nie wystarczy przepuścić prostokąt
przez mały transformatorek i otrzymamy naturalną, ładną ekologiczną
sinusoidę.



Re: Generator sinusoidy od 0 do 400Hz na uC
Órzytkownik "wt" napisał:
Quoted text here. Click to load it

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)


Re: Generator sinusoidy od 0 do 400Hz na uC
On Tue, 1 Sep 2009 20:02:05 +0200,  wt wrote:
Quoted text here. Click to load it

I otrzymamy nieladny prostokat :-)
No chyba ze transformator bedzie za maly, to wtedy otrzymamy cos
zupelnie innego.

J.


Re: Generator sinusoidy od 0 do 400Hz na uC
Órzytkownik "J.F." napisał:
Quoted text here. Click to load it

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)


Re: Generator sinusoidy od 0 do 400Hz na uC

Quoted text here. Click to load it

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




Re: Generator sinusoidy od 0 do 400Hz na uC
Órzytkownik "marko1a" napisał:
Quoted text here. Click to load it

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)


Re: Generator sinusoidy od 0 do 400Hz na uC

Quoted text here. Click to load it

Eee tam.  Wystarczy LPF i juz po problemie.
Myślisz ze prosto z atmela sinusoida nie będzie wymagała odfiltrowania
śmieci?

Marek




Re: Generator sinusoidy od 0 do 400Hz na uC
Witam,

marko1a pisze:

Quoted text here. Click to load it

Podstawowa wada tego rozwiązania to cena. :) Po ile stoją teraz te
układy w detalu? Kiedyś to chyba ponad 50zł na coś takiego chcieli, choć
ten co podałeś to zdaje się staroć...


--
Pozdrawiam,
Dykus.


Re: Generator sinusoidy od 0 do 400Hz na uC
Órzytkownik "Dykus" napisał:
Quoted text here. Click to load it

skoro chodzi o cenę to nic innego jak dyskretny przestrajany generator:O)


Re: Generator sinusoidy od 0 do 400Hz na uC

Quoted text here. Click to load it

Nie staroć. Nadal in stock price 6,33$ ale są też następcy juz od 4$.
http://www.analog.com/en/rfif-components/direct-digital-synthesis-dds/ad9831/products/product.html
Alfine Poznań pytaj.

Marek




Re: Generator sinusoidy od 0 do 400Hz na uC
Quoted text here. Click to load it

ALe bledny :-)

Quoted text here. Click to load it

Mozna to zrobic na wiele roznych sposobow, to i dyskusja sie
rozwija :-)

J.


Re: Generator sinusoidy od 0 do 400Hz na uC
Hello wt,


Quoted text here. Click to load it

Że co?


--
Best regards,
 RoMan                            mailto:roman@pik-net.pl
We've slightly trimmed the long signature. Click to see the full one.
Re: Generator sinusoidy od 0 do 400Hz na uC
Quoted text here. Click to load it

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.

Site Timeline