• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
Generator sinusoidalny na Arduino uno
#1
Witam potrzebuje zrobić generator sinusoidalny , bardzo prosty. Znalazłem coś takiego  http://web.csulb.edu/~hill/ee470/Lab%202...erator.pdf
Chce coś podobnego do http://serwis.avt.pl/manuals/AVT391.pdf  pomiaważ potrzebne mi jest  rezonansowe napięcie na wyjsciu . Ktoś jest w stanie mi pomóc moge nawet zapłacić pisac gogadamy sie .
 
Odpowiedź
#2
A czemu nie użyjesz gotowego generatora ??
Jest tego masę nawet do samodzielnego montażu w atv.
[Obrazek: banerelektronika.jpg]



Jeśli pomogłem podziękuj punktem reputacji Wink
 
Odpowiedź
#3
A moze lepiej od razu gotowy modul AD9850(1) podlaczony do Arduino?
Uzycie tego modulu jest bardzo proste i wymaga podlaczenia 6 pinow do Arduino
Poczatki zawsze sa trudne :-)
Arduino Mega256, Nano, Pro Mini.
 
Odpowiedź
#4
Ja mam kilka generatorów opartych na AD9850.
Od prostych, sterowanych ręcznie enkoderem, do programowanych z PC oraz z karty SD.
Jeśli jesteś elektronikiem, mogę udostępnić kilka istotnych funkcji swoich programów, w zamian za schemat wzmacniacza lub komparatora, który podnosił by mi sygnał prostokątny 1MHz z 5V do 20V bez zniekształceń.
Potrzebuję sprawdzonej konstrukcji.
Jeśli masz problem z kodem lub sprzętem, zadaj pytanie na forum. Nie odpowiadam na PW, jeśli nie dotyczą one spraw forum lub innych tematów prywatnych.

[Obrazek: SsIndaG.jpg]
 
Odpowiedź
#5
(15-05-2017, 12:25)Robson Kerman napisał(a): Ja mam kilka generatorów opartych na AD9850.
Od prostych, sterowanych ręcznie enkoderem, do programowanych z PC oraz z karty SD.
Jeśli jesteś elektronikiem, mogę udostępnić kilka istotnych funkcji swoich programów, w zamian za schemat wzmacniacza lub komparatora, który podnosił by mi sygnał prostokątny 1MHz z 5V do 20V bez zniekształceń.
Potrzebuję sprawdzonej konstrukcji.

Bede to robil w swoim projekcie tylko bede podnosil napiecie z 5V do 15V przetwornica DC/DC.
Na razie mam problem jak wykorzystac dialer z przykladu (Phonecal) do sterowania generatorem ad9850? Po wprowadzeniu kolejnych cyfr w okno dialera uzyskuje "textfield" gdzie jest liczba reprezentujaca czestotliwosc ktora chcialbym wygenerowac. Ze wzgledow konstrukcyjnych i uzytych elementow (Elegoo TFT touch screen 2,8" display) musze wykorzystywac piny Arduino Mega 2560 od 21 do 52 z czego ostatnie 4 musze uzyc do sterowania czytnikiem kart SD umieszczonym na displayu. Do sterowania AD9850 uzylem: W_CLK pin41, FQ_UD pin 43, DATA pin 45, RESET pin 47 oraz biblioteki DDS autorstwa m0xpd. Niestety ta bilioteka i przyklad dolaczony nie uruchamia mi generatora (na oscyloskopie nie ma zadnego sygnalu). Dzialalo to na bibliotece AD9850SPI z innym podlaczeniem ale nie mam dostepnych pinow SPI do wykorzystania bo musze obsluzyc czytnik kart SD.
Czy ktos moze mi cos podpowiedziec?
System nie chce przyjac zalacznika *.ino.
Poczatki zawsze sa trudne :-)
Arduino Mega256, Nano, Pro Mini.
 
Odpowiedź
#6
Ja steruję AD9850 bez żadnej biblioteki.

Definicje: (piny przykładowe)
Kod:
#define W_CLK 1
#define FQ_UD 2
#define DATA 3  
#define RESET 4  
#define pulseHigh(pin) {digitalWrite(pin, HIGH); digitalWrite(pin, LOW); }

W funkcji setup()
Kod:
 pinMode(FQ_UD, OUTPUT);
 pinMode(W_CLK, OUTPUT);
 pinMode(DATA, OUTPUT);
 pinMode(RESET, OUTPUT);
 pulseHigh(RESET);
 pulseHigh(W_CLK);
 pulseHigh(FQ_UD);

Później wysyłam częstotliwość wywołując funkcję sendFrequency(czestotliwosc);
W miejsce "częstotliwosc" możesz wpisać swój textfield.
Bajt do chipa wysyłam w postaci przekształconej według wzoru z AD9850 datasheet strona 8:

Therelationship of the output frequency, reference clock, and tuning
word of the AD9850 is determined by the formula:

fOUT = (∆ Phase × CLKIN)/2^32

where:
∆ Phase = value of 32-bit tuning word
CLKIN = input reference clock frequency in MHz
fOUT = frequency of the output signal in MHz

Kod:
void sendFrequency(double frq) {  
  int32_t f = frq * 4294967295/125000000; 
  
  //i takiego bajta wysyłam do czipa AD9850 funkcją trf_byte()
  
  
  for (int b=0; b<4; b++, f>>=8) {
    tfr_byte(f & 0xFF); 
  }
  tfr_byte(0x000); //
  pulseHigh(FQ_UD);
}

void tfr_byte(byte data)
{
  for (int i=0; i<8; i++, data>>=1) {
    digitalWrite(DATA, data & 0x01);
    pulseHigh(W_CLK);
  }
}
Taki sposób sterowania działa najlepiej.
Próbowałem różnych bibliotek i albo miałem problemy z obsługą przerwań, albo operatory nie pracowały na pinach jak należy, a tu masz ładny bezproblemowy kod.


Chociaż jak sobie właśnie przejrzałem bibliotekę do obsługi AD9850, to stwierdzam, że Ameryki nie odkryłem.
No ale u mnie śmiga pieknie, a to jest najważniejsze.
Jeśli masz problem z kodem lub sprzętem, zadaj pytanie na forum. Nie odpowiadam na PW, jeśli nie dotyczą one spraw forum lub innych tematów prywatnych.

[Obrazek: SsIndaG.jpg]
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości