-
1. Data: 2009-08-31 20:08:03
Temat: Generator sinusoidy od 0 do 400Hz na uC
Od: "Robbo" <p...@a...nie.mam>
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
-
2. Data: 2009-08-31 20:18:19
Temat: Re: Generator sinusoidy od 0 do 400Hz na uC
Od: Zbych <a...@o...pl>
Robbo pisze:
> 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...
-
3. Data: 2009-08-31 20:21:03
Temat: Re: Generator sinusoidy od 0 do 400Hz na uC
Od: "ici" <i...@p...onet.pl>
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.
-
4. Data: 2009-08-31 22:43:02
Temat: Re: Generator sinusoidy od 0 do 400Hz na uC
Od: Łukasz Góralczyk <l...@g...com>
On Mon, 31 Aug 2009 22:08:03 +0200, Robbo wrote:
[ciach]
> do 400Hz. Rozwa?am tu podej?cie polegaj?ce na stablicowaniu próbek
> po?ówki sinusoidy i "wysy?aniu" ich na zewnetrzny 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.
> -analogowy. Zrobi?bym funkcje, która by?aby przez "timer" wywo?ywana z
> odpowiedni? czestotliwo?ci? (np. 400*256Hz dla czestotliwo?ci 400Hz i
> przetwornika 8-bitowego).
Chyba bardziej poprawnie "400 Hz * 256" dla 256 próbek :) .
> Problem jednak z p?ynn? regulacj? czestotliwo?ci od 0 do 400Hz. Tzn.
> wystarczy?aby mi rozdzielczo?ae 1Hz. Niemniej i tak operuj?c prescalerem
> i OCR2 nie da sie uzyskaae wszystkich mo?liwych czestotliwo?ci. By?bym
> wdzieczny za rade, jak rozwi?zaae 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.
-
5. Data: 2009-09-01 08:59:35
Temat: Re: Generator sinusoidy od 0 do 400Hz na uC
Od: Sylwester Łazar <g...@a...pl>
> 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
-
6. Data: 2009-09-01 18:02:05
Temat: Re: Generator sinusoidy od 0 do 400Hz na uC
Od: "wt" <s...@p...onet.pl>
> 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ę.
-
7. Data: 2009-09-01 19:00:38
Temat: Re: Generator sinusoidy od 0 do 400Hz na uC
Od: "Papa Smerf" <P...@z...zalasami.trala.la>
Órzytkownik "wt" napisał:
> 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)
-
8. Data: 2009-09-01 19:48:28
Temat: Re: Generator sinusoidy od 0 do 400Hz na uC
Od: J.F. <j...@p...onet.pl>
On Tue, 1 Sep 2009 20:02:05 +0200, wt wrote:
>> 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.
-
9. Data: 2009-09-01 20:23:11
Temat: Re: Generator sinusoidy od 0 do 400Hz na uC
Od: "Papa Smerf" <P...@z...zalasami.trala.la>
Ó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,
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)
-
10. Data: 2009-09-01 20:58:18
Temat: Re: Generator sinusoidy od 0 do 400Hz na uC
Od: RoMan Mandziejewicz <r...@p...pl>
Hello wt,
Tuesday, September 1, 2009, 8:02:05 PM, you wrote:
>> 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:r...@p...pl
Spam: http://www.allegro.pl/sklep/7416823_squadack :)