functie generator chip

Ik ben al langere tijd aan het denken om zelf een goede functiegenerator te maken op basis van dds. Nu zijn er allerhande dds chips voorhanden (bv AD9834) maar allemaal zijn die ontworpen om een zo zuiver mogelijk sinus te produceren en doen dit door eerst een 3hoek signaal te maken op de gewenste frequentie en dat door een look-up-table/sin-rom te halen waar de sinus waarden in staan. Soms is het mogelijk om ook de 3hoek op de uitgang te krijgen, evenals een comparator signaal(50/50 blok). Door er steeds een andere frequentie te vragen is een sweepfunctie wel mogelijk.

Waar ik naar opzoek ben is een chip die wat meer functies heeft zoals asymmetrie. Mogelijk zelfs instelbaar aantal waveforms na trigger etc. Meer iets als een BK-precision 4017B of 4040dds.
Ik heb al heel wat tijd zitten googlen maar ik kan niet iets geschikts vinden, wat zou betekenen dat de enige andere mogelijkheid is om het volledig zelf in een fpga te stoppen met een DAC etc.
Wanneer er enkel maar een dds zou zijn waarbij het 3hoekssignaal is te beinvloeden tot asymmetrie zou ik al een heel eind zijn.
Mogelijk weet iemand wel een dergelijke chip of moet het echt allemaal zelf geschreven worden?

Every machine is a smoke machine if you operate it wrong enough

Hey Martijn. Ik ben zelf ook een tijdje bezig geweest met een functiegenerator en eigenlijk tot dezelfde conclusie gekomen. Een speciale chip met al deze functies ken ik niet.

Een FPGA is een mooie oplossing, al is het wel wat complexer. Flexibiliteit is een groot voordeel. Als je geavanceerde functies wil dan moet je waarschijnlijk wel.

Stefan

Gaat het puur omdat je het zelf wilt ontwikkelen?

Voor 375€ (ex) heb je een Rigol DG1022 kant en klaar, een DDS met twee uitgangen.

http://www.artisan-scientific.com/info/hp__8165_datasheet.pdf is eigenlijk wat je wilt als functionaliteit :)

Ik heb de 9834 thuis liggen, alleen door wat drukte geen tijd gehad om er al echt de schakeling mee op te bouwen.

meten is weten, weten is meten, maar hoe kan je weten wat je allemaal moet meten en weten.

Je wilt een arbitrary wave generator?

Op 14 juli 2011 14:08:33 schreef flash2b:
Gaat het puur omdat je het zelf wilt ontwikkelen?

Voor 375€ (ex) heb je een Rigol DG1022 kant en klaar, een DDS met twee uitgangen.

280,- had ik hem bij DealExtreme, ALS de douane hem niet te pakken krijgt (wat mij niet uitmaakt, ik betaal er zowiezo belasting over).

Let voor de DG1022 wel even op dat hij niet bekent staat op zijn fijne software voor arbitrary waves. Daar heb ik hem ook niet voor gekocht.

e: ik heb overigens voor de AD9833 een lib geschreven voor Jal. Die staat in de 'jallib' (external/dds). Volgens mij moet die met kleine aanpassing zo op de 9834 werken.

[Bericht gewijzigd door knifter op 14 juli 2011 14:50:10 (13%)

zal ik toch ook nog eens kijken, of ik de JAL compiler aan de praat kan krijgen thuis ;)

meten is weten, weten is meten, maar hoe kan je weten wat je allemaal moet meten en weten.

Das een eitje. Zit in jallib checkout.

Als je SVN installeerd en jallib uitcheckt (zegt dat je iets?) dan kun je hem nog geupdate houden ook.

Linux:
'svn co https://jallib.googlecode.com/svn/trunk jallib'
* jallib/compiler/jalv2
* jallib/include/external/dds

[offtopic]na een aantal pogingen om met jal testprogrammatje te maken, was ik gestopt. ;-), daarna overgestapt op asm.

meten is weten, weten is meten, maar hoe kan je weten wat je allemaal moet meten en weten.
free_electron

Silicon Member

bij mijn weten zijn er geen dergelijke chips.

het eenvoudigste is een fpga. je kan de DDS engine zelf direct mee aanmaken. Dat is niet eens zo groot.

Wel een fpga pakken met interne PLL's die snel genoeg kan draaien. 300 a 400MHz intern )

die lookup tables zet je in FPGA rom. arb signalen zet je in ingebakken ram.

MEt een cyclone IV moet dat perfect te doen zijn. Je hebt geen fpga nodig met 1000 poten.

Als D/A converter gebruik je een TXDAC van analog devices.
dat ding is razendsnel en heeft current mode differentiele uitgangen.
een dikke opamp erachter en je bent al heel ver.

maar de kostprijs is het probleem.. als je voor 280 euro er ene kan kopen ...

Professioneel ElectronenTemmer - siliconvalleygarage.com - De voltooid verleden tijd van 'halfgeleider' is 'zand' ... US 8,032,693 / US 7,714,746 / US 7,355,303 / US 7,098,557 / US 6,762,632 / EP 1804159 - Real programmers write Hex into ROM

Ik kan me ergens een project op internet herinneren van iemand die het met discrete componenten deed: counter, ram, dac.

Voor het idee (en begrip vd werking) leuk. Maar of het makkelijker is als een FPGA, geen idee.

e:
Nog wel even ter info: Ik heb de 9833 prima aan de gang. Werkt netjes. Interface op orde (met LCD en rotary encoder). Maar een goede analoge output-stage/waveshaper op orde krijgen die digitaal gestuurd wordt blijkt in de praktijk nog even boven mijn pet te gaan. Ik kon er in iedergeval geen kant-en-klare componenten voor vinden. (ik niet, bestaat misschien wel) Meeste ideeen haalde ik nog uit het schema van de ELV dds-generator. Hier zit een VGA (LMH 6503 dacht ik) in. Die valt digitaal te sturen.

Wat ik bedoel is: de dds chip (of andere oplossing, FPGA) aan de gang krijgen is 1 deel, de analoge trap is zijn eigen deel apart. Maar waarschijnlijk is dit voor anderen, met meer ervaring makkelijker.

[Bericht gewijzigd door knifter op 14 juli 2011 18:35:34 (62%)

Thnx allemaal!

Jammer dat er dus niet een dergelijke chip is, leek me toch dat die wel ergens ontwikkeld zou zijn, maar als ook niemand van jullie iets dergelijks weet.. Vooral ook omdat het niet een heel grote aanpassing is van een gewone dds. En voor awg's zijn dus geheel geen kant en klare chips verkrijgbaar..

@Stefan, heb jij nog een andere optie bedacht dan? Uit standaard microcontrollers is dus geen goede freq te halen, analoge chips zijn obsolete(max038 etc) en een gewone dds is dus niet geschikt te krijgen. fpga klinkt als enige optie of dus kopen.

@knifter, van het analoge deel ben ik me inderdaad bewust. Maar dat moet niet een erg probleem zijn, snelle dac, filter, opamp en goed routen. Het hoeft niet morgen klaar te zijn..(en voor dergelijke freq's zijn breadboard-tests erg ongeschikt)

@Jovak: Ik was gewoon even wat verder aan het kijken omdat ik nogal tegen de beperkingen van een standaard dds liep.

Als ik dus werkelijk wat wil zal ik dus in de fpga's moeten duiken, al is die rigol wel erg voordelig. Een cyclone 4 met wat dingetjes eromheen begint ook al snel in de papieren te lopen.

Tipje van de sluier: het had mogelijk een nieuw project voor hier kunnen worden.

Every machine is a smoke machine if you operate it wrong enough
free_electron

Silicon Member

ik zou die eis voor assymetrie laten vliegen..
wat ben je daar mee...

Professioneel ElectronenTemmer - siliconvalleygarage.com - De voltooid verleden tijd van 'halfgeleider' is 'zand' ... US 8,032,693 / US 7,714,746 / US 7,355,303 / US 7,098,557 / US 6,762,632 / EP 1804159 - Real programmers write Hex into ROM

Een iets uitgebreider apparaat dan enkel heel standaard dds + uC.
Maar waarschijnlijk beter om dat te laten gaan. Met asymmetrie zou ook pwm en zaagtand kunnen worden gegenereerd. Maar ik ben er al achter dat zaagtand ook anders mogelijk is(moet er wel een 2e dds chip bij) en pwm kan met een extra comparator. Sweep moet dan via de uC.

Asymmetrische sinus zou enkel voor filters en versterkers testen gebruikt worden, verder geen idee waarvoor.

Mogelijk is er nog wel iets als een triggeringang in te fabrieken met een count op het aantal waves wat een stopsignaal kan genereren.

En de start van dit topic was vooral om zeker te weten dat ik geen goede optie was misgelopen.

Every machine is a smoke machine if you operate it wrong enough

Ik ken de 8038. Dit is een functiegenerator op een chip. De periodetijd wordt geregeld door twee stromen. Als deze stromen onderling gelijk zijn dan is het uitgangssignaal symmetrisch. Verschillen ze, dan is het uitgangssignaal asymmetrisch.
Hier een datasheet http://www.datasheetcatalog.org/datasheets/151/285029_DS.pdf.
Ik weet niet of dit IC nog te koop is.

pa3gws

Golden Member

Tipje van de sluier: het had mogelijk een nieuw project voor hier kunnen worden.

Dat zou ik een heel interesant project vinden.

Ik ben gestopt met roken nu mijn schakelingen nog.

Zeker een interesant project.

Heb zelf eens een begin gemaakt voor een functie generator met een XR2206. Maar die is niet asymmetries en kan helaas ook geen pulsen tellen.

Misschien dat het tellen via een PIC kan?

Niets is onmogelijk het is alleen nog nooit met succes geprobeerd.

@simpleman, de optie van een x aantal pulsen is maarzo een ideetje van een extra toevoeging. Een pic is daar weer veel te langzaam voor, ik zat zelf te denken om dat in gewone logic te zetten en dat via wat poortjes een signaal te laten genereren. Maar wie weet wordt dat ook wel geheel niks.

Als er nu toch al mensen zijn die het wel interessant lijkt zullen we er ons toch maar weer eens in storten.

@ohm pi, bedankt. Maar dat chipje gaat maar tot 300khz.

Every machine is a smoke machine if you operate it wrong enough

Ik heb zelf ook een keer gekeken naar die mooie DDS chips van Analog Devices. De AD9834 maakt een sine, square en triangle output tot 37.5MHz (niet de oude datasheet pakken die maar 25MHz specificeerd), maar daar zit geen duty cycle adjustment op. Dat zou enkel met een hulp-DDS die de phase registers wisselt. Helaas heeft dat ook zijn beperkingen (delays, 2x DDS lijkt wat overkill, groot en duur voor zo'n feature)

Bovendien is ook de vraag of je een meer waveform outputs wil hebben, hoge frequenties of hoge resolutie. Die AD9834 heeft 'slechts' 28-bit frequentie tuning. Er zijn andere DDSjes die tot 32-bit gaan. Is toch een factor 16x nauwkeuriger, en dat vond ik nogal wat. (Het verschil tussen tientallen Hz of 1Hz tuning!)

Al die analoge chips zijn niet digitaal regelaarbaar, dus die vallen (voor mij doen) af.

Ik denk dat je heel erg snel uitkomt bij een FPGA met een of ander grappig SRAM <> DAC constructie om je signal te genereren. Hier voor hoef je (in princiepe) geen 200MSPS DAC te halen.
De HP33120A werkt met een 12-bit DAC op 40MHz. Die functiegenerator heeft een max. output van 20MHz 15MHz (daar zit een 9de order Elliptical 17MHz of 7 order Bessel 10MHz filter achter - 20MHz sine is dus een 20MHz square wave uit de DAC). De FPGA stuurt aan welk adres uit het SRAM wordt uitgelezen. Die bepaalt daarmee de frequentie.
Door het SRAM heb je kan je al je eigen waveforms inladen, frequentie bepalen en heb je veel bits aan resolutie (die DDS chips zijn maar 10-bits, altijd nog minder dan 12). Frequentie-tuning lijkt me vrij lastig om te realiseren, wellicht daarom hun keuze voor de ASIC.

Wat je ook kan doen met zo'n opstelling is een modulation DAC toevoegen van 8-bit waarmee je de amplitude extern kan moduleren. Meeste high-speed DACs werken met output-current. Door de het referentieniveau van die weerstanden te verschuiven krijg je een andere gevoeligheid.. (en dus amplitude)

Voor zo'n aansturing heb je zeker een (vlotte) FPGA nodig om de benodigde signalen op te wekken, maar het is zeker een interessant project. Helaas heb ik niet veel FPGA's zelf aangeraakt, dus heb ik dat idee maar laten varen.

Ik zou echter eerst met zo'n DDS chip (mijn favoriet was de AD9834 omdat die met gemak 20MHz output kan doen, en triangle/square/wave heeft) testen hoe ver je komt. Zo'n HP33120A heeft natuurlijk ook features die je niet gebruikt of die nog veel software schrijven vereisen (en als je dat al niet wilt hoef je de hardware ook niet capable te maken).

Aanvulling:
Ik ben met knifter eens dat de eind-trap ook een klasse apart is. Wat voor specs aan amplitude wil je? Een 50 ohm + 50ohm verbinding betekent een 100ohm belasting. Met een amplitude van 15V output is dat 150mA op enkele MHz.

De service manual van de HP33120A is met weinig moeite op internet te vinden. Hetzelfde idee als uit dit topic: http://www.circuitsonline.net/forum/view/76624

Een Push/Pull trap (liefste klasse A omdat je zo min mogelijk vervorming wilt) die mogelijk DC-gecorrigeerd wordt door een opamp. Zo'n trap heeft waarschijnlijk ook weer koeling nodig, enzovoort.

Versterking zou je kunnen doen door verschillende vaste versterkingstrappen te doen (de HP heeft 5 trappen van elk 6dB hoger) + een VGA die je van 0 t/m 6dB precies kan regelen. Dan kan je elke amplitude maken die je maar wilt.

Ik zit hier te twijfelen of een analoge multiplexer of relais beter zijn om signalen te schakelen (ook b.v. output on/off switches). Solid-state chips zijn compact , maar hebben hoge weerstand en mogelijk niet het beste voor signalen. Je hebt speciale RF-relaisjes, maar die kosten nogal wat.

Het pulsen tellen zou mogelijk kunnen door de DDS in reset te houden, tot de trigger, na het aantal pulsen houd je de DDS weer in reset.

Ik denk dat je die counter zelfs nog wel in de Micro controller kan maken

meten is weten, weten is meten, maar hoe kan je weten wat je allemaal moet meten en weten.

Ik denk dat we eerst de basis maar aan het werk moeten krijgen en dan eens verder kijken naar uitbreidingsmogelijkheden/features.

De switch met het phasereg zou ook middels het kleine broertje van de dds kunnen, die is een stuk goedkoper.

Jullie horen het wel als we iets werkend hebben of jullie hulp weer nodig zijn.

Every machine is a smoke machine if you operate it wrong enough

@hans1990: Ik heb hier de 9833, 28-bit freq-word. En haal daar wel +-0.1 Hz resolutie mee. Ik stel af per Hz en dat gaat prima. Moet ook wel: 25 Mhz (master clock 9833)/2^28 = 0.093 Hz. Dus het nut van 32 bit zag ik niet direct.
e: Zie dus meteen dat je niet 'exact' op de Hz af kunt stellen: het is een meervoud van .093. Misschien dat hiervoor 32-bit toch wel handig is, als je die precisie nodig hebt.

Het was nog een hele uitdaging om de berekening van dit frequency word goed te doen. Jal gaat namelijk niet goed om met 32-bit delingen in 1x. Ik heb het dus byte-voor-byte gedaan met vermenigvuldigingen. Uitleg staat in de jallib (maar wil ik ook nog wel toelichten als je wil).

Tevens gaat met goede filters deze 25 Mhz versie theoretisch tot 12.5 Mhz. Maar dit lukt uiteraard alleen met een zeer goed filter voor de sinus (had ik niet werkend: bleef blokkig gebeuren). Blokgolf gaat prima: je pakt de MSB van de accumulator. Zaagtand houd echt op bij 2 Mhz (je hebt dan slechts 12 punten per cycle!).

@MAH: Verder nog een idee voor assymetrie: De 'grotere' jongens van AD (zie ook de 59 en 99 serie! Ze hebben nieuwe.) hebben pinnen waarop de MSB van de accumulator apart naar buiten wordt gevoerd, intern geklokte comparators en meerdere(2) fase registers en frequency words welke geschakeld kunnen worden met ook externe pinnen.
Als je nu de MSB (en misschien comparators) gebruikt om te kiezen tussen de frequency words (hardwarematig) heb je kans dat je assymetrie voor elkaar krijgt, je schakelt immers over van frequency op de opgaande en neergaande flank. Slechts een idee. Je moet maar even bedenken/proberen of dit kan.
e: ik wilde PWM maken door de zaagtand door een comparator te halen. PWM hoefde ik toch niet veel verder als 1 Mhz. In de praktijk viel ook dit tegen bij mij... ervaring denk ik :)

Nog een probleem wat ik had met de 9833: Je hebt geen trigger uitgang. Deze moet je zelf maken met een externe comparator. Ik vraag me af hoe 'exact' dat is en of je geen phase-jitter krijgt t.o.v. je trigger-out.

Dus als je zon AD dds pakt, pak dan meteen zon hoger model: interne pll, amplitude register, offset register, dubbele geinverteerde uitgang, 2 uitgangen waarvan de fase verschoven t.o.v. de andere uitgang kan worden en meer leuke dingen!

Naar aanleiding van de vraag van Hans (http://www.circuitsonline.net/forum/view/message/1276691#1276691) is hier het schema van de arbitrary waveform generator die ik momenteel aan het maken ben:
http://www.uploadarchief.net/files/download/schema%20awg.png

Linksonder is gewoon het voedingsccircuit, +/- 12V voor de opamps en de rest is voor de FPGA, µC, DDS, display, DAC, ... (3V3, 2V5 en 1V2).

Via een touchscreen kan de gebruiker alle punten instellen. Dit touchscreen i.c.m. het display wordt ingelezen en aangestuurd door een µC (PIC32).
Van zodra de gebruiker alle punten van de golfvorm heeft ingesteld , zal de µC deze waarden doorsturen naar de FPGA.
Hierna dient de gebruiker ook nog de frequentie van het signaal te kiezen, waarna de µC de DDS'en configureert.
Deze DDS'en genereren een blokgolf waarvan de frequentie overeenkomt met de door de gebruiker ingestelde waarde.
De uitgang van de DDS is gekoppeld aan de FPGA waar hij gevolgd wordt door een PLL. De uiteindelijk uitgangsfrequentie hiervan bepaalt hoe snel er door het geheugen wordt gelopen, waarin de punten werden opgeslagen.
De DAC bezit een differentiële uitgang waardoor het gemakkelijk is om het signaal zowel positief als negatief te maken (verschilversterker). Daarna wordt het signaal nog wat versterkt en verlaat het uiteindelijk door een 50 ohm weerstand het circuit.

Alles werd dubbel opgebouwd om 2 signaaluitgangen te krijgen, channel 1 en 2.
Er is verder ook nog de mogelijkheid om waveforms te laden vanaf een USB-stick.

De componenten:
µC: PIC32MX460F512L
DDS: AD9833
DAC: DAC5662A
FPGA: EP3C25E144C8N

Eerst waren het atomen, dan waren het protonen, neutronen, elektronen, nog later waren het quarks en nu blijken het snaren te zijn...

Ik heb ooit een aantal functie generator's gebouwd op basis van de " XR205 " en werkt naar behoren.
http://www.uploadarchief.net/files/download/xr205.pdf
Misschien is het bruikbaar.

MVG Gerard.;)

soms zoekt men te diep in het EENVOUDIGE.

@Gerard:

Je bedoelt denk ik de XR2205,. Deze zit ook in de elektuur functiegenerator wat in de jaren 80 ergens geintroduceerd is

Ik heb niks gezegd, de XR2206 en XR2207 zijn ook functiegenerator chips.....dacht dat de XR2205 er ook ene zou zijn.

[Bericht gewijzigd door Stefanh001 op 15 juli 2011 23:30:21 (32%)

En wat verklaart de datasheet dan, en ik heb even op de chip gekeken en stond toch echt EXAR XR205,
Dus ik kan er niet meer van maken.

MVG Gerard.;)

soms zoekt men te diep in het EENVOUDIGE.