Simular Leitura de Tensão e Corrente via Gerador de Sinais (AGF3102 - Tektronix)


#1

Pessoal, preciso fazer uma simulação de sinais via gerador de funções (um Tektronix AFG3102) e não estou conseguindo ler nada utilizando o circuito Burden original para o TC SCT-013. Bem, talvez devesse usar apenas um divisor resistivo, onde as ponteiras simulassem a fonte e na saída eu leria pelo arduino.

Estou usando a biblioteca EmonLib.h e o exemplo dela (o mais simples de todo, só pra ler no SerialMonitor).

Li o manual do gerador de sinais e em nenhum lugar informa a corrente de saída dos canais, mas informa que cada saída é de 50ohms. Preciso setar o gerador com 5vpp e frequência de 60Hz, depois preciso validar (testar, após conseguir calibrar) isso numa leitura normal, daí sim com burden e todos os circuitos necessários. Ou seja, testar a precisão do código e depois ensaiar leituras normais.

Ou talvez eu esteja fazendo tudo errado, eu tenha uma fonte de tensão (gerador) e estou usando o código para leitura de corrente? Mesmo conectando diretamente a saída do gerador ao A1 a leitura que tenho oscila em torno de 2,5.

Como já devem ter percebido é um TCC.

Aceito dicas. Alguém pode ajudar com isso ou algo parecido?

Esse é o código exemplo:

//Baseado no programa exemplo da biblioteca EmonLib

//Carrega as bibliotecas
#include “EmonLib.h”
//#include <LiquidCrystal.h> //Quando inserir leitura LCD

EnergyMonitor emon1;

//Tensao da rede eletrica
int inst_voltage = 5.0; // Set fixo tensao antes de inserir sensor tensao

//Pino do sensor SCT
int pino_sct = 1;

//Número de amostras a coletar
//int number_of_samples = 60; //Quando implementar calculos W, S e FP

void setup() {
//lcd.begin(16, 2);
//lcd.clear();
Serial.begin(9600);
//Pino, calibracao - Cur Const= Ratio/BurdenR. 1800/62 = 29
//Pino, calibracao; Cur Const = (100A/0.05A)/33 = 60.6
emon1.current(pino_sct, 1); //Dificil calcular esse parametro para o gerador
//Informacoes iniciais display
//lcd.setCursor(0,0);
//lcd.print(“Corr.(A):”);
//lcd.setCursor(0,1);
//lcd.print(“Pot. (W):”);
}

void loop() {
//Calcula a corrente
double inst_current = emon1.calcIrms(1480); //Numero de amostras para calculos internos EmonLib
//Mostra o valor da corrente
Serial.print("Corrente : ");
Serial.print(inst_current); // inst_current
//lcd.setCursor(10,0);
//lcd.print(inst_current);

//Calcula e mostra o valor da potencia [fake]
Serial.print(" Potencia : “);
Serial.println(inst_current * inst_voltage);
//lcd.setCursor(10,1);
//lcd.print(” ");
//lcd.setCursor(10,1);
//lcd.print(inst_current * inst_voltage, 1);

delay(1000);

}


#2

Resolvi desfazer todo aquele código e fazer um novo do zero com base em outro exemplo.

Nesse caso ainda não fiz o circuito para promover leituras de -2,5 a 2,5V pois o problema ainda é o código.

Mas o caso é que não consigo entender porque os resultados estão incrementando sem parar no Serial.print monitor. Já tentei zerar todas as variáveis dentro do void(loop) e nada de resultado.

Alguém saberia dizer o que pode estar errado no código, ou é algum comportamento interno do Arduino que não consegui perceber?

Desconsiderem a chamada para a EmonLib.h, deixei ali só para lembrar dela depois.

//TESTE Gerador de Funcoes com a biblioteca EmonLib

//Carrega as bibliotecas
#include “EmonLib.h”
//#include <LiquidCrystal.h> //Quando inserir leitura LCD

EnergyMonitor emon1;

//Saida Gerador 1
int gf1 = 1;
float val = 0;
float tensao = 0;
int samples = 10; //amostras
int n;
float inst_volt = 0; //valor instantaneo lido
float sq_volt = 0; //valor quadratico
float sum_sq_volt = 0; //soma dos valores quadraticos
float mean_sq_volt = 0; //valor medio quadratico
float rms = 0; //RMS Raiz do valor medio quadratico

void setup() {
Serial.begin(9600);

}

void loop() {
//Mostra o valor da sinal lido
val = analogRead(gf1);
//tensao = (val * 5)/1024;

//Calcula Tensao RMS (V)
for (n = 0; n < samples; n++)
{
inst_volt = val;
sq_volt = (inst_volt * inst_volt);
sum_sq_volt += sq_volt;
}
mean_sq_volt = (sum_sq_volt / samples);
rms = sqrt(mean_sq_volt);

//tensao = (RMS * 5)/1024;
Serial.print("Tensao Lida : ");
Serial.println((rms * 5)/1024); // inst_read do canal

delay(500);
}