danye il 10/9/2017, 17:45
Scheda acquisizione dati di monitoraggio
Un saluto a tutti, ho la necessità di realizzare una scheda che abbia le seguenti caratteristiche:
n.3 lettori di corrente continua fino a 50A ( corrente pannelli, corrente inverter, corrente batterie)
n.2 lettori di corrente alternata 220v 50Hz fino a 30A (corrente uscita inverter, corrente uscita contatore del fornitore elettrico)
n.2 lettori di tensione in continua (tensione pannelli e tensione batteria)
n.1 lettore di tensione alternata (tensione di rete)
Tutti i dati letti dovranno essere trasmessi via seriale ad un esp8266 che provvederà a registrare i dati sul Web Server
Per raggiungere lo scopo pensavo di utilizzare la scheda con a bordo l'stm32, la quale ha sufficienti ingressi analogici, e che rispetto ad arduino ha prestazioni nettamente superiori.
Ho trovato una semplice guida che permette di caricare un bootloader sul chip, che permette di usare la scheda come fosse un arduino, compresa la possibilità di caricare gli scketch tramite la porta usb integrata.
LINKPer quanto riguarda i sensori da utilizzare ho pensato di usare per la lettura della corrente continua gli ACS758LCB-050U-PFF-T che hanno la possibilità di leggere correnti fino a 50A restituendo un uscita compatibile con il microcontrollore. Invece per la lettura della corrente alternata vorrei usare gli SCT-013 prendendo spunto dall'ottimo powermeter di ElettroShockNow.
Ci sono valide alternative altrimenti?
Secondo voi i componenti che ho intenzione di usare sono compatibili tra di loro?
I pin della board stm32 sono esclusivamente a 3.3V o accettano anche i 5V?
Per programmare la board ho un convertitore seriale con livelli logici a 5V posso utilizzarlo?
Danye ;)
ElettroshockNow il 10/9/2017, 19:58
Re: Scheda acquisizione dati di monitoraggio
Ciao Danye ,
Si il convertitore usb/ttl è perfetto per programmare l'stm32 con l'ide Arduino ,devi solo aggiungere la scheda al programma.
Per gli ingressi e uscite sono tutte 3.3.
Ho visto il sensore Hall da te usato ed è completamente compatibile ,ma vista la quantità devi prevedere uno stabilizzatore 3.3V esterno...non credo che il piccolo sulla board stm sia all'altezza.
La scelta unidirezionale è azzeccata e varierà la tensione in uscita proporzionale al carico(60mV per ogni A)
Attenzione però allo zero che si attesterà sui 0.6V (così descritto da datasheet).
Per i trasformatori amperometrici personalmente li trovo ottimi .
Ne esistono di tanti tipi ..anche se tutti con lo stesso nome Sct013 .
Il classico è senza resistenza di shunt e montando quella più opportuna scegli il fondoscala .
Invece alcune hanno lo shunt già integrato tipo la sct013-030 che appunto restituisce 1V a 30A
danye il 10/9/2017, 21:50
Re: Scheda acquisizione dati di monitoraggio
[quote]
devi solo aggiungere la scheda al programma.
Che vuol dire?
[quote]
Ho visto il sensore Hall da te usato ed è completamente compatibile ,ma vista la quantità devi prevedere uno stabilizzatore 3.3V esterno...non credo che il piccolo sulla board stm sia all'altezza.
Si avrei intenzione di usare il famoso step down LM2596 che alimentera' tutto stm32 esp822 e sensori, con tensione in ingresso a 24v, ce la faccio?
[quote]
Per gli ingressi e uscite sono tutte 3.3
Dovrò ricalcolare la R1 e R2 per adattare il tutto ai 3.3v.
Altro che devo tener conto?
Danye
Allegati:
danye il 11/9/2017, 12:40
Re: Scheda acquisizione dati di monitoraggio
Rifacendo i conti la R1 e la R2 potrebbero andare bene anche così. Dovrei raggiungere i 3.2v di picco quando la sinusoide si trova nel picco superiore.
Confermi? ;)
ElettroshockNow il 11/9/2017, 13:06
Re: Scheda acquisizione dati di monitoraggio
Dai calcoli mi viene [s]2.73V[/s]3.17V ,ma in via teorica.
In pratica tutti i trasformatori ,sopratutto i piccoli hanno una tensione a vuoto molto più alta
danye il 11/9/2017, 13:50
Re: Scheda acquisizione dati di monitoraggio
Il valore di picco lo calcolo cosi:
Tensione picco sinusoide positiva del trasformatore=(Tensione trasformatore / 2)x 1,41 ovvero (6/2)x1,41=4,23v
Tensione di picco al partitore R1 R2 =(4,23/12200)x2200 + (3,3/2)=2,41v
Il calcolo precedente lo avevo toppato, ma neanche adesso non coincide con il tuo, considerando che il trasformatore eroghi effettivamente 6v efficaci.
ElettroshockNow il 11/9/2017, 15:56
Re: Scheda acquisizione dati di monitoraggio
..nono
6V è il valore rms della sinusoide.
Rms*1.41 = valore di picco positivo o negativo .
Quindi una sinusoide avente 6Vrms raggiunge 8.46V di picco positivo e -8.46V di picco negativo.
Di conseguenza il partitore restituisce 8.46×2.2/12.2 =1.52V
1.52V è la tensione ai capi della resistenza da 2.2K ,ma visto che si trova a 1.65V si ottiene che 1.52V si sommera' all'offset nelle semionde positive e si sottrae alle negative .
ElettroshockNow il 11/9/2017, 16:38
Re: Scheda acquisizione dati di monitoraggio
...avevo sbagliato .
1.52V + 1.65V = 3.17V
danye il 11/9/2017, 17:46
Re: Scheda acquisizione dati di monitoraggio
ElettroshockNow :
..nono
6V è il valore rms della sinusoide.
Rms*1.41 = valore di picco positivo o negativo .
Quindi una sinusoide avente 6Vrms raggiunge 8.46V di picco positivo e -8.46V di picco negativo.
Di conseguenza il partitore restituisce 8.46×2.2/12.2 =1.52V
1.52V è la tensione ai capi della resistenza da 2.2K ,ma visto che si trova a 1.65V si ottiene che 1.52V si sommera' all'offset nelle semionde positive e si sottrae alle negative .Perdonami, ma secondo me dobbiamo sommare al offset di 1,65 volt solo la semionda positiva, che è pari a 0,76 volt avendo una tensione massima di 2,41 V, o sbaglio?
ElettroshockNow il 11/9/2017, 18:25
Re: Scheda acquisizione dati di monitoraggio
Non ti seguo ...
Sul Pin del Micro arriva tutta la sinusoide con riferimento offset .
Questo se vuoi far calcolare anche potenza attiva reattiva e cosfi.
Se non ti interessano puoi misurare solo la tensione di picco (come la prima versione del powermeter)
Allegati:
danye il 11/9/2017, 19:48
Re: Scheda acquisizione dati di monitoraggio
Hai semplicemente ragione! (non ne avevo dubbi) ;)
Nel progetto finale vorrei usare 2 porte seriali, una per comunicare con l'esp8266 e un altra per inviare i dati al display nextion! Per inizializare le seriali bastera scrivere questo?
Serial1.begin(9600);
Serial2.begin(9600);
Altrimenti la faccenda si complica...
ElettroshockNow il 11/9/2017, 22:48
Re: Scheda acquisizione dati di monitoraggio
Bella domanda ...
Ho provato solo una seriale, ma penso e spero che la libreria sia stata per più seriali .
Se vuoi domani pom provo ;)
danye il 12/9/2017, 10:04
Re: Scheda acquisizione dati di monitoraggio
ElettroshockNow :
Bella domanda ...
Ho provato solo una seriale, ma penso e spero che la libreria sia stata per più seriali .
Se vuoi domani pom provo ;)Mi farebbe piacere, io sono in ancora in attesa che mi consegnano la board. Grazie!
ElettroshockNow il 12/9/2017, 10:29
Re: Scheda acquisizione dati di monitoraggio
Ok ...oggi pomeriggio provo ...
Ne dovrei avere più di una a casa ,se vuoi passa ;)
danye il 15/9/2017, 20:47
Re: Scheda acquisizione dati di monitoraggio
Mi è arrivata la schedina!!!!
Ho testato le seriali e tutte e 4 funzionano inizializzandole semplicemente.
Caricando il bootloader si abilita la porta usb onboard che diventa Serial.begin(115200)!
Questo codice funziona perfettamente!
// Variables:
int previousMillis = 0; // will store the last time the LED was updated
int interval = 1000; // interval at which to blink (in milliseconds)
void setup() {
// Set up the built-in LED pin as output:
pinMode(PC13, OUTPUT);
Serial.begin(115200);
Serial1.begin(115200);
Serial2.begin(115200);
Serial3.begin(115200);
}
void loop() {
// Check to see if it's time to blink the LED; that is, if the
// difference between the current time and last time we blinked
// the LED is bigger than the interval at which we want to blink
// the LED.
if (millis() - previousMillis > interval) {
// Save the last time you blinked the LED
previousMillis = millis();
// If the LED is off, turn it on, and vice-versa:
digitalWrite(PC13,!digitalRead(PC13));// Turn the LED from off to on, or on to off
Serial.println("Serial ok!");
Serial1.println("Serial1 ok!");
Serial2.println("Serial2 ok!");
Serial3.println("Serial3 ok!");
}
}