Calibrate and get energy readings from ADE7758 IC from Analog Devices
Fork of ADE7758 by
Currently this library can be used to calibrate and get VRMS, IRMS, active, and apparent energy. I havent worked on reactive energy measurement.
ade-example.cpp@5:ea599a829b0b, 2015-04-20 (annotated)
- Committer:
- bonchenko
- Date:
- Mon Apr 20 04:11:14 2015 +0000
- Revision:
- 5:ea599a829b0b
- Child:
- 6:513b3b5750de
Initial public publish - can get VRMS, IRMS, Active and Apparent Energy
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
bonchenko | 5:ea599a829b0b | 1 | #include "mbed.h" |
bonchenko | 5:ea599a829b0b | 2 | #include "ade7758.h" |
bonchenko | 5:ea599a829b0b | 3 | |
bonchenko | 5:ea599a829b0b | 4 | #define AIRMSOFFSET 0xFB1 |
bonchenko | 5:ea599a829b0b | 5 | #define BIRMSOFFSET 0xFB0 |
bonchenko | 5:ea599a829b0b | 6 | #define CIRMSOFFSET 0xFB1 |
bonchenko | 5:ea599a829b0b | 7 | #define AVRMSOFFSET 0xFFB |
bonchenko | 5:ea599a829b0b | 8 | #define BVRMSOFFSET 0x2 |
bonchenko | 5:ea599a829b0b | 9 | #define CVRMSOFFSET 0xFFF |
bonchenko | 5:ea599a829b0b | 10 | |
bonchenko | 5:ea599a829b0b | 11 | Serial DBG(PA_9, PA_10); // tx, rx |
bonchenko | 5:ea599a829b0b | 12 | ADE7758 ADE(PB_5, PD_2, PB_4, PB_6, PB_7); |
bonchenko | 5:ea599a829b0b | 13 | |
bonchenko | 5:ea599a829b0b | 14 | void printBytes(long input, uint8_t numBits); |
bonchenko | 5:ea599a829b0b | 15 | bool CALIBRATE = true; |
bonchenko | 5:ea599a829b0b | 16 | |
bonchenko | 5:ea599a829b0b | 17 | float AWattHr, BWattHr, CWattHr, AVAHr, BVAHr, CVAHr; |
bonchenko | 5:ea599a829b0b | 18 | |
bonchenko | 5:ea599a829b0b | 19 | void ade_main() { |
bonchenko | 5:ea599a829b0b | 20 | DBG.baud(115200); |
bonchenko | 5:ea599a829b0b | 21 | DBG.format(8,Serial::None,1); |
bonchenko | 5:ea599a829b0b | 22 | DBG.printf("Starting...\r\n"); |
bonchenko | 5:ea599a829b0b | 23 | |
bonchenko | 5:ea599a829b0b | 24 | ADE.begin(); |
bonchenko | 5:ea599a829b0b | 25 | |
bonchenko | 5:ea599a829b0b | 26 | if (CALIBRATE) { |
bonchenko | 5:ea599a829b0b | 27 | DBG.printf("Calibrating...\r\n"); |
bonchenko | 5:ea599a829b0b | 28 | ADE.calibrateVI(20); |
bonchenko | 5:ea599a829b0b | 29 | DBG.printf("V calibration: %.2f, %.2f, %.2f\r\n", ADE.AVRMSCalib, ADE.BVRMSCalib, ADE.CVRMSCalib); |
bonchenko | 5:ea599a829b0b | 30 | DBG.printf("I calibration: %.2f, %.2f, %.2f\r\n", ADE.AIRMSCalib, ADE.BIRMSCalib, ADE.CIRMSCalib); |
bonchenko | 5:ea599a829b0b | 31 | ADE.writeRMSOffset(AIRMSOFFSET, BIRMSOFFSET, CIRMSOFFSET, AVRMSOFFSET, BVRMSOFFSET, CVRMSOFFSET); |
bonchenko | 5:ea599a829b0b | 32 | ADE.calibrateGain(PHASE_A); |
bonchenko | 5:ea599a829b0b | 33 | DBG.printf("Watt gain calibration: %.5f, %.5f, %.5f\r\n", ADE.AWGCalib, ADE.BWGCalib, ADE.CWGCalib); |
bonchenko | 5:ea599a829b0b | 34 | DBG.printf("VA gain calibration: %.5f, %.5f, %.5f\r\n", ADE.AVAGCalib, ADE.BVAGCalib, ADE.CVAGCalib); |
bonchenko | 5:ea599a829b0b | 35 | DBG.printf("Wh/LSB: %.8f, %.8f, %.8f\r\n", ADE.AWhLSB, ADE.BWhLSB, ADE.CWhLSB); |
bonchenko | 5:ea599a829b0b | 36 | DBG.printf("VAh/LSB: %.8f, %.8f, %.8f\r\n", ADE.AVAhLSB, ADE.BVAhLSB, ADE.CVAhLSB); |
bonchenko | 5:ea599a829b0b | 37 | } |
bonchenko | 5:ea599a829b0b | 38 | |
bonchenko | 5:ea599a829b0b | 39 | DBG.printf("Start measurement\r\n"); |
bonchenko | 5:ea599a829b0b | 40 | |
bonchenko | 5:ea599a829b0b | 41 | while(1) { |
bonchenko | 5:ea599a829b0b | 42 | DBG.printf("VRMS for each phase: %.2f, %.2f, %.2f\r\n", ADE.calculateVRMS(PHASE_A), ADE.calculateVRMS(PHASE_B), ADE.calculateVRMS(PHASE_C)); |
bonchenko | 5:ea599a829b0b | 43 | DBG.printf("IRMS for each phase: %.2f, %.2f, %.2f\r\n", ADE.calculateIRMS(PHASE_A), ADE.calculateIRMS(PHASE_B), ADE.calculateIRMS(PHASE_C)); |
bonchenko | 5:ea599a829b0b | 44 | ADE.getEnergy(PHASE_A, 1, &AWattHr, &BWattHr, &CWattHr, &AVAHr, &BVAHr, &CVAHr); |
bonchenko | 5:ea599a829b0b | 45 | DBG.printf("WattHR for each phase: %.2f, %.2f, %.2f\r\n", AWattHr, BWattHr, CWattHr); |
bonchenko | 5:ea599a829b0b | 46 | DBG.printf("VAHR for each phase: %.2f, %.2f, %.2f\r\n", AVAHr, BVAHr, CVAHr); |
bonchenko | 5:ea599a829b0b | 47 | DBG.printf("\r\n"); |
bonchenko | 5:ea599a829b0b | 48 | wait(10); |
bonchenko | 5:ea599a829b0b | 49 | } |
bonchenko | 5:ea599a829b0b | 50 | } |
bonchenko | 5:ea599a829b0b | 51 | |
bonchenko | 5:ea599a829b0b | 52 | void printBytes(long input, uint8_t numBits) { |
bonchenko | 5:ea599a829b0b | 53 | for (int i = numBits-1; i >= 0; i--) { |
bonchenko | 5:ea599a829b0b | 54 | DBG.printf("%d", ((input >> i) & 1)); |
bonchenko | 5:ea599a829b0b | 55 | } |
bonchenko | 5:ea599a829b0b | 56 | } |