Indietro

Elettronica analogica nel browser — sette circuiti da eseguire e misurare

L'alimentatore da 5 V in Velxio — due generatori di segnale come trasformatore a presa centrale, due diodi 1N4007, un condensatore di livellamento e un regolatore 7805, con l'oscilloscopio che mostra l'ingresso AC a 12 V e la tensione raddrizzata

La maggior parte dei tutorial su Arduino salta direttamente al codice. Ma i componenti attorno al microcontrollore sono analogici — la resistenza che tiene in vita un LED, il partitore che trasforma un sensore in una tensione, il transistor che commuta un motore, il regolatore che produce 5 V da un alimentatore da parete. Quando uno di questi è sbagliato, nessuna quantità di codice lo aggiusta.

Velxio simula anche quella metà. Esegue ngspice, il simulatore di circuiti SPICE open source, compilato in WebAssembly, così resistenze, condensatori, diodi, transistor, amplificatori operazionali e regolatori si comportano come le loro controparti reali nel tuo browser. Puoi misurarli con un voltmetro, un amperometro e un oscilloscopio, e cambiare qualsiasi valore mentre il circuito è in funzione.

Questo articolo attraversa sette progetti. I primi cinque non hanno alcun microcontrollore, solo componenti. Gli ultimi due mescolano circuiti analogici con un Arduino e un ESP32. Ogni progetto è nella galleria di esempi, e ogni numero qui sotto è stato letto dal simulatore e verificato con la formula che lo spiega.

Prima di iniziare — i tre strumenti

Una cosa da sapere — per i circuiti con sorgenti AC, Velxio risolve una breve finestra temporale dal momento in cui l’alimentazione si accende (pochi cicli del segnale) e mostra la traccia dell’oscilloscopio di quella finestra. Ripete la risoluzione mentre cambi le cose, così l’immagine resta aggiornata, ma non è una registrazione continua.

1. Un LED e una resistenza — la legge di Ohm

Una batteria da 9 V, un amperometro che legge 15,18 mA, una resistenza da 470 ohm con un voltmetro ai suoi capi che legge 7,136 V, e un LED rosso acceso

Il primo circuito che ogni principiante costruisce, e quello più spesso costruito male — un LED collegato direttamente a una batteria si brucia, perché nulla limita la sua corrente. La resistenza in serie fa quel lavoro.

Gli strumenti raccontano tutta la storia:

Questa è la formula per scegliere la resistenza — R = (Vsupply − VLED) / I. Per 15 mA da una batteria da 9 V — (9 − 1,8) / 0,015 = 480 Ω, quindi 470 Ω è il valore standard più vicino.

Provalo — fai clic destro sulla resistenza e cambiala a 1 kΩ. La corrente scende a 7,2 mA e il LED si affievolisce, mentre la sua tensione si muove appena (1,81 V). Un LED mantiene la sua tensione quasi costante e lascia che sia la resistenza a impostare la corrente.

Apri il circuito del LED e della legge di Ohm in Velxio

2. Un alimentatore da 5 V — raddrizzatore, condensatore e regolatore

Il classico alimentatore lineare, quello dentro ogni vecchio alimentatore da parete, in quattro stadi:

  1. Trasformatore. Trasforma l’AC di rete in una tensione AC più bassa e sicura. Qui è un secondario a presa centrale 12-0-12 V, disegnato come due generatori di segnale in controfase (12 V di picco ciascuno, 50 Hz).
  2. Raddrizzatore. Due diodi 1N4007, uno per ciascuna metà del secondario. Ognuno conduce sul proprio semiciclo, così l’uscita riceve un impulso positivo ogni 10 ms — raddrizzamento a onda intera.
  3. Condensatore di livellamento. Il condensatore da 220 µF si carica a ogni picco e alimenta il carico nel frattempo. La tensione che mantiene non è piatta — cala tra un picco e l’altro. Quel calo è il ripple.
  4. Regolatore. Il 7805 prende quella tensione oscillante e mantiene la sua uscita esattamente a 5 V, purché il suo ingresso resti almeno circa 2 V sopra l’uscita.

L’immagine dell’oscilloscopio all’inizio di questo articolo mostra i 12 V AC dal trasformatore e la tensione raddrizzata ai capi del condensatore. Il condensatore oscilla tra 10,1 V e 11,8 V, circa 1,7 V di ripple con un carico di 50 mA, e il voltmetro sull’uscita legge un 5,000 V stabile.

La stima rapida per il ripple è ΔV ≈ I / (2·f·C) — 0,05 A / (2 × 50 Hz × 220 µF) = 2,3 V. Quella formula presume che il condensatore alimenti il carico per l’intero semiciclo; in realtà i diodi lo ricaricano un po’ prima, quindi i 1,7 V misurati sono più bassi.

Provalo — fai clic destro sul condensatore e cambialo a 47 µF. Il ripple cresce a 6 V, le valli scendono a 5,9 V, sotto ciò di cui ha bisogno il 7805, e la sua uscita cala a 3,9 V a ogni ciclo. Ecco perché gli alimentatori usano condensatori grandi.

Apri l’alimentatore da 5 V in Velxio

3. Una luce notturna con un LDR e due transistor

Luce notturna al buio — il modulo sensore di luce, i transistor Q1 e Q2 e un LED giallo acceso

Una luce notturna automatica, senza microcontrollore e senza codice. Una fotoresistenza (LDR) misura la luce, e due transistor accendono il LED quando fa buio.

Il modulo sensore di luce è un partitore di tensione — l’LDR sopra e una resistenza da 10 kΩ sotto. Alla luce del giorno la resistenza dell’LDR è bassa e l’uscita del modulo (AO) è alta; al buio sale a centinaia di kΩ e AO scende verso 0 V.

Perché due transistor? Perché uno solo farebbe l’opposto — accendere il LED quando è chiaro. Il primo stadio inverte il segnale.

Nella simulazione, a 20 lux (una stanza in penombra) AO si attesta a 0,50 V, Q1 è spento e il LED assorbe 13 mA. A 30 lux AO è 0,67 V, Q1 si accende e il LED si spegne. Fai clic destro sul sensore di luce e cambia Illumination (lux) attraverso quell’intervallo per commutarlo:

Lo stesso circuito alla luce del giorno — il LED giallo è spento

Apri la luce notturna in Velxio

4. Un amplificatore a transistor — lo stadio a emettitore comune

Amplificatore a emettitore comune con l'oscilloscopio — il segnale di base (verde) è piccolo, il segnale di collettore (rosso) è più grande e capovolto

Ecco come un piccolo segnale diventa grande — l’amplificatore a emettitore comune, il mattone di ogni amplificatore audio discreto. Una sinusoide da 1 kHz di 0,4 V picco-picco entra attraverso un condensatore di accoppiamento ed esce dal collettore circa quattro volte e mezzo più grande, e capovolta. (L’alimentazione da 9 V è il simbolo dell’alimentatore da banco in alto a sinistra; il generatore di segnale è sotto di esso.)

Due cose lo fanno funzionare.

Polarizzazione. Un transistor amplifica solo quando è parzialmente acceso. Il partitore da 47 kΩ / 10 kΩ porta la base a 1,54 V. L’emettitore si trova una caduta di diodo più in basso, 0,89 V, quindi 0,89 mA scorrono attraverso la resistenza di emettitore da 1 kΩ. La stessa corrente attraverso la resistenza di collettore da 4,7 kΩ provoca una caduta di 4,2 V, lasciando il collettore a 4,83 V, vicino al centro dell’alimentazione, con spazio per oscillare in entrambe le direzioni.

Guadagno. Una variazione alla base appare quasi invariata all’emettitore, quindi cambia la corrente di ΔV / Re. Quella variazione di corrente scorre attraverso Rc e sposta il collettore di ΔV × Rc / Re, nella direzione opposta. Quindi il guadagno è −Rc/Re = −4,7. Il simulatore misura 4,54 — il transistor aggiunge una piccola resistenza interna di emettitore di circa 26 mV / Ie ≈ 29 Ω, e 4700 / 1029 = 4,57.

Sullo schermo, la base (verde) si muove di 0,4 V attorno a 1,5 V e il collettore (rosso) si muove di 1,8 V attorno a 4,8 V, con i suoi picchi dove la base ha le sue valli.

Provalo: fai clic destro sul generatore di segnale e aumenta la sua ampiezza a 1 V. Il collettore dovrebbe oscillare di 9 V, più di quanto l’alimentazione consenta, quindi la parte superiore dell’onda si appiattisce contro i 9 V e quella inferiore contro la saturazione — clipping, il suono di un amplificatore sovraccarico.

Apri l’amplificatore a emettitore comune in Velxio

5. Un termostato con comparatore a amplificatore operazionale

Termostato sopra il suo set point — l'uscita dell'LM358 è alta e il LED rosso, che rappresenta una ventola, è acceso

Un termostato che accende una ventola quando fa caldo, usando un solo amplificatore operazionale LM358 e nessun codice.

Il sensore. La resistenza del termistore NTC diminuisce man mano che si scalda (10 kΩ a 25 °C, circa 7,4 kΩ a 32 °C). Il modulo lo mette sotto una resistenza fissa da 10 kΩ, quindi la sua uscita diminuisce con la temperatura — 2,50 V a 25 °C, 2,12 V a 32 °C.

Il set point. Il potenziometro è un secondo partitore. Il suo cursore si trova a 2,336 V, la tensione che il termistore fornisce a 28 °C. Il voltmetro lo mostra.

Il comparatore. Un amplificatore operazionale senza retroazione ha un guadagno così elevato che la sua uscita si porta a uno dei due rail a seconda di quale ingresso è più alto. Il set point va all’ingresso + e il termistore all’ingresso − — sotto i 28 °C la tensione del termistore è più alta e l’uscita è a 0 V; sopra i 28 °C è più bassa e l’uscita salta a circa 3,7 V, accendendo il LED. A 27 °C il LED è spento, a 29 °C è acceso.

Perché 3,7 V e non 5 V? L’LM358 non riesce a portare la sua uscita fino all’alimentazione positiva — si ferma circa 1,3 V prima. Il progetto 6 incontra lo stesso limite.

Un vero termostato aggiunge isteresi, così non si accende e spegne continuamente mentre la temperatura oscilla attorno alla soglia. Il progetto 7 lo fa nel codice.

Provalo: fai clic destro sul termistore e cambia la sua temperatura, oppure fai clic destro sul potenziometro e cambia la sua posizione (da 0 a 1023) per spostare il set point.

Apri il termostato con amplificatore operazionale in Velxio

6. Arduino — trasformare il PWM in una vera tensione analogica

Un Arduino Uno con il pin 9 che alimenta un filtro RC e un inseguitore di tensione LM358 che ritorna ad A0, e il monitor seriale che confronta le tensioni attese e misurate

Un Arduino Uno non ha un DAC — analogWrite() non emette una tensione, emette PWM, un’onda quadra a 490 Hz il cui duty cycle determina la media. Un LED o un motore non se ne preoccupano, ma molti circuiti necessitano di una tensione reale e stabile. Un filtro analogico ne crea una.

PWM 0    expected 0.00 V  measured 0.02 V
PWM 64   expected 1.25 V  measured 1.26 V
PWM 128  expected 2.51 V  measured 2.51 V
PWM 192  expected 3.76 V  measured 3.77 V
PWM 255  expected 5.00 V  measured 4.03 V

Fino a 192 il DAC è accurato entro 10 mV. A 255 si ferma a 4,03 V — il filtro raggiunge effettivamente 5 V, ma l’LM358, alimentato a 5 V, non riesce a portare la sua uscita così in alto. La soluzione è un amplificatore operazionale rail-to-rail come l’MCP6002, oppure usare solo l’intervallo che l’LM358 riesce a raggiungere.

Apri il DAC PWM con Arduino in Velxio

7. ESP32 — un termometro che accende una ventola

Un ESP32 che legge un termistore NTC su GPIO34 e accende una ventola (un LED verde) tramite un MOSFET 2N7000, con il monitor seriale che stampa 35.0 C fan ON

Di nuovo il termostato, questa volta con un microcontrollore che decide, così può fare cose che un comparatore non può — mostrare la temperatura in gradi e aggiungere isteresi.

Leggere la temperatura. L’uscita del modulo NTC va a GPIO34, un pin solo-ingresso sul primo ADC dell’ESP32. Lo sketch media 16 letture, calcola la resistenza del termistore dal partitore (R = 10 kΩ × V / (3,3 V − V)), e la converte in gradi con l’equazione Beta dal datasheet del termistore — 1/T = 1/T₀ + ln(R/R₀)/β, con R₀ = 10 kΩ a T₀ = 25 °C e β = 3950. Il monitor seriale stampa 25,0 °C quando il termistore è impostato a 25 °C, e 35,0 °C a 35 °C.

Commutare il carico. Un pin GPIO può fornire qualche milliampere, non le centinaia che serve una ventola. GPIO25 pilota invece il gate di un MOSFET 2N7000, attraverso una resistenza da 100 Ω, e il MOSFET collega la ventola (qui un LED verde) a massa. A 35 °C il drain si trova a 0,06 V — il MOSFET è completamente acceso.

Isteresi. La ventola si accende a 30 °C e si spegne solo sotto i 28 °C. Senza quel margine di 2 °C, una temperatura che oscilla attorno alla soglia accenderebbe e spegnerebbe la ventola ogni secondo.

Per una ventola reale, usa un MOSFET logic-level dimensionato per la corrente della ventola (il 2N7000 va bene solo per piccoli carichi) e un diodo attraverso la ventola per assorbire il picco di tensione del motore quando si spegne.

Apri il termometro e la ventola con ESP32 in Velxio

Cosa abbiamo corretto mentre li costruivamo

Scrivere questo articolo ha significato misurare ogni circuito, e le misurazioni hanno fatto emergere problemi nel simulatore, tutti corretti prima della pubblicazione:

Se costruisci un circuito analogico in Velxio e i numeri non corrispondono alla formula, faccelo sapere su GitHub. È così che questi sono stati trovati.


Condividi su:
David Montero

Scritto da

David Montero

Creator of Velxio, the open-source circuit and Arduino simulator.

GitHub velxio.dev

Articoli correlati


Articolo precedente
Sei giochi portatili per l'ESP32 e lo XIAO ESP32-S3, giocabili nel browser
Articolo successivo
Sette progetti di Halloween da costruire ed eseguire nel browser