lib pm2

Dependencies:   mbed

Dependents:   TestPMLIB TurtleBot_PM

Fork of PowerMon by Sippakorn Saeng-aroon

Committer:
sippasaeng
Date:
Sun Feb 25 09:10:18 2018 +0000
Revision:
1:7a6a568c5c34
Parent:
main.cpp@0:6615da7486d0
Rev1.01 25FEB,18;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
sippasaeng 0:6615da7486d0 1
sippasaeng 0:6615da7486d0 2 #define i2c_sda D14
sippasaeng 0:6615da7486d0 3 #define i2c_scl D15
sippasaeng 0:6615da7486d0 4
sippasaeng 0:6615da7486d0 5 #define SourceVH 0x58
sippasaeng 0:6615da7486d0 6 #define SourceVL 0x59
sippasaeng 0:6615da7486d0 7 #define SenseVH 0x54
sippasaeng 0:6615da7486d0 8 #define SenseVL 0x55
sippasaeng 0:6615da7486d0 9 #define PowerH 0x5B
sippasaeng 0:6615da7486d0 10 #define PowerL 0x5C
sippasaeng 0:6615da7486d0 11
sippasaeng 0:6615da7486d0 12 I2C i2c_PM(i2c_sda, i2c_scl);
sippasaeng 0:6615da7486d0 13
sippasaeng 0:6615da7486d0 14 class powerMon{
sippasaeng 0:6615da7486d0 15 private:
sippasaeng 0:6615da7486d0 16 int w_addr,r_addr;
sippasaeng 0:6615da7486d0 17
sippasaeng 0:6615da7486d0 18 public:
sippasaeng 0:6615da7486d0 19 powerMon(int addr_sel){
sippasaeng 0:6615da7486d0 20 switch(addr_sel)
sippasaeng 0:6615da7486d0 21 {
sippasaeng 0:6615da7486d0 22 case 0: w_addr=0x98; break;
sippasaeng 0:6615da7486d0 23 case 100: w_addr=0x9A; break;
sippasaeng 0:6615da7486d0 24 case 180: w_addr=0x9C; break;
sippasaeng 0:6615da7486d0 25 case 300: w_addr=0x9E; break;
sippasaeng 0:6615da7486d0 26 case 430: w_addr=0x90; break;
sippasaeng 0:6615da7486d0 27 case 560: w_addr=0x92; break;
sippasaeng 0:6615da7486d0 28 case 750: w_addr=0x94; break;
sippasaeng 0:6615da7486d0 29 case 1270: w_addr=0x96; break;
sippasaeng 0:6615da7486d0 30 case 1600: w_addr=0x50; break;
sippasaeng 0:6615da7486d0 31 case 2000: w_addr=0x52; break;
sippasaeng 0:6615da7486d0 32 case 2700: w_addr=0x54; break;
sippasaeng 0:6615da7486d0 33 case 3600: w_addr=0x56; break;
sippasaeng 0:6615da7486d0 34 case 5600: w_addr=0x58; break;
sippasaeng 0:6615da7486d0 35 case 9100: w_addr=0x58; break;
sippasaeng 0:6615da7486d0 36 case 20000: w_addr=0x5A; break;
sippasaeng 0:6615da7486d0 37 case -1: w_addr=0x30; break;
sippasaeng 0:6615da7486d0 38 }
sippasaeng 0:6615da7486d0 39 r_addr=w_addr+0x01;
sippasaeng 0:6615da7486d0 40
sippasaeng 0:6615da7486d0 41 }
sippasaeng 0:6615da7486d0 42 double V_Sense(){
sippasaeng 0:6615da7486d0 43 double volt=0,mult_fac=1,offset=0;
sippasaeng 0:6615da7486d0 44 char buffer[2];
sippasaeng 0:6615da7486d0 45 buffer[0]=SenseVL;
sippasaeng 0:6615da7486d0 46 i2c_PM.write(r_addr,buffer, 1,true);
sippasaeng 0:6615da7486d0 47 i2c_PM.read(r_addr, buffer,1);
sippasaeng 0:6615da7486d0 48 volt=buffer[0]/16;
sippasaeng 0:6615da7486d0 49 buffer[0]=SenseVH;
sippasaeng 0:6615da7486d0 50 i2c_PM.write(r_addr,buffer, 1,true);
sippasaeng 0:6615da7486d0 51 i2c_PM.read(r_addr, buffer,1);
sippasaeng 0:6615da7486d0 52 volt += (buffer[0] & 0x7f)*16;
sippasaeng 0:6615da7486d0 53 volt = (volt*mult_fac)+offset;
sippasaeng 0:6615da7486d0 54 return (buffer[0]&0x80)?-volt:volt;
sippasaeng 0:6615da7486d0 55 }
sippasaeng 0:6615da7486d0 56 double V_Source(){
sippasaeng 0:6615da7486d0 57 double volt=0;
sippasaeng 0:6615da7486d0 58 char buffer[2];
sippasaeng 0:6615da7486d0 59 buffer[0]=SourceVL;
sippasaeng 0:6615da7486d0 60 i2c_PM.write(r_addr,buffer, 1,true);
sippasaeng 0:6615da7486d0 61 i2c_PM.read(r_addr, buffer,1);
sippasaeng 0:6615da7486d0 62 volt=buffer[0]/32;
sippasaeng 0:6615da7486d0 63 buffer[0]=SourceVH;
sippasaeng 0:6615da7486d0 64 i2c_PM.write(r_addr,buffer, 1,true);
sippasaeng 0:6615da7486d0 65 i2c_PM.read(r_addr, buffer,1);
sippasaeng 0:6615da7486d0 66 volt += buffer[0]*8;
sippasaeng 0:6615da7486d0 67
sippasaeng 0:6615da7486d0 68 return (volt/2048.0000)*23.9883;
sippasaeng 0:6615da7486d0 69 }
sippasaeng 0:6615da7486d0 70 double Current(){
sippasaeng 0:6615da7486d0 71 return (V_Sense()/2047.0000)*(8.0000);}
sippasaeng 0:6615da7486d0 72 long Power_Ratio(){
sippasaeng 0:6615da7486d0 73 long power_r=0;
sippasaeng 0:6615da7486d0 74 char buffer[2];
sippasaeng 0:6615da7486d0 75 buffer[0]=PowerL;
sippasaeng 0:6615da7486d0 76 i2c_PM.write(r_addr,buffer, 1,true);
sippasaeng 0:6615da7486d0 77 i2c_PM.read(r_addr, buffer,1);
sippasaeng 0:6615da7486d0 78 power_r=buffer[0];
sippasaeng 0:6615da7486d0 79 buffer[0]=PowerH;
sippasaeng 0:6615da7486d0 80 i2c_PM.write(r_addr,buffer, 1,true);
sippasaeng 0:6615da7486d0 81 i2c_PM.read(r_addr, buffer,1);
sippasaeng 0:6615da7486d0 82 power_r += buffer[0]*256;
sippasaeng 0:6615da7486d0 83
sippasaeng 0:6615da7486d0 84 return power_r;}
sippasaeng 0:6615da7486d0 85 double Power(){
sippasaeng 0:6615da7486d0 86 return (Power_Ratio()/65535.0000)*(8.0000*23.9883);
sippasaeng 0:6615da7486d0 87 }
sippasaeng 0:6615da7486d0 88
sippasaeng 0:6615da7486d0 89 };