Utilizzando un Arduino Nano e un trasformatore di corrente (CT), sto provando a percepire la corrente che scorre attraverso una linea di 120 V 60 Hz.
Circuito
Uscite CT 0-1 V
secondo le sue specifiche. Questa uscita è distorta AREF/2
= 2,5 V.
analogRead
Valori
L'asse x rappresenta il numero indice del campione ADC, mentre l'asse y rappresenta il valore ADC (0-1024). La frequenza di campionamento è di circa 9 kHz. La differenza picco-picco è di circa 1026 campioni.
Questa forma d'onda è quella che ti aspetteresti dalla CT? Perché ci sono regioni in cui i valori sono piatti, anziché variare continuamente?
Inoltre, se osserviamo la parte curva della trama, perché Arduino legge alternativamente i valori sopra 512
e sotto 512
? Legge un valore sopra 512
, quindi un valore sotto 512
, quindi un valore sopra 512
e così via.
Il tempo impiegato per un è analogRead
stato misurato in 110 microsecondi per la mia configurazione e ci sono 1026 campioni tra i picchi della forma d'onda. Ciò significa che ci saranno circa 9 picchi in 1 secondo, anche se mi aspetterei 60 picchi poiché stiamo rilevando una linea a 60 Hz. Cosa ne ricava? C'è un condensatore, C1
nel circuito, avrebbe qualcosa a che fare con questo?
Questi valori di analogRead sono adatti per essere utilizzati per calcolare la tensione RMS e quindi la corrente RMS che passa attraverso il filo rilevato? L'obiettivo finale di questo è calcolare il consumo di energia dopo aver determinato la corrente RMS che scorre attraverso il filo.
Schizzo utilizzato per ottenere valori per la trama
void setup() {
Serial.begin(9600);
}
void loop() {
double sensorValue = analogRead(1);
Serial.println(sensorValue)
}
analogRead
Punti dati effettivi nelle regioni di protuberanza
487
534
487
535
488
537
484
536
487
538
486
536
484
540
484
539
485
540
483
540
484
541
481
539
481
540
484
540
480
543
484
539
481
540
484
541
486
542
485
538
485
538
488
535
489
534
491
530
491
529
493
531
492
526
498
526
499
524
499
520
503
518
502
518
507
Grafico di valori analogici Leggi
I valori analogRead sono ora memorizzati in un buffer prima di essere trasmessi su seriale. Ora ci sono 55 punti dati ADC che compongono 1 periodo. Considerando che il tempo di lettura analogico è di 110 µs, ogni ciclo richiede 6,05 ms, dandoci una frequenza di 165 Hz! Cosa potrebbe essere andato storto?
void loop() {
double sensorValue = analogRead(1);
char buf[32];
dtostrf(sensorValue, 8, 2, buf);
value = buf;
if (stop == 0) {
if (i < 10000) {
message += ',';
message += value;
i++;
}
else {
stop = 1;
Serial.println(message);
}
}
}
analogRead()
e ho trovato 110 microsecondi. Aggiornato la domanda.