INA226 Library

Dependents:   HYBRYD2018_IZU_ROCKET Hybrid_IZU2019 SWAN_IZU2019_v1 Hybrid_OB2021_MAIN

Committer:
zebrin1422
Date:
Wed May 02 18:12:21 2018 +0000
Revision:
5:76dc889ffe3c
Parent:
3:ea79e6a72ec3
Child:
7:5c1d19898020
INA226 library;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
zebrin1422 0:ad712ebc38d6 1 #ifndef INA226
zebrin1422 0:ad712ebc38d6 2 #define INA226
zebrin1422 0:ad712ebc38d6 3
zebrin1422 2:eccb118370eb 4 #define check_reg 0xFE
zebrin1422 0:ad712ebc38d6 5 #define Ctrl_reg 0x00
zebrin1422 0:ad712ebc38d6 6 #define V_shunt_reg 0x01
zebrin1422 0:ad712ebc38d6 7 #define V_bus_reg 0x02
zebrin1422 0:ad712ebc38d6 8 #define power_reg 0x03
zebrin1422 0:ad712ebc38d6 9 #define current_reg 0x04
zebrin1422 0:ad712ebc38d6 10 #define cal_reg 0x05
zebrin1422 0:ad712ebc38d6 11
zebrin1422 0:ad712ebc38d6 12 //I2C i2c(PB_7, PB_6); // sda, scl
zebrin1422 0:ad712ebc38d6 13 //Serial pc(USBTX, USBRX); //tx, rx
zebrin1422 0:ad712ebc38d6 14
zebrin1422 0:ad712ebc38d6 15 /**
zebrin1422 0:ad712ebc38d6 16 * @bref INA226 Class
zebrin1422 0:ad712ebc38d6 17 * @author Seiya Maemura
zebrin1422 0:ad712ebc38d6 18 */
zebrin1422 0:ad712ebc38d6 19
zebrin1422 0:ad712ebc38d6 20
zebrin1422 0:ad712ebc38d6 21 class myINA226
zebrin1422 0:ad712ebc38d6 22 {
zebrin1422 0:ad712ebc38d6 23 public:
zebrin1422 0:ad712ebc38d6 24
zebrin1422 5:76dc889ffe3c 25 typedef enum A1{
zebrin1422 5:76dc889ffe3c 26 A1_GND = 0,
zebrin1422 5:76dc889ffe3c 27 A1_VDD = 1,
zebrin1422 5:76dc889ffe3c 28 A1_SDA = 2,
zebrin1422 5:76dc889ffe3c 29 A1_SCL = 3
zebrin1422 5:76dc889ffe3c 30 } A1;
zebrin1422 5:76dc889ffe3c 31
zebrin1422 5:76dc889ffe3c 32 typedef enum A0{
zebrin1422 5:76dc889ffe3c 33 A0_GND = 0,
zebrin1422 5:76dc889ffe3c 34 A0_VDD = 1,
zebrin1422 5:76dc889ffe3c 35 A0_SDA = 2,
zebrin1422 5:76dc889ffe3c 36 A0_SCL = 3
zebrin1422 5:76dc889ffe3c 37 } A0;
zebrin1422 5:76dc889ffe3c 38
zebrin1422 5:76dc889ffe3c 39 /***********************************************************************
zebrin1422 5:76dc889ffe3c 40 A1,A0はそれぞれはんだでジャンパして選択します
zebrin1422 5:76dc889ffe3c 41 このA1,A0の組み合わせでスレーブアドレスを決定します
zebrin1422 5:76dc889ffe3c 42
zebrin1422 5:76dc889ffe3c 43 @example
zebrin1422 5:76dc889ffe3c 44 A1:GND,A0:GND → SLAVE_ADDR:0b10000000
zebrin1422 5:76dc889ffe3c 45 ***********************************************************************/
zebrin1422 0:ad712ebc38d6 46
zebrin1422 5:76dc889ffe3c 47 myINA226(I2C &i2cBus,A1 celect_1 = A1_GND, A0 celect_0 = A0_GND);
zebrin1422 5:76dc889ffe3c 48 /***********************************************************************
zebrin1422 5:76dc889ffe3c 49 第一、第二引数がないとスレーブアドレスが0b10000000になるようになっている
zebrin1422 5:76dc889ffe3c 50
zebrin1422 5:76dc889ffe3c 51 ***********************************************************************/
zebrin1422 0:ad712ebc38d6 52
zebrin1422 0:ad712ebc38d6 53 void set_callibretion(unsigned int val = 0x0AAA);
zebrin1422 5:76dc889ffe3c 54 /***********************************************************************
zebrin1422 5:76dc889ffe3c 55 電流を取得したいときに必要
zebrin1422 5:76dc889ffe3c 56 これをセットしないと電流は取れない
zebrin1422 5:76dc889ffe3c 57
zebrin1422 5:76dc889ffe3c 58 @example
zebrin1422 5:76dc889ffe3c 59
zebrin1422 5:76dc889ffe3c 60 float current;
zebrin1422 5:76dc889ffe3c 61
zebrin1422 5:76dc889ffe3c 62 myINA226.set_callibretion();
zebrin1422 5:76dc889ffe3c 63 current = myINA226.get_current();
zebrin1422 5:76dc889ffe3c 64 ***********************************************************************/
zebrin1422 0:ad712ebc38d6 65
zebrin1422 0:ad712ebc38d6 66 int Connection_check();
zebrin1422 5:76dc889ffe3c 67 /***********************************************************************
zebrin1422 5:76dc889ffe3c 68 INA226の接続確認
zebrin1422 5:76dc889ffe3c 69 0が返ってくればOK
zebrin1422 5:76dc889ffe3c 70 1が返ってくればError
zebrin1422 5:76dc889ffe3c 71 ***********************************************************************/
zebrin1422 0:ad712ebc38d6 72
zebrin1422 0:ad712ebc38d6 73 void setup(int i);
zebrin1422 5:76dc889ffe3c 74 /***********************************************************************
zebrin1422 5:76dc889ffe3c 75 シャント抵抗の電圧(よくわかんない)か,測りたい電圧の値、またはその両方の値を
zebrin1422 5:76dc889ffe3c 76 取得するかどうかを決める
zebrin1422 5:76dc889ffe3c 77 i=0のとき、両方の値を取得
zebrin1422 5:76dc889ffe3c 78 i=1のとき、測りたい方の電圧のみ取得
zebrin1422 5:76dc889ffe3c 79 i=2のとき、シャント抵抗の電圧のみ取得
zebrin1422 5:76dc889ffe3c 80 印加電圧は測りたい方の電圧なので基本的にはi=1
zebrin1422 5:76dc889ffe3c 81 デフォルトでは、両方の値を取得できるようになっている
zebrin1422 5:76dc889ffe3c 82 ***********************************************************************/
zebrin1422 0:ad712ebc38d6 83
zebrin1422 0:ad712ebc38d6 84 void get_Voltage_current(float *V_bus, float *current);
zebrin1422 5:76dc889ffe3c 85 /***********************************************************************
zebrin1422 5:76dc889ffe3c 86 INA226で測定したいだろう電圧と電流の値を
zebrin1422 5:76dc889ffe3c 87 まとめて取得する
zebrin1422 5:76dc889ffe3c 88 もしsetupでi=2、つまりシャント抵抗の電圧の値だけを取得するようにしていたら
zebrin1422 5:76dc889ffe3c 89 事前にi=0 or 1に設定しておかなければならない
zebrin1422 5:76dc889ffe3c 90
zebrin1422 5:76dc889ffe3c 91 @example
zebrin1422 5:76dc889ffe3c 92
zebrin1422 5:76dc889ffe3c 93 float V_bus,current;
zebrin1422 5:76dc889ffe3c 94
zebrin1422 5:76dc889ffe3c 95 myINA226.setup(0) or myINA226.setup(1);
zebrin1422 5:76dc889ffe3c 96 myINA226.get_Voltage_current(&V_bus,&current);
zebrin1422 5:76dc889ffe3c 97 ***********************************************************************/
zebrin1422 0:ad712ebc38d6 98
zebrin1422 1:9c367d227582 99 float get_Shunt_voltage();
zebrin1422 5:76dc889ffe3c 100 /***********************************************************************
zebrin1422 5:76dc889ffe3c 101 シャント抵抗の電圧の値を取得
zebrin1422 5:76dc889ffe3c 102 もしsetupでi=1、つまり印加電圧の値だけを取得するようにしていたら
zebrin1422 5:76dc889ffe3c 103 事前にi=0 or 2に設定しておかなければならない
zebrin1422 5:76dc889ffe3c 104
zebrin1422 5:76dc889ffe3c 105 @example
zebrin1422 5:76dc889ffe3c 106
zebrin1422 5:76dc889ffe3c 107 float V_shunt;
zebrin1422 5:76dc889ffe3c 108
zebrin1422 5:76dc889ffe3c 109 myINA226.setup(0) or myINA226.setup(2);
zebrin1422 5:76dc889ffe3c 110 V_shunt = myINA226.get_Shunt_voltage();
zebrin1422 5:76dc889ffe3c 111 ***********************************************************************/
zebrin1422 0:ad712ebc38d6 112
zebrin1422 1:9c367d227582 113 float get_Bus_voltage();
zebrin1422 5:76dc889ffe3c 114 /***********************************************************************
zebrin1422 5:76dc889ffe3c 115 印加電圧の値を取得
zebrin1422 5:76dc889ffe3c 116 もしsetupでi=2、つまりシャント抵抗の電圧の値だけを取得するようにしていたら
zebrin1422 5:76dc889ffe3c 117 事前にi=0 or 1に設定しておかなければならない
zebrin1422 5:76dc889ffe3c 118
zebrin1422 5:76dc889ffe3c 119 @example
zebrin1422 5:76dc889ffe3c 120
zebrin1422 5:76dc889ffe3c 121    float V_bus;
zebrin1422 5:76dc889ffe3c 122
zebrin1422 5:76dc889ffe3c 123 myINA226.setup(0) or myINA226.setup(1);
zebrin1422 5:76dc889ffe3c 124 V_bus = myINA226.get_Bus_voltage();
zebrin1422 5:76dc889ffe3c 125 ***********************************************************************/
zebrin1422 0:ad712ebc38d6 126
zebrin1422 1:9c367d227582 127 float get_current();
zebrin1422 5:76dc889ffe3c 128 /***********************************************************************
zebrin1422 5:76dc889ffe3c 129 電流の値を取得
zebrin1422 5:76dc889ffe3c 130 事前にset_callibretionをセットしておかないと
zebrin1422 5:76dc889ffe3c 131 0しか返ってこない
zebrin1422 5:76dc889ffe3c 132 @example
zebrin1422 5:76dc889ffe3c 133
zebrin1422 5:76dc889ffe3c 134 float current;
zebrin1422 5:76dc889ffe3c 135
zebrin1422 5:76dc889ffe3c 136 myINA226.set_callibretion();
zebrin1422 5:76dc889ffe3c 137 current = myINA226.get_current();
zebrin1422 5:76dc889ffe3c 138 ***********************************************************************/
zebrin1422 0:ad712ebc38d6 139
zebrin1422 1:9c367d227582 140 float get_power();
zebrin1422 5:76dc889ffe3c 141 /***********************************************************************
zebrin1422 5:76dc889ffe3c 142 電力の値を取得
zebrin1422 5:76dc889ffe3c 143 事前にset_callibretionをセットしておかないと
zebrin1422 5:76dc889ffe3c 144 0しか返ってこない
zebrin1422 5:76dc889ffe3c 145
zebrin1422 5:76dc889ffe3c 146 @example
zebrin1422 5:76dc889ffe3c 147
zebrin1422 5:76dc889ffe3c 148 float power;
zebrin1422 5:76dc889ffe3c 149
zebrin1422 5:76dc889ffe3c 150 myINA226.set_callibretion();
zebrin1422 5:76dc889ffe3c 151 power = myINA226.get_power();
zebrin1422 5:76dc889ffe3c 152 ***********************************************************************/
zebrin1422 0:ad712ebc38d6 153
zebrin1422 0:ad712ebc38d6 154
zebrin1422 0:ad712ebc38d6 155 private:
zebrin1422 0:ad712ebc38d6 156
zebrin1422 0:ad712ebc38d6 157 I2C *i2c;
zebrin1422 5:76dc889ffe3c 158 char _addr_1,_addr_0,_addr;
zebrin1422 5:76dc889ffe3c 159 char SLV_WRITE_INA;
zebrin1422 5:76dc889ffe3c 160 char SLV_READ_INA;
zebrin1422 0:ad712ebc38d6 161 float vlotage,current;
zebrin1422 0:ad712ebc38d6 162 unsigned int val[4];
zebrin1422 0:ad712ebc38d6 163 char *cal,buff[4],reg,check[2];
zebrin1422 0:ad712ebc38d6 164 };
zebrin1422 0:ad712ebc38d6 165
zebrin1422 0:ad712ebc38d6 166 #endif