openenergymonitor / EmonLib

Electricity monitoring library - install in Arduino IDE's libraries folder then restart the IDE
openenergymonitor.org
GNU Affero General Public License v3.0
584 stars 418 forks source link

3-Phase Timing and Calculation Problem #76

Open donemuhendislik opened 9 months ago

donemuhendislik commented 9 months ago

Hi All,

We try to develop a device, and according to it's working algorithm, we need to calculate L1, L2 and L3 instant voltage and current value (3-Phase energy monitoring.)

For just one line (L1), we can measure everything good. But while we try to use L2 and L3 emon object everything is blocked.

Our summarized code is : (Testing is done with Arduino Mega 2560 and Arduino Giga R1)

`#include "EmonLib.h"

//Device Energy Line 1 EnergyMonitor device_energy_line_1; //Device Energy Line 2 EnergyMonitor device_energy_line_2; //Device Energy Line 3 EnergyMonitor device_energy_line_3;

// / ENERGY MONITOR CALCULATION PARAMETERS / // //Number of half wavelengths (crossings)

define WAVE_LENGTHS_AMOUNT 20

define CALCULATION_TIMEOUT 50

// / VOLTAGE LINE PARAMETERS / // //Define Analog pins

define VOLTAGE_LINE_1 A0

define VOLTAGE_LINE_2 A1

define VOLTAGE_LINE_3 A2

//Voltage calibration value

define VOLTAGE_CALIBRATION_1 234.26

define VOLTAGE_CALIBRATION_2 234.26

define VOLTAGE_CALIBRATION_3 234.26

//Voltage phase shift value

define VOLTAGE_PHASE_SHIFT 1.7

/*****/

/*****/ / CURRENT PARAMETERS / //Define Analog pins

define CURRENT_LINE_1 A3

define CURRENT_LINE_2 A4

define CURRENT_LINE_3 A5

//Phase calibration value : The phase calibration value has 2 different values. We use them because of ACS724's different reading values

define CURRENT_CALIBRATION_1 26

define CURRENT_CALIBRATION_2 26

define CURRENT_CALIBRATION_3 26

void setup() {

//Device energy line 1-2-3 : Voltage device_energy_line_1.voltage(VOLTAGE_LINE_1, VOLTAGE_CALIBRATION_1, VOLTAGE_PHASE_SHIFT); device_energy_line_2.voltage(VOLTAGE_LINE_2, VOLTAGE_CALIBRATION_2, VOLTAGE_PHASE_SHIFT); device_energy_line_3.voltage(VOLTAGE_LINE_3, VOLTAGE_CALIBRATION_3, VOLTAGE_PHASE_SHIFT);

//Device energy line 1-2-3 : Current device_energy_line_1.current(CURRENT_LINE_1, CURRENT_CALIBRATION_1); device_energy_line_2.current(CURRENT_LINE_2, CURRENT_CALIBRATION_2); device_energy_line_3.current(CURRENT_LINE_3, CURRENT_CALIBRATION_3); }

void loop() {

device_energy_line_1.calcVI(WAVE_LENGTHS_AMOUNT, CALCULATION_TIMEOUT); //Test Mode : device_energy_line_1.serialprint(); //This is for printing for all data : realpower, apparent power, Vrms, Irms, power factor device_energy_line_2.calcVI(WAVE_LENGTHS_AMOUNT, CALCULATION_TIMEOUT); //Test Mode : device_energy_line_2.serialprint(); //This is for printing for all data : realpower, apparent power, Vrms, Irms, power factor device_energy_line_3.calcVI(WAVE_LENGTHS_AMOUNT, CALCULATION_TIMEOUT);

/ Rest of our codes, include millis() timing elements like momentary button value read as in 1000ms, LED animations like 100 ms, 75 ms etc. These are blocking because of emon instance's calculations. /

}

`

As I wrote in code block, We have some functions have own millis() measurings, button reading state, LED animations. All of them, have own millis() calculations. Without emon instances for 3-phases, all of them work good.

For testing or finding blocking thing, we deleted device_energy_line_2 and 3 instances. Just for device_energy_line_1 for example, it doesnt block anything in code.

Could you have any advices or what we do wrong for 3-phases EnergyMonitor instances ?

Thanks a lot for your help...