Enkel USB-styrd DDS-signalgenerator

Berätta om dina pågående projekt.
Användarvisningsbild
hanzibal
EF Sponsor
Inlägg: 2499
Blev medlem: 7 september 2010, 20:54:58
Ort: Malmö/Lund

Enkel USB-styrd DDS-signalgenerator

Inlägg av hanzibal »

Ibland behöver man ju lite signaler t.ex. för att testa filter eller generera klockor och då kan det vara bra att han en signalgenerator. Jag har sneglat åt signalgeneratorer ett tag (arbiträra är ju såå coola) men de kostar en peng och för mig är behovet sällsynt och när det väl uppstår räcker något enkelt.

Det visade sig att jag hade ett par AD9850 kort liggande tillsammans med alla andra "bra att ha"-grejor som jag tenderar att köpa på mig alldeles för mycket av:
ad9850.JPG
Dessa kort kostar under 5 USD med frakt på eBay så jag köpte två i sedvanligt "beställ and forget"-töcken. Eftersom det tar några veckor från Kina så har man ju hunnit glömma bort allt och blir därför glad som ett barn när det plötsligt dimper ner paket - nämen, paket till mig, vad kan det va? spännande! :lol:

Jag har tidigare gjort ett USB-anslutet I/O kort kallat PeekyPokey och behöver fylla på projekthemsidan med fler exempel på saker man kan göra med kortet (och helt skamlöst visar jag upp det här nu):
peekypokey_small.JPG
[/url]Därför gick jag på jakt i mina lådor och hittade de här båda AD9850-korten. Visade sig funka fint att styra med PeekyPokey.

Såhär ser min signalgenerator ut i nuläget, som ni ser har jag lagt mycket tid på att få så rena och fina signalvägar som möjligt - man vill ju inte ha en massa brus och annan sörja i sina fina sinusar:
setupen.JPG
Till detta har jag då börjat skriva på ett litet program så att man enkelt kan ratta in P3 direkt på datorn:
Interface.PNG
Den genererade signalen blir så här i skopet, rätt ok tycker jag nog, särskilt med tanke på den fagra PCB-layouten:
skopet.PNG
AD9850 har en power-down funktion, trevligt att kunna fimpa signalen utan att rycka ut USB-sladden ju. Kortet har också en vridpot (se bild ovan) som används för att justera duty cycle på fyrkanten. Rätt fiffig lösning tycker jag, man återkopplar sinus-signalen till en intern komparator och med vridpoten ställer man sedan tröskeln.

Mina nästa steg blir troligen dessa:

1. Ersätta poten med en digital resistor (så att man kan styra duty programmatiskt)
2. Fixa ett drivsteg för lite mer kräm (30mA max nu) och högre spänning
3. Lägga till en sequencer i mjukvaran
4. Ännu en digital resistor, nu för att styra gain på drivsteget
6. Kanske bygga liten söt låda

Hade varit fint med en 2x16-display och ett par fysiska knappar också men I/O-kortets pinnar räcker inte till. Fast man kan ju bygga en liten webbserver och använda telefonen istället. 8)

Det här projektet blir kanske inte snorbilligt i slutändan men kul att mecka och sen hade jag ju redan PeekyPokey-kortet sedan tidigare. :P
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
rikkitikkitavi
Inlägg: 15844
Blev medlem: 21 juni 2003, 21:26:56
Ort: Väster om Lund (0,67 mSv)

Re: Enkel USB-styrd DDS-signalgenerator

Inlägg av rikkitikkitavi »

Klart coolt! Jag är intresserad , behöver ibland få ut sinus mer än vad mitt M/-audio klarar av.

Funderar på om högen med LH0002 jag har går att använda till något, men de hänger nog inte med hela vägen upp som generatorn fixar.

(apropå din andra tråd om.buffersteg, LH0002 är en.transistorbuffer med 50MHz bandbredd avsedd att hängas på en OP utgång)
Användarvisningsbild
hanzibal
EF Sponsor
Inlägg: 2499
Blev medlem: 7 september 2010, 20:54:58
Ort: Malmö/Lund

Re: Enkel USB-styrd DDS-signalgenerator

Inlägg av hanzibal »

De där LH0002 verkar vara vad jag letat efter i många andra sammanhang. Kanske funkar bra här också, får nog testa det.

AS9850 kan maxa 62,5Mhz (med referensklocka på 125Mhz) men i praktiken tror jag den kroknar redan efter 25Mhz, vet dock inte eftersom mitt Rigol 1052E är omoddat och därmed på 50Mhz.

Har testat lite olika gränssnitt för att ställa önskad frekvensen. Tänkte man skulle sätta dekaden och sedan dess siffra men det blev ganska bökigt:
ppsiggen2.PNG
Vet inte hur det funkar på riktiga generatorer, kanske kan man planka gränssnittet därifrån. Oavsett vilket så skall man såklart också kunna skriva in värde med tgb men det vore trevligt med något smutt gränssnitt.

Förresten så kunde jag inte låta bli att lägga in en liten webbserver i programmet så nu kan man styra med telefonen också. Den vita rutan skall bli en display i form av en PNG-bild som tankas ner från webbservern men så långt har jag inte kommit. Siffrorna väljer dekad 0-7 och sedan använder man upp/ned-pilarna ökar eller minskar motsvarande siffra (återspeglas i PC-programmet också).
telefonsnitt.PNG
Kanske inte jättemeningsfullt men kul och möjligen en av världens första iPhone-styrda signalgeneratorer :roll:
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
Användarvisningsbild
hanzibal
EF Sponsor
Inlägg: 2499
Blev medlem: 7 september 2010, 20:54:58
Ort: Malmö/Lund

Re: Enkel USB-styrd DDS-signalgenerator

Inlägg av hanzibal »

Gjorde en MIDI-spelare av den istället:



Hookar in mig på Windows standard MIDI-ut och skickar tonerna till AD9850 istället. Utsignalen är kopplad till Line-in på datorn.

Ingen synk så det låter knas men visst känns stycket igen?

Man kan också använda ett klaviatur och hamra på.
Användarvisningsbild
hanzibal
EF Sponsor
Inlägg: 2499
Blev medlem: 7 september 2010, 20:54:58
Ort: Malmö/Lund

Re: Enkel USB-styrd DDS-signalgenerator

Inlägg av hanzibal »

Nå, var det ngn som kände igen stycket trots osynk och utan att läsa undetexten eller var det så uppenbart att svar är överflödiga?

Hint: Min yngsta heter Elise (inte därför) och jag har österrikiskt påbrå :-)
Användarvisningsbild
007sweden
Inlägg: 3500
Blev medlem: 3 mars 2005, 20:18:12
Skype: oo7sweden

Re: Enkel USB-styrd DDS-signalgenerator

Inlägg av 007sweden »

Ja den känns igen fastän jag störde mig på att det var knasiga tonlängder ibland. :D (eller vad det nu kallas)
Användarvisningsbild
hanzibal
EF Sponsor
Inlägg: 2499
Blev medlem: 7 september 2010, 20:54:58
Ort: Malmö/Lund

Re: Enkel USB-styrd DDS-signalgenerator

Inlägg av hanzibal »

He, he, jo där våldförde jag mig visst rejält på gamle Ludde och sedan tycktes vissa toner helt stumma, troligen pga "inspelnings- och produktionstekniska" begränsningar ;-)
Användarvisningsbild
hanzibal
EF Sponsor
Inlägg: 2499
Blev medlem: 7 september 2010, 20:54:58
Ort: Malmö/Lund

Re: Enkel USB-styrd DDS-signalgenerator

Inlägg av hanzibal »

Hmm...lyckades 5-faldiga I/O-hastigheten på mitt kort så nu spelar den riktigt fint. Om någon är intresserad lägger jag upp en ny video.

Bra att jag började leka med MIDI annars hade det dröjt innan jag hittat denna optimering :D
Användarvisningsbild
ecenier
Inlägg: 1149
Blev medlem: 13 december 2007, 17:51:42
Ort: Älvsjö
Kontakt:

Re: Enkel USB-styrd DDS-signalgenerator

Inlägg av ecenier »

Jag förstår inte kopplingen mellan din analoga signal och midi-ingången. Midi är ju ett seriellt digitalt protokoll. Har du en omvandlare någonstans, eller använder du egentligen en analog ingång?
Användarvisningsbild
hanzibal
EF Sponsor
Inlägg: 2499
Blev medlem: 7 september 2010, 20:54:58
Ort: Malmö/Lund

Re: Enkel USB-styrd DDS-signalgenerator

Inlägg av hanzibal »

AD9850 är en digitalt styrd signalgenerator som ger en sinussignal ut, det är denna signal man ser i oscilloskopet. Denna signal är också kopplad till datorns Line-In.

För att styra AD9850 från PCn använder jag PeekyPokey via USB och programmet kan då när som helst kommendera AD9850 att skicka ut vilken frekvens som helst mellan 0,0291Hz och 62,5MHz.

Här kunde jag lagt ut knappar i programmet och få ett klavitur att klicka på men är kass på piano och låter istället en MIDI-fil spela åt mig.

Programmet kunde nu ha läst in MIDI-filen, tolkat den och skickat tonerna till AD9850 men istället överlåter till Windows Media Player att sköta detta.

Normalt sett skickar ju mediaspelaren sina MIDI-kommandon till PC-ljudkortets synth men nu omdirigerar jag (med en virtuell MIDI-port) MIDI-kommandona till mitt program istället där de skickas till AD9850 och "ljuv" musik uppstår :-)

Hela grejen med att blanda in MIDI överhuvudtaget var bara en larvig grej jag tänkte kunde vara lite kul en stund men så här i efterhand kanske det kan komma till nytta - MIDI kan ju användas till mycket mer än bara musik och förutom MIDI-tangentbord finns boxar med knappar, vred och annat som ger MIDI ut (finns såklart också som mjukvara) som man skulle kunna använda för att få ett riktigt taktilt gränssnitt.

EDIT: Här en en ny video:


I de lite snabbare partierna hänger den inte med men i övrigt låter det ok tycker jag.
Användarvisningsbild
hanzibal
EF Sponsor
Inlägg: 2499
Blev medlem: 7 september 2010, 20:54:58
Ort: Malmö/Lund

Re: Enkel USB-styrd DDS-signalgenerator

Inlägg av hanzibal »

För varje tonbyte skall 40 bitar bangas över seriellt och med 1ms latens (USB HID 2.0 full speed) tar det alltså ca 1/10 sekund.

AD9850 klarar 23 miljoner (!) tonbyten per sekund men detta lär kräva prallellt läge.

Med en snabbare host lär man kunna köra ackord* så som jag gissar att man gjorde på C64 med dess SID-chip (som f.ö. också satt i en del av dåtidens synthar), fast har för mig att det hade 4 oscillatorer.

*) Vore kul att testa :-)
Användarvisningsbild
hanzibal
EF Sponsor
Inlägg: 2499
Blev medlem: 7 september 2010, 20:54:58
Ort: Malmö/Lund

Re: Enkel USB-styrd DDS-signalgenerator

Inlägg av hanzibal »

Sådär, slutlekt på ett tag :-)

Har nu bytt ut trimpoten på AD9850-kortet mot en MCP41100 som är ett SPI-styrt digitalt motstånd på 0 - 100k. Funkar fint men (p.g.a. 8-bitars upplösning på motståndet och att sinus är väldigt flack i "ändlägena") blir minsta dutycycle ca 6% före 0% och likadan ca 94% före 100%. Testade att dimma en LED, funkar bra men man kommer alltså inte riktigt ned i ljusstyrka innan den slockar helt pga 6%-gränsen.

Fyrkanten blir ganska fult över 2Mhz och börjar dessutom störa sinussignalen ganska tidigt. Man får alltså nöja sig med att köra en signal åt gången, åtminstone om man vill över ca 100kHz eller något ditåt. Om man vill köra högre sinus så får man dra ner duty till noll annars blir det crosstalk. Detta har delvis med min urusla "kretskortslayout" att göra men fenomenet lär finnas i alla fall om än något högre upp i frekvenserna.

Fick förresten till en hyffsad metod att ändra frekvensen på - man markerar den siffra man vill ändra (de två vita strecken i bild nedan) genom att klicka med musen på den och sedan använda musens scroll-hjul för att justera upp eller ned till önskad siffra. Eventuellt skulle man kunna markera flera siffror åt gången och justera dessa på en gång, exempelvis 0 - 999 om man markerat 3 siffor, det borde bli ganska flexibelt.

Slidern används som synes för att justera duty cycle, funkar fint.
dds_duty.PNG
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
Användarvisningsbild
hanzibal
EF Sponsor
Inlägg: 2499
Blev medlem: 7 september 2010, 20:54:58
Ort: Malmö/Lund

Re: Enkel USB-styrd DDS-signalgenerator

Inlägg av hanzibal »

Idag dök det upp ett enormt paket från Texas innehållande ett litet gulligt THS4226 EVM-kort:
evm_top.JPG
evm_back.JPG
Mycket välgjorda. Innan jag kan testa det får jag skaffa några SMA-kontakter eller knipsa av från någon gammal wlan-antenn.

Enligt manualen skulle man enkelt kunna byta ut feedback-resistorn för resp. kanal men det verkar inte så "enkelt" när jag kollade på kortet - kanske något jag missuppfattat, får lusläsa manualen senare.
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
blueint
Inlägg: 23238
Blev medlem: 4 juli 2006, 19:26:11
Kontakt:

Re: Enkel USB-styrd DDS-signalgenerator

Inlägg av blueint »

Lite svårt att klura ut hur AD9850 även om några exempel finns på sidan 8 i databladet. Men det borde gå att få högre precision än den analoga återkopplingen via digital potentiometer genom att styra med kontrollord?

Datablad för op-amp THS4226, btw.
Användarvisningsbild
hanzibal
EF Sponsor
Inlägg: 2499
Blev medlem: 7 september 2010, 20:54:58
Ort: Malmö/Lund

Re: Enkel USB-styrd DDS-signalgenerator

Inlägg av hanzibal »

AD9850 har jag inga problem med, funkar utmärkt att styra den med programmet, även duty cycle på fyrkanten med ett digitalt motstånd MCP41100 över SPI.

När du skriver kontrollord, menar du då det 40-bitars ord som jag skickar över seriellt? Detta har jag såklart också full koll på eftersom det ju är precis det jag använder för att styra AD9850.

Om du menar EVM-kortet, så vill jag kunna styra gain på den - tänkte då att jag kunde göra detta genom att variera feedback-resistorn med ett digitalt motstånd (även här gärna MCP41100) som jag i sin tur styr med programmet.

User guide för EVM-kortet finns här om du kanske har lust att kolla:
http://www.ti.com/lit/ug/slou157/slou157.pdf
Skriv svar