Calibrate and get energy readings from ADE7758 IC from Analog Devices

Fork of ADE7758 by Emma

Currently this library can be used to calibrate and get VRMS, IRMS, active, and apparent energy. I havent worked on reactive energy measurement.

Committer:
bonchenko
Date:
Mon Apr 13 02:40:41 2015 +0000
Revision:
3:4fad91cf047a
Parent:
2:ea36884772ae
Child:
4:5547bb32eb32
Energy gain calibration

Who changed what in which revision?

UserRevisionLine numberNew contents of line
bonchenko 0:cf3dc3c5156b 1 #ifndef MBED_ADE7758_H
bonchenko 0:cf3dc3c5156b 2 #define MBED_ADE7758_H
bonchenko 0:cf3dc3c5156b 3
bonchenko 0:cf3dc3c5156b 4 #include "mbed.h"
bonchenko 0:cf3dc3c5156b 5 #include "SWSPI.h"
bonchenko 0:cf3dc3c5156b 6
bonchenko 0:cf3dc3c5156b 7 #define AWATTHR 0x01
bonchenko 0:cf3dc3c5156b 8 #define BWATTHR 0x02
bonchenko 0:cf3dc3c5156b 9 #define CWATTHR 0x03
bonchenko 0:cf3dc3c5156b 10 #define AVARHR 0x04
bonchenko 0:cf3dc3c5156b 11 #define BVARHR 0x05
bonchenko 0:cf3dc3c5156b 12 #define CVARHR 0x06
bonchenko 0:cf3dc3c5156b 13 #define AVAHR 0x07
bonchenko 0:cf3dc3c5156b 14 #define BVAHR 0x08
bonchenko 0:cf3dc3c5156b 15 #define CVAHR 0x09
bonchenko 0:cf3dc3c5156b 16 #define AIRMS 0x0A
bonchenko 0:cf3dc3c5156b 17 #define BIRMS 0x0B
bonchenko 0:cf3dc3c5156b 18 #define CIRMS 0x0C
bonchenko 0:cf3dc3c5156b 19 #define AVRMS 0x0D
bonchenko 0:cf3dc3c5156b 20 #define BVRMS 0x0E
bonchenko 0:cf3dc3c5156b 21 #define CVRMS 0x0F
bonchenko 0:cf3dc3c5156b 22 #define FREQ 0x10
bonchenko 0:cf3dc3c5156b 23 #define TEMP 0x11
bonchenko 0:cf3dc3c5156b 24 #define WFORM 0x12
bonchenko 0:cf3dc3c5156b 25 #define OPMODE 0x13
bonchenko 0:cf3dc3c5156b 26 #define MMODE 0x14
bonchenko 0:cf3dc3c5156b 27 #define WAVMODE 0x15
bonchenko 0:cf3dc3c5156b 28 #define COMPMODE 0x16
bonchenko 0:cf3dc3c5156b 29 #define LCYCMODE 0x17
bonchenko 0:cf3dc3c5156b 30 #define MASK 0x18
bonchenko 0:cf3dc3c5156b 31 #define STATUS 0x19
bonchenko 0:cf3dc3c5156b 32 #define RSTATUS 0x1A
bonchenko 0:cf3dc3c5156b 33 #define ZXTOUT 0x1B
bonchenko 0:cf3dc3c5156b 34 #define LINECYC 0x1C
bonchenko 0:cf3dc3c5156b 35 #define SAGCYC 0x1D
bonchenko 0:cf3dc3c5156b 36 #define SAGLVL 0x1E
bonchenko 0:cf3dc3c5156b 37 #define VPINTLVL 0x1F
bonchenko 0:cf3dc3c5156b 38 #define IPINTLVL 0x20
bonchenko 0:cf3dc3c5156b 39 #define VPEAK 0x21
bonchenko 0:cf3dc3c5156b 40 #define IPEAK 0x22
bonchenko 0:cf3dc3c5156b 41 #define GAIN 0x23
bonchenko 0:cf3dc3c5156b 42 #define AVRMSGAIN 0x24
bonchenko 0:cf3dc3c5156b 43 #define BVRMSGAIN 0x25
bonchenko 0:cf3dc3c5156b 44 #define CVRMSGAIN 0x26
bonchenko 0:cf3dc3c5156b 45 #define AIGAIN 0x27
bonchenko 0:cf3dc3c5156b 46 #define BIGAIN 0x28
bonchenko 0:cf3dc3c5156b 47 #define CIGAIN 0x29
bonchenko 0:cf3dc3c5156b 48 #define AWG 0x2A
bonchenko 0:cf3dc3c5156b 49 #define BWG 0x2B
bonchenko 0:cf3dc3c5156b 50 #define CWG 0x2C
bonchenko 0:cf3dc3c5156b 51 #define AVARG 0x2D
bonchenko 0:cf3dc3c5156b 52 #define BVARG 0x2E
bonchenko 0:cf3dc3c5156b 53 #define CVARG 0x2F
bonchenko 0:cf3dc3c5156b 54 #define AVAG 0x30
bonchenko 0:cf3dc3c5156b 55 #define BVAG 0x31
bonchenko 0:cf3dc3c5156b 56 #define CVAG 0x32
bonchenko 0:cf3dc3c5156b 57 #define AVRMSOS 0x33
bonchenko 0:cf3dc3c5156b 58 #define BVRMSOS 0x34
bonchenko 0:cf3dc3c5156b 59 #define CVRMSOS 0x35
bonchenko 0:cf3dc3c5156b 60 #define AIRMSOS 0x36
bonchenko 0:cf3dc3c5156b 61 #define BIRMSOS 0x37
bonchenko 0:cf3dc3c5156b 62 #define CIRMSOS 0x38
bonchenko 0:cf3dc3c5156b 63 #define AWAITOS 0x39
bonchenko 0:cf3dc3c5156b 64 #define BWAITOS 0x3A
bonchenko 0:cf3dc3c5156b 65 #define CWAITOS 0x3B
bonchenko 0:cf3dc3c5156b 66 #define AVAROS 0x3C
bonchenko 0:cf3dc3c5156b 67 #define BVAROS 0x3D
bonchenko 0:cf3dc3c5156b 68 #define CVAROS 0x3E
bonchenko 0:cf3dc3c5156b 69 #define APHCAL 0x3F
bonchenko 0:cf3dc3c5156b 70 #define BPHCAL 0x40
bonchenko 0:cf3dc3c5156b 71 #define CPHCAL 0x41
bonchenko 0:cf3dc3c5156b 72 #define WDIV 0x42
bonchenko 0:cf3dc3c5156b 73 #define VADIV 0x44
bonchenko 0:cf3dc3c5156b 74 #define VARDIV 0x43
bonchenko 0:cf3dc3c5156b 75 #define APCFNUM 0x45
bonchenko 0:cf3dc3c5156b 76 #define APCFDEN 0x46
bonchenko 0:cf3dc3c5156b 77 #define VARCFNUM 0x47
bonchenko 0:cf3dc3c5156b 78 #define VARCFDEN 0x48
bonchenko 0:cf3dc3c5156b 79 #define CHKSUM 0x7E
bonchenko 0:cf3dc3c5156b 80 #define VERSION 0x7F
bonchenko 0:cf3dc3c5156b 81
bonchenko 0:cf3dc3c5156b 82 #define REG_READ(reg) reg
bonchenko 0:cf3dc3c5156b 83 #define REG_WRITE(reg) (unsigned char)((reg) | 0x80)
bonchenko 0:cf3dc3c5156b 84
bonchenko 0:cf3dc3c5156b 85 //PHASE_SEL
bonchenko 0:cf3dc3c5156b 86 #define PHASE_A 0
bonchenko 0:cf3dc3c5156b 87 #define PHASE_B 1
bonchenko 0:cf3dc3c5156b 88 #define PHASE_C 2
bonchenko 0:cf3dc3c5156b 89
bonchenko 0:cf3dc3c5156b 90 //WAV_SEL
bonchenko 0:cf3dc3c5156b 91 #define CURRENT 0
bonchenko 0:cf3dc3c5156b 92 #define VOLTAGE 1
bonchenko 0:cf3dc3c5156b 93 #define ACT_PWR 2
bonchenko 0:cf3dc3c5156b 94 #define REACT_PWR 3
bonchenko 0:cf3dc3c5156b 95 #define APP_PWR 4
bonchenko 0:cf3dc3c5156b 96
bonchenko 0:cf3dc3c5156b 97 //interrupt mask/status bit
bonchenko 0:cf3dc3c5156b 98 #define AEHF 0
bonchenko 0:cf3dc3c5156b 99 #define REHF 1
bonchenko 0:cf3dc3c5156b 100 #define VAEHF 2
bonchenko 0:cf3dc3c5156b 101 #define SAGA 3
bonchenko 0:cf3dc3c5156b 102 #define SAGB 4
bonchenko 0:cf3dc3c5156b 103 #define SAGC 5
bonchenko 0:cf3dc3c5156b 104 #define ZXTOA 6
bonchenko 0:cf3dc3c5156b 105 #define ZXTOB 7
bonchenko 0:cf3dc3c5156b 106 #define ZXTOC 8
bonchenko 0:cf3dc3c5156b 107 #define ZXA 9
bonchenko 0:cf3dc3c5156b 108 #define ZXB 10
bonchenko 0:cf3dc3c5156b 109 #define ZXC 11
bonchenko 0:cf3dc3c5156b 110 #define LENERGY 12
bonchenko 0:cf3dc3c5156b 111 #define RESET 13
bonchenko 0:cf3dc3c5156b 112 #define PKV 14
bonchenko 0:cf3dc3c5156b 113 #define PKI 15
bonchenko 0:cf3dc3c5156b 114 #define WFSM 16
bonchenko 0:cf3dc3c5156b 115 #define REVPAP 17
bonchenko 0:cf3dc3c5156b 116 #define REVPRP 18
bonchenko 0:cf3dc3c5156b 117 #define SEQERR 19
bonchenko 0:cf3dc3c5156b 118
bonchenko 0:cf3dc3c5156b 119 #define WAVMODE_VALUE(phase, wave) (((wave)<<2)|(phase))
bonchenko 0:cf3dc3c5156b 120
bonchenko 2:ea36884772ae 121 #define NUMSAMPLES 100
bonchenko 2:ea36884772ae 122
bonchenko 3:4fad91cf047a 123 #define ITEST 0.6
bonchenko 3:4fad91cf047a 124 #define VNOM 220
bonchenko 3:4fad91cf047a 125 #define WHREXPECTED 1.2
bonchenko 3:4fad91cf047a 126 #define VAHREXPECTED 1.2
bonchenko 3:4fad91cf047a 127
bonchenko 0:cf3dc3c5156b 128 class ADE7758
bonchenko 1:f5e8c8591449 129 {
bonchenko 1:f5e8c8591449 130 public:
bonchenko 1:f5e8c8591449 131 ADE7758 (PinName mosi, PinName miso, PinName sclk, PinName cs, PinName interrupt);
bonchenko 1:f5e8c8591449 132 void begin();
bonchenko 2:ea36884772ae 133 void calibrateVI(uint8_t numSamples);
bonchenko 2:ea36884772ae 134 void calibrateGain(char phase);
bonchenko 3:4fad91cf047a 135 float getAccumulationTime(char phase);
bonchenko 1:f5e8c8591449 136 int WattHR(char phase);
bonchenko 1:f5e8c8591449 137 int VARHR(char phase);
bonchenko 1:f5e8c8591449 138 int VAHR(char phase);
bonchenko 1:f5e8c8591449 139 long VRMS(char phase);
bonchenko 1:f5e8c8591449 140 long IRMS(char phase);
bonchenko 2:ea36884772ae 141 float calculateVRMS(char phase);
bonchenko 2:ea36884772ae 142 float calculateIRMS(char phase);
bonchenko 1:f5e8c8591449 143 long waveform(char phase,char source);
bonchenko 1:f5e8c8591449 144 int lineFreq(char phase);
bonchenko 3:4fad91cf047a 145 void calculateEnergy(char phase);
bonchenko 1:f5e8c8591449 146 void powerOff();
bonchenko 1:f5e8c8591449 147 void powerON();
bonchenko 1:f5e8c8591449 148 void sleep();
bonchenko 1:f5e8c8591449 149 void wakeUp();
bonchenko 1:f5e8c8591449 150 long getInterruptStatus(void);
bonchenko 1:f5e8c8591449 151 long getResetInterruptStatus(void);
bonchenko 1:f5e8c8591449 152 void enableChip();
bonchenko 1:f5e8c8591449 153 void disableChip();
bonchenko 1:f5e8c8591449 154 void write8bits(char reg, unsigned char data);
bonchenko 1:f5e8c8591449 155 void write16bits(char reg, unsigned int data);
bonchenko 3:4fad91cf047a 156 void write24bits(char reg, unsigned int data);
bonchenko 1:f5e8c8591449 157 unsigned char read8bits(char reg);
bonchenko 1:f5e8c8591449 158 unsigned int read16bits(char reg);
bonchenko 1:f5e8c8591449 159 unsigned long read24bits(char reg);
bonchenko 1:f5e8c8591449 160 float AVRMSCalib;
bonchenko 1:f5e8c8591449 161 float BVRMSCalib;
bonchenko 1:f5e8c8591449 162 float CVRMSCalib;
bonchenko 1:f5e8c8591449 163 float AIRMSCalib;
bonchenko 1:f5e8c8591449 164 float BIRMSCalib;
bonchenko 1:f5e8c8591449 165 float CIRMSCalib;
bonchenko 3:4fad91cf047a 166
bonchenko 2:ea36884772ae 167
bonchenko 1:f5e8c8591449 168 private:
bonchenko 1:f5e8c8591449 169 long getIRMS(char phase);
bonchenko 1:f5e8c8591449 170 long getVRMS(char phase);
bonchenko 1:f5e8c8591449 171 int getWattHR(char phase);
bonchenko 1:f5e8c8591449 172 int getVARHR(char phase);
bonchenko 1:f5e8c8591449 173 int getVAHR(char phase);
bonchenko 0:cf3dc3c5156b 174
bonchenko 1:f5e8c8591449 175 SWSPI _ADE7758SPI;
bonchenko 1:f5e8c8591449 176 DigitalOut _ADESS;
bonchenko 1:f5e8c8591449 177 DigitalIn _ADEINT;
bonchenko 3:4fad91cf047a 178 float AWhLSB;
bonchenko 3:4fad91cf047a 179 float BWhLSB;
bonchenko 3:4fad91cf047a 180 float CWhLSB;
bonchenko 3:4fad91cf047a 181 float AVAhLSB;
bonchenko 3:4fad91cf047a 182 float BVAhLSB;
bonchenko 3:4fad91cf047a 183 float CVAhLSB;
bonchenko 0:cf3dc3c5156b 184 };
bonchenko 0:cf3dc3c5156b 185
bonchenko 0:cf3dc3c5156b 186 extern ADE7758 ADE;
bonchenko 0:cf3dc3c5156b 187 #endif