Inhaltsverzeichnis:
- Schritt 1: Blockschaltbild - Hardware
- Schritt 2: Blockschaltbild - Vernetzung
- Schritt 3: Teile, Werkzeuge, IDE und Stückliste
- Schritt 4: Hardware-Design - Hauptplatine
- Schritt 5: Hardware-Design - ESP32-Modul
- Schritt 6: PCB-Layout
- Schritt 7: 3D-Gehäuse
- Schritt 8: Softwareimplementierung - MCU
- Schritt 9: Softwareimplementierung - Android-App
- Schritt 10: Testen
Video: Tragbarer Funktionsgenerator für WiFi und Android - Gunook
2024 Autor: John Day | [email protected]. Zuletzt bearbeitet: 2024-01-30 07:15
Gegen Ende des 20. Jahrhunderts tauchten verschiedene technologische Innovationen auf, insbesondere im Bereich der Kommunikation; aber nicht nur. Für uns haben Anwender, Verbraucher und Ingenieure die rasante Entwicklung elektronischer Geräte ans Licht gebracht, die unser Leben viel einfacher machen können: Smartwatches, Smart Homes, Smartphones etc.
Da heutzutage alles "smart" sein kann, habe ich beschlossen, ein äußerst nützliches Gerät zu entwickeln, das Teil einer wesentlichen elektronischen Laborausrüstung ist - tragbarer Funktionsgenerator, steuerbar von Android OS-basiertem Smartphone über WiFi Direct oder WiFi Local Area Network (WLAN)).
Warum sollten wir dieses Gerät bauen?
Ein Großteil der Prüfgeräte ist heutzutage ziemlich teuer. Und manchmal sind diese Geräte nicht tragbar. Als Lösung für hohe Preise, mangelnde Portabilität und fehlenden Netzwerkzugriff des Geräts bietet das Gerät einen Zweikanal-Wellenformgenerator, der tatsächlich tragbar ist und einen uneingeschränkten Zugang zum Netzwerk hat - entweder über das Internet oder ein lokales Netzwerk.
Und natürlich sollte das Gerät aus Begeisterung gebaut werden, nach den DIY-Prinzipien - Manchmal müssen wir Dinge einfach selbst tun, um sich richtig zu fühlen:)
Hauptmerkmale
Energieversorgung
- USB-Typ-A-Anschluss, sowohl für Stromversorgungssysteme als auch für die Programmierung
- Vollständiges Li-Ion-Batteriemanagementsystem - Laden und stabile Modi
- Smart Switch-Implementierung – kein Umschalter erforderlich
- Duale Stromversorgung: +3,3 V und -3,3 V für die Erzeugung einer symmetrischen Spannungswellenform
Wellenformgenerierung
- Implementierung des DC-Pegels an der Ausgangskaskade - Biased Waveform zwischen den Spannungsgrenzen
- DDS-basierte 4-Typ-Wellenformgenerierung - Sinus, Dreieck, Rechteck und DC
- Bis zu 10 MHz Frequenzunterstützung
- Ausgangsstrom bis 80mA bei 500mW maximaler Leistungsverfügbarkeit
- Getrennte Kanäle für die Wellenformerzeugung – geteilte AD9834-basierte Schaltungen
Kommunikation
- Implementierung von ESP32 - Anwendbare WLAN-Funktionen
- Vollständige TCP/IP-Unterstützung durch Generatorgerät und Android-Smartphone
- Möglichkeit, Benutzerparameter für jeden Gerätezyklus zu speichern
- Zustandsüberwachung - beide Systeme kennen den jeweils anderen Zustand: FuncGen (nennen wir es von nun an so) und Smartphone.
Benutzeroberfläche
- 20 x 4 Zeichen LCD mit einfacher 4-Bit-Datenschnittstelle
- Android-Anwendung - vollständige Benutzerkontrolle über das FuncGen-Gerät
- Summerschaltung - akustische Rückmeldung an den Benutzer
Schritt 1: Blockschaltbild - Hardware
Mikrocontroller-Einheit - ATMEGA32L
Mikrocontroller ist ein programmierbarer Chip, der aus allen Computerfunktionen besteht, die sich in einem einzigen elektronischen Chip befinden. In unserem Fall ist es das „Gehirn“und ein zentraler Bestandteil des Systems. Der Zweck der MCU besteht darin, alle Peripheriesysteme zu verwalten, die Kommunikation zwischen diesen Systemen zu handhaben, den Hardwarebetrieb zu steuern und die Benutzerschnittstelle und ihre Interaktion mit einem tatsächlichen Benutzer vollständig zu unterstützen. Dieses Projekt basiert auf einer ATMEGA32L MCU, die mit 3,3 V und einer Frequenz von 8 MHz betrieben werden kann.
Kommunikations-SoC - ESP32
Dieses SoC (System on Chip) bietet vollständige Kommunikationsunterstützung für FuncGen - Zugriff auf WiFi-Funktionen, einschließlich direkter, lokaler oder Internetkommunikation. Zweck des Gerätes sind:
- Handhabung der Datenübertragung zwischen Android-App und FuncGen-Gerät
- Verwaltung von Kontroll-/Datennachrichten
- Unterstützung der kontinuierlichen TCP/IP Client-Server-Konfiguration
In unserem Projekt ist der SoC espressif ESP32, das ist zu beliebt, um es noch weiter auszubauen:)
Li-Ionen-Batteriemanagementsystem
Um unser Gerät in ein tragbares zu verwandeln, enthält das Gerät einen entwickelten Li-Ion-Akkuladekreis. Die Schaltung basiert auf dem MC73831 IC mit steuerbarem Ladestrom durch Einstellen des Wertes eines einzelnen Programmierwiderstands (Wir werden dieses Thema im Schritt Schema behandeln). Der Stromversorgungseingang des Geräts ist ein USB-Typ-A-Anschluss.
Smart-Switch-Schaltung
Die Leistungssteuerschaltung des Smart-Switch-Geräts bietet eine vollständige Softwaresteuerung über die Abschaltsequenz des Geräts und das Fehlen eines externen Kippschalters zum Abschalten der Batteriespannung des Geräts. Alle Stromversorgungsvorgänge werden durch Drücken der Drucktaste und der MCU-Software ausgeführt. In einigen Fällen muss das System heruntergefahren werden: Niedrige Batteriespannung, hohe Eingangsspannung, Kommunikationsfehler usw. Smart Switch basiert auf dem STM6601 Smart Switch IC, der billig und sehr benutzerfreundlich ist.
Hauptnetzteil
Dieses Gerät besteht aus zwei batteriebetriebenen Stromversorgungskreisen - +3,3 V für alle digitalen / analogen Versorgungskreise und -3,3 V für den symmetrischen FunGen-Ausgang relativ zum 0-V-Potential (dh die erzeugte Wellenform kann in [-3,3 V: 3,3 V. eingestellt werden)]-Region.
- Die Hauptversorgungsschaltung basiert auf dem linearen 1A-Spannungsregler LP3875-3.3 LDO (low dropout).
- Der Sekundärversorgungskreis basiert auf dem LM2262MX IC, der eine negative DC-DC-Spannungswandlung über Kondensator-Ladungspumpe durchführt - System, auf dem der IC basiert.
Wellenformgeneratorsystem
Das System wurde mit Schwerpunkt auf separaten integrierten DDS-Schaltungen (Direct Digital Synthesis) entwickelt, die eine vollständige Steuerung der Wellenformerzeugung durch die SPI (serielle Peripherieschnittstelle) der MCU ermöglichen. Die beim Design verwendeten Schaltungen sind Analog Devices AD9834, die unterschiedliche Wellenformen liefern können. Die Herausforderungen, denen wir uns bei der Arbeit mit AD9834 stellen müssen, sind:
- Feste Wellenformamplitude: Die Wellenformamplitude wird vom externen DAC-Modul gesteuert
- Keine Berücksichtigung des Offset-DC-Pegels: Implementierung von Summierschaltungen mit gewünschten DC-Offset-Werten
- Separate Ausgänge für Rechteckwelle und Dreieck-/Sinuswelle: Implementierung eines Hochfrequenz-Schaltkreises, sodass jeder einzelne Ausgang des Kanals alle gewünschten Wellenformen bereitstellen kann: Sinus, Dreieck, Rechteck und DC.
Flüssigkristallanzeige
LCD ist ein Teil der UI (Benutzeroberfläche) und soll dem Benutzer ermöglichen, zu verstehen, was das Gerät im Echtzeitmodus tut. Es interagiert mit dem Benutzer in jedem Gerätezustand.
Summer
Einfache Tongeneratorschaltung für zusätzliches Feedback vom Gerät an den Benutzer.
Integrierter ISP-Programmierer
Bei der Programmierung gibt es für jeden Ingenieur ein anhaltendes Problem: Es besteht immer die schlimmste Notwendigkeit, das Produkt zu zerlegen, um es mit einer neuen Firmware neu zu programmieren. Um diese Unannehmlichkeiten zu umgehen, wurde der AVR ISP-Programmierer von innen an das Gerät angeschlossen, während USB-Daten- und Stromleitungen an den USB-Typ-A-Anschluss des Geräts angeschlossen sind. In dieser Konfiguration müssen wir unseren FuncGen nur zum Programmieren oder Laden per USB-Kabel anschließen!
Schritt 2: Blockschaltbild - Vernetzung
Zweikanaliger Funktionsgenerator
Hauptgerät. Diejenige, die wir im vorherigen Schritt überprüft haben
ESP-WROOM-32
Integriertes System-on-Chip mit WiFi- und BLE-Funktionen. Der SoC ist über das UART-Modul mit der Hauptplatine verbunden (wir werden dies im Schaltplanschritt behandeln) und fungiert als Nachrichtentransciever zwischen Hauptgerät und Android-Smartphone.
Lokales WLAN-Netzwerk
Smartphone und Gerät kommunizieren über WiFi Direct oder Local Area Network, basierend auf der TCP-Server/Client-Konfiguration. Wenn sich Geräte im WLAN gegenseitig erkennen, erstellt das Hauptgerät einen TCP-Server mit entsprechenden Parametern und kann Nachrichten senden/empfangen. Das Gerät fungiert als Zweitgerät zum Smartphone. Android-Gerät hingegen verbindet sich als Client-Netzwerkgerät mit dem TCP-Server, wird aber als primärer Nachrichtensender angesehen - Smartphone ist derjenige, der den gesamten Kommunikationszyklus initiiert: Nachricht senden - Antwort empfangen.
Android-Smartphone
Android OS-basiertes Smartphone-Gerät, das auf der FuncGen-Anwendung ausgeführt wird
Schritt 3: Teile, Werkzeuge, IDE und Stückliste
Stückliste (Siehe angehängte XLS-Tabelle)
UI- und Systemverbindungen
- 1 x 2004A Char-LCD 20x4 Blau
- 1 x USB-Typ-B-Anschluss
- 1 x 10 Set Mini Micro JST XH 2.54mm 4 Pin
- 1 x 6pcs Momentary SW
PCB-Bestellung (laut Seeed Studio)
Basismaterial FR-4
Anzahl der Schichten 2 Schichten
PCB-Menge 10
Anzahl verschiedener Designs 1
Leiterplattendicke 1,6 mm
PCB-Farbe Blau
Oberflächenbeschaffenheit HASL
Mindestlötmaskendamm 0,4 mm↑
Kupfer Gewicht 1oz
Mindestbohrlochgröße 0,3 mm
Leiterbahnbreite/Abstand 6/6 mil
Plattierte Halblöcher / Kastellierte Löcher Nr
Impedanzkontrolle Nr.
Werkzeuge
- Heißklebepistole
- Pinzette
- Cutter
- ~22AWG-Draht für die Fehlerbehandlungszwecke
- Lötkolben/-station
- Lötzinn
- SMD-Rework-Station (optional)
- 3D-Drucker (optional)
- Extrudieren von Datei
- AVR ISP-Programmierer
- USB-zu-Seriell-Konverter (optional, für Debugging-Zwecke)
Integrierte Entwicklungsumgebung (IDE) und Software
- Autodesk EAGLE oder Cadence Schematic Editor / Allegro PCB Editor
- OpenSCAD (optional)
- Ultimaker Cura (optional)
- Saleae-Logik (Zur Fehlerbehebung)
- Atmel Studio 6.3 oder höher
- Android Studio oder Eclipse-IDE
- Docklight Serial Monitor / Andere COM-Port-Überwachungssoftware
- ProgISP für AVR ATMEGA32L Flash-Programmierung
Schritt 4: Hardware-Design - Hauptplatine
Batteriemanagement-Schaltung
Die Batterieladeschaltung basiert auf dem MCP7383 IC, mit dem wir den gewünschten Ladestrom für den Li-Ion-Akku auswählen können - 3,7 V mit einer Kapazität von 850 mAh. Der Ladestrom wird in unserem Fall durch die Programmierung des Widerstandswerts (R1) eingestellt
R1 = 3KOhm, I(Ladung) = 400mA
Die USB-Spannung VBUS wird durch den π-Filter (C1, L3, C3) gefiltert und dient als Stromquelle für die Ladeschaltung.
Die Spannungsteilerschaltung (R2, R3) ermöglicht es der MCU, anzuzeigen, ob eine externe USB-Stromversorgung angeschlossen ist oder nicht, indem sie dem A/D-Kanal der MCU die folgende Spannung liefert:
V(Anzeige) ~ (2/3)V(BUS)
Da unser A/D von ATMEGA32L 12-Bit ist, können wir die digitale Reichweite berechnen:
A/D(Bereich) = 4095V(Anzeige) / V(REF).
A/D ∈ [14AH: FFFH]
Smart-Switch-Netzteil
Die Schaltung ermöglicht es dem System, die Stromversorgung jedes entworfenen Blocks sowohl über den Druckknopf als auch über die Software auf der MCU zu steuern und basiert auf dem STM6601 Smart-Switch mit POWER-Option anstelle von RESET. Die Terminals, die wir in Betracht ziehen möchten, sind diese:
- PSHOLD - Eingangsleitung, die den Gerätestatus definiert: Wenn auf LOW gezogen, deaktiviert das Gerät alle sekundären Netzteile (+3.3V und -3.3V). Wenn HIGH gehalten - Gerät behält den EIN-Zustand bei.
- nSR und nPB - Eingangsleitungen. Druckknopfklemmen. Wenn an diesen Pins eine fallende Flanke erkannt wird, versucht das Gerät, in den Ein-/Ausschaltmodus zu wechseln
- nINT - Ausgangsleitung. Wird jedes Mal auf LOW gezogen, wenn der Druckknopf gedrückt wird
- DE - Ausgangsleitung, wird als Leistungsfreigabe für die sekundären Netzteile verwendet. Während LOW gehalten wird, sind beide sekundären Netzteile deaktiviert
Bevor wir mit dem endgültigen Design fortfahren, gibt es einige wichtige Hinweise:
- PSHOLD sollte auf 3,3 V hochgezogen werden, da es Fälle gibt, in denen MCUs alle I/Os in den Zustand HIGH-Z zwingen. In diesem Fall ist der Status von PSHOLD von der MCU unbekannt und kann den Geräteprogrammierungsprozess dramatisch beeinflussen.
- STM6601 sollte mit einer EN-Einstelloption bei langem Drücken anstelle der RESET-Option bestellt werden (ich bin in diese gefallen).
Netzteil: +3.3V
Hauptstromversorgung für alle Systeme in unserem Projekt. Wenn die +3,3-V-Leitung auf GND-Pegel gehalten wird (d. h. keine Spannung vorhanden ist), werden alle ICs außer dem Smart Switch deaktiviert. Die Schaltung basiert auf dem LDO LP-3875-3.3 IC, kann über die EN-Klemme gesteuert werden und liefert Strom bis zu 1A.
Die Stromquelle für diese Schaltung ist die Batteriespannung mit angeschlossener A/D-Anzeige zum Erfassen von VBAT in Konfiguration, ähnlich der VBUS-Erfassungsschaltung. In diesem Fall weichen die Berechnungen geringfügig ab;
V (Batterie-zu-A/D) = 0,59 V (Batterie); A/D(Bereich) ∈ [000H: C03H]
Netzteil: -3.3V
Eine negative Spannungsversorgungsschaltung ermöglicht es uns, symmetrische Wellenformen mit einem DC-Faktor von 0 V zu erzeugen (d. h. der Wellenformmittelwert kann 0 V betragen). Diese Schaltung basiert auf dem LM2662MX IC - DC/DC-Wandler, der nach einem "Ladungspumpen"-Verfahren arbeitet. Der maximale Ausgangsstrom der Schaltung beträgt 200 mA, was für unsere Designanforderungen ausreichend ist - wir sind auf 80 mA Ausgangsstrom von jedem Gerätekanal beschränkt.
Der IC führt alle erforderlichen Arbeiten aus, daher müssen nur zwei Elektrolytkondensatoren angebracht werden: C33 zum Schalten und C34 für die -3,3-V-Leitungsüberbrückung (Überlegungen zur Rauschunterdrückung). Die Schaltfrequenz ist im Design vernachlässigbar, wenn wir die Schaltung weit genug von den Wellenformerzeugungsteilen platzieren (wir werden dies beim PCB-Layout-Schritt besprechen).
Mikrocontroller-Einheit - MCU
Dies ist der Manager und CEO unseres Systems - Steuerung, Netzwerkhandhabung, Nachrichtenübertragung und UI-Unterstützung - alles wird von MCU durchgeführt.
Als MCU wurde Atmel ATMEGA32L gewählt, wobei L für Supported Voltage Operation ∈ [2.7V: 5.5V] steht. In unserem Fall beträgt die Betriebsspannung +3,3V.
Betrachten wir die wichtigsten Operationsblöcke, die zum Verständnis der Arbeit mit MCU in unserem Design erforderlich sind:
- Externer Oszillator - Ist eine optionale Komponente, da wir an einer Betriebsfrequenz von 8 MHz interessiert sind
-
Peripheriesteuerung, SPI-Netzwerk – Alle Peripheriegeräte (außer ESP32) kommunizieren über SPI mit der MCU. Es gibt drei gemeinsame Leitungen für alle Geräte (SCK, MOSI, MISO) und jede Peripherieschaltung hat ihre eigene CS (Chip Select) Leitung. Die SPI-Geräte, die Teil von device sind:
- D/A für Amplitudensteuerung - Kanal A
- D/A für Amplitudensteuerung - Kanal B
- AD9834-Gerät - Kanal A
- AD9834-Gerät - Kanal B
- D/A für Vorspannungssteuerung - Kanal A
- D/A für Vorspannungssteuerung - Kanal B
- Digitales Potentiometer für LCD-Helligkeits-/Kontrasteinstellungen
- LCD-Unterstützung - Da es sich bei LCD um ein generisches 20 x 4-Zeichen-Display handelt, verwenden wir eine 4-Bit-Schnittstelle (Leitungen D7: D4), Steuerpins (Leitungen RS, E) und Helligkeits-/Kontraststeuerung (Leitungen V0 und Anode)
- RGB-LED-Unterstützung - Dieses Modul ist optional, aber es gibt einen gemeinsamen Kathoden-RGB-LED-Anschluss mit entsprechenden Widerständen, der an die MCU angeschlossen ist.
-
Power Control - MCU führt die Überwachung des Stromsystems im Echtzeitmodus durch und verarbeitet alle erforderlichen Stromereignisse:
- VBAT_ADC - Überwachung der Batteriespannung und Bestimmung ihres Zustands (ADC0-Kanal)
- PWR_IND - Anzeige des externen Stromversorgungsanschlusses (ADC1-Kanal)
- PS_HOLD – Primäre Stromfreigabeleitung für alle definierten Systeme. Wenn von der MCU nach unten gezogen wird, wird das Gerät ausgeschaltet
- Klemme des Smart Switch unterbrechen - Zustandsüberwachung der Taster
- WiFi-Netzwerkmanagement - ESP32: MCU kommuniziert mit ESP32 über die UART-Schnittstelle. Da wir mit 8MHz eine Baudrate von 115200 mit einem relativ kleinen Fehler implementieren können, können wir ESP32 in der Schaltung ohne Vordefinitionen von Baudratenänderungen verwenden.
AVR ISP-Programmierer
Unsere MCU ist über SPI programmiert, wobei die Reset-Leitung (/RST) für einen ordnungsgemäßen Betrieb auf HIGH gezogen werden muss (wenn nicht - MCU befindet sich für immer in einem Reset-Zustand).
Damit das Gerät über USB sowohl programmiert als auch aufgeladen werden kann, habe ich einen AVR ISP-Programmierer (kleines Produkt, gekauft bei eBay) angeschlossen. Um die vollständige USB-Unterstützung des Geräts aufrechtzuerhalten, müssen die USB-Typ-A-Anschlüsse (D+, D-, VBUS und GND) mit dem AVR-ISP-Gerät verbunden werden.
Schaltung zur Erzeugung von Wellenformen
Der Kern des Geräts sind diese Schaltkreise. AD9834 ist ein DDS-Gerät mit geringem Stromverbrauch, das uns alle Wellenformen liefert, die wir vom System abrufen möchten. Die Schaltungen enthalten zwei unabhängige AD9834-ICs mit getrennten externen 50-MHz-Oszillatoren (wie in den Schaltplänen zu sehen). Der Grund für den getrennten Oszillator sind Überlegungen zur Rauschunterdrückung digitaler Schaltungen, daher wurde die Entscheidung getroffen, geeignete 50-MHz-Leitungen mit Oszillatoren zu handhaben, die neben dem AD9834 platziert sind.
Schauen wir uns nun etwas Mathematik an:
Da das DDS-Gerät mit der Phase Wheel-Technologie arbeitet, wobei der Ausgabewert in einem 28-Bit-Register gespeichert wird, können wir die Wellenformerzeugung mathematisch beschreiben:
dP(Phase) = ωdt; = P' = 2πf; f(AD9834) = ΔP * f(clk) / 2^28; ΔP ∈ [0: 2^28 - 1]
Und laut AD9834-Datenblatt kann unter Berücksichtigung der maximalen Frequenz eine Auflösung der Ausgangsfrequenz erreicht werden:
Δf = k * f(Oszillator) / f(Maximum) = 0,28 * 50M / 28M = 0,187[Hz]
AD9834-ICs bieten einen analogen Stromausgang für Dreieck-/Sinuswelle (IOUT-Anschluss) und einen digitalen Ausgang für Rechteckwelle (SIGN_OUT-Anschluss). Die Verwendung des Vorzeichenbits ist etwas knifflig, aber wir können damit umgehen - Jedes Mal, wenn DDS die Vergleichswertschwelle überschreitet, verhält sich SIGN_OUT entsprechend. An jedem Ausgang jedes Kanals ist ein 200Ohm Widerstand angebracht, so dass die Ausgangsspannung sinnvolle Werte hätte:
I (Einzelkanal) = V (Ausgang) / R (Spannungsauswahl); V(Ausgang) = R(VS)*I(SS) = 200I(SS) [A]
Amplitudensteuerungs-(D/A)-Schaltungen
Laut Datenblatt von AD9834 kann seine Amplitude angepasst werden, indem dem DDS-Vollskala-System Strom zugeführt wird. Noch einmal etwas Mathematik:
I(volle Skala) = 18 * (V_REF - V_DAC) / R_SET [A]
Nach Schaltplänen und einigen Zahlen zur Gleichung:
I(volle Skala) = 3,86 - 1,17 * V_DAC [A]
Das im Design verwendete D/A-Modul ist 12-Bit-MCP4922, wenn der Strom im Bereich von [0mA: 3,86mA] liegt und die lineare Amplitudenfunktion ist:
V(Amplitudenauswahl) = 1 - [V(D/A) / (2^12 - 1)]
Wellenform-Multiplexing-Schaltung
Rechteckwellen- und Sinus-/Dreieckwellen-Erzeugungsausgänge werden bei AD9834 getrennt, daher müssen wir eine Hochgeschwindigkeits-Multiplexschaltung für beide Ausgänge verwenden, um das Abrufen aller gewünschten Wellenformen von einem einzelnen getrennten Kanal zu ermöglichen. Der Multiplexer-IC ist ein analoger Schalter ADG836L mit einem sehr niedrigen Einschaltwiderstand (~0,5 Ohm).
Die Auswahltabelle, die die MCU für die Ausgänge verwendet, wie sie ist:
Modusauswahl [D2:D1] | Ausgangskanal A | Ausgangskanal B
00 | Sinus/Dreieck | Sinus/Dreieck 01 | Sinus/Dreieck | Quadrat 10 | Quadrat | Sinus/Dreieck 11 | Quadrat | Quadrat
Vorspannungssteuerung (D/A) Schaltungen
Eine der Hauptfunktionen des Wellenformgenerators ist die Steuerung seines DC-Werts. In diesem Design wird dies durch Einstellen der gewünschten D/A-Spannung für jeden Kanal erreicht, und diese Vorspannungen werden mit gemultiplexten Ausgängen summiert, die wir etwas früher besprochen haben.
Die von D/A abgerufene Spannung liegt im Bereich [0V: +3,3V], daher gibt es eine Schaltung auf Op-Amp-Basis, die den D/A-Bereich auf [-3,3V: +3,3V] abbildet, sodass das Gerät den vollen Bereich bereitstellen kann des gewünschten Gleichstromanteils. Wir überspringen die lästige analytische Mathematik und konzentrieren uns nur auf die Endergebnisse:
V_OUT(Kanal B) = V_BIAS_B(+) – V_BIAS_B(-); V_OUT(Kanal A) = V_BIAS_A(+) - V_BIAS_A(-)
Nun liegt der DC-Komponentenbereich im Bereich [-3.3V: +3.3V].
Summierschaltungen - DC-Komponenten und Signalausgänge
An dieser Stelle haben wir alles, was wir für den richtigen Geräteausgang benötigen - Vorspannung (DC-Komponente) im gesamten Spannungsbereich und gemultiplexte AD9834-Ausgänge. Wir machen das möglich, indem wir den Summierverstärker verwenden - Op-Amp-Konfiguration
Lassen Sie uns die Mathematik noch einmal überspringen (wir haben bereits viele mathematische Ansätze behandelt) und das Endergebnis der Ausgabe des Summierverstärkers aufschreiben:
V(Geräteausgang) = V(positiver Bias) - V(negativer Bias) - V(Multiplex-Ausgang) [V]
Somit:
V_OUT = ΔV_BIAS - V_AD9834 [V]
Ausgangsanschlüsse vom Typ BNC sind mit Auswahlwiderständen (R54, R55; R56, R57) verbunden. Der Grund dafür ist, dass wir in dem Fall, dass das Design möglicherweise dysfunktional ist, immer noch auswählen können, ob wir einen Summierverstärker verwenden möchten.
Wichtiger Hinweis: Die Widerstandsnetzwerke der Endsummenverstärker können von einem Designer angepasst werden, um die maximale Amplitude zu ändern, die vom Gerät abgerufen werden kann. In meinem Fall haben alle Verstärker die gleiche Verstärkung = 1, daher beträgt die maximale gepufferte Amplitude 0,7 Vpp für Dreieck-/Sinuswelle und 3,3 Vpp für Rechteckwelle. Der spezifische mathematische Ansatz ist in den angehängten Bildern von step zu finden.
ESP32 als externes Modul
MCU kommuniziert mit ESP32 über die UART-Schnittstelle. Da ich eine eigene Platine für den ESP32 wollte, stehen 4 Klemmen zum Anschließen zur Verfügung: VCC, RX, TX, GND. J7 ist ein Schnittstellenanschluss zwischen PCBs, und ESP32 wird als externes Modul im Gerät zugewiesen.
Benutzeroberfläche - LCD und Lautsprecher
Das verwendete LCD ist ein generisches 20 x 4-Zeichen-Display mit einer 4-Bit-Schnittstelle. Wie aus dem Design ersichtlich ist, ist an den LCD-Anschlüssen "A" und "V0" ein digitales SPI-Potentiometer angebracht - dessen Zweck ist die Einstellung Helligkeit und Kontrast des LCD-Moduls programmgesteuert.
Der Lautsprecher bietet dem Benutzer eine Tonausgabe durch einfache Rechteckwellenerzeugung von der MCU. Der BJT T1 steuert den Strom durch den Lautsprecher, der nur in zwei Zuständen sein kann - EIN / AUS.
Schritt 5: Hardware-Design - ESP32-Modul
ESP32 wird als externes Modul für die Hauptplatine verwendet. Die Gerätekommunikation basiert auf AT-Befehlen, die auf der Firmware eines generischen Gerätes verfügbar sind.
An diesem Design gibt es nicht viel zu erweitern, aber es gibt einige Hinweise zum Design:
- Für die Fehlerbehandlung bei der Verwendung des richtigen UART-Moduls von ESP32 habe ich drei Auswahlwiderstände für die TX- und RX-Leitungen angebracht. (0Ohm für jeden). Für die Standardkonfiguration wird das UART2-Modul für AT-Befehle verwendet (R4, R7 müssen gelötet werden)
- Das Gerät hat einen 4-Linien-Ausgang - VCC, GND, TX, RX.
- IO0- und EN-Pins bewerten den Gerätebetrieb und sollten so ausgelegt sein, wie es in den Schaltplänen vorgesehen ist
Alle PCB-Funktionen, die wir im folgenden Schritt behandeln.
Schritt 6: PCB-Layout
Die Ziele beim Design einer Leiterplatte
- Erstellen Sie ein eingebettetes System für alle integrierten Schaltkreise auf derselben Platine
- Verbessern Sie die Geräteleistung durch das Entwerfen einer einzigen Hauptplatine
- Kostenreduktion - wenn Sie die Preise nachschlagen möchten, sind Low-Cost-Designs WIRKLICH günstig
- Minimieren Sie die Größe der elektronischen Platine
- Einfache Fehlerbehebung - Wir können TPs (Testpunkte) für jede mögliche fehlerhafte Leitung verwenden.
Technische Parameter
Beide PCBs: Hauptplatine und ESP32-Platine haben die gleichen Eigenschaften für den Herstellungsprozess - kostengünstig und für unsere Zwecke betriebsbereit. Sehen wir sie uns an:
A - Hauptplatine
- Größe: 10cm x 5,8cm
- Anzahl der Schichten: 2
- Leiterplattendicke: 1,6 mm
- Minimaler Spurabstand/-breite: 6/6mil
- Minimaler Durchgangslochdurchmesser: 0,3 mm
- Kupfer bis zum Rand der Leiterplatte Mindestabstand: 20mil
- Oberflächenveredelung: HASL (Ziemlich gut aussehender silberner billiger Typ)
B - Hauptplatine
- Größe: 3cm x 4cm
- Anzahl der Schichten: 2
- Leiterplattendicke: 1,6 mm
- Minimaler Spurabstand/-breite: 6/6mil
- Minimaler Durchgangslochdurchmesser: 0,3 mm
- Kupfer bis zum Rand der Leiterplatte Mindestabstand: 20mil
- Oberflächenveredelung: HASL
Schritt 7: 3D-Gehäuse
Ich habe es nicht selbst entworfen, weil ich zu der Zeit dieses Gerät überreden wollte, zu funktionieren, also waren mir alle 3D-Druck-Grundlagen überhaupt nicht bewusst. Daher habe ich ein SCAD-Projekt von Thingiverse verwendet und gemäß den Spezifikationen meines Geräts verschiedene Blenden an den Begrenzungen angebracht.
- Druckgerät: Creality Ender-3
- Betttyp: Glas, 5 mm Dicke
- Filamentdurchmesser: 1,75 mm
- Filamenttyp: PLA+
- Düsendurchmesser: 0,4 mm
- Anfangsgeschwindigkeit: 20 mm/Sek.
- Durchschnittsgeschwindigkeit: 65 mm/Sek.
- Unterstützung: N/A
- Füllung: 25%
-
Temperatur:
- Bett: 60 (oC)
- Düse: 215 (oC)
- Filamentfarbe: Schwarz
- Gesamtanzahl der Blenden: 5
-
Anzahl der Gehäuseplatten: 4
- TOP Schale
- Unterschale
- Frontblende
- Rückseite
Schritt 8: Softwareimplementierung - MCU
GitHub-Link zu Android und Atmega32-Code
Software-Algorithmus
Alle Operationen, die von der MCU ausgeführt werden, werden in den beigefügten Flussdiagrammen beschrieben. Darüber hinaus gibt es einen angehängten Code für das Projekt. Lassen Sie uns die Softwarespezifikationen behandeln:
Einschalten
In dieser Phase führt die MCU alle Initialisierungssequenzen zusammen mit der Bestimmung des gespeicherten Kommunikationstyps mit dem Android-Gerät durch: Direkte WLAN- oder WLAN-Netzwerkkommunikation - diese Daten werden im EEPROM gespeichert. Der Benutzer kann in dieser Phase den Kopplungstyp für Android-Geräte neu definieren.
Direkte Kopplung mit Android-Geräten
Diese Art der Kopplung basiert auf der WLAN-Netzwerkerstellung durch das FuncGen-Gerät. Es erstellt einen AP (Access Point) und einen TCP-Server auf einer lokalen Geräte-IP mit einer bestimmten SSID (WiFi-Netzwerkname) und einer bestimmten Portnummer. Gerät sollte den Zustand halten - offen für Verbindungen.
Wenn das Android-Gerät mit FuncGen verbunden ist, wechselt die MCU in den AKTIV-Modus und reagiert gemäß den Benutzeranweisungen des Android-Geräts.
WLAN-Kopplung
Um in einem lokalen WiFi-Netzwerk zu kommunizieren, sollte die MCU Befehle für den ESP32 bereitstellen, um einen AP zu erstellen, mit einem Android-Gerät zu kommunizieren und die entscheidenden Netzwerkdaten auszutauschen:
- Android-Gerät erhält von FuncGen seine MAC-Adresse, speichert sie im Speicher.
- Das FuncGen-Gerät empfängt vom Android-Gerät ausgewählte WLAN-Parameter: SSID, Sicherheitstyp und Passwort und speichert es im EEPROM.
Wenn Geräte tatsächlich mit demselben WLAN verbunden sind, sucht das Android-Gerät nach dem FuncGen, indem es alle MAC-Adressen der mit dem WLAN verbundenen Geräte scannt. Wenn das Android-Gerät eine MAC-Übereinstimmung feststellt, versucht es zu kommunizieren.
Verbindung und Zustandsbehandlung - MCU
Wenn Geräte miteinander kommunizieren, bleibt das Protokoll (siehe vorletzter Schritt) gleich und das Flussdiagramm ist gleich.
Überwachung des Gerätezustands
Der zeitgesteuerte Interrupt stellt der MCU die notwendigen Details für die Zustandsbehandlung bereit. Bei jedem Zyklus des Timer-Interrupts wird die folgende Parameterliste aktualisiert:
- Externes Netzteil - Ein/Aus
- Batteriespannungszustand
- UI-Update für jede Anpassung
- Druckknopf: Gedrückt/Nicht gedrückt
Schritt 9: Softwareimplementierung - Android-App
Die Android-App ist im Java-Android-Stil geschrieben. Ich werde versuchen, es auf die gleiche Weise wie in den vorherigen Schritten zu erklären - indem ich den Algorithmus in separate Codeblöcke aufteile.
Einschaltsequenz
Erste Sequenz des Geräts. Hier wird das App-Logo zusammen mit der Aktivierung von GPS- und WLAN-Modulen des Android-Geräts angezeigt (keine Sorge, das GPS wird nur für den Scan von WLAN-richtigen Netzwerken benötigt).
Hauptmenü
Nach dem Booten der App erscheinen vier Schaltflächen auf dem Bildschirm. Tastenaktion:
- DIREKTE VERBINDUNG: Initialisieren der Verbindung zum AP von FuncGen durch die SSID von IOT_FUNCGEN. Wenn die Verbindung erfolgreich ist, wechselt das Gerät in den Haupt-UI-Modus.
- WIFI-VERBINDUNG: Das Gerät prüft, ob im Speicher gespeicherte Datenparameter vorhanden sind: wifi.txt, mac.txt. Wenn keine Daten gespeichert sind, lehnt das Gerät die Benutzeranfrage ab und gibt eine Popup-Meldung aus, dass zuerst die WLAN-Kopplung durchgeführt werden muss.
- PAIRING: Kommunikation mit FuncGen wie bei DIRECT CONNECTION, aber statt ständigem Nachrichtenaustausch gibt es einen einzigen Handshake. Das Android-Gerät prüft, ob es bereits mit dem WLAN-Netzwerk verbunden ist, und fordert den Benutzer auf, das Passwort einzugeben. Wenn die erneute Verbindung erfolgreich ist, speichert das Android-Gerät SSID und Passkey in der Datei wifi.txt. Nach erfolgreicher Kommunikation mit FuncGen speichert es die empfangene MAC-Adresse in der Datei mac.txt.
- Exit: Genug gesagt:)
WLAN-Scan-Manager
Ich wollte, dass die Anwendung voll funktionsfähig ist und keine Anpassungen außerhalb der App vorgenommen werden müssen. Also habe ich einen WiFi-Scanner entwickelt, der alle erforderlichen Operationen durchführt, um eine Verbindung zum WiFi-Netzwerk mit einem bekannten Passkey und einer bekannten SSID herzustellen.
Datenübertragung und TCP-Kommunikation
Dies ist der Hauptcodeblock in der App. Für alle UI-Einheiten gibt es eine definierte Nachricht in einem bestimmten Format (Pre-final step), die FuncGen dazu zwingt, die gewünschte Ausgabe für die Kanäle bereitzustellen. Es gibt drei Arten von UI-Feldern in der Aktivität:
-
Suchleisten: Hier definieren wir den realen Bereich der FuncGen-Ausgabeparameter
- Amplitude
- DC-Offset
- LCD-Helligkeit
- LCD-Kontrast
- Textbearbeitung: Um ganzzahlige Werte klar definiert und präzise zu halten, erfolgt die Frequenzeingabe nur über Zahlentextfelder
-
Schaltflächen: Auswahl von Parametern aus den verfügbaren Listen:
-
Wellenformtyp
- Sinus
- Dreieck
- DC
- Quadrat
- AUS
-
Informationen bekommen
- Batteriestatus (Prozent)
- AC-Status (externe Stromversorgung)
-
Boot-Option (für FuncGen-MCU)
- Werkseinstellungen
- Neu starten
- Abschalten
- Direkt - Neustart mit direktem Pairing-Modus
- WLAN - Neustart mit WLAN-Pairing-Modus
- Zurück zum Hauptmenü: Genug gesagt:)
-
Schritt 10: Testen
Empfohlen:
Funktionsgenerator: 12 Schritte (mit Bildern)
Funktionsgenerator: Dieses anweisbare beschreibt das Design des Funktionsgenerators basierend auf der analogen integrierten Schaltung MAX038 von Maxims. Der Funktionsgenerator ist ein sehr nützliches Werkzeug für die Elektronik-Freaks. Es wird zum Abstimmen von Resonanzkreisen, zum Testen von Aud
So melden Sie sich von der Facebook-Messenger-App für Android ab: 3 Schritte
So melden Sie sich von der Facebook Messenger-App für Android ab: Haben Sie Probleme mit Ihrer Facebook Messenger-App? Sie müssen sich abmelden, können aber die Schaltfläche zum Abmelden nicht finden. Sie müssen sich keine Sorgen machen, hier sind ein paar Schritte, um sich abzumelden und es wieder zum Laufen zu bringen
Arduino-Programmierung über das Handy -- Arduinodroid -- Arduino-Ide für Android -- Blinzeln: 4 Schritte
Arduino-Programmierung über das Handy || Arduinodroid || Arduino-Ide für Android || Blink: Bitte abonnieren Sie meinen Youtube-Kanal für weitere Videos…… Arduino ist ein Board, das direkt über USB programmiert werden kann. Es ist sehr einfach und günstig für College- und Schulprojekte oder sogar für Produktprototypen. Viele Produkte bauen zunächst darauf für i
Funktionsgenerator: 4 Schritte
Funktionsgenerator: Hallo zusammen, Brauchen Sie einen billigen Funktionsgenerator? In den meisten Projekten habe ich es geschafft, es zu verwenden, um drahtlose Energieübertragungsmodule zu machen
So installieren Sie ein benutzerdefiniertes Rom für Android-Telefone – wikiHow
So installieren Sie ein benutzerdefiniertes Rom für Android-Telefone: Diese Anleitung zeigt Ihnen, wie Sie ein benutzerdefiniertes Rom auf Ihrem Android-Gerät installieren Gerät (Dies bedeutet nicht wirklich, dass Sie Ihr