Fab-O-Matic : schema elettrico

Continuiamo la serie di articoli didattici rivolti ai makers che vogliono realizzare un progetto embedded analizzando la progettazione dello schema elettrico di Fab-O-Matic.

Puoi consultare le istruzioni per l’uso di Fab-O-Matic qua.


Introduzione

Questo è un articolo un po’ più difficile degli altri, perché quando si usano componenti singoli al posto di moduli integrati, occorre studiare i datasheets e fare qualche calcolo in più. Imparare a fare queste operazioni però ti rende libero di progettare esattamente il circuito che vuoi tu, senza dipendere dei moduli disponibili in commercio.

Questa scelta può essere importante se vuoi ridurre i costi al massimo o se fai applicazioni molto innovative come i wearables, dove la compattezza del circuito è importante.

Usare il CAD

In questo articolo useremo la revisione Hardware 1.2 di Fab-O-Matic come riferimento della discussione. Per aprire il schema elettrico di Fab-O-Matic, è possibile usare sia la versione ONLINE di EasyEDA a questo indirizzo o installare un software dedicato come KiCAD e scaricare i file di progetto da Github.

Per illustrare il funzionamento elettrico di Fab-O-Matic, useremo lo schema generale e esamineremo i i vari blocchi presenti. La suddivisione a blocchi è un modo di progettare un circuito come i Lego.

Mappa dello schema elettrico


1) Il modulo microcontrollore ESP32-S3-WROOM-N4

Senza dubbio è il cuore di tutto il progetto: il microcontrollore condiziona molte scelte successive. Per usare un modulo compatto e non una development board, è molto utile scaricare la documentazione di riferimento del microcontrollore e consultare i tipici forniti dal produttore, inoltre puoi cercare online schemi elettrici di development boards e ispirarsi da questi per progettare la propria board.

Nella nostra applicazione Fab-O-Matic, usiamo un modulo ESP32-S3-WROOM-N4 con antenna WiFi integrata. Sarebbe possibile ordinare il solo chip, ma dovremmo allora progettare l’antenna e il suo circuito risonante, le connessioni Flash-MPU… e questo ci è sembrato un lavoro eccessivo per questa applicazione. Invece, comprando il forma di modulo garantisce anche la conformità in materie di emissioni radio dell’antenna WiFi.

A cosa devi stare attento per un progetto ESP32 con un modulo ?

  • PCB e antenna WiFi : il manuale di riferimento richiede di evitare zone di rame sotto l’antenna, che potrebbero influenzare la frequenza risonante e la diffusione del segnale WiFi dall’antenna. Per questo motivo abbiamo previsto un cut-out del PCB che evita di disturbare le emissioni e mantenere l’omnidirezionalità dell’antenna.
  • Condensatori di disaccopiamento : l’ESP32 e la sua radio WiFi hanno un consumo di picco di 500 mA. Per evitare cadute di tensioni che potrebbero mandarlo sotto la tensione minima (condizione di brown-out del microprocessore), è necessario aggiungere, vicini ai pin di alimentazione, alcuni condensatori che hanno la funzione di immagazzinare l’energia per rispondere ai picchi di domanda.
  • Gestione del RESET: al momento dell’accensione, i vari componenti chiedono molta corrente e la tensione 3V3 potrebbe non essere stabile. Inoltre, il modulo richiede un tempo di inizializzazione ed è necessario “ritardare” il pin ENABLE del processore con un circuito dedicato.
  • Programmazione iniziale del ESP32 : quando ricevi un modulo ESP32, contiene solo in ROM un bootloader ed è possibile programmarlo via USB o JTAG. In questo progetto abbiamo scelto di usare una porta USB per la programmazione iniziale.

2) Porta USB

Una porta USB è molto comoda per testare, alimentare e programmare il microprocessore. Ma sapevi che lo espone a tensioni potenzialmente elevate ? Quando prendi in mano l’estremità di un cavo USB collegato al microprocessore, potrestri mandargli una scarica elettrostatica di centinaia di Volts e questo può danneggiare il microprocessore.

La soluzione scelta è di usare componenti di protezione come USBLC6-2SC6 datasheet (costo inferiore a 20 centesimi su AliExpress). Questo piccolo oggetto protegge di scariche elettrostatiche fino a 30kV. Al suo interno, contiene diodi veloci che cortocircuitano l’impulso prima che raggiunga i pin del microprocessore.

Dalla versione 1.0 in poi, Fab-O-Matic usa una moderna porta USB-C femmina (componente U262-161N-4BVC11), perché l’USB-C è diventato lo standard di connettività europeo per molte classi di dispositivi nel 2024. Questi connettori hanno molti pins spaziati a 0.5mm e sono delicati da saldare a mano : se devi fare l’assembly a mano, risultava invece molto più semplice usare il classico connettore USB-B dell’Arduino.

Come usare USB-C ?

Per ottenere dal dispositivo connesso 5V, è sufficiente mettere due resistenze di 5.1kohms a terra dai pin CC1/CC2.

Dato che il connettore è reversibile, ogni segnale è collegato a due pin simmetrici (come ad esempio DP1 e DP2->DP).

Integrità del segnale USB

Per trasmettere segnali veloci e proteggerli dal rumore, l’USB usa una coppia differenziale di segnali. E’ buona prassi evitare piste di lunghezze diverse (anche se non è strettamente necessario per le velocità dell’USB 2.0). Il motivo fisico è che il segnale si propaga a velocità finita e dunque le differenze di lunghezza creano un ritardo temporale fra i due segnali della coppia differenziale: questo piccolo ritardo, ad alta velocità, potrebbe inficiare sul corretto funzionamento.

Esempio: le piste blu e verdi del PCB devono avere la stessa lunghezza (all’incirca) ed essere mantenute vicine per ridurre la sensibilità ai disturbi.

Tutti i software di progettazione PCB consentono il disegno simultaneo delle due piste differenziali e il controllo della lunghezza.

Nello schema di Fab-O-Matic, sono anche presenti resistenze di terminazione (22 ohms) e condensatori di 22 pF su ognuna delle linee. Funziona, ma sono in realtà eliminabili : l’ESP32S3 non li richiede nello suo schema di riferimento ; alcuni processori invece lo consigliano.


3) Relay di comando macchina

Per comandare il carico della macchina utensile, serve una soluzione robusta, sicura elettricamente e flessibile. Un relay elettromeccanico è una soluzione economica. Richiedono però qualche accorgimento di progettazione.

A cosa devi stare attento per usare un relay nel tuo progetto ESP32?

  • Scegliere un relay con una capacità di interruzione della corrente, maggiore del tuo carico. Ad esempio, la nostra ENDER3 ha un massimo potenza di 350 W a 24Vdc e ciò corrisponde ad una corrente di picco di 14,6 A. Il relay scelto ha un massimo di 15A, possiamo dunque usarlo.
  • Prevedere un diodo di protezione (flyback diode) attorno alla bobina del relay. Le bobine possono generare tensioni indotte di centinaia di volt che i semiconduttori di comando non reggeranno. Un’ottima spiegazione del fenomeno è consultabile qua.
  • Controllare la tensione di comando richiesta dal relay. Esistono modelli di relay commandabili con tensioni da 3V fino a 48V. Con una board Arduino classica, puoi usare una bobina a 5V per limitare la corrente, ma, nel caso del microprocessore ESP32, l’uscita del processore è limitata a 3V3.
  • Controllare la corrente richiesta dal relay. La bobina interna di un relay necessita una corrente abbastanza alta (150 mA). Un pin GPIO dell’ESP32, invece, può fornire fino a 40 mA massimo.

Come leggere il datasheet?

Come individuare la capacità di interruzione di corrente massima ?

Può capitare di trovare solo il datasheet in cinese! In questo caso, puoi usare i markings ufficiali per capire che il nostro relay accetterà fino a 15A sul contatto NO (Normalmente Aperto).

Come reperire la corrente nominale della bobina di controllo?

Indicazione della corrente nominale della bobina (“coil“) per il relay SRD-03VDC-SL-C

Si può anche calcolare con la legge di Ohm come Nominal Voltage / Coil Resistance.

Come fornire 150mA al relay con un GPIO limitato a 40mA?

Nella revisione hardware 0.2, non avevamo considerato la corrente necessaria al comando della bobina, e pertanto il relay non veniva comandato correttamente. Per ovviare al problema abbiamo aggiunto un componente in grado di amplificare la corrente : un transistor.

Sullo schema sotto, il transistor è usato in saturazione, ovvero come un interruttore. Per funzionare in regime di saturazione (interruttore chiuso), il transistor PNP deve avere una tensione sulla Base inferiore di 0.6V alla tensione dell’Emettitore e ricevere una corrente “sufficiente” sulla base.

R1 è un pull-up resistor, che mantiene la base a 3V3 (interruttore aperto). Serve perché il pin CMD del ESP32 può essere floating durante la fase di avvio.

R3 serve a limitare la corrente di base del transistor, a circa 6mA.

D1 è il diodo di protezione descritto nel paragrafo sul relay. Un transistor è piuttosto fragile in caso di tensioni Vce elevate.

Analizziamo i due modi di funzionamento del transistor MMBT3906 :

  • Quando CMD è comandato a 0V (GPIO come current sink), la tensione di base scenderà sotto 0.6V della tensione sull’emittore e il transistor andrà in conduzione fra Emettitore e Collettore.

    A questo punto, la bobina del relay è alimentata con
    3.3V - Tensione di saturazione Vec (0.3V) = 3V

    3V è la tensione nominale della bobina.
    La tensione di saturazione Vce(sat) si può riperire nel datasheet.
  • Quando CMD è commando a 3V3 dal microprocessore, le tensioni sulla Base e l’Emettitore sono uguali e pertanto il transistor non conduce.

Per calcolare il valore di R3, ti invito ad incollare lo schema e chiedere a ChatGPT di calcolarlo.
Ho ottenuto il risultato di 560 ohms con valori di Icoil=150 mA e guadagno hFE(sat)=30.


4) RESET e pulsanti di comando

Il datasheet dell’ESP32S3 specifica che all’avvio, MCU_RESET deve stare ad livello inferiore VIL_nRST (25% di VCC= 0.82V ) per almeno 50 microsecondi. Per creare questo ritardo, si può usare un circuito Resistenza-Condensatore. Il modo più veloce per progettarlo correttamente è di guardare alcuni schemi di riferimento con ESP32S3 e poi di usare gli stessi valori di R e C.

Però vogliamo approfondire un po’ l’argomento, visto che questi circuiti RC si presentano molto spesso nei progetti elettronici.

Circuito RC formato da R2 e C1.

All’inizio, C1 non è carico ed è equivalente ad un filo: MCU_RESET=0V
Gradualmente la sua carica aumenta, fino ad essere equivalente ad un interruttore aperto: MCU_RESET è allora uguale a 3V3.

Si può calcolare più precisamente il tempo t che impegnerà la tensione ai capi del condensatore V(t) a raggiungere 0.82V con la formula V(t)=V(1-exp(-t/RC))

Basta allora chiedere a ChatGPT “Rivolvi in t l'espressione 3.3 * (1-exp(-t/RC)) >= 0.82 con R=10000 ohms e C=1 microfarad” e troviamo t=2.85 ms, che è ragionevolmente superiore al minimo richiesto di 50 microsecondi.

Per gli altri interruttori (BOOT, FACTORY_DEFAULTS) non è necessario aggiungere resistenze di pull-up o pull-down perché i GPIO dell’ESP32 possono essere configurati via software con questa funzionalità.


5) NeoPixel con ESP32

Il NeoPixel è un diodo RGB comandabile da un microprocessore con un unico pin di dati, e montabile in serie (fino a qualche centinaia di diodi). Fanno una luce molto forte e si trovano nelle strisce LED.
Guardando il datasheet di un simile componente, emerge però una difficoltà:

  • Deve essere alimentato con un minimo di 3.7V e un massimo di 5.3V. Lo dobbiamo dunque collegare alla nostra alimentazione 5V.
  • Il pin di comando dell’ESP32 collegato su DIN, sarà limitato a 3.3V, come tutti i pin dell’ESP32.
  • La differenza fra VDD e Din sarà dunque di 1.7V, ma molti NeoPixel richiedono che il livello alto del segnale su Din sia superiore al 70% della tensione VDD (3.5V) e che la differenza sia limitata a 1.2V.
  • La soluzione nel nostro circuito è stata di aggiungere un diodo orientato nel verso di conduzione, così da generare una caduta di tensione 0.6V e alimentare il NeoPixel con 5.0-0.6=4.4V
  • Con questi parametri, la differenza di tensione è limitata a 1.1V e il livello alto a 3.3V rappresenta il 75% di VDD.

Diodo 1N4007 (C64898)

NEO è collegato direttamente ad un GPIO pin dell’ESP32.

Se compri per risparmiare componenti elettronici su AliExpress, potresti non avere un datasheet con i limiti precisi su Din, VDD e, per questo motivo, è importante fare un design conservativo tenendo conto dei vincoli di sopra.


6) Il convertitore LDO 3V3

Per poter alimentare il microprocessore a 3V3 partendo dal 5V dell’USB, è necessario aggiungere al circuito un regolatore di tensione.
Questo regolatore “LDO” si comporta come una resistenza variabile che aggiusta la propria resistenza in base alla corrente e la tensione in uscita desiderata. Questo implica che la differenza di tensione (5-3.3=1.7V) moltiplicata dalla corrente (Imax=500mA per ESP32) è dissipata sotto forma di calore (circa 0.85W). Per questo motivo i regolatori hanno dimensioni importanti rispetto ad altri componenti : la loro superficie di contatto con il PCB li aiuta a dissipare questo calore.

Sono componenti molto diffusi e economici, per progettare questa parte abbiamo scelto un componente ST LD1117 con tensione di uscita fissa a 3V3 e seguito il suo datasheet.


7) Il converter step-down a 5V

E’ utile poter alimentare Fab-O-Matic con delle tensioni maggiori di 5V presenti nelle macchine da interfacciare (24V per Ender o GP010). Ci serve dunque un blocco per convertire una tensione continua in tensione continua regolata a 5V.

Il primo ingenuo pensiero era stato di usare un regolatore a 5V… ma per i motivi spiegati nel paragrafo 6), dovrebbe dissipare una potenza molto importante (fino a 10W !). Un regolatore in queste condizioni diventa caldissimo, troppo per essere lasciato in una scatolina chiusa.

Esiste una soluzione molto più efficiente al problema, nota come step-down converter (o buck converter). Uno step-down converter preleva corrente con una frequenza variabile dalla fonte di alimentazione e usa un induttore per salvare l’energia prelevata. Un condensatore in uscita è usato per stabilizzare la tensione in uscita, e un punto di misura consente allo step-down converter di aggiustare la frequenza e durata degli impulsi di prelievo per raggiungere la tensione desiderata.

Al contrario del regolatore, questo circuito non deve dissipare l’energia in eccesso, perché preleva solo quanto basta per ottenere la tensione desiderata. E’ un dispositivo molto efficiente (>90%) che viene usato in quasi tutti i circuiti elettronici.

Per Fab-O-Matic, abbiamo usato un componente TP6841S6-A come illustrato sotto:

I valori di R11 e R9 determinano la tensione in uscita.

I valori degli altri componenti sono semplicemente presi dal datasheet Reference 2).


8) Bus di connessione per lettore RFID e display LCD 1602

Questa parte del circuito era stata ampiamente testata su breadboard e non presenta particolari difficoltà. La scelta dei componenti è stata dettata da quel che avevamo già disponibile in FabLab.

Se non hai datasheet o informazioni sui componenti che usi, è interessante notare la possibilità di aggiungere modelli 3D custom ai componenti di EasyEDA per generare così una rappresentazione realistica dei componenti e facilitare la progettazione della scatola.

I modelli 3D per i componenti LCD 1602 e RFID 522 (file STEP / OBJ) sono stati importati in EasyEDA scaricando i file da siti come GrabCAD.

Per maggiori informazioni sull’uso del display in comunicazione parallela con il framework Arduino segnaliamo questo articolo sur MakerGuides.


9) Morsetti di interfaccia macchina

L’ultima parte di questo articolo tratta le connessioni con le macchine con morsetti di interfaccia.

Elenco delle connessioni

  1. 1) Massa
  2. 2) Alimentazione esterna da 6 a 40V
  3. 3) Contatto normalmente aperto
  4. 4) Contatto comune del relay
  5. 5) Contatto normalmente chiuso
  6. 6) Punto di estensione GPIO
  7. 7) Alimentazione esterna 5V
  8. 8) Non connesso.

Il pin “EXT” è usabile come ingresso GPIO a 3V3 lasciando R16 saldato, o come ingresso a 5V rimuovendo R16 (R13 e R14-R15 formano un partitore resistivo per abbassare da 5V a 3V3 la tensione esterna).

Questa funzionalità potrebbe essere utile, in futuro, per acquisire un segnale di stato della macchina (ad es. : laser in funzione). “EXT” può essere anche usato come segnale in uscita direttamente dal GPIO dell’ESP32 (V=3V3, Imax=40mA).


Il problema che non ti aspetti

Dei vari problemi incontrati nella progettazione dei circuiti di Fab-O-Matic, uno è stato particolarmente sorprendente. Alcuni buzzer per Arduino hanno una corrente di picco elevata. Questo provocava un comportamento molto curioso : il beep del buzzer generava (“quasi” sempre) un reset del microprocessore, e dato che Fab-O-Matic beepa all’avvio, sembrava bloccato in un ciclo di reset. Non è stato semplice trovare il colpevole! La soluzione consiste nel usare buzzer attivi 3V con una corrente limitata.

Conclusione

Sei arrivato alla fine di questo lungo articolo ! Se hai capito questi concetti, sei ora in grado di creare le tue board personalizzate. Diversamente, vieni in FabLab e te lo spiegheremo meglio. Nel prossimo articolo, parleremo della sponsorship di progetto da parte di OpenHWLab, che ci ha consentito di fabbricare 10 boards con componenti assemblati in fabbrica, completando così la parte hardware di questa serie di articoli.

Utilizzando il sito, accetti l'utilizzo dei cookie da parte nostra. Per maggiori informazioni.

Questo sito utilizza i cookie per fornire la migliore esperienza di navigazione possibile. Continuando a utilizzare questo sito senza modificare le impostazioni dei cookie o clicchi su "Accetta" permetti al loro utilizzo. Privacy Policy di FABLAB BERGAMO

Chiudi