-
Data: 2009-08-31 22:43:02
Temat: Re: Generator sinusoidy od 0 do 400Hz na uC
Od: Łukasz Góralczyk <l...@g...com> szukaj wiadomości tego autora
[ pokaż wszystkie nagłówki ]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.
Następne wpisy z tego wątku
- 01.09.09 08:59 Sylwester Łazar
- 01.09.09 18:02 wt
- 01.09.09 19:00 Papa Smerf
- 01.09.09 19:48 J.F.
- 01.09.09 20:23 Papa Smerf
- 01.09.09 20:58 RoMan Mandziejewicz
- 01.09.09 22:22 Sebastian Biały
- 02.09.09 12:39 marko1a
- 02.09.09 15:33 J.F.
- 02.09.09 16:25 Papa Smerf
- 03.09.09 11:51 marko1a
- 03.09.09 20:06 Dykus
- 04.09.09 12:34 marko1a
- 03.09.09 21:32 Papa Smerf
Najnowsze wątki z tej grupy
- Mouser - koszt wysyłki
- [OT] Jak wycinac ksztalt w piance lub styropianie?
- FV--> ciepła woda w kranie
- Szok
- Dziwny schemat wzmacniacza m.cz.
- We Wrocławiu ruszyła Odra 5, pierwszy w Polsce komputer kwantowy z nadprzewodzącymi kubitami
- CGNAT i ewentualne problemy
- wzmacniacz mocy
- Linuks od wer. 6.15 przestanie wspierać procesory 486 i będzie wymagać min. Pentium
- Propagation velocity v/c dla kabli RF
- Jakie natynkowe podwójne gniazdo z bolcem (2P+PE)
- Czujnik nacisku
- Protoków komunikacyjny do urządzenia pomiarowego
- Hiszpania bez pradu
- amperomierz w plusie
Najnowsze wątki
- 2025-06-07 Mouser - koszt wysyłki
- 2025-06-07 Co robić, jak robić, aby dużo zarobić, a się nie narobić ?
- 2025-06-07 Co robić, jak robić, aby dużo zarobić, a się nie narobić ?
- 2025-06-07 Co robić, jak robić, aby dużo zarobić, a się nie narobić ?
- 2025-06-07 Warszawa => Software .Net Developer <=
- 2025-06-07 Warszawa => Junior SQL / FrontEnd developer <=
- 2025-06-07 Warszawa => Team Lead Data Engineer (Snowflake) <=
- 2025-06-07 Kraków => Kotlin Developer <=
- 2025-06-07 Warszawa => Senior Key Account Manager IT <=
- 2025-06-07 Gdańsk => PHP Developer <=
- 2025-06-07 Warszawa => Specjalista ds. Sprzedaży <=
- 2025-06-07 Łódź => Mainframe (z/OS, Assembler) Developer <=
- 2025-06-07 Warszawa => Sales Assistant and Customer Development Specialist <=
- 2025-06-07 Warszawa => Programista Full Stack .Net <=
- 2025-06-07 Lublin => Delphi Programmer <=