Inhoudsopgave:

Signaalgenerator AD9833: 3 stappen
Signaalgenerator AD9833: 3 stappen

Video: Signaalgenerator AD9833: 3 stappen

Video: Signaalgenerator AD9833: 3 stappen
Video: Heatkit Signalgenerator Papierkondensatoren tauschen - eflose #876 2024, Juli-
Anonim
Signaalgenerator AD9833
Signaalgenerator AD9833
Signaalgenerator AD9833
Signaalgenerator AD9833

Een signaalgenerator is een zeer nuttig stuk testapparatuur. Deze gebruikt een AD9833-module en een Arduino Nano - dat is alles, zelfs geen PCB. U kunt optioneel een OLED-scherm toevoegen. De AD9833 kan sinus-, driehoeks- en blokgolven genereren van 0,1 Hz tot 12,5 MHz - de software in dit project is beperkt tot 1Hz tot 100kHz.

Er zijn andere Instructables met behulp van een Arduino en een AD9833, hier en hier. Dit is eenvoudiger en kan worden gebruikt als een sweep-generator. Sweep-generatoren helpen bij het testen van de frequentierespons van filters, versterkers, enzovoort. In tegenstelling tot de andere Instructables-ontwerpen, bevat dit geen versterker of amplituderegeling, maar u kunt ze desgewenst toevoegen.

Stap 1: Eenvoudigste signaalgenerator

Eenvoudigste signaalgenerator
Eenvoudigste signaalgenerator
Eenvoudigste signaalgenerator
Eenvoudigste signaalgenerator
Eenvoudigste signaalgenerator
Eenvoudigste signaalgenerator
Eenvoudigste signaalgenerator
Eenvoudigste signaalgenerator

Voor de eenvoudigste signaalgenerator soldeer je gewoon de AD9833-module op de achterkant van de Arduino Nano. Er is geen printplaat nodig.

De AD9833-module die ik heb gekozen, is vergelijkbaar met deze. Ik zeg niet dat dit de beste of goedkoopste leverancier is, maar je zou er een moeten kopen die op die foto (of de foto hierboven) lijkt.

De verbindingen tussen de modules zijn:

  • gronden met elkaar verbonden
  • D2 = FSync
  • D3 = Clk
  • D4 = Gegevens
  • D6 = Vcc van AD9833

De AD9833 wordt gevoed vanaf datapin D6 van de Arduino - de Arduino kan voldoende stroom leveren. Ik heb een ontkoppelingscondensator van 100n toegevoegd omdat ik dacht dat ik dat "zou" maar ik kon geen verschil zien - er is al een ontkoppelingscondensator op het AD9833-modulebord.

Als je zin had, zou je je misschien zorgen maken over "analoge grond" versus "digitale grond", maar als je zin had, zou je meer dan £ 4 uitgeven.

De eenvoudigste signaalgenerator wordt bestuurd en gevoed via een USB-kabel vanaf een pc. De USB emuleert een seriële poort die draait op 115200bps (8-bits, geen pariteit). De commando's zijn:

  • '0'..'9': cijfer verschuiven naar "min" frequentiearray
  • 'S': stel de AD9833-frequentie in en produceer een sinusgolf
  • 'T': frequentie instellen en driehoeksgolf produceren
  • 'Q': frequentie instellen en blokgolf produceren
  • 'R': reset de AD9833
  • 'M': kopieer "min" frequency array naar "max" array
  • 'G': sweep van "min" naar "max" gedurende 1 seconde
  • 'H': veeg van "min" naar "max" gedurende 5 seconden
  • 'I': veeg van "min" naar "max" gedurende 20 seconden

Het Arduino-programma bevat twee arrays van 6 tekens "min" en "max. Als u een cijfer verzendt, wordt het verschoven naar de "min"-reeks. Als u een 'S' verzendt, worden de "min"-arraytekens omgezet in een longint-frequentie en verzonden naar de AD9833. Dus de string verzenden:

002500S

stelt de AD9833-uitgang in op een sinusgolf van 2500 Hz. U moet altijd alle 6 cijfers meesturen. De minimale frequentie is 000001 en de maximale frequentie is 999999.

Als u een 'M' verzendt, wordt de "min"-array gekopieerd naar de "max" -array. Als u een 'H' verzendt, voert de AD9833 herhaaldelijk een geleidelijk toenemende frequentie uit gedurende 5 seconden. Het begint op "min" frequentie en 5 seconden later is op "max" frequentie. Dus

020000M000100SH

zwaait van 100 Hz tot 20 kHz. De frequentieverandering is logaritmisch, dus na 1 seconde is de frequentie 288 Hz, na 2 seconden 833 Hz, dan 2402, 6931 en 20000. De frequentie wordt elke milliseconde gewijzigd.

De lus stopt wanneer de Arduino een ander teken ontvangt, dus pas op dat u de opdracht niet verzendt gevolgd door een wagenretour of regelinvoer. Dat extra teken zou de lus beëindigen. Als u de seriële monitor gebruikt, is er rechtsonder een vak dat bijvoorbeeld "Beide NL & CR" kan zeggen, die (denk ik) tekens na uw opdracht verzendt. Stel deze in op "Geen regeleinde".

U kunt het onderstaande Windows EXE-programma downloaden dat de vereiste opdrachten zal verzenden of u kunt uw eigen opdrachten schrijven. Het Arduino INO-bestand is ook hier.

Stap 2: Voeg een OLED toe

Een OLED toevoegen
Een OLED toevoegen
Een OLED toevoegen
Een OLED toevoegen
Een OLED toevoegen
Een OLED toevoegen

Als u een OLED en twee knoppen toevoegt, kan de signaalgenerator alleen werken zonder een pc.

Degenen onder u die mijn Instructable oscilloscoop hebben gelezen, zullen de gelijkenis herkennen. De AD9833-module kan aan mijn oscilloscoop worden toegevoegd om een "Oscilloscoop en signaalgenerator in een luciferdoosje" te produceren.

Het display is een 1,3 OLED die werkt op 3,3V en wordt aangestuurd door een SH1106-chip via een I2C-bus.

Zoek op eBay naar 1,3-inch OLED. Ik wil geen bepaalde verkoper aanbevelen, omdat links snel verouderd raken. Kies er een die op die foto lijkt, met de tekst "I2C" of "IIC" en met vier pinnen met het label VDD GND SCL SDA (Sommige displays lijken de pinnen in een andere volgorde te hebben. Controleer ze. De juiste naam voor de klok van I2C is "SCL", maar op eBay kunnen de borden "SCK" worden genoemd, zoals die van mij op de foto.)

Een volledigere beschrijving van de OLED-bibliotheek staat in mijn oscilloscoop Instructable in stap 8. U moet de driverbibliotheek SimpleSH1106.zip downloaden en installeren, die zich in stap 8 bevindt. (Ik wil hier niet nog een kopie uploaden en moet twee exemplaren behouden.)

Het INO-bestand kan hieronder worden gedownload. De pinnummers die voor de OLED worden gebruikt, worden rond regel 70 gedeclareerd. Als je mijn "Oscilloscope and Signal Generator in a Matchbox" hebt gebouwd en dit INO-bestand ermee wilt testen, worden alternatieve pinnummers ingeschakeld via een #define.

Ik heb een stripboard-layout voor het circuit laten zien. Er zijn twee stripboards - een voor de Nano en de AD9833 en een voor het display. Ze moeten een sandwich vormen. De platen zijn weergegeven vanaf de componentzijde. Fijne flexibele draden verbinden de twee planken. Bevestig de platen aan elkaar met gesoldeerde afstandhouders. In mijn diagram wordt het koper van het stripboard weergegeven in cyaan. Rode lijnen zijn draadverbindingen op het stripboard of flexibele draden die de platen met elkaar verbinden. Ik heb de stroom- en "signaal"-kabels niet getoond.

De AD9833-module is gesoldeerd aan de koperen kant van het stripboard - aan de andere kant van de Nano. Soldeer pinnen op de koperen strips, plaats de AD9833 erop en soldeer deze vast.

Het display toont een enkele frequentie of de "min" en "max" frequenties.

Er zijn twee drukknoppen: een "Horizontale" knop om een cijfer van de frequenties te selecteren en een "Verticale" knop om dat cijfer te wijzigen.

Ik voed de signaalgenerator van het circuit dat ik aan het ontwikkelen ben - ik heb altijd 5V beschikbaar op mijn werkstation.

Stap 3: Toekomstige ontwikkelingen

Toekomstige ontwikkelingen
Toekomstige ontwikkelingen

Zou het op batterijen kunnen? Ja, voeg gewoon een 9V PP3 toe die is aangesloten op de RAW-pin van de Nano. Het gebruikt meestal 20mA.

Kan het worden aangedreven door een enkele lithiumcel? Ik zie niet in waarom niet. Je moet de OLED Vdd en zijn pull-up-weerstand aansluiten op de 3.7V-batterij (ik betwijfel of de 3.3V-uitgang van de Arduino goed zou werken).

Een sweep-generator is handiger bij het testen van de frequentierespons van een filter als u amplitude versus frequentie kunt plotten. Het meten van de amplitude van een signaal is lastig - je moet het verval van je envelopdetector inruilen tegen rimpel voor lage frequenties en responstijd voor hoge frequenties. Nadat u uw amplitudedetector hebt gebouwd, kunt u de uitvoer ervan in de ADC van de Arduino van de "eenvoudigste signaalgenerator" invoeren en vervolgens het resultaat, samen met de huidige frequentie, naar de pc sturen.

Deze pagina is een handig startpunt of zoek op Google naar "envelopdetector" of "piekdetector". In het bovenstaande voorgestelde circuit zou je de signaalfrequentie instellen, wachten tot deze stabiliseert, de Arduino A0-pin instellen om digitaal laag uit te voeren, wachten om C te ontladen, A0 instellen op invoer, wachten en dan meten met de ADC. Laat me weten hoe je erop komt.

Aanbevolen: