Ako na generovanie signálov 0-50MHz

Ako na generovanie signálov 0-50MHz

Rádioamatér neraz potrebuje pri meraní využiť aj generátor rôznych priebehov. (Pekný a silný signál mu síce vie zabezpečiť aj vysielač, ale pre prácu s rádovo desiatkami mV by to bolo nepraktické 🙂 a hlavne nežiadúce…).

Meranie pomocou spätnoväzobného mostíku

Niekedy takéto generátory bývajú súčasťou napr. i osciloskopov. Ich cena však týmto doplnkom výrazne stúpa. Preto mi generátor doteraz chýbal. Naskytla sa mi však príležitosť v podobe zľavového kupónu, ktorý som na pár dní obdržal v známom zásielkovom obchode na ďalekom východe.

Najskôr som zvážil cenovú reláciu, potom postupne prešiel blogy a rozhodol som sa pre model FY3224S z rady FY3200S s max frekvenciou 24MHz. Tento model už dostatočne zlacnel, a i keď sú v ponuke i modely s vyššími max. frekvenciami, objednal som tento.

K tomuto modelu nájdete plno informácií na nasledujúcich odkazoch, preto tu parametre ani nebudem zbytočne opakovane spomínať…

http://www.eevblog.com/forum/testgear/feeltech-fy3224s-24mhz-2-channel-dds-aw-function-signal-generator/

https://github.com/tardate/LittleArduinoProjects/tree/master/Equipment/FY3200S

http://kiedontaa.blogspot.sk/2017/09/feeltech-fy3224s-reverse-engineering.html

Po nútenej zastávke zásielky na colnici som ho doma rozbalil  a hneď poriadne vyskúšal. Nesklamal, robí presne to čo má.

No – robil. Už na druhý deň namiesto sínusovky vytváral podľa osciloskopu tvary ako pohoria v Maďarsku – roztiahnuté, s malou amplitúdou…

Ach jaj, predsa je to len Čína. Nezostalo tak nič iné, len ho rozobrať. I tak som sa na to chystal, keďže od výroby má jeden problém, a to úroveň zemného potenciálu. Je to dané spínaným zdrojom, napájacím káblom typu flexo šňúra, bez ochranného vodiča.  (všetko je to pekne rozpísané na vyššie uvedených blogoch). Ja som nameral potenciál kostry generátora vyše 85V voči ochrannému kolíku v zásuvke.

Po rozobraní bolo hneď jasné, kde je príčina prečo generátor negeneroval, čo má  – po včerajšom „zahriatí“ sa zaktivovali chemické prvky z pozostatkov spájkovania:

zbytky po pájkovaní
detailne

Nasledovalo niekoľkonásobné opláchnutie izoporpylom, až kým plošný spoj nezostal čistý.

po vyčistení

Hneď popritom som prerobil aj prívod 230V – na klasický kábel aj s ochranným vodičom, ktorý som prepojil so zemou generátora. Po zapojení som však zažil nemilé prekvapenie – potenciál sa nezmenil, stále bol tých 85V. A to som zapojil nepoužitý,  zo sáčku  vybalený nový kábel od nejakého zariadenia… Po jeho zmeraní som len musel skonštatovať, že bohužiaľ i také, bez zapojeného ochranného vodiča sa dodávajú. Na toto chcem všetkých upozorniť!!! Prekvapenia však pokračovali – ani druhý kábel nefungoval. Pre istotu vôbec. Ten bol zase niekde prerušený… Proste Bad Day.

S tretím káblom to už ale všetko fungovalo, ako má. A tie dva skončili od zlosti rozkúskované na 10cm kúsky.

Keď už bol generátor otvorený, hneď som previedol aj ďalšiu úpravu. Aj keď je FY pripravený na komunikáciu s PC pomocou USB rozhrania (je tam prevodník USB-TTL RS232), chcel som aby ho bolo možné riadiť prostredníctvom sériovej linky priamo v úrovni TTL – napríklad rovno z Arduina. K tomuto stačí prerušiť vodiče z generátora vedúce do prevodníku USB a pripojiť k nim externý konektor so signálmi TX, RX (CEZ ODPORY 330 Ohm – na obrázkoch sú v čiernych bužírkach) a GND.

Popis komunikačného protokolu s generátorom cez RS2323 – umožňuje ho plne ovládať:

FY3200S DDS Protocol EN -DRAFT-

 

prepojenie TTL RS232

 

testovanie ovládania z Arduina
upravený zadný panel, hore je pôvodný prívod

Potom už je možné využívať nezávisle oba kanály (a k tomu ešte TTL výstupy napr. na synchronizáciu):

 

Okrem nezávislého generovania dvoch signálov umožňuje tento generátor ovládať druhým z nich  riadenie triggera, ktorý spúšťa prvý napríklad tak, že ten po spustení vygeneruje 5 – až niekoľko tisíc periód…

Že má aj čítač frekvencie resp. počítadlo impulzov, to je jasné po prečítaní technických špecifikácií…

Ku komplexnému ovládaniu z PC slúži program dodaný priamo v balení:

 

 

Niekoľko vlastných priebehov je možné cez PC nahrať do generátora. A tu je jedna z vecí, ktorá mi dovolila nazvať tento článok – 50MHz. Stačí medzi vlastné priebehy zadať sínusovku rovno s dvojnásobnom periódou a výsledok je:

V skutočnosti je opakovacia frekvencia 24MHz, ale pretože sa za ten čas generuje sinus 2x…

 

Ono rozumne (t.j. bez nejakej výraznej zmeny amplitúdy) je tento generátor použiteľný do cca 20MHz, pokiaľ je ale treba generovať vyššie frekvencie a len v malom rozsahu, tento nedostatok nie je taký výrazný. Pre toho kto má chuť piplať sa s tým viac, je možnosť vymeniť koncové operačné zosilňovače, upraviť napájanie… Alebo opačne, hneď kúpiť s väčšou max. frekvencoiu 😀

Na záver ešte pridám jednu fintu, pokiaľ by mu nesedela nastavená frekvencia s odmeranou a tak by potreboval skalibrovanie:

1. Turn off the function generator.
2. Press and hold „Parm“ and the left arrow together, then turn on and continue to hold for two seconds.
3. Press the blue knob/button to save
4. Press „Parm“ button

 

Ako využiť tento generátor?

Napríklad na prvom obrázku je uvedené vf meranie antény pomocou arduina (to riadi nastavenie frekvencie, prípadne i amplitdy signálu, následne na to odmeria výstupy na spätnoväzobnom mostíku pomocou logaritmických detektorov atď…) – o tom niekedy inokedy.

Teraz len ukážka programu v Arduine, ktorý riadi meranie a postupne všetky výsledky pošle do PC na spracovanie:

#include <stdio.h>

char cmd[16];
int mag, ph;
float magf, phf;
float volt;

void setup() {
Serial.begin(9600);
Serial1.begin(9600);
analogReference(EXTERNAL);
Serial.print("\n");
Serial1.flush();

for (int i = 50; i < 2400; i++) {
sprintf(cmd, "bf%0d000000\n", i);
Serial1.print(cmd);
Serial.println();
Serial.print(i * 10); //pre kontrolu na konzolu
Serial.print("\t");
delay(5);
for (int j = 1 ; j < 6; j++) {
volt = (j * 0.1);
Serial1.print("ba");
Serial1.print(volt);
Serial1.print("\n");
Serial.print(volt);
Serial.print("\t");
delay(20);
mag = analogRead(0);
ph = analogRead(1);
Serial.print(mag);
Serial.print("\t");
Serial.print(ph);
Serial.print("\t");
magf = mag * 1.800 / 1023;
phf = ph * 1.800 / 1023;
Serial.print(magf);
Serial.print("\t");
Serial.print(phf);
Serial.print("\t");
}
}
Serial1.print("ba0\n");
}

void loop() {
}

73 Vlado

1,174 total views, 0 views today

Pridať komentár

Táto webová stránka používa Akismet na redukciu spamu. Získajte viac informácií o tom, ako sú vaše údaje z komentárov spracovávané.