Realizzazione di un sistema di misura di potenza ed energia elettrica con l'utilizzo dell' MCP3909 (Microchip) interfacciata con una scheda STM32 Nucleo F446RE. In questa esperienza verranno messe in pratica le leggi fondamentali dell'elettrotecnica, varie tipologie di bus di comunicazione e gestione dati per elaborare, mediante specifici algoritmi, le informazioni riguardanti le singole sinusoidi di tensione e corrente.
Descrizione del progetto
L'integrato MCP3909 della Microchip è un dispositivo in grado di misurare la potenza attiva e supporta lo standard internazionale IEC 62053. Esso contiene al suo interno due convertitori ADC sigma-delta a 16 bit e supporta due modi di funzionamento:
- uscita a frequenza proporzionale alla potenza attiva
- comunicazione seriale tramite protocollo SPI.
Sono presenti due canali di ingresso, uno per il segnale relativo alla corrente ed uno per il segnale relativo alla tensione. La modulazione sigma-delta è tra le tecniche più avanzate per realizzare la conversione analogico-digitale. Le caratteristiche di questo tipo di modulazione sono :
- Utilizzo di frequenze di campionamento molto superiori alla frequenza di Nyquist
- Elevata risoluzione
- Linearità di conversione
- Lieve sensibilità alle interferenze a cui i componenti elettronici sono soggetti
- Assenza di circuiti Sample & Hold
- Assenza di filtri anti-aliasing
- basso costo
In questo progetto è stato utilizzato il bus seriale SPI per la trasmissione dei dati ad una frequenza di circa 10 MHz. Nella realizzazione della scheda di test sono state implementate tutte le possibili opzioni che l' MCP3909 offre, tra le quali:
- Abilitazione uscite in frequenza
- Controllo logico del guadagno
- Abilitazione filtro HPF
Il circuito è composto da un quarzo a 6.5795 MHz, alcuni condensatori a formare una serie di circuiti filtro per l'alimentazione e il pin 10 di riferimento. Per selezionare il metodo di funzionamento sono stati implementati dei connettori a ponticello. Tutti i segnali sono stati muniti di test-point per poter essere analizzati. I segnali in ingresso di tensione e corrente fanno capo a due distinti connettori, ai quali arriveranno segnali sinusoidali condizionati in maniera tale da restare nel range di +/- 470 mV per il canale di corrente CH0 e +/- 660 mV per il canale di tensione CH1. Entrambi gli ingressi sono di tipo differenziale, per cui occorrerà condizionare in modo opportuno i segnali. Per ottenere la massima sicurezza evitando di portare sulla scheda tensioni dirette dagli impianti utilizzatori, si è fatto uso di trasformatori voltmetrici di precisione della Itacoil SVL101201 (range ingresso 0-300 V (230V nominali) uscite 2.5-5.0-7.5-10.0V). Per l'ingresso del segnale di corrente è stato adottato un trasformatore di corrente toroidale della VAC modello E4624-X502 con 60 A di corrente nominale. Anche questo segnale sarà condizionato in modo tale da poter sfruttare gli ingressi differenziali dell'MCP3909.
Per il segnale relativo alla tensione di rete è stato adottato un trasformatore di misura come precedentemente menzionato con uscita 2.5 V.
Le immagini riportano i circuiti di condizionamento dei segnali in arrivo dai trasformatori, segnali pronti per essere portati agli ingressi del MCP3909. I segnali CH0+, CH0-, CH1+, CH1- sono riferiti a massa, creata sdoppiando le resistenze a livello dei circuiti di condizionamento e utilizzando in questo modo gli ingressi in modo differenziale. Questa tecnica permette di limitare i disturbi derivanti da fonti esterne che riescono ad indurre impulsi indesiderati. L'MCP3909, in modalità SPI, fornisce le misure rilevate sui canali CH0 e CH1 ogni 70 us circa su 4 bytes. I 4 bytes dovranno essere sottoposti a operazione di bitshifting per ottenere due variabili intere a 16 bit. L'estrema velocità del sistema solleva parecchie problematiche dal punto di vista della gestione dei dati raccolti e dei metodi di immagazzinamento degli stessi. Innanzitutto la velocità del bus SPI non può essere inferiore ai 10 MHz, come indicato nel datasheet, per cui è risultato inopportuno utilizzare microcontrollori come Arduino. Per ottenere i risultati desiderati si è rivolta l'attenzione su microcontrollori con frequenza di clock superiore agli 80 MHz. In questa fascia ritroviamo le schede Nucleo di STM che, su certe board, utilizzano frequenze comprese tra 80 e 180 MHz. L'utilizzo di queste schede evidenzia però un ulteriore problematica: l'alimentazione di questi microcontrollori è di 3.3V, mentre l'MCP3909 lavora con un'alimentazione di 5V. L'utilizzo di adattatori di livello quali TXB01xx, TXS01xx, ACSL6xx0 (digital logic gate optocoupler 15 MBd) è risultato completamente inappropriato e non ha mai fornito risultati. La chiave di volta che ha permesso di procedere con il progetto è stata la dichiarazione a livello di datasheet che le porte digitali del STM32-F446RE, utilizzato in questo progetto, sono "5V tolerant" e ciò ha permesso di collegare direttamente il bus SPI del STM32 con i pin SCK, SDI e SDO del MCP3909 utilizzando resistenze da 100 ohm in serie tra i singoli collegamenti seriali, ottenendo in questo modo i 10 MHz di velocità di trasmissione dati. L'obiettivo successivo è consistito nella gestione software del bus e nel trovare una procedura più veloce possibile per memorizzare i dati ed elaborarli. L'MCP3909 deve essere resettato e inizializzato per attivare il bus SPI. Quando i dati di misura sono pronti, sulla linea SDO viene fornito un impulso. Il microcontrollore, utilizzando un ingresso interrupt, attiverà la trasmissione seriale e immagazzinerà i dati (4 bytes), dopodichè si rimetterà in attesa dell'arrivo di un ulteriore impulso di interrupt. Tra i due impulsi di interrupt, il software eseguirà il bitshifting e memorizzerà i due interi a 16 bit su due circular buffer. Ogni 20 ms (50 Hz) le sinusoidi di tensione e corrente vengono analizzate estraendo il valore massimo e il tempo intercorso tra i passaggi delle due sinusoidi attraverso lo zero volt.
Queste analisi hanno lo scopo di calcolare il valore efficace e lo sfasamento tra tensione e corrente e di conseguenza la potenza elettrica. In figura 6 si possono osservare le due sinusoidi di tensione e corrente ricreate attraverso i punti acquisiti dal MCP3909.
Programmazione e inizializzazione scheda Nucleo-F446RE
La configurazione del micro F446RE è stata effettuata utilizzando il software STM32CubeIDE, distribuito gratuitamente da STM per la completa programmazione di tutta la sua produzione di microcontrollori. La piattaforma di sviluppo STM32CubeIDE è basata sul framework di Eclipse e integra un software di configurazione STM32CubeMX e un sistema di sviluppo firmware con supporto per add-ons per Eclipse, compilatore GNU C/C++ per ARM e debugger. La piattaforma presenta ulteriori funzionalità di debug avanzate tra cui: core della CPU, registro periferico e visualizzazione della memoria. Analisi del sistema e tracciamento in tempo reale (SWV) e supporto per bus di debug ST-LINK (STMicroelectronics) e J-Link (SEGGER). STM32CubeIDE è supportato su più sistemi operativi: Windows, Linux, MacOsX, versioni a 64 bit. Come evidenziato nell'immagine di figura 7 si possono osservare le configurazioni dei vari pin che supportano il bus SPI e i segnali di controllo tra il micro e l' MCP3909. I pin PB13; PB14; PB15 gestiscono l'interfaccia seriale con i segnali SCLK (clock), MISO (master input slave output), MOSI (master output slave input); PA8 e PA9 gestiscono i segnali CS (channel select SPI) e MCLR (reset MCP3909) Il pin PC10 denominato DR (data ready) è stato configurato come ingresso external interrupt e collegato al segnale SDO del MCP3909. Inoltre sono state configurate altre porte attivando un bus I2C per supportare un display Oled e una porta di servizio per il monitoraggio del segnale di interrupt PA0 (LED_INT). Le ulteriori porte vengono configurate automaticamente dal software per permettere il debug seriale e l'utilizzo del quarzo esterno. Nelle figure 8-9-10 vengono evidenziate le varie configurazioni dei GPIO precedentemente citati
In figura 11 e 12 si possono osservare le configurazioni relative ai pin utilizzati per il bus SPI, mentre nelle ulteriori figure 13 e 14 ritroviamo le configurazioni di due timer con attivazione per ciascuno di relativo interrupt.
I Timer 2 e 3 sono stati configurati per misurare un periodo di tempo di 25 ms e 1 s. Con un tempo di 25 ms siamo in grado di leggere con buona precisione una intera sinusoide come si può rilevare in figura 6 ed elaborare i dati memorizzati nei buffer circolari di tensione e corrente. Da questa elaborazione vengono dedotti i valori efficaci di tensione, corrente e lo sfasamento tra entrambe. All'intervento del secondo timer (1 s) il software effettuerà i calcoli di potenza ed energia essendo 1W = 1 J/s utilizzando i valori mediati di cinquanta sinusoidi (1/20ms=50). Nell'immagine che segue (Fig. 15), tratta dall'analizzatore di stati logici LA2016 della Kingst, è interessante osservare come il software gestisce la routine di lettura di ogni singolo punto della sinusoide. Inizialmente viene atteso il segnale di interrupt sulla linea SDO che attiva il processo di lettura del bus. Nel momento della rilevazione dell'interrupt, viene disabilitata momentaneamente la gestione dell'interrupt per permettere l'utilizzo della linea SDO e la ricezione dei dati. Negli istanti che seguono si può osservare la trasmissione di quattro dati di 8 bit ciascuno (segnale SDO) accompagnati dal segnale di clock (SCK). Il segnale CS viene sempre tenuto a livello 0 durante queste operazioni. Nel caso si portasse a livello 1 l'MCP3909 si blocca e non fornisce più nessun segnale di interrupt.
Al termine della trasmissione viene ripristinata la configurazione dell'interrupt. Il segnale INT_STM è prelevato dal pin PA0 (LED_INT) e viene utilizzato come trigger per l'analizzatore di stati logici.
In questo breve articolo ho voluto descrivere le varie fasi di interfacciamento tra due tipologie di componenti elettronici diversi soprattutto per le tensioni di funzionamento e per le tecnologie costruttive, dimostrando che un microcontrollore ARM può interfacciarsi in modo appropriato con un MCP3909 riuscendo a fornire risultati soddisfacenti. Se l'articolo susciterà particolari interessi riguardanti la realizzazione di un sistema di monitoraggio energetico, sarò disponibile a confrontare gli sviluppi del progetto e collaborare per condividere le soluzioni adottate.