Sommario:

Generatore di funzioni portatile su WiFi e Android: 10 passaggi
Generatore di funzioni portatile su WiFi e Android: 10 passaggi

Video: Generatore di funzioni portatile su WiFi e Android: 10 passaggi

Video: Generatore di funzioni portatile su WiFi e Android: 10 passaggi
Video: Generatore di funzioni con Arduino, DAC R-2R e ampli audio 1 Watt • Progetto 1000 2024, Luglio
Anonim
Generatore di funzioni portatile su WiFi e Android
Generatore di funzioni portatile su WiFi e Android
Generatore di funzioni portatile su WiFi e Android
Generatore di funzioni portatile su WiFi e Android
Generatore di funzioni portatile su WiFi e Android
Generatore di funzioni portatile su WiFi e Android
Generatore di funzioni portatile su WiFi e Android
Generatore di funzioni portatile su WiFi e Android

Verso la fine del XX secolo sono emerse diverse innovazioni tecnologiche, soprattutto nel campo delle comunicazioni; ma non solo. Per noi, utenti, consumatori e ingegneri è venuto alla luce il rapido sviluppo di dispositivi elettronici, che possono semplificarci la vita: orologi intelligenti, case intelligenti, smartphone ecc.

Dal momento che tutto può essere "intelligente" al giorno d'oggi, ho deciso di progettare un dispositivo super utile da inserire nell'essenziale attrezzatura elettronica di laboratorio - Portable Function Generator, controllabile da smartphone con sistema operativo Android tramite WiFi Direct o WiFi Local Area Network (WLAN).

Perché dovremmo costruire questo dispositivo?

La stragrande maggioranza delle apparecchiature di prova è piuttosto costosa al giorno d'oggi. E a volte, questi dispositivi non sono portatili. Come soluzione per i prezzi elevati, la mancanza di portabilità e la mancanza di accesso alla rete del dispositivo, il dispositivo fornisce un generatore di forme d'onda a doppio canale, che è effettivamente portatile e ha un accesso illimitato alla rete, sia Internet che locale.

E, naturalmente, il dispositivo dovrebbe essere costruito a causa dell'entusiasmo, obbedendo ai principi del fai-da-te - A volte dobbiamo solo fare le cose da soli per sentirci bene:)

Caratteristiche principali

Alimentazione elettrica

  • Connettore USB Type-A, sia per i sistemi di alimentazione che per la programmazione
  • Sistema completo di gestione della batteria agli ioni di litio - Modalità di ricarica e stabili
  • Implementazione Smart Switch: non è necessario l'interruttore di accensione/spegnimento
  • Doppia alimentazione: +3,3 V e -3,3 V per la generazione di forme d'onda di tensione simmetriche

Generazione di forme d'onda

  • Implementazione del livello CC alla cascata di uscita - forma d'onda polarizzata tra i limiti di tensione
  • Generazione di forme d'onda di 4 tipi basata su DDS: seno, triangolo, quadrato e DC
  • Supporto di frequenza fino a 10 MHz
  • Corrente di uscita fino a 80 mA con disponibilità di potenza massima di 500 mW
  • Canali separati per la generazione di forme d'onda - circuiti divisi basati su AD9834

Comunicazione

  • Implementazione di ESP32 - Funzionalità WiFi applicabili
  • Supporto TCP/IP completo tramite dispositivo generatore e smartphone Android
  • Possibilità di memorizzare i parametri utente per ogni ciclo del dispositivo
  • Monitoraggio dello stato - entrambi i sistemi sono a conoscenza dell'altro stato: FuncGen (chiamiamolo così d'ora in poi) e smartphone.

Interfaccia utente

  • LCD 20 x 4 caratteri con semplice interfaccia dati a 4 bit
  • Applicazione Android: controllo completo dell'utente sul dispositivo FuncGen
  • Circuito buzzer - feedback sonoro per l'utente

Passaggio 1: diagramma a blocchi - Hardware

Diagramma a blocchi - Hardware
Diagramma a blocchi - Hardware
Diagramma a blocchi - Hardware
Diagramma a blocchi - Hardware

Microcontrollore - ATMEGA32L

Il microcontrollore è un chip programmabile che consiste in tutte le funzionalità del computer che risiedono in un singolo chip elettronico. Nel nostro caso, è il "cervello" e un componente centrale del sistema. Lo scopo dell'MCU è gestire tutti i sistemi periferici, gestire la comunicazione tra questi sistemi, controllare il funzionamento dell'hardware e fornire un supporto completo per l'interfaccia utente e la sua interazione con un utente reale. Questo progetto si basa su MCU ATMEGA32L, che può funzionare a 3,3 V e una frequenza di 8 MHz.

SoC di comunicazione - ESP32

Questo SoC (System on Chip) fornisce supporto di comunicazione completo per FuncGen - Accesso alle funzionalità WiFi inclusa la comunicazione diretta, locale o Internet. Le finalità del dispositivo sono:

  • Gestire la trasmissione dei dati tra l'app Android e il dispositivo FuncGen
  • Gestione dei messaggi di controllo/dati
  • Supporto della configurazione continua TCP/IP Client-Server

Nel nostro progetto il SoC è espressivo di ESP32, che è troppo popolare per espanderlo ulteriormente:)

Sistema di gestione della batteria agli ioni di litio

Al fine di trasformare il nostro dispositivo in uno portatile, il dispositivo contiene un circuito di ricarica della batteria agli ioni di litio progettato. Il circuito è basato sull'IC MC73831, con corrente di carica controllabile tramite la regolazione del valore di un singolo resistore di programmazione (Tratteremo questo argomento nel passaggio Schemi). L'ingresso di alimentazione del dispositivo è un connettore USB di tipo A.

Circuito interruttore intelligente

Il circuito di controllo dell'alimentazione del dispositivo Smart Switch fornisce un controllo software completo sulla sequenza di spegnimento del dispositivo e la mancanza di un interruttore a levetta esterno per l'interruzione della tensione della batteria del dispositivo. Tutte le operazioni di alimentazione vengono eseguite premendo il pulsante e il software MCU. In alcuni casi, potrebbe essere necessario spegnere il sistema: bassa tensione della batteria, alta tensione di ingresso, errore di comunicazione e così via. Lo Smart Switch si basa sul CI Smart Switch STM6601, che è economico e molto amichevole con cui giocare.

Alimentatore principale

Questa unità è composta da due circuiti di alimentazione a batteria - +3,3V per tutti i circuiti di alimentazione digitali/analogici e -3,3V per l'uscita simmetrica FunGen relativa al potenziale 0V (cioè la forma d'onda generata può essere impostata in [-3,3V:3,3V] regione.

  • Il circuito di alimentazione principale è basato sul regolatore di tensione lineare 1A LP3875-3.3 LDO (basso dropout).
  • Il circuito di alimentazione secondario è basato su LM2262MX IC, che esegue la conversione di tensione negativa DC-DC tramite condensatore-pompa di carica - sistema su cui si basa l'IC.

Sistema di generatori di forme d'onda

Il sistema è stato progettato ponendo l'accento su circuiti integrati separati DDS (sintesi digitale diretta), che consentono il controllo completo della generazione di forme d'onda da parte dell'SPI (interfaccia periferica seriale) dell'MCU. I circuiti utilizzati nella progettazione sono Analog Devices AD9834 che possono fornire diversi tipi di forme d'onda. Le sfide che dobbiamo affrontare mentre lavoriamo con AD9834 sono:

  • Ampiezza della forma d'onda fissa: l'ampiezza della forma d'onda è controllata dal modulo DAC esterno
  • Nessuna considerazione per il livello DC di offset: implementazione di circuiti sommatori con valori di offset DC desiderati
  • Uscite separate per l'onda quadra e l'onda triangolare/sinusoidale: implementazione del circuito di commutazione ad alta frequenza in modo che ogni singola uscita del canale possa fornire tutta la forma d'onda desiderata: seno, triangolo, quadrato e CC.

Schermo a cristalli liquidi

LCD fa parte dell'interfaccia utente (interfaccia utente) e il suo scopo è consentire all'utente di capire cosa fa il dispositivo in modalità in tempo reale. Interagisce con l'utente in ogni stato del dispositivo.

Cicalino

Circuito generatore di suoni semplice per un feedback aggiuntivo dal dispositivo all'utente.

Programmatore ISP integrato

C'è un problema persistente per ogni tecnico quando si tratta del processo di programmazione: c'è sempre la peggiore necessità di smontare il prodotto per riprogrammarlo con un nuovo firmware. Per ovviare a questo inconveniente, il programmatore AVR ISP è stato collegato al dispositivo dall'interno, mentre i dati USB e le linee elettriche sono collegati al connettore USB di tipo A del dispositivo. In questa configurazione, dobbiamo solo collegare il nostro FuncGen tramite cavo USB per la programmazione o la ricarica!

Passaggio 2: diagramma a blocchi - Rete

Diagramma a blocchi - Rete
Diagramma a blocchi - Rete

Generatore di funzioni a doppio canale

Dispositivo principale. Quello che abbiamo recensito nel passaggio precedente

ESP-WROOM-32

System-on-Chip integrato con funzionalità WiFi e BLE. Il SoC è collegato alla scheda principale (lo tratteremo nella fase schematica) tramite il modulo UART e funge da ricetrasmettitore di messaggi tra il dispositivo principale e lo smartphone Android.

Rete locale WiFi

Smartphone e dispositivo comunicheranno tramite WiFi direct o rete locale, in base alla configurazione server/client TCP. Quando i dispositivi si riconoscono sul WiFi, il dispositivo principale crea un server TCP con parametri appropriati ed è in grado di inviare/ricevere messaggi. Il dispositivo funge da secondario rispetto allo smartphone. Il dispositivo Android, d'altra parte, si connette al server TCP come dispositivo di rete client, ma è considerato un trasmettitore di messaggi primario: lo smartphone è colui che avvia il ciclo completo di comunicazione: Invio del messaggio - Ricezione della risposta.

Smartphone Android

Dispositivo smartphone basato su sistema operativo Android che funziona con l'applicazione FuncGen

Passaggio 3: parti, strumenti, IDE e distinta base

Parti, strumenti, IDE e distinta base
Parti, strumenti, IDE e distinta base
Parti, strumenti, IDE e distinta base
Parti, strumenti, IDE e distinta base
Parti, strumenti, IDE e distinta base
Parti, strumenti, IDE e distinta base

Distinta Materiali (Vedi tabella XLS allegata)

UI e connessioni di sistema

  • 1 x 2004A Char-LCD 20x4 Blu
  • 1 x connettore USB di tipo B
  • 1 x 10 Set Mini Micro JST XH 2,54 mm 4 Pin
  • 1 x 6 pezzi SW momentaneo

Ordinazione PCB (secondo Seeed Studio)

Materiale di base FR-4

Numero di strati 2 strati

PCB Quantità 10

Numero di disegni diversi 1

Spessore PCB 1,6 mm

Colore PCB Blu

Finitura superficiale HASL

Diga minima della maschera di saldatura 0,4 mm↑

Rame Peso 1oz

Dimensione minima del foro 0,3 mm

Larghezza traccia / Spaziatura 6/6 mil

Semifori placcati / Fori a corona No

Controllo impedenza No

Utensili

  • Pistola per colla a caldo
  • pinzette
  • taglierina
  • ~ Cavo 22AWG per la gestione dei malfunzionamenti
  • Saldatore/stazione
  • stagno di saldatura
  • Stazione di rilavorazione SMD (opzionale)
  • Stampante 3D (opzionale)
  • File di estrusione
  • Programmatore ISP AVR
  • Convertitore da USB a seriale (opzionale, per scopi di debug)

Ambiente di sviluppo integrato (IDE) e software

  • Autodesk EAGLE o Cadence Schematic Editor / Allegro PCB Editor
  • OpenSCAD (opzionale)
  • Ultimaker Cura (opzionale)
  • Logica Saleae (per la risoluzione dei problemi)
  • Atmel Studio 6.3 o superiore
  • Android Studio o Eclipse IDE
  • Docklight Serial Monitor/Altro software di monitoraggio della porta COM
  • ProgISP per programmazione flash AVR ATMEGA32L

Fase 4: Progettazione hardware - Scheda principale

Progettazione hardware - Scheda madre
Progettazione hardware - Scheda madre
Progettazione hardware - Scheda madre
Progettazione hardware - Scheda madre
Progettazione hardware - Scheda madre
Progettazione hardware - Scheda madre

Circuito di gestione della batteria

Il circuito di ricarica della batteria si basa sull'IC MCP7383, che ci consente di selezionare la corrente di carica desiderata per la batteria agli ioni di litio - 3,7 V con capacità di 850 mAh. La corrente di carica viene impostata programmando il valore del resistore (R1) nel nostro caso

R1 = 3KOhm, I(carica) = 400mA

La tensione USB VBUS è filtrata dal filtro π (C1, L3, C3) e funge da fonte di alimentazione per il circuito di ricarica.

Il circuito divisore di tensione (R2, R3) consente all'MCU di indicare se l'alimentatore USB esterno è collegato o meno, fornendo la seguente tensione al canale A/D dell'MCU:

V(indicazione) ~ (2/3)V(BUS)

Poiché il nostro A/D di ATMEGA32L è a 12 bit, possiamo calcolare l'intervallo digitale:

A/D(intervallo) = 4095V(indicazione) / V(RIF).

A/D ∈ [14AH: FFFH]

Unità di alimentazione Smart Switch

Il circuito consente al sistema di controllare l'alimentazione di ogni blocco progettato sia dal pulsante che dal software su MCU e si basa su Smart-Switch STM6601 con opzione POWER anziché RESET. I terminali che vogliamo considerare sono questi:

  • PSHOLD - Linea di ingresso, che definisce lo stato del dispositivo: se viene tirato LOW, il dispositivo disabilita tutti gli alimentatori secondari (+3,3V e -3,3V). Se tenuto ALTO - il dispositivo mantiene lo stato ON.
  • nSR e nPB - Linee di ingresso. Terminali a pulsante. Quando viene rilevato un fronte di discesa su questi pin, il dispositivo tenta di accedere alla modalità di accensione/spegnimento
  • nINT - Linea di uscita. Tirato BASSO ogni volta che si preme il pulsante
  • IT - Linea di uscita, viene utilizzata come abilitazione alimentazione per gli alimentatori secondari. Mentre è tenuto BASSO, entrambi gli alimentatori secondari sono disabilitati

Ci sono alcune note importanti prima di procedere alla progettazione finale:

  • PSHOLD dovrebbe essere portato a 3,3 V, perché ci sono casi in cui gli MCU forzano tutti gli I/O a essere in stato HIGH-Z. In questo caso, lo stato di PSHOLD dall'MCU è sconosciuto e potrebbe influenzare notevolmente il processo di programmazione del dispositivo.
  • STM6601 dovrebbe essere ordinato con un'opzione di regolazione EN su pressione prolungata, invece dell'opzione RESET (sono caduto in quella).

Alimentatore: +3.3V

Alimentazione principale per tutti i sistemi del nostro progetto. Quando la linea +3,3 V è mantenuta a livello GND (cioè nessuna tensione presente), tutti i circuiti integrati tranne l'interruttore intelligente sono disabilitati. Il circuito è basato su LDO LP-3875-3.3 IC, con la possibilità di essere controllato tramite terminale EN e fornire corrente fino a 1A.

La fonte di alimentazione per questo circuito è la tensione della batteria, con indicatore A/D collegato per il rilevamento di VBAT in configurazione, simile al circuito di rilevamento VBUS. In questo caso, i calcoli differiscono leggermente;

V (da batteria ad A/D) = 0,59 V (batteria); A/D(intervallo) ∈ [000H: C03H]

Alimentatore: -3.3V

Il circuito di alimentazione a tensione negativa ci consente di generare forme d'onda simmetriche con un fattore DC di 0V (cioè il valore medio della forma d'onda può essere 0V). Questo circuito è basato sul convertitore LM2662MX IC - DC/DC che funziona con un metodo "pompa di carica". La corrente di uscita massima del circuito è di 200 mA, sufficiente per i nostri requisiti di progettazione: siamo limitati con una corrente di uscita di 80 mA da ciascun canale del dispositivo.

L'IC esegue tutto il lavoro necessario, quindi solo le parti che dobbiamo collegare sono due condensatori elettrolitici: C33 per la commutazione e C34 per il bypass di linea da -3,3 V (considerazioni sulla riduzione del rumore). La frequenza della commutazione è trascurabile nel design se stiamo posizionando il circuito abbastanza lontano dalle parti di generazione della forma d'onda (ne parleremo nella fase del layout del PCB).

Unità microcontrollore - MCU

Questo è il manager e il CEO del nostro sistema - controllo, gestione della rete, trasmissione dei messaggi e supporto dell'interfaccia utente - tutto è di MCU.

L'MCU scelto è Atmel ATMEGA32L, dove L sta per funzionamento con tensione supportata [2.7V: 5.5V]. Nel nostro caso, la tensione di esercizio è +3,3V.

Consideriamo i principali blocchi operativi, che sono necessari per comprendere, lavorando con MCU nel nostro progetto:

  • Oscillatore esterno - È un componente opzionale, poiché siamo interessati alla frequenza operativa di 8 MHz
  • Controllo periferico, rete SPI - Tutti i dispositivi periferici (escluso ESP32) comunicano con MCU tramite SPI. Ci sono tre linee condivise per tutti i dispositivi (SCK, MOSI, MISO) e ogni circuito periferico ha la sua linea CS (Chip Select) dedicata. I dispositivi SPI che fanno parte del dispositivo:

    1. D/A per il controllo dell'ampiezza - Canale A
    2. D/A per il controllo dell'ampiezza - Canale B
    3. Dispositivo AD9834 - Canale A
    4. Dispositivo AD9834 - Canale B
    5. D/A per il controllo della tensione di polarizzazione - Canale A
    6. D/A per il controllo della tensione di polarizzazione - Canale B
    7. Potenziometro digitale per le impostazioni di luminosità/contrasto LCD
  • Supporto LCD - Poiché l'LCD è un display generico da 20 x 4 caratteri, utilizziamo un'interfaccia a 4 bit (linee D7: D4), pin di controllo (linee RS, E) e controllo della luminosità/contrasto (linee V0 e anodo)
  • Supporto LED RGB - Questo modulo è opzionale, ma è presente un connettore LED RGB a catodo comune con resistori appropriati, collegato all'MCU.
  • Power Control - MCU esegue il monitoraggio del sistema di alimentazione in modalità in tempo reale e gestisce tutti gli eventi di alimentazione necessari:

    1. VBAT_ADC - Monitoraggio della tensione della batteria e determinazione del suo stato (canale ADC0)
    2. PWR_IND - Indicazione connessione alimentazione esterna (Canale ADC1)
    3. PS_HOLD - Linea di abilitazione alimentazione primaria per tutti i sistemi definiti. Quando viene abbassato dall'MCU, il dispositivo è spento
    4. Terminale di interruzione dell'interruttore intelligente - Monitoraggio dello stato del pulsante
  • Gestione della rete WiFi - ESP32: MCU comunica con ESP32 tramite l'interfaccia UART. Poiché 8MHz ci consente di implementare una velocità di trasmissione di 115200 con un errore relativamente piccolo, possiamo utilizzare ESP32 nel circuito senza predefinizioni di modifiche alla velocità di trasmissione.

Programmatore ISP AVR

Il nostro MCU è programmato tramite SPI con la linea di ripristino (/RST) che deve essere tirata in ALTO per un corretto funzionamento (in caso contrario, l'MCU si ritroverà in uno stato di ripristino per sempre).

Per consentire la programmazione e la ricarica del dispositivo tramite USB, ho collegato il programmatore AVR ISP (prodotto di piccole dimensioni, acquistato da eBay). Per mantenere il supporto USB completo del dispositivo, è necessario collegare i terminali USB di tipo A (D+, D-, VBUS e GND) con il dispositivo AVR ISP.

Circuito di generazione della forma d'onda

Il cuore del dispositivo sono questi circuiti. AD9834 è un dispositivo DDS a bassa potenza che ci fornisce tutte le forme d'onda che vorremmo recuperare dal sistema. I circuiti contengono due circuiti integrati AD9834 indipendenti con oscillatori esterni separati da 50 MHz (come si può vedere negli schemi). Il motivo per l'oscillatore separato è una considerazione sulla riduzione del rumore dei circuiti digitali, quindi la decisione è stata quella di gestire linee corrette da 50 MHz con oscillatori posizionati adiacenti a AD9834.

Ora diamo un'occhiata a un po' di matematica:

Poiché il dispositivo DDS opera sulla tecnologia Phase Wheel con il valore di uscita contenuto in un registro a 28 bit, possiamo descrivere matematicamente la generazione della forma d'onda:

dP(fase) = dt; ω = P' = 2πf; f(AD9834) = ΔP * f(clk) / 2^28; P ∈ [0: 2^28 - 1]

E secondo la scheda tecnica AD9834, tenendo conto della frequenza massima, è possibile ottenere la risoluzione della frequenza di uscita:

Δf = k * f(oscillatore) / f(massimo) = 0,28 * 50M / 28M = 0,187[Hz]

I CI AD9834 forniscono un'uscita di corrente analogica per onda triangolare/sinusoidale (terminale IOUT) e un'uscita digitale per onda quadra (terminale SIGN_OUT). L'utilizzo del bit di segno è un po' complicato ma siamo in grado di gestirlo - Ogni volta che DDS supera la soglia del valore di confronto, SIGN_OUT si comporta di conseguenza. Un resistore da 200 Ohm è collegato all'uscita di ciascun canale, quindi la tensione di uscita avrebbe valori significativi:

I(singolo canale) = V(uscita) / R(selezione tensione); V(uscita) = R(VS)*I(SS) = 200I(SS) [A]

Circuiti di controllo dell'ampiezza (D/A)

Secondo la scheda tecnica di AD9834, la sua ampiezza può essere regolata fornendo corrente al sistema di fondo scala DDS, quindi con l'aiuto del doppio IC D/A, possiamo controllare l'ampiezza del segnale di uscita regolando quella corrente. Ancora una volta, un po' di matematica:

I(fondo scala) = 18 * (V_REF - V_DAC) / R_SET [A]

Secondo gli schemi e mettendo alcuni numeri all'equazione:

I(fondo scala) = 3,86 - 1,17 * V_DAC [A]

Il modulo D/A utilizzato nella progettazione è MCP4922 a 12 bit, quando la corrente è nell'intervallo [0mA: 3,86mA] e la funzione di ampiezza lineare è:

V(selezione ampiezza) = 1 - [V(D/A) / (2^12 - 1)]

Circuito multiplexing della forma d'onda

Le uscite di generazione dell'onda quadra e dell'onda sinusoidale/triangolo sono separate in AD9834, quindi dobbiamo utilizzare un circuito multiplexing ad alta velocità per entrambe le uscite per consentire il recupero di tutte le forme d'onda desiderate da un singolo canale separato. Il circuito integrato multiplexer è uno switch analogico ADG836L con una resistenza di attivazione molto bassa (~0,5 Ohm).

La tabella di selezione che MCU sta utilizzando per le uscite così com'è:

Selezione modalità [D2:D1] | Canale di uscita A | Canale di uscita B

00 | Seno/Triangolo | Seno/Triangolo 01 | Seno/Triangolo | Quadrato 10 | quadrato | Seno/Triangolo 11 | quadrato | Quadrato

Circuiti di controllo della tensione di polarizzazione (D/A)

Una delle caratteristiche principali del generatore di forme d'onda è il controllo del suo valore DC. In questo progetto viene eseguita impostando la tensione D/A desiderata per ciascun canale e queste tensioni di polarizzazione vengono sommate con le uscite multiplex di cui abbiamo discusso un po' prima.

La tensione recuperata da D/A si trova nell'intervallo [0V: +3,3V], quindi c'è un circuito basato su amplificatore operazionale che mappa l'intervallo D/A su [-3,3V: +3,3V], consentendo al dispositivo di fornire una gamma completa della componente CC desiderata. Salteremo la noiosa matematica analitica e ci concentreremo solo sui risultati finali:

V_OUT(canale B) = V_BIAS_B(+) - V_BIAS_B(-); V_OUT(canale A) = V_BIAS_A(+) - V_BIAS_A(-)

Ora, l'intervallo del componente CC situato nell'intervallo [-3,3 V: + 3,3 V].

Circuiti sommatori - Componenti CC e uscite forma d'onda

A questo punto abbiamo tutto ciò di cui abbiamo bisogno per la corretta uscita del dispositivo: Bias Voltage (componente DC) nell'intera gamma di tensione e uscite AD9834 multiplexate. Faremo in modo che ciò accada utilizzando l'amplificatore sommatore - configurazione op-amp

Saltiamo ancora una volta la matematica (abbiamo già trattato molto dell'approccio matematico) e annotiamo il risultato finale dell'uscita dell'amplificatore sommatore:

V(uscita dispositivo) = V(polarizzazione positiva) - V(polarizzazione negativa) - V(uscita multiplex) [V]

Quindi:

V_OUT = ΔV_BIAS - V_AD9834 [V]

I connettori di uscita di tipo BNC sono collegati con resistori di selezione (R54, R55; R56, R57). La ragione di ciò è che nel caso in cui il design possa essere disfunzionale, possiamo ancora selezionare se desideriamo utilizzare l'amplificatore sommatore.

Nota importante: le reti di resistori degli amplificatori sommatori finali possono essere regolate da un progettista, al fine di modificare l'ampiezza massima che può essere recuperata dal dispositivo. Nel mio caso, tutti gli amplificatori condividono lo stesso guadagno = 1, quindi l'ampiezza massima del buffer è 0,7 Vpp per l'onda triangolare/sinusoidale e 3,3 Vpp per l'onda quadra. L'approccio matematico specifico può essere trovato tra le immagini allegate del passaggio.

ESP32 come modulo esterno

MCU comunica con ESP32 tramite interfaccia UART. Dato che volevo il mio PCB per ESP32, sono disponibili 4 terminali da collegare: VCC, RX, TX, GND. J7 è un connettore di interfaccia tra PCB e ESP32 verrà allocato come modulo esterno all'interno del dispositivo.

Interfaccia utente - LCD e altoparlante

L'LCD utilizzato è un display generico da 20 x 4 caratteri con un'interfaccia a 4 bit, come si può vedere dal design c'è un potenziometro digitale SPI collegato ai terminali LCD "A" e "V0" - il suo scopo è regolare luminosità e contrasto del modulo LCD a livello di programmazione.

L'altoparlante fornisce l'uscita audio per l'utente mediante la semplice generazione di onde quadre dall'MCU. Il BJT T1 controlla la corrente attraverso l'altoparlante che può essere solo in due stati - ON / OFF.

Passaggio 5: progettazione hardware - Modulo ESP32

Progettazione hardware - Modulo ESP32
Progettazione hardware - Modulo ESP32

ESP32 viene utilizzato come modulo esterno per il PCB principale. La comunicazione del dispositivo si basa sui comandi AT, disponibili sul firmware di un dispositivo generico.

Non c'è molto da espandere su questo design, ma ci sono alcune note per il design:

  • Per la gestione dei guasti dell'utilizzo del modulo UART appropriato di ESP32, ho collegato tre resistori di selezione per entrambe le linee TX e RX. (0 Ohm per ciascuno). Per la configurazione standard, il modulo UART2 viene utilizzato per i comandi AT (R4, R7 devono essere saldati)
  • Il dispositivo ha un'uscita a 4 linee: VCC, GND, TX, RX.
  • I pin IO0 e EN valutano il funzionamento del dispositivo e dovrebbero essere progettati come previsto negli schemi

Tutte le caratteristiche del PCB tratteremo nel passaggio successivo.

Passaggio 6: layout PCB

Layout PCB
Layout PCB
Layout PCB
Layout PCB
Layout PCB
Layout PCB

Gli obiettivi della progettazione di un PCB

  1. Crea un sistema embedded per tutti i circuiti integrati sulla stessa scheda
  2. Migliora le prestazioni del dispositivo progettando un singolo PCB principale
  3. Riduzione dei costi: se desideri controllare i prezzi, i design a basso costo sono DAVVERO a basso costo
  4. Riduci al minimo le dimensioni della scheda elettronica
  5. Facile da risolvere - Possiamo utilizzare TP (punti di prova) per ogni possibile linea malfunzionante.

Parametri tecnici

Entrambi i PCB: la scheda principale e ESP32 condividono le stesse caratteristiche per il processo di produzione: a basso costo e utilizzabili per i nostri scopi. Vediamoli:

A - Scheda principale

  • Dimensioni: 10 cm x 5,8 cm
  • Numero di strati: 2
  • Spessore PCB: 1,6 mm
  • Spazio/larghezza minima traccia: 6/6mil
  • Diametro minimo del foro passante: 0,3 mm
  • Distanza minima dal rame al bordo del PCB: 20mil
  • Finitura superficiale: HASL (tipo economico color argento piuttosto bello)

B - Scheda principale

  • Dimensioni: 3 cm x 4 cm
  • Numero di strati: 2
  • Spessore PCB: 1,6 mm
  • Spazio/larghezza minima traccia: 6/6mil
  • Diametro minimo del foro passante: 0,3 mm
  • Distanza minima dal rame al bordo del PCB: 20mil
  • Finitura superficiale: HASL

Passaggio 7: custodia 3D

Custodia 3D
Custodia 3D

Non l'ho progettato da solo, perché all'epoca stavo convincendo questo dispositivo a funzionare, quindi non ero a conoscenza di tutte le basi della stampa 3D. Quindi ho utilizzato un progetto SCAD di Thingiverse e ho collegato diverse aperture ai confini, in base alle specifiche del mio dispositivo.

  1. Dispositivo di stampa: Creality Ender-3
  2. Tipo di letto: vetro, spessore 5 mm
  3. Diametro del filamento: 1,75 mm
  4. Tipo di filamento: PLA+
  5. Diametro ugello: 0,4 mm
  6. Velocità iniziale: 20 mm/sec
  7. Velocità media: 65 mm/sec
  8. Supporto: N/A
  9. Riempimento: 25%
  10. Temperatura:

    • Letto: 60(oC)
    • Ugello: 215(oC)
  11. Colore del filamento: nero
  12. Numero totale di aperture: 5
  13. Numero di pannelli della custodia: 4

    • TOP Shell
    • Guscio inferiore
    • Pannello frontale
    • Pannello posteriore

Passaggio 8: implementazione del software - MCU

Implementazione software - MCU
Implementazione software - MCU
Implementazione software - MCU
Implementazione software - MCU
Implementazione software - MCU
Implementazione software - MCU

Collegamento GitHub ad Android e codice Atmega32

Algoritmo software

Tutte le operazioni che vengono eseguite dall'MCU, sono descritte nei diagrammi di flusso allegati. In aggiunta a ciò, c'è un codice allegato per il progetto. Copriamo le specifiche del software:

Accendere

In questa fase, MCU esegue tutte le sequenze di inizializzazione insieme alla determinazione del tipo di comunicazione memorizzata con il dispositivo Android: Comunicazione di rete WiFi o WLAN diretta - questi dati sono memorizzati in EEPROM. L'utente può ridefinire il tipo di accoppiamento del dispositivo Android in questa fase.

Accoppiamento diretto del dispositivo Android

Questo tipo di abbinamento si basa sulla creazione della rete WiFi da parte del dispositivo FuncGen. Creerà AP (Access Point) e un server TCP su un IP del dispositivo locale con un SSID specifico (nome della rete WiFi) e un numero di porta specifico. Il dispositivo dovrebbe mantenere lo stato - aperto per le connessioni.

Quando il dispositivo Android è connesso a FuncGen, l'MCU entra in modalità ATTIVA e risponde in base alle istruzioni dell'utente dal dispositivo Android.

Associazione WLAN

Per comunicare su una rete WiFi locale, l'MCU dovrebbe fornire i comandi per ESP32 per creare AP, comunicare con il dispositivo Android e scambiare i dati di rete cruciali:

  • Il dispositivo Android riceve da FuncGen il suo indirizzo MAC, lo memorizza in memoria.
  • Il dispositivo FuncGen riceve i parametri WLAN selezionati dal dispositivo Android: SSID, tipo di sicurezza e Password e li memorizza in EEPROM.

Quando i dispositivi sono effettivamente connessi alla stessa WLAN, il dispositivo Android cercherà FuncGen eseguendo la scansione di tutti gli indirizzi MAC dei dispositivi connessi alla WLAN. Quando il dispositivo Android determina la corrispondenza MAC, tenta di comunicare.

Connessione e gestione dello stato - MCU

Quando i dispositivi comunicano tra loro, il protocollo (vedere il passaggio pre-finale) rimane lo stesso e il diagramma di flusso è lo stesso.

Monitoraggio dello stato del dispositivo

L'interruzione a tempo fornisce all'MCU i dettagli necessari per la gestione dello stato. Ad ogni ciclo di interruzione del timer, viene aggiornato il seguente elenco di parametri:

  • Alimentazione esterna - On/Off
  • Stato di tensione della batteria
  • Aggiornamento dell'interfaccia utente per ogni personalizzazione
  • Pulsante: premuto/non premuto

Passaggio 9: implementazione del software - App Android

Implementazione software - App Android
Implementazione software - App Android
Implementazione software - App Android
Implementazione software - App Android
Implementazione software - App Android
Implementazione software - App Android
Implementazione software - App Android
Implementazione software - App Android

L'app per Android è scritta in stile Java-Android. Cercherò di spiegarlo allo stesso modo dei passaggi precedenti, dividendo l'algoritmo in blocchi di codice separati.

Sequenza di accensione

Prima sequenza del dispositivo. Qui viene presentato il logo dell'app insieme all'abilitazione dei moduli GPS e WiFi del dispositivo Android (non preoccuparti, il GPS è necessario solo per la scansione delle reti WiFi appropriate).

Menu principale

Dopo l'avvio dell'app, sullo schermo appariranno quattro pulsanti. Azione dei pulsanti:

  1. CONNESSIONE DIRETTA: Inizializzazione della connessione all'AP di FuncGen tramite l'SSID di IOT_FUNCGEN. Se la connessione ha esito positivo, il dispositivo entra in modalità UI principale.
  2. CONNESSIONE WIFI: Il dispositivo verifica se sono presenti parametri di dati memorizzati in memoria: wifi.txt, mac.txt. Se non sono presenti dati memorizzati, il dispositivo rifiuterà la richiesta dell'utente e fornirà un messaggio pop-up che informa che è necessario eseguire prima l'associazione WLAN.
  3. PAIRING: Comunicare con FuncGen allo stesso modo della CONNESSIONE DIRETTA, ma invece dello scambio di messaggi continuo, c'è un singolo handshake. Il dispositivo Android verifica se è già connesso alla rete WiFi e richiede all'utente di inserire la password. Se la riconnessione ha esito positivo, il dispositivo Android memorizza SSID e passkey nel file wifi.txt. Dopo aver comunicato con successo con FuncGen, memorizza l'indirizzo MAC ricevuto nel file mac.txt.
  4. Esci: detto abbastanza:)

Gestore di scansione WiFi

Volevo che l'applicazione fosse completamente operativa e senza modifiche fuori dall'app. Quindi, ho progettato WiFi Scanner, che esegue tutte le operazioni necessarie per connettersi alla rete WiFi con una passkey e SSID noti.

Trasmissione dati e comunicazione TCP

Questo è il blocco di codice principale nell'app. Per tutte le unità dell'interfaccia utente è presente un messaggio definito in un formato specifico (fase pre-finale), che obbliga FuncGen a fornire l'output desiderato per i canali. Esistono tre tipi di campi dell'interfaccia utente in attività:

  1. Seek Bars: qui definiamo l'intervallo reale dei parametri di output di FuncGen

    1. Ampiezza
    2. Compensazione CC
    3. Luminosità LCD
    4. Contrasto LCD
  2. Modifica del testo: per mantenere i valori interi ben definiti e precisi, l'immissione della frequenza avviene tramite caselle di testo solo numeriche
  3. Pulsanti: Selezione dei parametri dalle liste disponibili:

    1. Tipo di forma d'onda
      1. seno
      2. Triangolo
      3. DC
      4. Quadrato
      5. SPENTO
    2. Ottenere informazioni

      1. Stato della batteria (percentuale)
      2. Stato CA (alimentatore esterno)
    3. Opzione di avvio (per MCU FuncGen)

      1. Impostazione di fabbrica
      2. Ricomincia
      3. Spegnimento
      4. Diretto - Riavvia con la modalità di associazione diretta
      5. WLAN - Riavvia con la modalità di associazione WLAN
    4. Esci al menu principale: ho detto abbastanza:)

Passaggio 10: test

Consigliato: