Post Go back to editing

Measurement Problems

Category: Hardware
Product Number: ADE9000

Greetings,
We operate with ADE9000. Our measurements were normal. But for the last 1 day, our measurements have been multiplied. While VC-VB-VA: 230, they all measure around 270. While IA=IB=IC=1,56A, they all come as 1,85A. The strange thing is that when we energize after waiting, the measurements are normal for 30 minutes. Then it throws a multiplier on the Currents, Voltages and power side. Could there be a problem on the DSP Engine side.

/*Ade9000 Temel Haberleşme*/
ADE9000Class ade9000;
#define SPI_SPEED 20000000 //SPI Speed
#define CS_PIN 5 //8-->Arduino Zero. 16-->ESP8266
#define ADE9000_RESET_PIN 27 //Reset Pin on HW
#define PM_1 26 //PM1 Pin: 4-->Arduino Zero. 15-->ESP8266

truct CurrentRMSRegs curntRMSRegs; //Current RMS
struct VoltageRMSRegs vltgRMSRegs; //Voltage RMS
//struct VoltageTHDRegs voltageTHDRegsnValues; //Voltage THD
struct ResampledWfbData resampledData; // Resampled Data
struct ActivePowerRegs activePowerRegs;
struct ReactivePowerRegs reactivePowerRegs;
struct ApparentPowerRegs apparentPowerRegs;
struct PowerFactorRegs powerFactorRegs;
struct VoltageTHDRegs vltgthdRegs; //Value olarak ta alınabiliyor. Regs olarakta
struct CurrentTHDRegs curntThdRegs;//Value olarak ta alınabiliyor. Regs olarakta
struct PowerFactorRegs pfactorRegs;//Value olarak ta alınabiliyor. Regs olarakta
struct ResampledWfbData_harmonic resampledData_harmonic;
struct PeriodRegs prdRegs;

void readRegisterData(void); // RMS olarak alınmakta Seample için void readResampledData(void); kullanılmalı
void resetADE9000(void);
void readResampledData(void);

myNex.begin(115200); //Nextion Editör içindeki c dosyasından ayarlanmalı.
delay(1000);
Serial.begin(115200);
pinMode(PM_1, OUTPUT); //Set PM1 pin as output
digitalWrite(PM_1, LOW); //Set PM1 select pin low for PSM0 mode
pinMode(ADE9000_RESET_PIN, OUTPUT);
digitalWrite(ADE9000_RESET_PIN, HIGH);
void resetADE9000();
delay(1000);
ade9000.SPI_Init(SPI_SPEED,CS_PIN); //Initialize SPI
ade9000.SetupADE9000(); //Initialize ADE9000 registers according to values in ADE9000API.h
delay(1000);
ade9000.SPI_Write_32(ADDR_CVGAIN,0x0003E56D);
ade9000.SPI_Write_32(ADDR_CIGAIN,0x0018ABE7);
ade9000.SPI_Write_32(ADDR_CPGAIN,0xFFFE4618);
}/*-----------Setup Sonu---------*/

void loop() {

readRegisterData();
float AVTHDF = 0;
float BVTHDF = 0;
float CVTHDF = 0;

float AITHDF = 0;
float BITHDF = 0;
float CITHDF = 0;

float AVRMSF = (vltgRMSRegs.VoltageRMSReg_A*(0.0000132940876766141)) ;
float BVRMSF = (vltgRMSRegs.VoltageRMSReg_B*(0.0000132940876766141));
float CVRMSF = (vltgRMSRegs.VoltageRMSReg_C*(0.0000132940876766141));

float AIRMSF = (curntRMSRegs.CurrentRMSReg_A*(0.0000002032579885467));
float BIRMSF = (curntRMSRegs.CurrentRMSReg_B*(0.0000002032579885467));
float CIRMSF = (curntRMSRegs.CurrentRMSReg_C*(0.0000002032579885467));
float NIRMSF = (curntRMSRegs.CurrentRMSReg_N*(0.0000002032579885467));

float AAPF = (activePowerRegs.ActivePowerReg_A*0.0003626792564446720);
float BAPF = (activePowerRegs.ActivePowerReg_B*0.0003626792564446720);
float CAPF = (activePowerRegs.ActivePowerReg_C*0.0003626792564446720);
float TAP = (AAPF + BAPF + CAPF);

float AQPF = (reactivePowerRegs.ReactivePowerReg_A*0.0003626792564446720);
float BQPF = (reactivePowerRegs.ReactivePowerReg_B*0.0003626792564446720);
float CQPF = (reactivePowerRegs.ReactivePowerReg_C*0.0003626792564446720);
float TQP = (AQPF + BQPF + CQPF);

float APFF = (pfactorRegs.PowerFactorReg_A*0.0000000074505805969);
float BPFF = (pfactorRegs.PowerFactorReg_B*0.0000000074505805969);
float CPFF = (pfactorRegs.PowerFactorReg_C*0.0000000074505805969);

AVTHDF = (vltgthdRegs.VoltageTHDReg_A*0.0000007450580596924);
BVTHDF = (vltgthdRegs.VoltageTHDReg_B*0.0000007450580596924);
CVTHDF = (vltgthdRegs.VoltageTHDReg_C*0.0000007450580596924);

AITHDF = (curntThdRegs.CurrentTHDReg_A*0.0000007450580596924);
BITHDF = (curntThdRegs.CurrentTHDReg_B*0.0000007450580596924);
CITHDF = (curntThdRegs.CurrentTHDReg_C*0.0000007450580596924);


}/*-----------Loop Sonu---------*/


void readRegisterData()
{
/*Read and Print RMS & WATT Register using ADE9000 Read Library*/
ade9000.ReadVoltageRMSRegs(&vltgRMSRegs); //Template to read Power registers from ADE9000 and store data in Arduino MCU
ade9000.ReadCurrentRMSRegs(&curntRMSRegs);
ade9000.ReadActivePowerRegs(&activePowerRegs);
ade9000.ReadVoltageTHDRegsnValues(&vltgthdRegs);
ade9000.ReadCurrentTHDRegsnValues(&curntThdRegs);
ade9000.ReadPowerFactorRegsnValues(&pfactorRegs);
ade9000.ReadPeriodRegsnValues(&prdRegs);
}


void resetADE9000(void)
{
digitalWrite(ADE9000_RESET_PIN, LOW);
delay(50);
digitalWrite(ADE9000_RESET_PIN, HIGH);
delay(1000);
//Serial.println("Reset Done");
}

Sory code block not working on you web site.

  • Hi, 

    Firstly it would be good to ensure that the configuration of ADE9000 is not changing during the test. There are two features that will ensure this: 

    • CRC OF CONFIGURATION REGISTERS
      • This feature calculates a CRC of ADE9000 configuration registers. Please read the CRC_RSLT register before and after the test to ensure nothing has changed.
      • See page 35 of ADE9000 Technical Reference Manual UG-1098
    • CONFIGURATION LOCK
      • This feature prevents changes to the configuration registers. Please try enabling the lock after you have configured ADE9000
      • See page 37 of the ADE9000 datasheet