Inhoudsopgave:
- Stap 1: Blokschema - Hardware
- Stap 2: Blokdiagram - Netwerken
- Stap 3: Onderdelen, gereedschappen, IDE en stuklijst
- Stap 4: Hardware-ontwerp - moederbord
- Stap 5: Hardware-ontwerp - ESP32-module
- Stap 6: PCB-layout
- Stap 7: 3D-behuizing
- Stap 8: Software-implementatie - MCU
- Stap 9: Software-implementatie - Android-app
- Stap 10: Testen
Video: Draagbare functiegenerator op wifi en Android: 10 stappen
2024 Auteur: John Day | [email protected]. Laatst gewijzigd: 2024-01-30 11:14
Tegen het einde van de 20e eeuw doken er verschillende technologische innovaties op, vooral op het gebied van communicatie; maar niet alleen. Voor ons kwamen gebruikers, consumenten en ingenieurs aan het licht met de snelle ontwikkeling van elektronische apparaten, die ons leven een stuk gemakkelijker kunnen maken: slimme horloges, slimme huizen, smartphones enz.
Omdat alles tegenwoordig "slim" kan zijn, heb ik besloten een superhandig apparaat te ontwerpen dat deel uitmaakt van essentiële elektronische laboratoriumapparatuur - Portable Function Generator, bestuurbaar door een op Android OS gebaseerde smartphone via WiFi direct of WiFi Local Area Network (WLAN).
Waarom zouden we dit apparaat bouwen?
Een overgrote meerderheid van testapparatuur is tegenwoordig behoorlijk duur. En soms zijn deze apparaten niet draagbaar. Als oplossing voor hoge prijzen, gebrek aan draagbaarheid en gebrek aan netwerktoegang van het apparaat, biedt het apparaat een tweekanaals golfvormgenerator, die inderdaad draagbaar is en onbeperkte toegang tot het netwerk heeft - internet of lokaal.
En natuurlijk moet het apparaat worden gebouwd vanwege enthousiasme, gehoorzaam aan de doe-het-zelf-principes - Soms moeten we dingen gewoon zelf doen om ons goed te voelen:)
Belangrijkste kenmerken:
Stroomvoorziening
- USB Type-A connector, voor zowel voedingssystemen als programmering
- Compleet Li-Ion-batterijbeheersysteem - Oplaad- en stabiele modi
- Smart Switch-implementatie - geen stroomschakelaar nodig
- Dubbele voeding: +3,3V en -3,3V voor het genereren van symmetrische spanningsgolfvormen
Golfvormgeneratie
- Implementatie van DC-niveau bij de uitgangscascade - vooringenomen golfvorm tussen de spanningsgrenzen
- Op DDS gebaseerde 4-type golfvormgeneratie - sinus, driehoek, vierkant en DC
- Tot 10MHz frequentieondersteuning
- Uitgangsstroom tot 80mA met 500mW maximale stroombeschikbaarheid
- Gescheiden kanalen voor het genereren van golfvormen - gesplitste op AD9834 gebaseerde circuits
Communicatie
- Implementatie van ESP32 - Toepasselijke WiFi-mogelijkheden
- Volledige TCP/IP-ondersteuning per generatorapparaat en Android-smartphone
- Mogelijkheid om gebruikersparameters op te slaan voor elke apparaatcyclus
- Statusmonitoring - beide systemen zijn op de hoogte van elkaars status: FuncGen (laten we het voortaan zo noemen) en smartphone.
Gebruikersomgeving
- 20 x 4-karakter LCD met eenvoudige 4-bit data-interface
- Android-applicatie - volledige gebruikerscontrole over het FuncGen-apparaat
- Zoemercircuit - geluidsfeedback naar gebruiker
Stap 1: Blokschema - Hardware
Microcontroller-eenheid - ATMEGA32L
Microcontroller is een programmeerbare chip die bestaat uit alle computerfunctionaliteit die zich in een enkele elektronische chip bevindt. In ons geval is het het "brein" en een centraal onderdeel van het systeem. Het doel van de MCU is om alle randsystemen te beheren, de communicatie tussen deze systemen af te handelen, de werking van de hardware te regelen en volledige ondersteuning te bieden voor de gebruikersinterface en de interactie met een daadwerkelijke gebruiker. Dit project is gebaseerd op ATMEGA32L MCU, dat kan werken op 3,3V en een frequentie van 8MHz.
Communicatie SoC - ESP32
Deze SoC (System on Chip) biedt volledige communicatieondersteuning voor FuncGen - Toegang tot WiFi-mogelijkheden inclusief directe, lokale of internetcommunicatie. Doelen van het apparaat zijn:
- Gegevensoverdracht tussen Android-app en FuncGen-apparaat afhandelen
- Beheer van controle-/databerichten
- Ondersteuning van continue TCP/IP Client-Server configuratie
In ons project is de SoC espressif ESP32, dat is te populair om er nog verder op uit te breiden:)
Li-Ion-batterijbeheersysteem
Om ons apparaat in een draagbaar apparaat te veranderen, bevat het apparaat een ontworpen oplaadcircuit voor Li-Ion-batterijen. Circuit is gebaseerd op MC73831 IC, met regelbare laadstroom via het aanpassen van de waarde van een enkele programmeerweerstand (we behandelen dit onderwerp in de stap Schema's). De voedingsingang van het apparaat is een USB Type-A-connector.
Smart Switch-circuit
Het stroomregelcircuit van het slimme schakelapparaat biedt volledige softwarecontrole over de uitschakelvolgorde van het apparaat en het ontbreken van een externe tuimelschakelaar voor het uitschakelen van de batterijspanning van het apparaat. Alle stroombewerkingen worden gedaan door op de drukknop en de MCU-software te drukken. In sommige gevallen moet het systeem worden uitgeschakeld: lage batterijspanning, hoge ingangsspanning, communicatiefout enzovoort. Smart switch is gebaseerd op STM6601 smart switch IC, dat is goedkoop en erg vriendelijk om mee te spelen.
Hoofdvoedingseenheid
Deze unit bestaat uit twee door batterijen aangedreven voedingscircuits - +3,3V voor alle digitale/analoge voedingscircuits en -3,3V voor FunGen symmetrische output ten opzichte van 0V-potentiaal (dwz de gegenereerde golfvorm kan worden ingesteld in [-3,3V:3,3V] regio.
- Hoofdvoedingscircuit is gebaseerd op LP3875-3.3 LDO (lage uitval) 1A lineaire spanningsregelaar.
- Het secundaire voedingscircuit is gebaseerd op LM2262MX IC, dat een DC-DC negatieve spanningsconversie uitvoert via een condensator-laadpompsysteem waarop het IC is gebaseerd.
Waveform Generators-systeem
Het systeem is ontworpen met de nadruk op afzonderlijke DDS (directe digitale synthese) geïntegreerde circuits, die volledige controle over de golfvormgeneratie mogelijk maken door MCU's SPI (seriële perifere interface). De circuits die bij het ontwerp zijn gebruikt, zijn Analog Devices AD9834 die verschillende soorten golfvormen kunnen bieden. De uitdagingen die we het hoofd moeten bieden tijdens het werken met AD9834 zijn:
- Vaste golfvormamplitude: de golfvormamplitude wordt geregeld door een externe DAC-module
- Geen rekening houden met offset DC-niveau: implementatie van optelcircuits met gewenste DC-offsetwaarden
- Afzonderlijke uitgangen voor blokgolf en driehoeks-/sinusgolf: Implementatie van een hoogfrequent schakelcircuit, dus elke afzonderlijke kanaaluitgang kan alle gewenste golfvormen leveren: sinus, driehoek, vierkant en DC.
LCD-scherm
LCD maakt deel uit van de gebruikersinterface (gebruikersinterface) en heeft tot doel de gebruiker te laten begrijpen wat het apparaat in realtime-modus doet. Het communiceert met de gebruiker bij elke apparaatstatus.
Zoemer
Eenvoudig toongeneratorcircuit voor extra feedback van apparaat naar gebruiker.
Geïntegreerde ISP-programmeur
Er is een hardnekkig probleem voor elke ingenieur als het gaat om het programmeerproces: er is altijd die ergste noodzaak om het product te demonteren om het te herprogrammeren met een nieuwe firmware. Om dit ongemak te verhelpen, werd de AVR ISP-programmeur van binnenuit op het apparaat aangesloten, terwijl USB-gegevens en stroomkabels zijn verbonden met de USB Type-A-connector van het apparaat. In deze configuratie hoeven we alleen onze FuncGen via een USB-kabel aan te sluiten voor programmeren of opladen!
Stap 2: Blokdiagram - Netwerken
Dual Channel Functie Generator
Hoofdapparaat. Degene die we in de vorige stap hebben beoordeeld
ESP-WROOM-32
Geïntegreerde System-on-Chip met WiFi en BLE-mogelijkheden. SoC is via de UART-module aan het moederbord bevestigd (we behandelen dit in de schematische stap) en fungeert als een berichttransciever tussen het hoofdapparaat en de Android-smartphone.
WiFi lokaal netwerk
Smartphone en apparaat communiceren via WiFi direct of lokaal netwerk, op basis van de TCP-server/clientconfiguratie. Wanneer apparaten elkaar herkennen op wifi, maakt het hoofdapparaat een TCP-server met de juiste parameters en kan het berichten verzenden/ontvangen. Apparaat fungeert als secundair aan de smartphone. Android-apparaat daarentegen maakt verbinding met de TCP-server als een clientnetwerkapparaat, maar wordt beschouwd als primaire berichtzender - de smartphone is degene die de volledige communicatiecyclus initieert: bericht verzenden - antwoord ontvangen.
Android-smartphone
Android OS-gebaseerd smartphone-apparaat dat draait op de FuncGen-applicatie
Stap 3: Onderdelen, gereedschappen, IDE en stuklijst
Stuklijst (zie bijgevoegde XLS-tabel)
UI en systeemverbindingen
- 1 x 2004A Char-LCD 20x4 Blauw
- 1 x USB Type B-connector
- 1 x 10 Set Mini Micro JST XH 2,54 mm 4-pins
- 1 x 6 stuks kortstondige SW
PCB-bestelling (volgens Seeed Studio)
Basismateriaal FR-4
Aantal lagen 2 lagen
PCB-hoeveelheid 10
Aantal verschillende ontwerpen 1
PCB-dikte 1,6 mm
PCB-kleur blauw
Oppervlakteafwerking HASL
Minimale soldeermaskerdam 0,4 mm↑
Koper Gewicht 1oz
Minimale boorgatgrootte 0,3 mm
Spoorbreedte / afstand 6/6 mil
Vergulde halve gaten / gekartelde gaten No
Impedantieregeling Nee
Gereedschap
- Heet lijmpistool
- Pincet
- Snijder
- ~22AWG-draad voor de storingsafhandelingsdoeleinden
- Soldeerbout/station
- soldeer tin
- SMD-reworkstation (optioneel)
- 3D-printer (optioneel)
- Bestand extruderen
- AVR ISP-programmeur
- USB naar serieel converter (optioneel, voor foutopsporingsdoeleinden)
Geïntegreerde ontwikkelomgeving (IDE) en software
- Autodesk EAGLE of Cadence Schematische Editor / Allegro PCB Editor
- OpenSCAD (optioneel)
- Ultimaker Cura (optioneel)
- Saleae Logic (voor het oplossen van problemen)
- Atmel Studio 6.3 of hoger
- Android Studio of Eclipse IDE
- Docklight Serial Monitor / Andere COM-poortbewakingssoftware
- ProgISP voor AVR ATMEGA32L flash-programmering
Stap 4: Hardware-ontwerp - moederbord
Batterijbeheercircuit
Het batterijlaadcircuit is gebaseerd op MCP7383 IC, waarmee we een gewenste laadstroom voor Li-Ion-batterijen kunnen selecteren - 3.7V met een capaciteit van 850mAh. De laadstroom wordt in ons geval ingesteld door de weerstandswaarde (R1) te programmeren
R1 = 3KOhm, I(lading) = 400mA
USB-spanning VBUS wordt gefilterd door π-filter (C1, L3, C3) en fungeert als stroombron voor laadcircuit.
Met het spanningsdelercircuit (R2, R3) kan de MCU aangeven of een externe USB-voeding is aangesloten of niet, door de volgende spanning aan het MCU A/D-kanaal te leveren:
V(indicatie) ~ (2/3)V(BUS)
Aangezien onze A/D van ATMEGA32L 12-bit is, kunnen we het digitale bereik berekenen:
A/D(bereik) = 4095V (indicatie) / V(REF).
A/D ∈ [14AH: FFFH]
Smart Switch-voedingseenheid
Circuit stelt het systeem in staat om de stroomtoevoer naar elk ontworpen blok te regelen, zowel via de drukknop als de software op de MCU en is gebaseerd op STM6601 Smart-Switch met POWER-optie in plaats van RESET. De terminals die we willen overwegen zijn deze:
- PSHOLD - Ingangslijn, die de apparaatstatus definieert: als op LAAG wordt getrokken, schakelt het apparaat alle secundaire voedingseenheden uit (+3,3V en -3,3V). Indien HOOG gehouden - blijft het apparaat AAN.
- nSR en nPB - Invoerlijnen. Terminals met drukknop. Wanneer een vallende rand wordt gedetecteerd op deze pinnen, probeert het apparaat de aan/uit-modus te openen
- nINT - Uitgangslijn. Elke keer dat de drukknop wordt ingedrukt, LAAG getrokken
- NL - Uitgangslijn, wordt gebruikt als voeding voor de secundaire voedingen. Terwijl LAAG wordt gehouden, zijn beide secundaire voedingen uitgeschakeld
Er zijn enkele belangrijke opmerkingen voordat we overgaan tot het definitieve ontwerp:
- PSHOLD moet worden opgetrokken tot 3,3 V, omdat er gevallen zijn waarin MCU's alle I/O's dwingen om in HIGH-Z-status te zijn. In dit geval is de status van PSHOLD van de MCU onbekend en kan dit het programmeerproces van het apparaat drastisch beïnvloeden.
- STM6601 moet worden besteld met een EN-aanpassingsoptie bij lang indrukken, in plaats van de RESET-optie (daar ben ik in gevallen).
Voedingseenheid: +3.3V
Hoofdstroomvoorziening voor alle systemen in ons project. Wanneer de +3,3V-lijn op GND-niveau wordt gehouden (d.w.z. er is geen spanning aanwezig), zijn alle IC's behalve de slimme schakelaar uitgeschakeld. Het circuit is gebaseerd op LDO LP-3875-3.3 IC, met de mogelijkheid om te worden bestuurd via de EN-aansluiting en stroom te leveren tot 1A.
De stroombron voor dit circuit is de batterijspanning, met aangesloten A/D-indicator voor het detecteren van VBAT in configuratie, vergelijkbaar met het VBUS-detectiecircuit. In dit geval verschillen de berekeningen enigszins;
V (batterij-naar-A/D) = 0,59 V (batterij); A/D(bereik) ∈ [000H: C03H]
Voedingseenheid: -3.3V
Met een negatief voedingscircuit kunnen we symmetrische golfvormen genereren met een DC-factor van 0V (d.w.z. de gemiddelde waarde van de golfvorm kan 0V zijn). Dit circuit is gebaseerd op de LM2662MX IC - DC/DC-converter die werkt volgens een "laadpomp"-methode. De maximale uitgangsstroom van het circuit is 200 mA, wat voldoende is voor onze ontwerpvereisten - we zijn beperkt tot 80 mA uitgangsstroom van elk apparaatkanaal.
IC voert al het benodigde werk uit, dus alleen onderdelen die we hoeven te bevestigen zijn twee elektrolytische condensatoren: C33 voor schakelen en C34 voor -3,3V lijnbypass (overwegingen voor ruisonderdrukking). De frequentie van het schakelen is verwaarloosbaar in ontwerp als we het circuit ver genoeg van onderdelen voor het genereren van golfvormen plaatsen (we zullen dit bespreken bij de stap PCB-lay-out).
Microcontroller-eenheid - MCU
Dit is de manager en de CEO van ons systeem - controle, netwerkverwerking, berichtoverdracht en UI-ondersteuning - alles is door MCU.
De gekozen MCU is Atmel ATMEGA32L, waarbij L staat voor ondersteunde spanningswerking ∈ [2,7V: 5,5V]. In ons geval is de bedrijfsspanning +3,3V.
Laten we eens kijken naar de belangrijkste bedieningsblokken, die nodig zijn om te begrijpen, werken met MCU in ons ontwerp:
- Externe oscillator - Is een optioneel onderdeel, omdat we geïnteresseerd zijn in de werkfrequentie van 8 MHz
-
Perifere controle, SPI-netwerk - Alle randapparatuur (behalve ESP32) communiceren met MCU via SPI. Er zijn drie gedeelde lijnen voor alle apparaten (SCK, MOSI, MISO) en elk randcircuit heeft zijn eigen CS (Chip Select) lijn. De SPI-apparaten die deel uitmaken van het apparaat:
- D/A voor amplituderegeling - kanaal A
- D/A voor amplituderegeling - kanaal B
- AD9834-apparaat - Kanaal A
- AD9834-apparaat - Kanaal B
- D/A voor voorspanningsregeling - kanaal A
- D/A voor voorspanningsregeling - kanaal B
- Digitale Potentiometer voor LCD helderheid/contrast instellingen
- LCD-ondersteuning - Aangezien LCD een generieke weergave van 20 x 4 tekens is, gebruiken we een 4-bits interface (lijnen D7:D4), besturingspinnen (lijnen RS, E) en helderheid/contrastregeling (lijnen V0 en anode)
- RGB LED-ondersteuning - Deze module is optioneel, maar er is een gemeenschappelijke kathode RGB LED-connector met geschikte weerstanden, aangesloten op de MCU.
-
Power Control - MCU voert bewaking van het stroomsysteem uit in de realtime-modus en handelt alle benodigde stroomgebeurtenissen af:
- VBAT_ADC - Bewaking van de batterijspanning en bepaling van de status (ADC0-kanaal)
- PWR_IND - Indicatie van externe voedingsaansluiting (ADC1-kanaal)
- PS_HOLD - Primaire voedingslijn voor alle gedefinieerde systemen. Wanneer door de MCU laag wordt getrokken, wordt het apparaat uitgeschakeld
- Terminal van slimme schakelaar onderbreken - Statusbewaking met drukknop
- WiFi-netwerkbeheer - ESP32: MCU communiceert met ESP32 via UART-interface. Omdat 8 MHz ons in staat stelt om een baudrate van 115200 te implementeren met een relatief kleine fout, kunnen we ESP32 in het circuit gebruiken zonder pre-definities van baudrate-veranderingen.
AVR ISP-programmeur
Onze MCU is geprogrammeerd via SPI met een resetlijn (/RST) die HOOG moet worden getrokken voor een goede werking (zo niet, dan bevindt de MCU zich voor altijd in een reset-status).
Om ervoor te zorgen dat het apparaat zowel via USB kan worden geprogrammeerd als opgeladen, heb ik een AVR ISP-programmeur aangesloten (product van klein formaat, gekocht van eBay). Om de volledige USB-ondersteuning van het apparaat te behouden, is het nodig om USB Type-A (D+, D-, VBUS en GND) terminals te verbinden met het AVR ISP-apparaat.
Circuit voor het genereren van golfvormen
De kern van het apparaat zijn deze circuits. AD9834 is een DDS-apparaat met laag vermogen dat ons alle golfvormen biedt die we uit het systeem zouden willen halen. Circuits bevatten twee onafhankelijke AD9834 IC's met gescheiden externe 50MHz-oscillatoren (zoals te zien is in het schema). De reden voor een gescheiden oscillator is de ruisonderdrukking van digitale circuits, dus de beslissing was om de juiste 50MHz-lijnen te gebruiken met oscillatoren die naast de AD9834 werden geplaatst.
Laten we nu eens kijken naar wat wiskunde:
Aangezien het DDS-apparaat werkt op Phase Wheel-technologie met een uitvoerwaarde in een 28-bits register, kunnen we het genereren van golfvormen wiskundig beschrijven:
dP(fase) = ωdt; ω = P' = 2πf; f(AD9834) = ΔP * f(clk) / 2^28; ΔP ∈ [0: 2^28 - 1]
En volgens het AD9834-gegevensblad, rekening houdend met de maximale frequentie, kan de resolutie van de uitgangsfrequentie worden verkregen:
Δf = k * f(oscillator) / f(maximum) = 0,28 * 50M / 28M = 0,187[Hz]
AD9834 IC's bieden een analoge stroomuitgang voor driehoeks-/sinusgolf (IOUT-aansluiting) en digitale uitgang voor blokgolf (SIGN_OUT-aansluiting). Het gebruik van tekenbit is een beetje lastig, maar we kunnen het aan - Elke keer dat DDS de drempel van vergelijkingswaarde overschrijdt, gedraagt SIGN_OUT zich dienovereenkomstig. Een weerstand van 200 Ohm is bevestigd aan de uitgang van elk kanaal, dus de uitgangsspanning zou zinvolle waarden hebben:
I (enkel kanaal) = V (uitgang) / R (spanningsselectie); V(uitgang) = R(VS)*I(SS) = 200I(SS) [A]
Amplituderegeling (D/A) Circuits
Volgens het gegevensblad van AD9834 kan de amplitude worden aangepast door stroom te leveren aan het DDS-systeem op volledige schaal, dus met behulp van dubbele D/A IC kunnen we de amplitude van het uitgangssignaal regelen door die stroom aan te passen. Nogmaals, wat wiskunde:
I (volledige schaal) = 18 * (V_REF - V_DAC) / R_SET [A]
Volgens schema's en enkele getallen aan de vergelijking toevoegen:
I (volledige schaal) = 3,86 - 1,17 * V_DAC [A]
D/A-module die in het ontwerp wordt gebruikt, is 12-bits MCP4922, wanneer de stroom in het bereik van [0mA: 3,86mA] ligt en de lineaire amplitudefunctie is:
V(amplitudeselectie) = 1 - [V(D/A) / (2^12 - 1)]
Golfvorm Multiplexing Circuit
De outputs voor het genereren van blokgolven en sinus-/driehoeksgolven zijn gescheiden bij AD9834. Daarom moeten we een high-speed multiplexcircuit gebruiken voor beide outputs om alle gewenste golfvormen van een enkel gescheiden kanaal te kunnen ophalen. Het multiplexer IC is een ADG836L analoge switch met een zeer lage aan-weerstand (~0.5Ohm).
De selectietabel die MCU gebruikt voor de uitgangen zoals deze is:
Modusselectie [D2:D1] | Uitgangskanaal A | Uitgangskanaal B
00 | Sinus/driehoek | Sinus/driehoek 01 | Sinus/driehoek | Vierkant 10 | Vierkant | Sinus/driehoek 11 | Vierkant | Vierkant
Bias Voltage Control (D/A) circuits
Een van de belangrijkste kenmerken van de golfvormgenerator is het regelen van de DC-waarde. In dit ontwerp wordt dit gedaan door de gewenste D/A-spanning per kanaal in te stellen, en deze voorspanningen worden opgeteld met gemultiplexte uitgangen die we iets eerder hebben besproken.
De spanning die wordt opgehaald van D/A ligt in het bereik [0V: +3,3V], dus er is een op-amp-gebaseerd circuit dat het D/A-bereik toewijst aan [-3,3V: +3,3V], waardoor het apparaat het volledige bereik kan bieden van de gewenste DC-component. We zullen de vervelende analytische wiskunde overslaan en ons concentreren op de uiteindelijke resultaten:
V_OUT(kanaal B) = V_BIAS_B(+) - V_BIAS_B(-); V_OUT(kanaal A) = V_BIAS_A(+) - V_BIAS_A(-)
Nu bevindt het DC-componentbereik zich in het bereik [-3,3V: +3,3V].
Circuits optellen - DC-componenten en golfvormuitgangen
Op dit moment hebben we alles wat we nodig hebben voor de juiste apparaatuitgang - Bias Voltage (DC-component) in het volledige spanningsbereik en gemultiplexte AD9834-uitgangen. We zullen dat mogelijk maken door de sommerende versterker - op-amp-configuratie te gebruiken
Laten we wiskunde nogmaals overslaan (we hebben al veel wiskundige benaderingen behandeld) en het uiteindelijke resultaat van de output van de optelversterker opschrijven:
V(apparaatuitgang) = V(positieve voorspanning) - V(negatieve voorspanning) - V(gemultiplexte uitvoer) [V]
Vandaar:
V_OUT = ΔV_BIAS - V_AD9834 [V]
Uitgangsconnectoren van het BNC-type zijn verbonden met selectieweerstanden (R54, R55; R56, R57). De reden daarvoor is dat in het geval dat het ontwerp disfunctioneel is, we nog steeds kunnen selecteren of we een optelversterker willen gebruiken.
Belangrijke opmerking: de weerstandsnetwerken van de uiteindelijke optelversterkers kunnen door een ontwerper worden aangepast om de maximale amplitude die van het apparaat kan worden opgehaald, te wijzigen. In mijn geval delen alle versterkers dezelfde versterking = 1, dus de maximale gebufferde amplitude is 0,7 Vpp voor driehoeks-/sinusgolf en 3,3 Vpp voor blokgolf. De specifieke wiskundige benadering is te vinden tussen de bijgevoegde afbeeldingen van de stap.
ESP32 als externe module
MCU communiceert met ESP32 via UART-interface. Omdat ik mijn eigen PCB wilde voor de ESP32, zijn er 4 terminals beschikbaar om aan te sluiten: VCC, RX, TX, GND. J7 is een interfaceconnector tussen PCB's en ESP32 wordt toegewezen als externe module in het apparaat.
Gebruikersinterface - LCD en luidspreker
Het gebruikte LCD-scherm is een generiek 20 x 4-karakterdisplay met een 4-bit-interface. Zoals te zien is aan het ontwerp, is er een digitale SPI-potentiometer bevestigd aan de LCD-terminals "A" en "V0" - het doel is om aan te passen helderheid en contrast van LCD-module programmatisch.
Luidspreker zorgt voor geluidsuitvoer voor de gebruiker door eenvoudige blokgolfgeneratie van de MCU. De BJT T1 regelt de stroom door de luidspreker die slechts in twee toestanden kan zijn - AAN / UIT.
Stap 5: Hardware-ontwerp - ESP32-module
ESP32 wordt gebruikt als een externe module voor de hoofdprintplaat. Apparaatcommunicatie is gebaseerd op AT-commando's, die beschikbaar zijn op de firmware van een generieke apparaat.
Er is niet veel om over dit ontwerp uit te breiden, maar er zijn enkele opmerkingen voor het ontwerp:
- Voor de foutafhandeling van het gebruik van de juiste UART-module van ESP32, heb ik drie selectieweerstanden voor zowel TX- als RX-lijnen bevestigd. (0 Ohm voor elk). Voor standaardconfiguratie wordt de UART2-module gebruikt voor AT-opdrachten (R4, R7 moeten worden gesoldeerd)
- Apparaat heeft 4-regelige uitgang - VCC, GND, TX, RX.
- IO0- en EN-pinnen evalueren de werking van het apparaat en moeten worden ontworpen zoals aangegeven in het schema
Alle PCB-functies die we in de volgende stap zullen behandelen.
Stap 6: PCB-layout
De doelen van het ontwerpen van een PCB
- Creëer een ingebed systeem voor alle geïntegreerde schakelingen op hetzelfde bord
- Verbeter de prestaties van het apparaat door een enkele hoofd-PCB te ontwerpen
- Kostenbesparing - als u de prijzen wilt opzoeken, goedkope ontwerpen zijn ECHT lage kosten
- Minimaliseer de grootte van het elektronische bord:
- Eenvoudig op te lossen - We kunnen TP's (Testpunten) gebruiken voor elke mogelijk defecte lijn.
Technische parameters
Beide PCB's: hoofd- en ESP32-kaart hebben dezelfde kenmerken voor het fabricageproces - lage kosten en bruikbaar voor onze doeleinden. Laten we ze eens bekijken:
A - Moederbord
- Afmeting: 10cm x 5,8cm
- Aantal lagen: 2
- PCB-dikte: 1,6 mm
- Minimale spoorruimte/breedte: 6/6mil
- Minimale diameter via gat: 0,3 mm
- Koper tot de rand van PCB minimale afstand: 20mil
- Oppervlakteafwerking: HASL (vrij goed uitziend zilverkleurig goedkoop type)
B - Moederbord
- Afmeting: 3cm x 4cm
- Aantal lagen: 2
- PCB-dikte: 1,6 mm
- Minimale spoorruimte/breedte: 6/6mil
- Minimale diameter via gat: 0,3 mm
- Koper tot de rand van PCB minimale afstand: 20mil
- Oppervlakteafwerking: HASL
Stap 7: 3D-behuizing
Ik heb het niet zelf ontworpen, omdat ik op dat moment dit apparaat overhaalde om te werken, dus ik was helemaal niet op de hoogte van alle basisprincipes van 3D-printen. Dus heb ik een SCAD-project van Thingiverse gebruikt en verschillende openingen aan de grenzen bevestigd, volgens de specificaties van mijn apparaat.
- Afdrukapparaat: Creality Ender-3
- Bedtype: glas, dikte 5 mm
- Gloeidraaddiameter: 1,75 mm
- Filamenttype: PLA+
- Pijpdiameter: 0.4mm
- Initiële snelheid: 20 mm/sec
- Gemiddelde snelheid: 65 mm/sec
- Ondersteuning: Nvt
- Invulling: 25%
-
Temperatuur:
- Bed: 60(oC)
- Pijp: 215 (oC)
- Filamentkleur: Zwart
- Totaal aantal openingen: 5
-
Aantal behuizingspanelen: 4"
- TOP schelp
- Bodemschaal
- Voorpaneel
- Achterpaneel
Stap 8: Software-implementatie - MCU
GitHub-link naar Android- en Atmega32-code
Software-algoritme
Alle bewerkingen die door de MCU worden uitgevoerd, worden beschreven in bijgevoegde stroomdiagrammen. Daarnaast is er een bijgevoegde code voor het project. Laten we de softwarespecificaties bespreken:
Opstarten
In dit stadium voert MCU alle initialisatiesequenties uit, samen met het bepalen van het opgeslagen communicatietype met het Android-apparaat: directe WiFi- of WLAN-netwerkcommunicatie - deze gegevens worden opgeslagen in EEPROM. De gebruiker kan in dit stadium het koppelingstype voor Android-apparaten opnieuw definiëren.
Direct koppelen van Android-apparaten
Dit type koppeling is gebaseerd op het maken van een WiFi-netwerk door het FuncGen-apparaat. Het zal een AP (Access Point) en een TCP-server creëren op een lokaal apparaat-IP met een specifieke SSID (WiFi-netwerknaam) en een specifiek poortnummer. Het apparaat moet de status behouden - open voor verbindingen.
Wanneer een Android-apparaat is verbonden met FuncGen, gaat MCU naar de ACTIEVE modus en reageert het volgens de gebruikersinstructies van het Android-apparaat.
WLAN-koppeling
Om te communiceren op een lokaal wifi-netwerk, moet MCU de ESP32 opdrachten geven om AP te maken, te communiceren met een Android-apparaat en de cruciale netwerkgegevens uit te wisselen:
- Android-apparaat ontvangt van FuncGen zijn MAC-adres en slaat het op in het geheugen.
- FuncGen-apparaat ontvangt van Android-apparaat geselecteerde WLAN-parameters: SSID, type beveiliging en wachtwoord en slaat dit op in EEPROM.
Wanneer apparaten inderdaad met hetzelfde WLAN zijn verbonden, zoekt het Android-apparaat naar de FuncGen door alle MAC-adressen te scannen van apparaten die op het WLAN zijn aangesloten. Wanneer het Android-apparaat de MAC-overeenkomst bepaalt, probeert het te communiceren.
Verbinding en statusafhandeling - MCU
Wanneer apparaten met elkaar communiceren, blijft het protocol (zie pre-finale stap) hetzelfde en is het stroomschema hetzelfde.
Toezicht op apparaatstatus
Getimede onderbreking biedt de MCU de nodige details voor het afhandelen van de status. Bij elke cyclus van timeronderbreking wordt de volgende lijst met parameters bijgewerkt:
- Externe voeding - Aan/Uit
- Status batterijspanning:
- UI-update voor elke aanpassing
- Drukknop: ingedrukt/niet ingedrukt
Stap 9: Software-implementatie - Android-app
Android-app is geschreven in Java-Android-stijl. Ik zal proberen het op dezelfde manier uit te leggen als de vorige stappen - door het algoritme in afzonderlijke codeblokken te verdelen.
Opstartvolgorde
Eerste reeks van het apparaat. Hier wordt het app-logo weergegeven, samen met het inschakelen van GPS- en WiFi-modules van het Android-apparaat (maak je geen zorgen, de GPS is alleen nodig voor het scannen van wifi-netwerken).
Hoofdmenu
Nadat de app is opgestart, verschijnen er vier knoppen op het scherm. Knoppen actie:
- DIRECTE VERBINDING: Initialiseren van verbinding met FuncGen's AP door de SSID van IOT_FUNCGEN. Als de verbinding succesvol is, gaat het apparaat naar de hoofd-UI-modus.
- WIFI-VERBINDING: Apparaat controleert of er gegevensparameters in het geheugen zijn opgeslagen: wifi.txt, mac.txt. Als er geen gegevens zijn opgeslagen, zal het apparaat het verzoek van de gebruiker weigeren en een pop-upbericht weergeven dat eerst WLAN-koppeling moet worden uitgevoerd.
- KOPPELEN: Communiceren met FuncGen op dezelfde manier als DIRECTE VERBINDING, maar in plaats van continue berichtenuitwisseling, is er een enkele handdruk. Android-apparaat controleert of het al is verbonden met het wifi-netwerk en vraagt de gebruiker om het wachtwoord in te voeren. Als het opnieuw verbinden succesvol is, slaat het Android-apparaat SSID en wachtwoord op in het wifi.txt-bestand. Na succesvolle communicatie met FuncGen, slaat het het ontvangen MAC-adres op in het mac.txt-bestand.
- Afsluiten: Genoeg gezegd:)
Wifi-scanbeheer
Ik wilde dat de applicatie volledig operationeel zou zijn en dat er geen off-app aanpassingen zouden worden gemaakt. Dus heb ik WiFi Scanner ontworpen, die alle benodigde bewerkingen uitvoert om verbinding te maken met het WiFi-netwerk met een bekende toegangscode en SSID.
Gegevensoverdracht en TCP-communicatie
Dit is het hoofdcodeblok in de app. Voor alle UI-eenheden is er een gedefinieerd bericht in een specifiek formaat (Pre-final step), dat FuncGen dwingt om de gewenste output voor de kanalen te leveren. Er zijn drie soorten UI-velden in activiteit:
-
Zoekbalken: hier definiëren we het reële bereik van FuncGen-uitvoerparameters
- Amplitude
- DC-offset
- LCD-helderheid
- LCD-contrast
- Tekstbewerking: om integerwaarden goed gedefinieerd en nauwkeurig te houden, wordt de frequentie-invoer gedaan via tekstvakken met alleen getallen
-
Knoppen: Selectie van parameters uit de beschikbare lijsten:
-
Golfvormtype:
- Sinus
- Driehoek
- gelijkstroom
- Vierkant
- UIT
-
Informatie verkrijgen
- Batterijstatus (percentage)
- AC-status (externe voeding)
-
Opstartoptie (voor FuncGen MCU)
- Fabrieksinstelling
- Herstarten
- Stilgelegd
- Direct - Herstart met directe koppelingsmodus
- WLAN - Herstart met WLAN-koppelingsmodus
- Afsluiten naar hoofdmenu: genoeg gezegd:)
-
Stap 10: Testen
Aanbevolen:
Functiegenerator: 12 stappen (met afbeeldingen)
Functiegenerator: deze instructable beschrijft het ontwerp van de functiegenerator op basis van het analoge geïntegreerde circuit MAX038 van Maxims. De functiegenerator is een zeer handig hulpmiddel voor de elektronicafreaks. Het is nodig voor het afstemmen van resonantiecircuits, het testen van aud
DIY-functiegenerator met STC MCU gemakkelijk - Ajarnpa
DIY-functiegenerator met STC MCU gemakkelijk: dit is een functiegenerator gemaakt met STC MCU. Slechts enkele componenten nodig en de schakeling is eenvoudig. Specificatie Uitgang: Single Channel Square Golfvorm Frequentie: 1Hz~2MHz Sinusgolfvorm Frequentie: 1Hz~10kHz Amplitude: VCC, ongeveer 5V Laadvermogen
Eenvoudige functiegenerator: 5 stappen
Eenvoudige functiegenerator: in mijn laatste instructable liet ik je zien hoe je een pwm-signaalgenerator bouwt, en ik gebruikte het om er enkele andere golfvormen uit te filteren. In deze instructable laat ik je zien hoe je een eenvoudige functie- / frequentiegenerator maakt, hoe je relais ermee aanstuurt en hoe b
Functiegenerator: 4 stappen
Functiegenerator: Hallo allemaal, een goedkope functiegenerator nodig?, Wil je hem niet kopen…?…. je kunt er een maken uit deze tutorial…. Een functiegenerator is nodig…. In het grootste deel van het project …… heb ik het gemaakt om het te gebruiken om draadloze krachtoverbrenging modu
Draagbare functiegenerator op Arduino 7 stappen (met afbeeldingen)
Draagbare functiegenerator op Arduino: Functiegenerator is een zeer handig hulpmiddel, vooral als we overwegen de reactie van ons circuit op een bepaald signaal te testen. In deze instructable beschrijf ik de bouwvolgorde van een kleine, gebruiksvriendelijke, draagbare functiegenerator. Kenmerken van