INA226 Library
Dependents: HYBRYD2018_IZU_ROCKET Hybrid_IZU2019 SWAN_IZU2019_v1 Hybrid_OB2021_MAIN
Diff: INA226.cpp
- Revision:
- 1:9c367d227582
- Parent:
- 0:ad712ebc38d6
- Child:
- 2:eccb118370eb
diff -r ad712ebc38d6 -r 9c367d227582 INA226.cpp --- a/INA226.cpp Mon Jul 10 10:50:39 2017 +0000 +++ b/INA226.cpp Tue Jul 11 05:16:45 2017 +0000 @@ -8,7 +8,17 @@ i2c->frequency(400000); } +/************ +電流を取得したいときに必要 +これをセットしないと電流は取れない +@example + + float current; + + myINA226.set_callibretion(); + current = myINA226.get_current(); +************/ void myINA226::set_callibretion(unsigned int val) { char reg = cal_reg; @@ -20,10 +30,15 @@ i2c->write(SLV_WRITE, cmd, 1); } +/************* +INA226の接続確認 +0が返ってくればOK +1が返ってくればError +*************/ int myINA226::Connection_check() { char reg = check_reg; - char check; + char check[2]; i2c->write(SLV_WRITE, ®, 1); i2c->read(SLV_READ, check, 2); @@ -31,7 +46,15 @@ if(check[0] == 0x54 && check[1] == 0x49)return 0; else return 1; } - +/************* +0x01か,0x02の値、またはその両方の値を +取得するかどうかを決める +i=0のとき、両方の値を取得 +i=1のとき、0x02のみ取得 +i=2のとき、0x01のみ取得 +印加電圧は0x02に入っているので基本的にはi=1 +デフォルトでは、両方の値を取得できるようになっている +*************/ void myINA226::setup(int i) { char reg = Ctrl_reg; @@ -43,14 +66,26 @@ i2c->write(SLV_WRITE, cmd[i], 3); } +/******************* +INA226で測定したいだろう電圧と電流の値を +まとめて取得する +もしsetupでi=2、つまり0x01の値だけを取得するようにしていたら +事前に設定しておかなければならない +@example + + float V_bus,current; + + myINA226.setup(0) or myINA226.setup(1); + myINA226.get_Voltage_current(&V_bus,¤t); +*******************/ void myINA226::get_Voltage_current(float *V_bus, float *current) { char reg = V_bus_reg; char buff[2]; unsigned int val[2]; - setup(0); + //setup(0); i2c->write(SLV_WRITE, ®, 1); wait_ms(10); @@ -74,14 +109,26 @@ *current = (float)(val[0] | val[1]); *current = *current;//1.25; } +/************** +0x01の値を取得 +もしsetupでi=1、つまり0x02の値だけを取得するようにしていたら +事前に設定しておかなければならない -void myINA226::get_Shunt_voltage(float *V_shunt) +@example + + float V_shunt; + + myINA226.setup(0) or myINA226.setup(2); + V_shunt = myINA226.get_Shunt_voltage(); +**************/ +float myINA226::get_Shunt_voltage() { char reg = V_shunt_reg; char buff[2]; unsigned int val[2]; + float V_shunt; - setup(2); + //setup(2); i2c->write(SLV_WRITE, ®, 1); wait_ms(10); @@ -90,17 +137,31 @@ val[0] = (unsigned int)buff[0]<<8; val[1] = (unsigned int)buff[1]; - *V_shunt = (float)(val[0] | val[1]); - *V_shunt = *V_shunt*1.25; + V_shunt = (float)(val[0] | val[1]); + V_shunt = V_shunt*1.25; + + return V_shunt; } +/************** +0x01の値を取得 +もしsetupでi=2、つまり0x01の値だけを取得するようにしていたら +事前に設定しておかなければならない -void myINA226::get_Bus_voltage(float *V_bus) +@example + + float V_bus; + + myINA226.setup(0) or myINA226.setup(1); + V_bus = myINA226.get_Bus_voltage(); +**************/ +float myINA226::get_Bus_voltage() { char reg = V_bus_reg; char buff[2]; unsigned int val[2]; + float V_bus; - setup(1); + //setup(1); i2c->write(SLV_WRITE, ®, 1); wait_ms(10); @@ -109,16 +170,29 @@ val[0] = (unsigned int)buff[0]<<8; val[1] = (unsigned int)buff[1]; - *V_bus = (float)(val[0] | val[1]); - *V_bus = *V_bus*1.25; + V_bus = (float)(val[0] | val[1]); + V_bus = V_bus*1.25; + + return V_bus; } +/*********** +電流の値を取得 +事前にset_callibretionをセットしておかないと +0しか返ってこない +@example -void myINA226::get_current(float *current) + float current; + + myINA226.set_callibretion(); + current = myINA226.get_current(); +************/ +float myINA226::get_current() { char reg = current_reg; char buff[2]; unsigned int val[2]; + float current; i2c->write(SLV_WRITE, ®, 1); wait_ms(10); @@ -127,15 +201,28 @@ val[0] = (unsigned int)buff[0]<<8; val[1] = (unsigned int)buff[1]; - *current = (float)(val[0] | val[1]); - *current = *current;//*1.25; + current = (float)(val[0] | val[1]); + current = current;//*1.25; + + return current; } - -void myINA226::get_power(float *power) +/*********** +電力の値を取得 +事前にset_callibretionをセットしておかないと +0しか返ってこない +@example + + float power; + + myINA226.set_callibretion(); + power = myINA226.get_power(); +************/ +float myINA226::get_power() { char reg = power_reg; char buff[2]; unsigned int val[2]; + float power; i2c->write(SLV_WRITE, ®, 1); wait_ms(10); @@ -144,5 +231,7 @@ val[0] = (unsigned int)buff[0]<<8; val[1] = (unsigned int)buff[1]; - *power = (float)(val[0] | val[1]); + power = (float)(val[0] | val[1]); + + return power; }