Industrielle Fertigung
Industrielles Internet der Dinge | Industrielle Materialien | Gerätewartung und Reparatur | Industrielle Programmierung |
home  MfgRobots >> Industrielle Fertigung >  >> Manufacturing Technology >> Herstellungsprozess

Generieren einer hochpräzisen Wellenform mit einem DAC und einer benutzerdefinierten Leiterplatte

In diesem Artikel werden wir' Ich werde Firmware entwickeln, die als Basis für eine hochpräzise und schnelle Signalerzeugung dient.

Ich habe vor kurzem eine Leiterplatte für einen Arbitrary Waveform Generator (AWG) entwickelt, die auf einem C8051F360-Mikrocontroller und einem TxDAC von Analog Devices basiert.

Diese beiden ICs kommunizieren über eine parallele Schnittstelle, die es mir ermöglicht, höherfrequente analoge Signale zu erzeugen, indem ich die maximale Rate suche, mit der der Mikrocontroller Daten an den DAC übertragen kann.

In diesem Artikel werde ich mich nicht darum bemühen, Aspekte des Hardware-Designs zu erläutern, da ich den Schaltplan und das Layout in einer Reihe von vorbereitenden Fachartikeln ausführlich diskutiert habe. Drei dieser Artikel konzentrieren sich auf einen bestimmten Teil des Schaltplans (nämlich den Mikrocontroller, den DAC und die Ausgangsschaltung des DAC), und der vierte befasst sich mit dem Layout.

Das Ziel

Das Ziel dieses Projekts ist es, das Firmware-Framework zu erstellen, das es uns ermöglicht, digitale Daten bequem vom Mikrocontroller zum DAC zu übertragen und diese Daten dann in ein analoges Signal umzuwandeln. Dieses AWG-Board hat das Potenzial für einige interessante Funktionen, aber der wichtigste Schritt besteht darin, eine zuverlässige, erweiterbare und hochpräzise Schnittstelle zwischen der MCU und dem DAC einzurichten. Wir überprüfen diese Schnittstelle, indem wir eine Rampenwellenform generieren und eine Oszilloskopanalyse durchführen.

Die Anforderungen

Hochpräzises Timing

Viele Mikrocontroller-Anwendungen haben wenig oder gar keinen Bedarf an hochgenauem Timing. Aus diesem Grund können wir so oft erfolgreiche Geräte entwickeln, bei denen die einzige Taktquelle der interne Oszillator der MCU mit niedriger Präzision ist. Aber die AWG ist anders. Wir möchten Signale erzeugen, die so konsistent wie möglich mit den idealisierten mathematischen Wellenformen sind, die als Ausgangsmaterial dienen, und das bedeutet, dass wir vorhersagbare Signalfrequenzen und eine konsistente DAC-Abtastrate benötigen.

Effiziente Nutzung des Prozessors

Obwohl diese spezielle Leiterplatte fast ausschließlich der Erzeugung von Wellenformen gewidmet ist, müssen wir sicherstellen, dass dieses Firmware-plus-Hardware-Framework problemlos in andere Anwendungen integriert werden kann. Folglich möchten wir, dass unsere Firmware in der Lage ist, stabile, hochpräzise Wellenformen zu erzeugen, ohne dass der Prozessor für andere Aufgaben vollständig unzugänglich wird.

Höchstgeschwindigkeit

Wir leben in einer Hochfrequenzwelt, und dieses AWG wird wenig nützen, wenn es bei 1 kHz maximal ist. Fairerweise ist dies ein einfaches, kostengünstiges Design, und wir können nicht erwarten, dass es 915-MHz-DQPSK-Wellenformen erzeugt, die für die ISM-Bandübertragung bereit sind. Aber wir wollen so viel Bandbreite wie möglich aus diesem Gerät herausholen, und das ist umso anspruchsvoller, wenn man bedenkt, dass die Abtastfrequenz deutlich höher ist als die tatsächliche Signalfrequenz. Ungeachtet des Nyquist-Shannon-Theorems möchte ich mindestens fünf Abtastungen pro Zyklus, und zehn sind meine Präferenz. Selbst wenn wir es schaffen, die Abtastrate auf 10 MHz zu erhöhen, werden unsere Wellenformen im Bereich von 1-2 MHz liegen.

Das Hardwaredesign spiegelt bereits die Bedeutung der Geschwindigkeitsoptimierung wider:Ich habe mich für einen Mikrocontroller entschieden, der mit Kernfrequenzen von bis zu 100 MHz arbeitet, und ich habe einen parallelen Bus implementiert, der den Overhead minimiert, der erforderlich ist, um Daten vom Speicher der MCU zu den DAC-Eingangspins zu verschieben.

Abtastrate

Die AWG-Platine verfügt über eine Hochleistungstaktquelle (einen MEMS-Oszillator mit einer Gesamtfrequenzstabilität von ±50 ppm). Die Firmware muss diese Zeitbasis verwenden, um ein stabiles Taktsignal zu erzeugen, das die Aktualisierungsschaltung des DAC steuert. Wenn ich hochwertige Timing-Signale haben möchte, greife ich immer auf Hardware zurück, und in diesem Fall verwende ich das programmierbare Zählerarray (PCA), um einen 500-kHz-Takt aus dem externen 10-MHz-Oszillator zu generieren.

Ich habe das Silicon Labs Config2-Programm für meine Hardwarekonfiguration verwendet, da der C8051F360 von dem in Simplicity Studio integrierten Konfigurationstool nicht unterstützt wird. Hier ist die allgemeine Konfiguration für das PCA-Modul:

Der PCA ist aktiviert und die Zeitbasis ist die Systemuhr. An dieser Stelle entspricht die Systemtaktfrequenz der externen Oszillatorfrequenz (10 MHz), aber später verwenden wir die Phasenregelschleife des Mikrocontrollers, um eine höhere Kernfrequenz zu erhalten. Das Taktsignal des DAC wird vom PCA-Modul 0 erzeugt, das für den Modus „Frequenzausgabe“ konfiguriert ist:

Werfen wir einen Blick auf die Sample-Rate-Clock. Mein Zielfernrohr MDO3104 von Tektronix verfügt über einige ziemlich fortschrittliche Messfunktionen, die uns helfen, seine Qualität zu beurteilen.

Wie durch die Messungen am unteren Rand der Oszilloskopaufnahme bestätigt wird, ist die Frequenz genau wie erwartet (500 kHz) und wir haben auch einen perfekten Arbeitszyklus von 50%; Darüber hinaus zeigen die Statistiken „Min“ und „Max“ an, dass Frequenz und Arbeitszyklus im Laufe der Zeit stabil sind.

Eine besonders hilfreiche Ergänzung dieser Messfunktionalität ist die Standardabweichung („Std Dev“). Die Standardabweichung gibt an, wie stark die Werte vom Mittelwert abweichen, und in dieser Situation ist es eine schnelle und einfache Möglichkeit, Unvollkommenheiten in der Frequenz und dem Tastverhältnis des Taktsignals zu beurteilen. Beide Standardabweichungen sind sehr gering:13,54 Hz sind 0,0027% der Nennfrequenz und 2,117×10 –3 beträgt nur 0,0042 % des typischen Arbeitszyklus.

Wir können diese Analyse noch einen Schritt weiterführen, indem wir uns das Histogramm einer der Taktflanken ansehen. Wenn wir das Oszilloskop so einstellen, dass es auf die fallende Flanke triggert und dann auf die steigende Flanke zoomt, verschiebt sich die Position der steigenden Flanke entsprechend dem Jitter des Signals. Wir können dann ein horizontales Wellenformhistogramm hinzufügen, um diesen Jitter zu verfolgen und seine Verteilung aufzudecken. In diesem Fall ist jedoch nicht viel zu sehen, da der Jitter so gering ist.

Der externe Interrupt

Wir haben jetzt eine Rechteckwelle, die die Ausgangsschaltung des DAC steuert; Die nächste Aufgabe besteht darin, die Datenaktualisierungen der MCU mit dieser Rechteckwelle zu synchronisieren. Wir werden dies tun, indem wir einen externen Interrupt an den PCA-Pin anschließen, der das Taktsignal ausgibt. Der DAC speichert die Eingabedaten auf dem steigenden Flanke der Uhr, daher möchten wir die Datensignale beim fallenden . aktualisieren Kante. Diese Technik der entgegengesetzten Flanke ist der grundlegende Weg, um sicherzustellen, dass digitale Daten aktualisiert und stabilisiert werden, bevor das Eingabegerät die aktive Taktflanke empfängt.

Also habe ich den externen Interrupt 0 (bezeichnet mit /INT0) aktiviert, an den Taktsignal-Ausgangspin (P0.7) angeschlossen und für die fallende Flanke empfindlich gemacht.

Sie sind wahrscheinlich daran gewöhnt, einen externen Interrupt zu verwenden, um eine Eingabe . zu überwachen Signal, aber in diesem Fall kann es Firmware-Ereignisse genauso effektiv mit einem vom Mikrocontroller selbst generierten Signal synchronisieren. Dies ist eigentlich eine besonders praktische Strategie, wenn Sie es mit einer zeitkritischen Aufgabe zu tun haben, da der externe Interrupt 0 der Interrupt mit der höchsten Priorität ist und weil sein Interrupt-anstehend-Flag automatisch von der Hardware gelöscht wird (wodurch die erforderliche Zeit eliminiert wird). um das Flag mit einer Firmware-Anweisung zu löschen).

Der ISR

Die Hauptaktion findet in der Interrupt-Service-Routine /INT0 statt. Das nächste DAC-Datenbyte wird aus dem Speicher abgerufen (oder direkt vom Mikrocontroller erzeugt) und dann auf P2 getrieben; Ich habe eine #define-Anweisung verwendet, um „DAC_WORD“ zu einer Alternative zu „P2“ zu machen:

SI_INTERRUPT(INT0_ISR, INT0_IRQn)
{
DAC_WORD–;
}

Die kritische Variable bei dem Bemühen, die DAC-Aktualisierungsrate zu maximieren, ist die Zeitdauer, die erforderlich ist, um die Befehle im ISR auszuführen. (In diesem Beispiel haben wir nur einen Befehl, aber das wird nicht immer der Fall sein.) Der ISR muss einmal für jede aktive Flanke des DAC-Takts aufgerufen werden, und wir können den ISR nicht aufrufen, bevor die Ausführung abgeschlossen ist. Wenn wir also versuchen, unsere Bandbreite auf das Maximum zu bringen, müssen wir alles tun, um die Ausführungszeit des ISR zu minimieren, und dann werden wir unsere DAC-Taktfrequenz entsprechend einstellen.

Die oben gezeigte einzelne Anweisung (DAC_WORD–) erzeugt eine Rampenwellenform, da der DAC-Wert linear auf Null abfällt und dann auf 255 übergeht und wieder abnimmt. Hier ist die Ausgabe des DAC:

Sie haben vielleicht bemerkt, dass die analogen Rampenabschnitte zunehmen in Richtung der maximalen Spannung, während die DAC-Werte abnehmen gegen null. Dies tritt auf, weil der Ausgangsverstärker des DAC eine invertierende Konfiguration verwendet.

Schauen wir uns noch eine letzte Scope-Aufnahme an, bevor wir fertig sind.

Weitere Informationen lesen….

So erzeugen Sie eine hochpräzise Wellenform mit einem DAC und einer benutzerdefinierten Leiterplatte


Herstellungsprozess

  1. Python- und Raspberry Pi-Temperatursensor
  2. So überprüfen und kalibrieren Sie einen Feuchtigkeitssensor
  3. Generieren einer hochpräzisen Wellenform mit einem DAC und einer benutzerdefinierten Leiterplatte
  4. DIY-Voltmeter mit Arduino und Smartphone
  5. FM-Radio mit Arduino und RDA8057M
  6. So erstellen Sie einen Kompass mit Arduino und Processing IDE
  7. So wählen Sie ein Unternehmen zur Herstellung von PCB-Prototypen aus
  8. Wie ist die Leiterplattenfertigung so präzise?
  9. Häufige Fehler bei der Leiterplattenherstellung und wie man sie behebt
  10. Leiterplatten und wie sie funktionieren?