Generatore di onde quadre con ESP32: una soluzione economica per il testing di circuiti

Introduzione

Nel mondo dell’elettronica, un generatore di onde quadre o più in generale di segnali è uno strumento essenziale per testare e diagnosticare circuiti. Un dispositivo di questo genere consente di iniettare un segnale noto in un circuito per osservare come questo risponde, facilitando l’identificazione di eventuali problemi o comportamenti anomali. Tuttavia, i generatori di segnali professionali possono essere costosi, rendendoli inaccessibili per molti hobbisti, studenti e piccoli laboratori. Fortunatamente, con l’ESP32, è possibile costruire un generatore di onde quadre a frequenza variabile in modo economico e semplice, offrendo una soluzione pratica e versatile per il testing di circuiti.

Un generatore di onde quadre può essere estremamente utile sia per i circuiti digitali che per quelli analogici. Nel contesto dei circuiti digitali, le onde quadre sono fondamentali perché rappresentano i segnali binari (0 e 1) che costituiscono la base del funzionamento dei dispositivi digitali. Un generatore di onde quadre può essere utilizzato per simulare l’input a microcontrollori, testare la risposta di logiche sequenziali e combinatorie, verificare la funzionalità di contatori e temporizzatori, e molto altro. Ad esempio, un generatore di onde quadre può simulare il clock di un sistema digitale, permettendo di osservare come i vari componenti rispondono alla temporizzazione.

Nell’ambito dei circuiti analogici, le onde quadre possono essere utilizzate per una varietà di scopi. Un’onda quadra può essere utilizzata come segnale di test per amplificatori, filtri, e altri dispositivi analogici, permettendo di osservare la risposta in frequenza e la distorsione. Inoltre, poiché le onde quadre contengono una serie di armoniche, possono essere utilizzate per esaminare la risposta di un circuito a diverse frequenze contemporaneamente. Ad esempio, in un amplificatore audio, un’onda quadra può aiutare a identificare problemi di distorsione e stabilità.

Un altro utilizzo comune delle onde quadre è nella generazione di segnali PWM (Pulse Width Modulation), che possono essere utilizzati per controllare la velocità dei motori, la luminosità dei LED, e altri attuatori. L’ESP32, con il suo modulo LEDC (LED Control), è particolarmente adatto per questo tipo di applicazioni, grazie alla sua capacità di generare segnali PWM ad alta risoluzione e frequenza variabile.

Costruire un generatore di onde quadre con l’ESP32 non solo è un progetto economico, ma anche altamente educativo. Permette di approfondire la comprensione dei principi del PWM, della generazione dei segnali e del comportamento dei circuiti sia digitali che analogici. Inoltre, offre l’opportunità di esplorare le capacità avanzate dell’ESP32, un microcontrollore potente e versatile che può essere utilizzato in una vasta gamma di progetti elettronici.

In questo articolo, esploreremo come realizzare un generatore di segnali utilizzando l’ESP32, offrendo una soluzione accessibile per il testing dei circuiti. Vedremo come configurare il microcontrollore, scrivere il codice necessario e testare il funzionamento del generatore di onde quadre. Questo progetto dimostrerà come sia possibile costruire uno strumento di test efficace e versatile con un budget limitato, fornendo un’alternativa pratica ai costosi generatori di segnali professionali.

Come al solito useremo l’ottimo IDE PlatformIO per la stesura del codice.

Cosa è il PWM?

Il PWM, acronimo di Pulse Width Modulation (Modulazione in Larghezza di Impulso), è una tecnica utilizzata per controllare la potenza fornita a dispositivi elettronici come motori, LED e servomotori. Questa tecnica funziona variando la larghezza degli impulsi di un segnale digitale a una frequenza costante, permettendo di regolare la quantità di energia consegnata al carico.

Il principio di base del PWM consiste nella rapida alternanza tra due stati: uno stato alto (ON) e uno stato basso (OFF). Durante lo stato alto, il segnale è attivo e il carico riceve energia; durante lo stato basso, il segnale è inattivo e il carico non riceve energia. La durata dell’impulso alto rispetto alla durata totale del ciclo definisce il rapporto di duty cycle, espresso generalmente come percentuale. Ad esempio, un duty cycle del 50% indica che il segnale è attivo per la metà del tempo totale del ciclo.

L’utilizzo del PWM consente di regolare la potenza fornita al carico variando il rapporto di duty cycle. Aumentando il duty cycle, si aumenta la potenza fornita al carico, mentre diminuendo il duty cycle, si riduce la potenza fornita. Questa capacità di regolare la potenza in modo rapido e efficiente rende il PWM ideale per il controllo di dispositivi che richiedono modulazione di potenza, come motori DC, motori brushless, lampade a LED e servomotori.

Nel contesto del controllo di servomotori, il PWM viene utilizzato per inviare segnali di controllo che determinano la posizione desiderata del servo. Questi segnali, detti impulsi PWM, hanno una frequenza tipica di 50 Hz e una durata dell’impulso che varia tra 1 ms e 2 ms, con una durata di 1,5 ms che corrisponde solitamente alla posizione centrale del servo. Modificando la durata dell’impulso PWM, è possibile regolare la posizione del servo su un intervallo di circa 180 gradi, consentendo un controllo preciso della sua rotazione.

In conclusione, il PWM è una tecnica fondamentale nell’elettronica moderna, utilizzata per controllare la potenza fornita a dispositivi elettronici in modo efficiente e preciso. La sua versatilità lo rende ampiamente impiegato in una varietà di applicazioni, dalla regolazione della velocità dei motori alla regolazione dell’intensità luminosa dei LED, fino al controllo di posizione dei servomotori.

Funzionamento del nostro generatore di onde quadre

Il funzionamento del generatore di onde quadre basato su ESP32 è un esempio di come si possa sfruttare la potenza e la versatilità di questo microcontrollore per ottenere uno strumento utile e accessibile. Alla base del progetto c’è l’uso del modulo LEDC (LED Control) dell’ESP32, che consente di generare segnali PWM (Pulse Width Modulation) con alta risoluzione e frequenza variabile. Questo modulo è particolarmente adatto per creare onde quadre, fondamentali sia per i test di circuiti digitali che analogici.

Il progetto inizia con la definizione del pin GPIO dell’ESP32 su cui verrà generata l’onda quadra. In questo caso, abbiamo scelto il pin 25. Successivamente, viene stabilita una serie di frequenze predefinite, che il generatore di segnali ciclerà, producendo onde quadre a frequenze diverse per un tempo determinato. Le frequenze selezionate spaziano da 100 Hz a 1.000 Hz (ma possono essere estese fino a 10kHz), coprendo un ampio spettro che permette di testare una varietà di circuiti e componenti elettronici.

Il codice sorgente caricato sull’ESP32 configura inizialmente il modulo LEDC con una frequenza di partenza e una risoluzione di 8 bit. La configurazione avviene nel setup del programma, dove il canale LEDC viene associato al pin GPIO scelto. Nel ciclo principale del programma (loop), l’ESP32 imposta la frequenza del canale LEDC ad una delle frequenze predefinite e genera l’onda quadra impostando il duty cycle al 50%, ovvero un ciclo di lavoro in cui il segnale è alto per metà del tempo e basso per l’altra metà. Questa configurazione è ideale per ottenere un’onda quadra simmetrica, che rappresenta un segnale digitale standard.

Durante l’esecuzione, il programma cicla attraverso le frequenze predefinite, generando l’onda quadra corrispondente su ciascuna di esse per qualche secondo, prima di passare alla frequenza successiva. Questo processo continua indefinitamente, permettendo di osservare il comportamento del circuito in test a diverse frequenze. Ogni cambio di frequenza viene registrato e visualizzato sul monitor seriale, offrendo un feedback immediato sull’operazione in corso e facilitando la verifica del corretto funzionamento del generatore di onde quadre.

Per testare e verificare il funzionamento del generatore, è possibile utilizzare strumenti come un oscilloscopio o un frequenzimetro. Collegando il pin GPIO dell’ESP32 al dispositivo di misura, è possibile visualizzare l’onda quadra generata e verificarne la frequenza e la stabilità. Un oscilloscopio permette di osservare direttamente la forma dell’onda quadra, confermando che il duty cycle è effettivamente del 50% e che la frequenza corrisponde a quella impostata. Questo controllo visivo è cruciale per assicurarsi che il generatore stia funzionando correttamente e per identificare eventuali problemi di distorsione o instabilità nel segnale.

In conclusione, il generatore di onde quadre basato su ESP32 è un progetto semplice ma potente, che offre una soluzione pratica ed economica per il testing di circuiti elettronici. La capacità di generare onde quadre a frequenze variabili rende questo strumento estremamente versatile, adatto sia per applicazioni digitali che analogiche. Grazie alla potenza e alla flessibilità dell’ESP32, è possibile costruire un generatore di segnali efficiente senza dover investire in costosi strumenti professionali, rendendo questo progetto ideale per hobbisti, studenti e piccoli laboratori.

Di che componenti abbiamo bisogno?

La lista dei componenti non è particolarmente lunga:

  • una breadboard per connettere la NodeMCU ESP32 agli altri componenti
  • alcuni fili DuPont (maschio – maschio, maschio – femmina, femmina – femmina)
  • (opzionale) un frequenzimetro digitale per misurare con precisione la frequenza del segnale generato dall’ESP32. Questo strumento può aiutarti a verificare che il generatore di onde quadre stia funzionando correttamente.
  • (opzionale) un oscilloscopio, fondamentale per visualizzare l’onda quadra generata. Ti permette di osservare la forma d’onda, verificare la frequenza e il duty cycle, e identificare eventuali distorsioni o anomalie nel segnale.
  • e, ovviamente, una NodeMCU ESP32 !

Il modello di ESP32 scelto per questo progetto è quello dell’azienda AZ-Delivery.

Realizzazione del progetto

Lo schema elettrico

Prima di realizzare il circuito vero e proprio diamo un’occhiata al pinout della board:

Pinout della ESP32
Pinout della ESP32

Come puoi osservare dall’immagine seguente, lo schema elettrico (realizzato con Fritzing) è veramente elementare:

Schema elettrico del generatore di onde quadre
Schema elettrico del generatore di onde quadre

Per utilizzarlo dovrai collegare la massa del frequenzimetro e/o oscilloscopio e/o del dispositivo sotto test al ramo blu della breadboard che è collegato alla massa dell’ESP32 e l’ingresso del frequenzimetro e/o oscilloscopio e/o del dispositivo sotto test al filo giallo, che è uscita del segnale. Ricordati sempre che, essendo un segnale digitale generato da un dispositivo ESP32, il valore di tensione corrispondente allo 0 logico è pari a 0V mentre il valore di tensione corrispondente all’ 1 logico è pari a 3.3V. Assicurati che il dispositivo che ricevrà questo segnale sia in grado di elaborare tali valori. Per esempio, un dispositivo che ha una logica 0V – 5V (come per esempio un Arduino) non è detto che riesca a riconoscere il valore di 3.3V come un 1 logico.

Creiamo il progetto PlatformIO

Abbiamo già visto la procedura di creazione di un progetto PlatformIO nell’articolo Come creare un progetto per NodeMCU ESP8266 con PlatformIO.

Anche se si riferisce alla board ESP8266, la procedura è simile.
Semplicemente, nella scelta della piattaforma, dovrai scegliere la AZ-Delivery ESP-32 Dev Kit C V4.

Non installare nessuna delle librerie indicate nell’articolo.

Ora modifica il file platformio.ini per aggiungere queste due righe:

monitor_speed = 115200
upload_speed = 921600

in modo che il file abbia un aspetto del genere:

[env:az-delivery-devkit-v4]
platform = espressif32
board = az-delivery-devkit-v4
framework = arduino
monitor_speed = 115200
upload_speed = 921600

Puoi scaricare il progetto dal link seguente:

decomprimerlo, prendere il file main.cpp e sostituirlo al posto di quello che hai nel progetto precedentemente creato.

Vediamo ora come funziona lo sketch.

Inizialmente vengono incluse le librerie necessarie:

#include <Arduino.h>

poi viene definito il GPIO di uscita:

const int gpioPin = 25; // Output pin

Vengono poi definite le frequenze che dovranno essere generate, il numero di frequenze da generare, il canale e la risoluzione:

// Frequencies in Hz
const int frequencies[] = {100, 200, 300, 400, 500, 600, 700, 800, 900, 1000};
const int numFrequencies = sizeof(frequencies) / sizeof(frequencies[0]);

// LEDC channel and resolution
const int ledcChannel = 0;
const int ledcResolution = 8; // 8 bit resolution

Nella funzione setup viene prima inizializzata la porta seriale, configurato il canale LEDC con una frequenza di 1 kHz e assegnato il GPIO scelto come uscita al canale LEDC:

Serial.begin(115200);
delay(2000);
ledcSetup(ledcChannel, 1000, ledcResolution); // Configure the LEDC channel with a starting frequency of 1000 Hz
ledcAttachPin(gpioPin, ledcChannel); // Assign the pin to the LEDC channel

Nella funzione loop troviamo un blocco for che itera l’array di frequenze frequencies, setta la frequenza sul canale LEDC e il duty cycle e scrive sul Serial Monitor quale frequenza sta generando:

for (int i = 0; i < numFrequencies; i++) {
    int frequency = frequencies[i];
    ledcWriteTone(ledcChannel, frequency); // Sets the frequency of the LEDC channel
    ledcWrite(ledcChannel, 128); // Set duty cycle to 50% (128 of 256 for 8-bit resolution)

    Serial.print("Rectangular wave generation at ");
    Serial.print(frequency);
    Serial.println(" Hz");

   delay(5000); // Wait before switching to the next frequency
}

Video del funzionamento

Come puoi notare, al crescere della frequenza, gli impulsi si infittiscono. Puoi anche provare a fargli generare valori di frequenza diversi.

Se vuoi provare questo generatore con il frequenzimetro realizzato con ESP32 e display TFT, ti invito a dare un’occhiata all’articolo Frequenzimetro digitale con ESP32 e display TFT: una soluzione economica ed indispensabile per il laboratorio di elettronica pubblicato in questo stesso blog.

Newsletter

Se vuoi essere aggiornato sui nuovi articoli, iscriviti alla newsletter. Prima dell’iscrizione alla newsletter leggi la pagina Privacy Policy (UE)

Se ti vuoi disiscrivere dalla newsletter clicca sul link che troverai nella mail della newsletter.

Inserisci il tuo nome
Inserisci la tua email
0 0 votes
Valutazione articolo
guest
0 Commenti
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
Torna in alto