Calibrate and get energy readings from ADE7758 IC from Analog Devices

Fork of ADE7758 by Emma

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers ade7758.h Source File

ade7758.h

00001 #ifndef MBED_ADE7758_H
00002 #define MBED_ADE7758_H
00003  
00004 #include "mbed.h" 
00005 #include "SWSPI.h"
00006 
00007 #define AWATTHR   0x01
00008 #define BWATTHR   0x02
00009 #define CWATTHR   0x03
00010 #define AVARHR    0x04
00011 #define BVARHR    0x05
00012 #define CVARHR    0x06
00013 #define AVAHR     0x07
00014 #define BVAHR     0x08
00015 #define CVAHR     0x09
00016 #define AIRMS     0x0A
00017 #define BIRMS     0x0B
00018 #define CIRMS     0x0C
00019 #define AVRMS     0x0D
00020 #define BVRMS     0x0E
00021 #define CVRMS     0x0F
00022 #define FREQ      0x10
00023 #define TEMP      0x11
00024 #define WFORM     0x12
00025 #define OPMODE    0x13
00026 #define MMODE     0x14
00027 #define WAVMODE   0x15
00028 #define COMPMODE  0x16
00029 #define LCYCMODE  0x17
00030 #define MASK      0x18
00031 #define STATUS    0x19
00032 #define RSTATUS   0x1A
00033 #define ZXTOUT    0x1B
00034 #define LINECYC   0x1C
00035 #define SAGCYC    0x1D
00036 #define SAGLVL    0x1E
00037 #define VPINTLVL  0x1F
00038 #define IPINTLVL  0x20
00039 #define VPEAK     0x21
00040 #define IPEAK     0x22
00041 #define GAIN      0x23
00042 #define AVRMSGAIN 0x24
00043 #define BVRMSGAIN 0x25
00044 #define CVRMSGAIN 0x26
00045 #define AIGAIN    0x27
00046 #define BIGAIN    0x28
00047 #define CIGAIN    0x29
00048 #define AWG       0x2A
00049 #define BWG       0x2B
00050 #define CWG       0x2C
00051 #define AVARG     0x2D
00052 #define BVARG     0x2E
00053 #define CVARG     0x2F
00054 #define AVAG      0x30
00055 #define BVAG      0x31
00056 #define CVAG      0x32
00057 #define AVRMSOS   0x33
00058 #define BVRMSOS   0x34
00059 #define CVRMSOS   0x35
00060 #define AIRMSOS   0x36
00061 #define BIRMSOS   0x37
00062 #define CIRMSOS   0x38
00063 #define AWAITOS   0x39
00064 #define BWAITOS   0x3A
00065 #define CWAITOS   0x3B
00066 #define AVAROS    0x3C
00067 #define BVAROS    0x3D
00068 #define CVAROS    0x3E
00069 #define APHCAL    0x3F
00070 #define BPHCAL    0x40
00071 #define CPHCAL    0x41
00072 #define WDIV      0x42
00073 #define VADIV     0x44
00074 #define VARDIV    0x43
00075 #define APCFNUM   0x45
00076 #define APCFDEN   0x46
00077 #define VARCFNUM  0x47
00078 #define VARCFDEN  0x48
00079 #define CHKSUM    0x7E
00080 #define VERSION   0x7F
00081 
00082 #define REG_READ(reg) reg
00083 #define REG_WRITE(reg)  (unsigned char)((reg) | 0x80)
00084 
00085 //PHASE_SEL
00086 #define PHASE_A     0
00087 #define PHASE_B     1
00088 #define PHASE_C     2
00089 
00090 //WAV_SEL
00091 #define CURRENT     0
00092 #define VOLTAGE     1
00093 #define ACT_PWR     2
00094 #define REACT_PWR   3
00095 #define APP_PWR     4
00096 
00097 //interrupt mask/status bit
00098 #define AEHF            0
00099 #define REHF            1
00100 #define VAEHF           2
00101 #define SAGA            3
00102 #define SAGB            4
00103 #define SAGC            5
00104 #define ZXTOA           6
00105 #define ZXTOB           7
00106 #define ZXTOC           8
00107 #define ZXA             9
00108 #define ZXB             10
00109 #define ZXC             11
00110 #define LENERGY         12
00111 #define RESET           13
00112 #define PKV             14
00113 #define PKI             15
00114 #define WFSM            16
00115 #define REVPAP          17
00116 #define REVPRP          18
00117 #define SEQERR          19
00118 
00119 #define WAVMODE_VALUE(phase, wave)   (((wave)<<2)|(phase))
00120 
00121 #define NUMSAMPLES      20
00122 
00123 #define ITEST           0.6
00124 #define VNOM            220
00125 #define WHREXPECTED     1.2
00126 #define VAHREXPECTED    1.2
00127 
00128 class ADE7758
00129 {       
00130     public:   
00131         ADE7758 (PinName mosi, PinName miso, PinName sclk, PinName cs, PinName interrupt);
00132         void begin();
00133         void calibrateVI(uint8_t numSamples);
00134         void writeRMSOffset(uint16_t AIRMSOSValue, uint16_t BIRMSOSValue, uint16_t CIRMSOSValue, uint16_t AVRMSOSValue, uint16_t BVRMSOSValue, uint16_t CVRMSOSValue);
00135         void calibrateGain(char phase);
00136         float getAccumulationTime(char phase);
00137         int WattHR(char phase);
00138         int VARHR(char phase);
00139         int VAHR(char phase);
00140         long VRMS(char phase);
00141         long IRMS(char phase);
00142         float calculateVRMS(char phase);
00143         float calculateIRMS(char phase);
00144         void getEnergy(char phase, uint8_t samplingPeriod, float *AWattHr, float *BWattHr, float *CWattHr, float *AVAHr, float *BVAHr, float *CVAHr);
00145         long waveform(char phase,char source);
00146         int lineFreq(char phase);
00147         void calculateEnergy(char phase);
00148         
00149         void powerOff();
00150         void powerON();
00151         void sleep();
00152         void wakeUp();
00153         long getInterruptStatus(void);
00154         long getResetInterruptStatus(void);
00155         void enableChip();
00156         void disableChip();
00157         void write8bits(char reg, unsigned char data);
00158         void write16bits(char reg, unsigned int data);
00159         void write24bits(char reg, unsigned int data);
00160         unsigned char read8bits(char reg);
00161         unsigned int read16bits(char reg);
00162         unsigned long read24bits(char reg);
00163         float AVRMSCalib;
00164         float BVRMSCalib;
00165         float CVRMSCalib;
00166         float AIRMSCalib;
00167         float BIRMSCalib;
00168         float CIRMSCalib;
00169         float AWGCalib;
00170         float BWGCalib;
00171         float CWGCalib;
00172         float AVAGCalib;
00173         float BVAGCalib;
00174         float CVAGCalib;
00175         float AWhLSB;
00176         float BWhLSB;
00177         float CWhLSB;
00178         float AVAhLSB;
00179         float BVAhLSB;
00180         float CVAhLSB;
00181         
00182     private:   
00183         long getIRMS(char phase);
00184         long getVRMS(char phase);
00185         int getWattHR(char phase);
00186         int getVARHR(char phase);
00187         int getVAHR(char phase);
00188         void getAccumulatedEnergy(char phase, uint16_t *AWattHr, uint16_t *BWattHr, uint16_t *CWattHr, uint16_t *AVAHr, uint16_t *BVAHr, uint16_t *CVAHr);
00189         SWSPI _ADE7758SPI;
00190         DigitalOut _ADESS;
00191         DigitalIn _ADEINT;    
00192 };
00193 
00194 extern ADE7758 ADE;
00195 #endif