sineAnalyzerWithPowerMeas_init(&sine_mains);
sine_mains.sampleFreq = (float)(ISR_CONTROL_FREQUENCY);
sine_mains.threshold = (float)(0.08);
sine_mains.nSamplesMax = ISR_CONTROL_FREQUENCY/UNIVERSAL_GRID_MIN_FREQ;
sine_mains.nSamplesMin = ISR_CONTROL_FREQUENCY/UNIVERSAL_GRID_MAX_FREQ;
sine_mains.emaFilterMultiplier = 2.0/ISR_CONTROL_FREQUENCY;
#include "math.h"
#define INV_PWM_SWITCHING_FREQUENCY ((float)20*1000)
#define CNTRL_ISR_FREQ_RATIO 1
#define ISR_CONTROL_FREQUENCY (INV_PWM_SWITCHING_FREQUENCY)/(CNTRL_ISR_FREQ_RATIO)
#define UNIVERSAL_GRID_MAX_FREQ 65
#define UNIVERSAL_GRID_MIN_FREQ 45
typedef struct {
float v; // Input: Voltage Sine Signal
float i; // Input Current Signal
float sampleFreq; // Input: Signal Sampling Freq
float threshold; // Input: Voltage level corresponding to zero i/p
float vRms; // Output: RMS Value
float vAvg; // Output: Average Value
float vEma; // Output: Exponential Moving Average Value
float acFreq; // Output: Signal Freq
float acFreqAvg; // Output: Signal Freq
float iRms; // Output: RMS Value of current
float pRms; // Output: RMS Value of input power
float vaRms; // Output: RMS VA
float powerFactor; // Output: powerFactor
short zcd; // Output: Zero Cross detected
float vSum; // Internal : running sum for vacc_avg calculation over one sine cycle
float vSqrSum; // Internal : running sum for vacc_rms calculation over one sine cycle
float iSqrSum; // Internal : running sum f