logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Projekt generatora 0.1Hz-10kHz z trójkątno-sinusoidalnym przebiegiem

a_n_y 16 Kwi 2005 19:48 1694 9
REKLAMA
  • #1 1411193
    a_n_y
    Poziom 11  
    Posty: 5
    Muszę zaprojektować (teoretycznie) generator, o następujących parametrach:
    Zakres częstotliwości od 0.1Hz do 10kHz,
    *amplituda -10 do 10[V],
    *kształt przebiegu, dodatnia (0-10[V]) cześć okresu ma być trójkątem dolna (0do -10[V]) *sinus wykorzystać musze przetwornik C/A 10 Bit.

    Proszę o pomoc.
  • REKLAMA
  • Pomocny post
    #2 1411268
    marmur99
    Poziom 17  
    Posty: 285
    Pomógł: 5
    Ocena: 4
    Ja zrobiłbym to w następujący sposób:

    Częstotliwość próbkowania ustawiłbym tak, by była większa od częstotliwości sygnału jakieś 10 - 100 razy (im więcej, tym mniejsze zniekształcenia sygnału). Oczywiście wszystkie próbki sygnału trzymasz w jakiejść tablicy.
    Zamiast przetwornika C/A wykorzystałbym PWM (to można zaimplementować softwarowo) o częstotliwości jakieś 2-8 razy większej od częstotliwości próbkowania. Najlepiej, żeby próbkowanie i początek okresu PWM były zsynchronizowane wówczas nie wystąpi przesunięcie fazowe względem momentu próbkowania.
    Na wyjściu PWM wstaw filtr z przełączaną pojemnością z Maxima (ma stromą charakterystykę). Będziesz musiał dostarczyć mu sygnał zegarowy o częstotliwości 100 razy większej niż fcut (czyli w przypadku 10kHz będzie to 1MHz).
    Wszystko potem wstawiasz przez szeregowy kondensator na wzmaniacz operacyjny, który zmienia Ci poziomy napięć na +- 10V.

    Teraz cost-reduction:
    1. Zamiast filtru z przełączaną pojemnością (który jest dostępny jako próbka) możesz zmontować na 2 Op-ampach filtr 4 rzędu, który w jakimś tam stopniu pozbawi Cię składowej częstotliwości równej częstotliwości próbkowania i częstotliwości PWM.

    2. Częstotliwość próbkowania 10 razy większa od częstotliwości sygnału - nie zarżniesz proca, ale sygnał będzie tylko przypominał sinusa

    3. fpwm = fsample to nastepny krok w stronę miłosierdzia dla proca

    Mam nadzieje, że powyższe informacje okażą sie pomocne,

    Marmur99
  • Pomocny post
    #3 1411284
    Dexter77
    Poziom 28  
    Posty: 889
    Pomógł: 134
    Ocena: 19
    Utworz sobie tabele z probkami. Bedzie ich 1024. Teraz w zaleznosci od wybranej czestotliwosci w przerwaniu czasowym wysylaj je do przetwornika. dla 10kHz probke bedziesz musial wysylac co niecale 100 ns. Ciezka proba dla procesora. Chyba odpada. Jezeli czestotliwosci nie musza byc zmieniane plynnie to nalezy rozwazyc wykorzystanie pamieci RAM oraz jakiegos programowanego generatora zegara. Do tego prosty uC programujacy RAM w trakcie startu oraz komunikujacy sie z uzytkownikiem i pobierajacym info o czestotliwosc i programowanie generatora zegara.
    Pozdro
    Dexter
  • REKLAMA
  • Pomocny post
    #4 1411313
    marek_Łódź
    Poziom 36  
    Posty: 3103
    Pomógł: 208
    Ocena: 66
    a_n_y napisał:
    Proszę o pomoc.


    Problem z układem, czy w programem???

    Może być problem z prędkoscią procesora, dla klasycznej '51 nawet z szybkim kwarcem.

    Zakładając, ze procesor ma wystawiać dane na port(y) powiedzmy 256 razy w okresie dostajesz przy 10kHz częstotliwość próbkowania 2,56 MHz. Oprócz tego, że masz wystawić daną, musisz jeszcze odmierzać czas, przy czym może się okazać, że z powodu braku czasu nie da się wykorzystać przerwań. Dalej mając powiedzmy częstotliwość wiodącą rzędu 20 MHz, niezależnie od tego, jak sobie z tym poradzi program, sama dokładność sprzętowa odmierzania odcinków rzędu 0,5us nie będzie zbyt duża.

    Można zrobić to na zasadzie pracy w pełni synchronicznej, wysyłając dane w krótkiej pętli programu z tablicy indeksowanej licznikiem (powiedzmy 32 bitowym) z dobieraną do częstotliwości generatora wartością inkrementacji. Oczywiście nadal pozostaje problem uzyskania odpowiedniej prędkości próbkowania w górnym obszarze częstotliwości.

    Co do wyjścia, to jest kwestia typowej implementacji przetwornika (szukaj w pdfach) oraz dobrania filtru na wyjściu.
  • Pomocny post
    #5 1411428
    tajwoj
    Poziom 26  
    Posty: 560
    Pomógł: 106
    Ocena: 102
    Hej,
    Myślę, że mogłoby pomóc zastosowanie DDS (bezposredmia synteza cyfrowa). Temat jest może szeroki więc podam linki:
    http://teleinfo.pb.bialystok.pl/~krashan/pracownia2.html po polsku i sa tam dalsze linki
    http://www.myplace.nu/avr/minidds/index.htm strona Jespera Hansena. Chodzący projekt na AVR z kodem w asm.
    Ja sam zrobiłem coś podobnego na ATmega8 ponieważ był mi potrzebny generator piły z rozdzielczością lepszą niż 0.01Hz.
    Myślę, że jest to możliwe również na 51.
    Pozdrowienia
  • REKLAMA
  • Pomocny post
    #6 1411442
    McRancor
    VIP Zasłużony dla elektroda
    Posty: 5326
    Pomógł: 479
    Ocena: 124
    Wydaje mi się że procesor nie jest tutaj potrzebny.

    Pamięć, która dostaje na wejścia adresowe kolejne adresy z liczników taktowanych generatorem o zmiennej częstotliwości, który jednocześnie zatrzaskuje dane w przetworniku C/A o równoległym wejściu danych, podłączonym do wyjść danych pamięci.

    Ewentualnie niech procesor adresuje kolejne bajty pamięci i zatrzaskuje te dane w przetworniku, po co mają one przechodzić przez procesor?
  • REKLAMA
  • #7 1411809
    a_n_y
    Poziom 11  
    Posty: 5
    marmur99 napisał:
    Ja zrobiłbym to w następujący sposób:

    Częstotliwość próbkowania ustawiłbym tak, by była większa od częstotliwości sygnału jakieś 10 - 100 razy (im więcej, tym mniejsze zniekształcenia sygnału). Oczywiście wszystkie próbki sygnału trzymasz w jakiejść tablicy.
    Zamiast przetwornika C/A wykorzystałbym PWM (to można zaimplementować softwarowo) o częstotliwości jakieś 2-8 razy większej od częstotliwości próbkowania. Najlepiej, żeby próbkowanie i początek okresu PWM były zsynchronizowane wówczas nie wystąpi przesunięcie fazowe względem momentu próbkowania.
    Na wyjściu PWM wstaw filtr z przełączaną pojemnością z Maxima (ma stromą charakterystykę). Będziesz musiał dostarczyć mu sygnał zegarowy o częstotliwości 100 razy większej niż fcut (czyli w przypadku 10kHz będzie to 1MHz).
    Wszystko potem wstawiasz przez szeregowy kondensator na wzmaniacz operacyjny, który zmienia Ci poziomy napięć na +- 10V.

    Teraz cost-reduction:
    1. Zamiast filtru z przełączaną pojemnością (który jest dostępny jako próbka) możesz zmontować na 2 Op-ampach filtr 4 rzędu, który w jakimś tam stopniu pozbawi Cię składowej częstotliwości równej częstotliwości próbkowania i częstotliwości PWM.

    2. Częstotliwość próbkowania 10 razy większa od częstotliwości sygnału - nie zarżniesz proca, ale sygnał będzie tylko przypominał sinusa

    3. fpwm = fsample to nastepny krok w stronę miłosierdzia dla proca

    Mam nadzieje, że powyższe informacje okażą się pomocne,

    Marmur99

    niestety wymogiem jest zastosowanie przetwornika C/A

    Dodano po 26 [minuty]:

    Naprawdę nie spodziewałem się takiego odzewu bardzo dziękuje za pomoc!!!
    Przyznać się musze ,że trochę się gubię, studiuje elektrotechnikę, i na podstawach elektroniki dostałem takie zadanie, imho trochę nieadekwatne do poziomem trudności do poziomu i programu zajęć.
    Moim pierwszym pomysłem było wykorzystanie 51, ale chyba do tego zadania będzie lepsze DDS http://www.myplace.nu/avr/minidds/index.htm , chyba da się napisać program realizujący trójkąt-sinus?
  • Pomocny post
    #8 1412166
    nowydag
    Poziom 15  
    Posty: 63
    Pomógł: 12
    Ocena: 2
    Rozwiązaniem problemu z prędkoscią procesora moze być zastosowanie układu programowalego. Może on współpracować z RAM-em w którym zapisane są próbki. Taki układ programowalny wyrobi się bez problemu.
  • Pomocny post
    #9 1412195
    Nemo
    Poziom 31  
    Posty: 2078
    Pomógł: 9
    Ocena: 72
    ...albo jeszcze prościej. :)

    Generator ma tworzyć przebieg statyczny. Górna połówka i dolna są ściśle opisane i zawsze takie same. Różni się tylko czas podawania próbek. Zatem wzór przebiegu jest stały. A gdyby tak... wpisać go do pamięci stałej (EPROM, EEPROM, FLASH) o odpowiedniej szerokości. Jeśli można użyć tylko 8 bitów, sprawę rozwiąże jeden scalak. Do 10 bitów trzeba użyć albo dwóch 8-bitowych pracujących równolegle, albo jednego 16-bitowego. Pamięć taka powinna mieć pojemność co najmniej 2kB (2048 wartości). Wpisujemy do pamięci kształt przebiegu, a wejścia taktujące sterujemy np. z połączonych kaskadowo liczników 74HCT4040 lub podobnie. Dla przebiegu o częstotliwości 10kHz musimy 10.000 razy na sekundę przesłać całe 2048 bajtów danych. To nieco ponad 20 MHz (dokładnie 20 480 000Hz). Dla tak dużej szybkości konieczne będzie użycie dobrego i szybkiego przetwornika D/A. No i szybkich pamięci. Być może pamięci z czasem dostępu 50ns poradzą sobie, choć nie mam pewności.

    Rozumiem, że to projekt "papierkowy" i nikt nie będzie go robił w rzeczywistości. :) Inaczej warto byłoby chyba rozważyć użycie jakiegoś DSP.

    Pozdrawiam.
  • #10 1412321
    a_n_y
    Poziom 11  
    Posty: 5
    dokladnie projekt jast papierkowy ale profesor jest z tych czepliwych

Podsumowanie tematu

LABEL_AI_GENERATED
Dyskusja dotyczy teoretycznego projektu generatora sygnału o częstotliwości od 0,1 Hz do 10 kHz z przebiegiem trójkątno-sinusoidalnym, amplitudą od -10 V do 10 V oraz wymogiem zastosowania 10-bitowego przetwornika cyfrowo-analogowego (C/A). Proponowane rozwiązania obejmują wykorzystanie tablic próbek sygnału, synchronizację częstotliwości próbkowania i PWM, a także filtrację sygnału wyjściowego za pomocą filtrów z przełączaną pojemnością. Wskazano na ograniczenia prędkości klasycznych mikrokontrolerów 8051 przy próbkowaniu w górnym zakresie częstotliwości, co może wymagać zastosowania układów programowalnych lub DDS (Direct Digital Synthesis) realizowanych na mikrokontrolerach AVR, np. ATmega8. Alternatywnie sugerowano implementację generatora opartego na pamięci ROM/EPROM/EEPROM/FLASH z zapisanym kształtem przebiegu i sterowaniem adresowaniem za pomocą liczników (np. 74HCT4040), co wymaga szybkich pamięci i przetwornika C/A o wysokiej częstotliwości próbkowania. Podkreślono, że projekt ma charakter papierowy i wymaga uwzględnienia ograniczeń sprzętowych oraz synchronizacji sygnałów w celu minimalizacji zniekształceń i przesunięć fazowych.
Podsumowanie AI na podstawie dyskusji. Może zawierać błędy.
REKLAMA