Innholdsfortegnelse:

Funksjonsgenerator: 12 trinn (med bilder)
Funksjonsgenerator: 12 trinn (med bilder)

Video: Funksjonsgenerator: 12 trinn (med bilder)

Video: Funksjonsgenerator: 12 trinn (med bilder)
Video: Output DC or AC Voltage using MCP4725 DAC with LCD and PWM to Voltage Converter with Arduino 2024, Juli
Anonim
Funksjonsgenerator
Funksjonsgenerator
Funksjonsgenerator
Funksjonsgenerator

Denne instruksen beskriver utformingen av funksjonsgeneratoren basert på Maxims analoge integrerte krets MAX038

Funksjonsgeneratoren er et veldig nyttig verktøy for elektronikkfreaks. Det er nødvendig for tuning av resonanskretser, testing av lyd- og videoutstyr, design av analoge filtre og for mange andre forskjellige formål.

I dag er det to hovedtyper av funksjonsgeneratorer; digital, (DSP -basert, DDS …) som oftere og oftere brukes og analoge, som var opprinnelsen.

Begge typer har sine fordeler og ulemper. De digitale generatorene kan generere signaler med veldig stabil frekvens, men de har problemer med å generere veldig rene sinussignaler (det som ikke er problemet for analog). Også de hovedsakelig spredte funksjonsgeneratorene basert på DDS -tilnærming har ikke så stort frekvensgenereringsområde.

Siden lenge ønsket jeg å designe en nyttig funksjonsgenerator, som på en eller annen måte kunne kombinere noen av fordelene med begge typer (analoge og digitale) generatorer. Jeg bestemte meg for å basere designet på Maxim -brikken MAX038*

* Bemerkning - denne brikken er ikke lenger produsert og solgt av Maxim. Det er foreldet. Det er fortsatt mulig å finne det på eBay, Aliexpress og andre nettsteder for elektroniske komponenter.

Det finnes også andre analoge funksjonsgeneratorbrikker (XR2206 fra Exar, icl8038 fra Intersil), men jeg hadde

en MAX038 tilgjengelig, og jeg brukte den. De digitale funksjonene til funksjonsgeneratoren ble utført av en Atmega328 -brikke. Funksjonene er følgende:

  • styrer valg av frekvensområde
  • styrer signaltypen (sinus, rektangulær, trekantet, sagetann)
  • måler amplituden til signalet
  • måler DC -forskyvningen
  • måler signalets frekvens
  • måler THD for sinussignalet i lydområdet (dette må fortsatt implementeres)
  • viser all denne informasjonen på en 16x2 LCD -skjerm med tegn.

Trinn 1: Beskrivelse av MAX038

MAX038 Beskrivelse
MAX038 Beskrivelse

Jeg har festet databladet MAX038. De kan se de viktigste brikkeparametrene:

♦ 0,1 Hz til 20 MHz driftsfrekvensområde

♦ Triangel-, sagtann-, sinus-, firkant- og pulsbølgeformer

♦ Uavhengige frekvens- og driftssyklusjusteringer

♦ 350 til 1 Frequency Sweep Range

♦ 15% til 85% variabel driftssyklus

♦ Utgangsbuffer med lav impedans: 0,1Ω

♦ Lav 200ppm/° C Temperaturdrift

Et annet viktig krav er behovet for dobbel forsyning (± 5V). Utgangsamplituden er fast (~ 2 VP-P med 0 V DC forskyvning).

På side 8 i databladet kan du se blokkdiagrammet til brikken. På side 11 kan du se den enkleste kretsen, som kan brukes til å generere et sinusbølgesignal. Denne kretsen ble tatt som grunnlag for utformingen av funksjonsgeneratoren.

Trinn 2: Kretsen…

Kretsen…
Kretsen…

På bildet er presentert kretsen til funksjonsgeneratoren. Jeg gjorde dette bildet med høyest mulig oppløsning for å garantere at hver.enhetsverdi kan leses riktig. Skjemaene ser ganske komplekse ut, og for å bli forstått bedre vil jeg forklare hoveddelene separat. Mange lesere kan klandre meg for at kretsen er for overflødig. Det er sant. Først kan du se at den inneholder to MAX038 -brikker. Årsaken er at PCB støtter både type pakker SO og DIP. Redundansen kan også sees i noen funksjoner -

1) LED -er viser det gjeldende aktive frekvensområdet, men det vises også på LCD -skjermen;

2) LED -er brukes også til å indikere signaltypen, men også LCD -skjermen viser denne informasjonen

Designet er gjort på denne måten for å gi brukeren mer fleksibilitet - etter ønske kunne han ikke bruke LCD -skjermen, eller bare slippe lodding av LED -er. Jeg har loddet dem for å kunne feilsøke funksjonaliteten under designfasene.

Det kan også bli lagt merke til at jeg bruker mange opamps. Noen av dem kan utelates uten problemer - spesielt bufferne. I dag tilbyr opampene i seg selv stor redundans - i en pakke kan du finne 2, 4 til og med 8 separate forsterkere, og dette til en relativt lav pris. Hvorfor ikke bruke dem?

Redundante er også filtreringskondensatorene - hver analog chip som brukes har sin egen kondensatorbank (tantal + keramiske kondensatorer for begge forsyninger). Noen av dem kan også utelates.

Trinn 3: Kretsforklaring - strømforsyning (1)

Kretsforklaring - strømforsyning (1)
Kretsforklaring - strømforsyning (1)

Som jeg sa, krever denne generatoren to forsyninger. Den positive spenningen skapes ved bruk av 7805 lineær spenningsregulator. Den negative tilførselen genereres av 7905 chip. Det midtre trykkpunktet på 2x6V -transformatoren er koblet til den felles grunnen til brettet. De genererte strømforsyningene - både det positive og det negative er atskilt til analogt og digitalt med chocks. To lysdioder indikerer tilstedeværelsen av hver forsyning.

Trinn 4: Kretsforklaring - Frekvensområdekontroll (2)

Kretsforklaring - Frekvensområdekontroll (2)
Kretsforklaring - Frekvensområdekontroll (2)

For å dekke stort frekvensområde brukes en multikondensatorbank. Kondensatorene har forskjellige verdier og de definerer forskjellige frekvensdelområder. Bare en av disse kondensatorene brukes under arbeidet - bunnplaten er jordet av MOS transistorbryter. Hvilke kondensatorer bunnplate som skal jordes styres av Atmega328 ved bruk av demultiplexer -brikke 74HC238. Som MOS -brytere brukte jeg BSS123 -transistorer. Hovedkravet for denne bryteren er å ha lav Ron og lavest mulig dreneringskapasitans. Den digitale kontrollen av kondensatorbanken kan utelates - kretskortet inneholder hull for lodding av ledningene for mekanisk dreiebryter.

Trinn 5: Forklaring av krets - frekvensjustering (3)

Kretsforklaring - frekvensjustering (3)
Kretsforklaring - frekvensjustering (3)

På bildet vises frekvens- og driftssykluskontrollkretsløpet. Der brukte jeg standard LM358 opamp (dobbel forsterker i en pakke). Jeg brukte også doble 10K potensiometre.

MAX038 -brikken genererer intern spenningsreferanse 2.5V, som vanligvis brukes som referanse for alle justeringer.

Denne spenningen påføres på den inverterende inngangen til IC8a, og den genererer negativ spenningsreferanse som brukes for DADJ (driftssyklusjustering). Begge spenningene påføres på potensiometeret for DADJ, hvilken midtkran er bufret og påført DADJ -pinnen på MAX038 -brikken. Jumperen JP5 kan brukes til å deaktivere DADJ -funksjonen når den er koblet til bakken. Frekvensstyringen "Kurs" blir forhåndsformet ved å endre gjeldende senket / hentet i MAX038 "IIN" -nål. Denne strømmen er definert av motstanden R41 og utgangsspenningen til opampen som buffrer midtkranen på kursfrekvensstyringspotensiometeret. Alle disse kan erstattes av et enkelt potensiometer (i reostat -tilkobling) mellom REF- og IIN MAX038 -pinnene.

Trinn 6: Kretsforklaring - Amplitudekontroll, SYNC -signalgenerering … (4)

Kretsforklaring - Amplitude Control, SYNC Signal Generation … (4)
Kretsforklaring - Amplitude Control, SYNC Signal Generation … (4)
Kretsforklaring - Amplitude Control, SYNC Signal Generation … (4)
Kretsforklaring - Amplitude Control, SYNC Signal Generation … (4)
Kretsforklaring - Amplitude Control, SYNC Signal Generation … (4)
Kretsforklaring - Amplitude Control, SYNC Signal Generation … (4)
Kretsforklaring - Amplitude Control, SYNC Signal Generation … (4)
Kretsforklaring - Amplitude Control, SYNC Signal Generation … (4)

Som skrevet i databladet har utgangssignalet pf MAX038 amplitude ~ 1 V med likspenning lik jordpotensialet.

Jeg ønsket å ha muligheten til å kontrollere signalamplituden og å kunne definere DC -forskyvningen av meg selv. Som tilleggsfunksjon ønsket jeg å ha SYNC -signal med CMOS -nivåer parallelt med utgangssignalet. Som standard genererer MAX038 -brikken et slikt signal, men i databladet leste jeg at hvis denne funksjonen er aktivert (hva betyr - DV+ pin koblet til 5V), kan noen topper (støy) observeres i det analoge utgangssignalet. Jeg ønsket å beholde det er så rent som mulig, og av den grunn genererte jeg SYNC -signalet eksternt. Kretskortet gjøres på den måten at DV+ -nålen lett kan broes til hovedforsyningen. SYNC -pinnen føres til BNC -kontakten - bare 50 Ohm motstand må loddes. I dette tilfellet kan SYNC -signalgenereringskretsene utelates. Her som du ser bruker jeg også doble potensiometre, men de er ikke koblet parallelt. Grunnen til det er - jeg måler amplituden relativt. Spenningen ved midtpunktet til ett potensiometer registreres av Atmega328 ADC og signalamplituden beregnes ut fra denne verdien. Selvfølgelig er denne metoden ikke veldig presis (den er avhengig av matchingen av begge potensiometerseksjonene, noe som ikke alltid forekommer), men den er nok presis for mine applikasjoner. I denne kretsen fungerer IC2A som spenningsbuffer. IC4A også. IC2B opamp fungerer som summeringsforsterker - den skaper utgangssignalet til den funksjonelle generatoren som summen av offset -spenningen og hovedsignalet med justert amplitude. Spenningsdeleren R15. R17 genererer et passende spenningssignal for måling av DC -hovedsignalforskyvningen. Det registreres av Atmega328 ADC. IC4B opamp fungerer som komparator - den styrer SYNC -generasjonsomformeren som realiseres av de to MOS -transistorene (BSS123 og BSS84). U6 (THS4281 - Texas Instruments) forskyver utgangssignalet som genereres av MAX038 DC med 2,5 V og forsterker det 1,5 ganger. Så generert signal registreres av AVR ADC og behandles videre med FFT -algoritme. I denne delen brukte jeg jernbane av høy kvalitet til å skinne opamp med 130 MHz båndbredde (TI - LMH6619).

For å være lett å forstå hvordan SYNC -signalgenerering fungerer, inkluderer jeg noen bilder av LTSpice -simuleringer av kretsen. På det tredje bildet: det blå signalet er offset -spenningen (inngang til IC2B). Den grønne er utgangssignalet med justert amplitude. Den røde er utgangssignalet til den funksjonelle generatoren. Cyankurven er SYNC -signalet.

Trinn 7: PCB -design

PCB -design
PCB -design

Jeg brukte "Eagle" for design av PCB. Jeg bestilte PCB -ene på "PCBway". Dem tok bare fire dager å produsere brettene og en uke å levere dem. Kvaliteten deres er høy, og prisen er ekstremt lav. Jeg betalte bare 13 USD for 10 PCB!

I tillegg til det kunne jeg bestille en annen farge PCB uten prisøkning. Jeg har valgt gule:-).

Jeg legger ved gerber -filene i henhold til "PCBway" -designreglene.

Trinn 8: Lodding

Image
Image
Lodding
Lodding
Lodding
Lodding

Først loddet jeg strømforsyningskretsene..

Etter å ha testet forsyningsblokken, har jeg loddet Atmega328 -brikken med støtteapparatene: kvartskrystall, kondensatorer, filtreringskapsler og ISP -kontakten. Som du ser har jeg en jumper i tilførselslinjen til AVR -brikken. Jeg kobler fra den når jeg programmerer brikken gjennom Internett -leverandøren. Jeg bruker USBtiny programmerer til det formålet.

Som neste trinn loddet jeg de-mux-brikken 74HC238, LED-ene indikerer frekvensområdet. Jeg lastet inn et lite Arduino -program i Atmega -brikken, som testet multipleksingen. (se videoen under lenken ovenfor)

Trinn 9: Lodding …

Lodding …
Lodding …
Lodding …
Lodding …
Lodding …
Lodding …

Som neste trinn loddet jeg opampene som jobbet i DC -modus (LM358) og frekvens- og DADJ -justeringspotensiometre og sjekket alle funksjonene.

Videre loddet jeg BSS123 -bryterne, de frekvensbestemmende kondensatorene og MAX039 -brikken. Jeg testet den funksjonelle generatoren som undersøkte signalet ved den opprinnelige brikkesignalutgangen. (Du kan se min gamle sovjet, produsert 1986, og jobber fortsatt med oscilloskop i bruk:-))

Trinn 10: Mer lodding …

Mer lodding …
Mer lodding …
Mer lodding …
Mer lodding …
Mer lodding …
Mer lodding …

Etter det loddet jeg kontakten til LCD -skjermen og testet den med "Hello world" -skissen.

Jeg loddet de andre gjenværende opampene, kondensatorene, potensiometrene og BNC -kontaktene.

Trinn 11: Programvare

Image
Image
Programvare
Programvare

For å lage Atmega328 firmware brukte jeg Arduino IDE.

For frekvensmåling brukte jeg biblioteket "FreqCounter". Skissefilen og det brukte biblioteket er tilgjengelig for nedlasting. Jeg har laget spesielle symboler for å representere den nåværende modusen (sinus, rektangulær, trekant).

På bildet ovenfor kan du se informasjonen som vises på LCD -skjermen:

  • Frekvens F = xxxxxxxx i Hz
  • Frekvensområde Rx
  • Amplitude i mV A = xxxx
  • Forskyvning i mV 0 = xxxx
  • type signal x

Funksjonsgeneratoren har to trykknapper foran på venstre side - de brukes til å endre frekvensområdet (trinn opp -trinn ned). Til høyre for dem er glidebryteren for kontroll av modusen, etter at den fra venstre til høyre følger potensiometeret for styring av frekvensen (kurs, fin, DADJ), amplitude og offset. Nær offsetjusteringspotensiometeret er plassert bryteren som brukes til å pendle mellom den faste på 2.5V DC -forskyvningen og den innstilte.

Jeg har funnet en liten feil i "Generator.ino" -koden i ZIP -filen - symbolene for sinus- og trekantbølgeformer ble byttet. I den eneste "Generator.ino" -filen som er vedlagt her, blir feilen rettet.

Trinn 12: Skal gjøres …

Image
Image

Som siste trinn har jeg tenkt å implementere tilleggsfunksjon - måling av THD for lydfrekvens sinussignal i sanntid ved bruk av FFT. Dette er nødvendig fordi driftssyklusen til sinussignalet kan avvike fra 50%, hva som kan skyldes interne brikkforskjeller og andre årsaker og kan skape harmoniske forvrengninger. Driftssyklusen kan justeres med potensiometeret, men uten å observere signalet på oscilloskopet eller spektrumanalysatoren er det umulig å trimme fin form. Å beregne THD basert på FFT -algoritmen kan løse problemet. Resultatet av THD -beregningene vil vises på LCD -skjermen øverst til høyre i tomrommet.

På videoen kan du se spekteret av det genererte av MAX038 sinussignal. Spektrumanalysatoren er basert på Arduino UNO -kort + 2,4 TFT -skjerm. Spektrumanalysatoren bruker SpltRadex Arduino -biblioteket utviklet av Anatoly Kuzmenko for å utføre FFT i sanntid.

Jeg bestemte meg fortsatt ikke - for å bruke dette biblioteket eller å bruke FHT -biblioteket som ble opprettet av Musiclabs.

Jeg har tenkt å bruke informasjonen fra frekvensmålermålingene til å beregne riktig samplingsvindu og å stoppe bruken av ekstra vinduer under FFT -beregningene. Jeg trenger bare å finne litt tid til å få dette til. Jeg håper å få noen resultater snart ….

Anbefalt: