Poszukuję pomysłu - generacja przebiegu
Masz problem? Zapytaj na forum elektroda.pl
From: "Krzysztof" <krzysztof.gedroycWYTNIJ_TO_at_nospam_wp.pl>
Subject: Poszukuję pomysłu - generacja przebiegu
Date: Mon, 9 May 2005 01:56:40 +0200
Poszukuję idei jak zrobić układ generujący łącznie 16 sinusoid
o częstotliwościach dających się programować (100 - 500 Hz),
jak również dające się ustalać ich poziomy (ale to wydaje się prostsze).
Wyjścia nie muszą być oddzielne, wystarczą dwa kanały po 8
zmiksowanych przebiegów. Wymagany parametr, to małe
zniekształcenia i jak sądze wykorzystanie przetwornika C/A
o rozdzielczości co najmniej 10 bitów.
Myślałem o stosowaniu AVR'a, ale generacja na żywo odpada
z uwagi na zbyt małą jego wydajność. Wedle moich badań da się
generować maksymalnie ok. 2700 próbek sinusoidy na sekundę...
Trochę za mało. Zatem nawet wcześniejsze generowanie przebiegu
do pamięci, by później go odtwarzać, chyba też nie wchodzi w grę.
Co na to poradzić? Wiadomo, DSP pewnie by obsłużyłoby to,
ale póki co nie biorę tego rozwiązania pod uwagę...
Pzdr.
Krzysztof.
From: "Marek Dzwonnik" <mdz_at_nospam_WIADOMO_PO_CO_TO.message.pl>
Subject: =?iso-8859-2?Q?Re:_Poszukuj=EA_pomys=B3u_-_generacja_przebiegu?=
Date: Mon, 9 May 2005 02:48:21 +0200
Użytkownik "Krzysztof" <krzysztof.gedroycWYTNIJ_TO_at_nospam_wp.pl> napisał w
wiadomości news:d5m99f$sm0$1_at_nospam_nemesis.news.tpi.pl
Poszukuję idei jak zrobić układ generujący łącznie 16 sinusoid
o częstotliwościach dających się programować (100 - 500 Hz),
Myślałem o stosowaniu AVR'a, ale generacja na żywo odpada
z uwagi na zbyt małą jego wydajność. Wedle moich badań da się
generować maksymalnie ok. 2700 próbek sinusoidy na sekundę...
Trochę za mało
Układ ma być jednostkowy czy powtarzalny? (Tzn. czy trzeba się liczyś z
kosztami czy nie? ;-)
W pierwszej chwili pomyślałem o miniDDS Jespera Hansena złożonym na 90S2313.
Przy generowaniu jednej sinusoidy, na jeden obieg pętli wykonującej
sumowanie w 24-bitowym akumulatorze fazy, adresującej 8bitami (msb) tablicę
z sinusem i wystawiającej 8-bitowy wynik na port potrzeba 9 taktów. Przy
zegarze 10MHz daje to taktowanie DDSa na poziomie 1.1MHz. Żeby wygenerowac
i wyfiltrować 500Hz wystarczyłoby Ci efektywne taktowanie rzędu kilku kHz.
Ile może zająć 8 takich operacji równolegle (sumowanie fazy, pobranie z
LUT), zsumowanie wyniku (nawet na 10bitach jeśli 8 to za mało) i wystawienie
wyniku na port, wysłanie po SPI na jakiś zewnętrzny DAC lub wystawienie na
jeden takt impulsu z PWM-a? Nie wiem, ale mając do dyspozycji ATtiny2313
popędzone na 20MHz i do dyspozycji ponad 2000 taktów na jeden obieg DDS-a
serio bym się nad tym pozastanawiał.
Jeżeli natomiast nie musisz (za bardzo) liczyć się z kosztami a za to cenisz
swój czas, to 16 najtańszych DDS-ów na stół i problem z czaszki :-)
(AD9833 kosztuje w tej chwili w Alfine ok 23pln netto_at_nospam_1+ i 18pln netto
_at_nospam_100+).
--
Marek Dzwonnik, GG: #2061027 - zwykle jako 'niewidoczny'
(Uwaga Gadu-Gadulcowicze: Nie odpowiadam na anonimy.)
From: J.F. <jfox_xnospamx_at_nospam_poczta.onet.pl>
Subject: Re: Poszukuję pomysłu - generacja przebiegu
Date: Mon, 09 May 2005 12:27:14 +0200
On Mon, 9 May 2005 02:48:21 +0200, Marek Dzwonnik wrote:
Użytkownik "Krzysztof" <krzysztof.gedroycWYTNIJ_TO_at_nospam_wp.pl> napisał w
Poszukuję idei jak zrobić układ generujący łącznie 16 sinusoid
o częstotliwościach dających się programować (100 - 500 Hz),
Myślałem o stosowaniu AVR'a, ale generacja na żywo odpada
z uwagi na zbyt małą jego wydajność. Wedle moich badań da się
generować maksymalnie ok. 2700 próbek sinusoidy na sekundę...
Trochę za mało
Układ ma być jednostkowy czy powtarzalny? (Tzn. czy trzeba się liczyś z
kosztami czy nie? ;-)
W pierwszej chwili pomyślałem o miniDDS Jespera Hansena złożonym na 90S2313.
Ale czemu mini ? 16 kostek DDS i po problemie :-)
Nawiasem mowiac - mozna by to ciekawie upchnac w jakiegos sredniego
FPGA. 16 rejestrow, 16 DAC, i jeden blok przetwarzania DDS.
Czy te czestotliwosci musza byc bardzo dokladne ? Bo obliczenie
kolejnych probek sin nie jest zadaniem zbyt skomplikowanym - wymaga
raptem jednego mnozenia i dodawania - ale najlepiej
zmiennoprzecinkowego. A CORDIC jest niewiele wolniejszy ale za to
dokladny.
BO jak patrze na twoje wyliczenia .. trzeba ci 16 atmelkow,
a one nie sa drogie :-)))
Przy generowaniu jednej sinusoidy, na jeden obieg pętli wykonującej
sumowanie w 24-bitowym akumulatorze fazy, adresującej 8bitami (msb) tablicę
z sinusem i wystawiającej 8-bitowy wynik na port potrzeba 9 taktów. Przy
zegarze 10MHz daje to taktowanie DDSa na poziomie 1.1MHz. Żeby wygenerowac
i wyfiltrować 500Hz wystarczyłoby Ci efektywne taktowanie rzędu kilku kHz.
No -z tym filtrowaniem to moglby byc problem. Chyba lepiej jednak
taktowac ten 1MHz.
Jeszcze jedna mozliwosc - 16 generatorow przestrajanych, zapiac w
petli PLL, a procesorem do wyboru: ustawiac podzielniki, generowac
sygnal wzorcowy prostokatny, albo mierzyc czestotliwosci i sterowac
napieciami sterujacymi. Tyle ze jak piszesz - DDS tanszy niz 8038 :-)
J.
From: "Krzysztof" <krzysztof.gedroycWYTNIJ_TO_at_nospam_wp.pl>
Subject: Re: Poszukuję pomysłu - generacja przebiegu
Date: Mon, 9 May 2005 22:53:54 +0200
zmiennoprzecinkowego. A CORDIC jest niewiele wolniejszy ale za
to dokladny.
Przejrzałem sobie trochę info o tym algorytmie i wygląda obiecujaco.
Ile razy (na oko rzecz jasna) będzie on szybszy od tej standardowej
funkcji sin ?
Pzdr.
K.
From: J.F. <jfox_xnospamx_at_nospam_poczta.onet.pl>
Subject: Re: Poszukuję pomysłu - generacja przebiegu
Date: Mon, 09 May 2005 23:32:31 +0200
On Mon, 9 May 2005 22:53:54 +0200, Krzysztof wrote:
zmiennoprzecinkowego. A CORDIC jest niewiele wolniejszy ale za
to dokladny.
Przejrzałem sobie trochę info o tym algorytmie i wygląda obiecujaco.
Ile razy (na oko rzecz jasna) będzie on szybszy od tej standardowej
funkcji sin ?
A trzeba by zajrzec ... bo standardowa powinna uzywac Cordica :-)
J.
From: Tomasz Piasecki <mtbrider_at_nospam__-nospam-_.poczta.onet.pl>
Subject: Re: =?ISO-8859-2?Q?Poszukuj=EA_pomys=B3u_-_generacja_prz?=
Date: Mon, 09 May 2005 08:43:07 +0200
Krzysztof wrote:
Myślałem o stosowaniu AVR'a, ale generacja na żywo odpada
z uwagi na zbyt małą jego wydajność. Wedle moich badań da się
generować maksymalnie ok. 2700 próbek sinusoidy na sekundę...
??? Dlaczego tak mało? Zrobione na stałym przecinku wybieranie
odpowiednich próbek z zapisanej gdzieś w pamięci tablicy z sinusoidą to
jest bułka z masłem. Podejrzewam że dałbyś radę pokryć całe pasmo
akustyczne.
TP.
--
| _ _ _ |
| _____ _| |_| | __ (o) | | __ __ _at_nospam_poczta.onet.pl |
| | \ | | |o \| \| |/o |/ _\| \ |
| |_|_|_| \_| |__/|_| |_|\__|\__||_| Tomasz Piasecki |
From: "PAndy" <pandrw_at_nospam_poczta.onet.pl>
Subject: Re: Poszukuję pomysłu - generacja przebiegu
Date: Mon, 9 May 2005 09:56:39 +0200
"Tomasz Piasecki" <mtbrider_at_nospam__-nospam-_.poczta.onet.pl> wrote in message
news:d5n0re$tk0$1_at_nospam_atena.e-wro.net...
Krzysztof wrote:
Myślałem o stosowaniu AVR'a, ale generacja na żywo odpada
z uwagi na zbyt małą jego wydajność. Wedle moich badań da się
generować maksymalnie ok. 2700 próbek sinusoidy na sekundę...
??? Dlaczego tak mało? Zrobione na stałym przecinku wybieranie
odpowiednich próbek z zapisanej gdzieś w pamięci tablicy z sinusoidą to
jest bułka z masłem. Podejrzewam że dałbyś radę pokryć całe pasmo
akustyczne.
Pod warunkiem ze zastosuje DDS...ale o tym napisal Marek Dzwonnik i wlascwie
wyczerpal temat - zawsze mozna to rozbic na dwa AVR choc jak mysle da sie to
upchnac na jednym.
From: "Krzysztof" <krzysztof.gedroycWYTNIJ_TO_at_nospam_wp.pl>
Subject: Re: Poszukuję pomysłu - generacja przebiegu
Date: Mon, 9 May 2005 22:41:10 +0200
generować maksymalnie ok. 2700 próbek sinusoidy na sekundę...
??? Dlaczego tak mało?
Tylko tyle, przy założeniu obliczania na żywo wartości kolejnych próbek.
Obliczanie tych sinusów (ze wzorów Taylora ?, rozwinięcie funkcji w szereg?)
zajmuje trochę czasu.
Ale ten pomysł by raz mieć zapisaną sinusoidę i na bazie tego
generować próbki jest wart zastanowienia...
Pzdr.
Krzysztof.
From: Michal Baszynski <mbaszyns_at_nospam_ga.ze.ta.pl.>
Subject: Re: =?ISO-8859-2?Q?Poszukuj=EA_pomys=B3u_-?=
Date: Tue, 10 May 2005 12:23:41 +0200
On Mon, 9 May 2005 01:56:40 +0200, "Krzysztof"
<krzysztof.gedroycWYTNIJ_TO_at_nospam_wp.pl> wrote:
My=B6la=B3em o stosowaniu AVR'a, ale generacja na =BFywo odpada
z uwagi na zbyt ma=B3=B1 jego wydajno=B6=E6. Wedle moich bada=F1 da si=EA
generowa=E6 maksymalnie ok. 2700 pr=F3bek sinusoidy na sekund=EA...
Troch=EA za ma=B3o.
cos duzo za malo ci wyszlo
przejrzyj AN543 Microchipa
--=20
Pozdr
Michal
From: "Krzysztof" <krzysztof.gedroycWYTNIJ_TO_at_nospam_wp.pl>
Subject: Re: Poszukuję pomysłu - generacja przebiegu
Date: Tue, 10 May 2005 22:31:00 +0200
cos duzo za malo ci wyszlo
przejrzyj AN543 Microchipa
Jestem w trakcie przeglądania.
A jeśli chodzi o ilość tych obliczeń, to listing poniżej:
#include <avr/io.h>
#include <math.h>
int main(void)
{
volatile double a;
a=sin(0.234234);
return(0);
};
potrzebuje 680 us , przy kwarcu 8 MHz, zatem obliczanie sinusa
odbywa się z częstotliwością ok 1,4 kHz. Przy najszybszym
rezonatorze 16 MHz prędkość podwoi się.
Pzdr.
Krzysztof.
From: Zbych <abuse_at_nospam_onet.pl>
Subject: Re: =?ISO-8859-2?Q?Poszukuj=EA_pomys=B3u_-_generacja_prz?=
Date: Tue, 10 May 2005 22:58:34 +0200
Krzysztof wrote:
a=sin(0.234234);
potrzebuje 680 us , przy kwarcu 8 MHz, zatem obliczanie sinusa
odbywa się z częstotliwością ok 1,4 kHz.
Jeśli chcesz generować przebieg sinusoidalny, to nie musisz dla każdej
próbki liczyć sinusa. Prościej byłoby zrobić niestabilny filtr noi.
Przykłady można znaleźć w notach aplikacyjnych TI.
From: Michal Baszynski <mbaszyns_at_nospam_ga.ze.ta.pl.>
Subject: Re: =?ISO-8859-2?Q?Poszukuj=EA_pomys=B3u_-?=
Date: Wed, 11 May 2005 00:13:31 +0200
On Tue, 10 May 2005 22:58:34 +0200, Zbych <abuse_at_nospam_onet.pl> wrote:
Je=B6li chcesz generowa=E6 przebieg sinusoidalny, to nie musisz dla =
ka=BFdej=20
pr=F3bki liczy=E6 sinusa. Pro=B6ciej by=B3oby zrobi=E6 niestabilny filtr=
noi.=20
Przyk=B3ady mo=BFna znale=BC=E6 w notach aplikacyjnych TI.
toz wlasnie ta nota z microchipa to jest to..
--=20
Pozdr
Michal