Calibrate and get energy readings from ADE7758 IC from Analog Devices
Fork of ADE7758 by
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
Generated on Wed Jul 13 2022 11:36:54 by 1.7.2