SparkFun INA2XX Arduino Library  v1.0.0-3-gc9007d6
Arduino Library for the SparkFun Qwiic Power Monitor (INA228 / INA237)
Loading...
Searching...
No Matches
sfDevINA228.h
Go to the documentation of this file.
1
27#pragma once
28
29#include "sfDevINA2XX.h"
30
37{
38 public:
40 {
41 }
42
43 // ========================= Calibration ==================================
44
52 sfTkError_t calibrate(float shuntResOhms, float maxCurrentA)
53 {
54 return calibrateImpl(shuntResOhms, maxCurrentA, kCalScale, kCurrentFullScale);
55 }
56
57 // ========================= Measurements (Engineering Units) ==============
58
63 sfTkError_t getShuntVoltage_mV(float &milliVolts)
64 {
65 return shuntVoltageToMilliVolts<int32_t, true>(milliVolts, kShuntLSBDefault, kShuntLSBReduced);
66 }
67
71 sfTkError_t getBusVoltage_V(float &volts)
72 {
73 return busVoltageToVolts<uint32_t, true>(volts, kBusLSB);
74 }
75
80 sfTkError_t getCurrent_A(float &amps)
81 {
82 return currentToAmps<int32_t, true>(amps);
83 }
84
89 sfTkError_t getPower_W(float &watts)
90 {
91 return powerToWatts(watts, kPowerLSBScale);
92 }
93
97 sfTkError_t getDieTemp_C(float &celsius)
98 {
100 }
101
102 // ========================= Raw Register Access ===========================
103
107 sfTkError_t getShuntVoltageRaw(int32_t &value)
108 {
109 return readSignedMeasurementRaw<int32_t, true>(kRegVShunt, value);
110 }
111
115 sfTkError_t getBusVoltageRaw(uint32_t &value)
116 {
117 return readUnsignedMeasurementRaw<uint32_t, true>(kRegVBus, value);
118 }
119
123 sfTkError_t getCurrentRaw(int32_t &value)
124 {
125 return readSignedMeasurementRaw<int32_t, true>(kRegCurrent, value);
126 }
127
131 sfTkError_t getPowerRaw(uint32_t &value)
132 {
133 return readPowerRaw(value);
134 }
135
136 // ========================= Energy & Charge (INA228 Only) ================
137
144 sfTkError_t getEnergy_J(double &joules);
145
152 sfTkError_t getCharge_C(double &coulombs);
153
154 protected:
155 // --- INA228 scaling and calibration constants ---
156 static constexpr float kCalScale = 13107.2e6f;
157 static constexpr float kShuntLSBDefault = 312.5e-9f;
158 static constexpr float kShuntLSBReduced = 78.125e-9f;
159 static constexpr float kBusLSB = 195.3125e-6f;
160 static constexpr float kTempLSB = 7.8125e-3f;
161 static constexpr float kCurrentFullScale = 524288.0f;
162 static constexpr float kPowerLSBScale = 3.2f;
163 static constexpr uint8_t kDieTempShift = 0;
164 static constexpr double kEnergyLSBScale = 16.0 * 3.2;
165};
INA228 high-precision power/energy/charge monitor driver.
Definition: sfDevINA228.h:37
sfTkError_t getCurrent_A(float &amps)
Read the calculated current in Amps (24-bit CURRENT, scaled by CURRENT_LSB).
Definition: sfDevINA228.h:80
sfTkError_t getEnergy_J(double &joules)
Read the accumulated energy in Joules.
Definition: sfDevINA228.cpp:35
sfTkError_t getPowerRaw(uint32_t &value)
Read the raw 24-bit power value.
Definition: sfDevINA228.h:131
static constexpr uint8_t kDieTempShift
DIETEMP is a full 16-bit value.
Definition: sfDevINA228.h:163
sfTkError_t getBusVoltageRaw(uint32_t &value)
Read the raw 20-bit bus voltage value.
Definition: sfDevINA228.h:115
sfDevINA228()
Definition: sfDevINA228.h:39
sfTkError_t getCharge_C(double &coulombs)
Read the accumulated charge in Coulombs.
Definition: sfDevINA228.cpp:47
sfTkError_t getDieTemp_C(float &celsius)
Read the die temperature in degrees Celsius (16-bit DIETEMP, 7.8125 m-deg-C/LSB).
Definition: sfDevINA228.h:97
sfTkError_t getShuntVoltage_mV(float &milliVolts)
Read the shunt voltage in millivolts (24-bit VSHUNT, bits [23:4]).
Definition: sfDevINA228.h:63
static constexpr double kEnergyLSBScale
Energy LSB = 16 x 3.2 x CURRENT_LSB.
Definition: sfDevINA228.h:164
sfTkError_t getShuntVoltageRaw(int32_t &value)
Read the raw 20-bit shunt voltage value (sign-extended).
Definition: sfDevINA228.h:107
sfTkError_t getPower_W(float &watts)
Read the calculated power in Watts (24-bit POWER, scaled by 3.2 * CURRENT_LSB).
Definition: sfDevINA228.h:89
static constexpr float kCalScale
Calibration scale constant.
Definition: sfDevINA228.h:156
sfTkError_t getCurrentRaw(int32_t &value)
Read the raw 20-bit current value (sign-extended).
Definition: sfDevINA228.h:123
sfTkError_t calibrate(float shuntResOhms, float maxCurrentA)
Calibrate the device for current and power measurements.
Definition: sfDevINA228.h:52
static constexpr float kCurrentFullScale
2^19, positive half of the 20-bit ADC.
Definition: sfDevINA228.h:161
static constexpr float kShuntLSBDefault
Shunt LSB in volts (ADCRANGE = 0).
Definition: sfDevINA228.h:157
static constexpr float kShuntLSBReduced
Shunt LSB in volts (ADCRANGE = 1).
Definition: sfDevINA228.h:158
static constexpr float kBusLSB
Bus voltage LSB in volts.
Definition: sfDevINA228.h:159
static constexpr float kPowerLSBScale
Power LSB = 3.2 x CURRENT_LSB.
Definition: sfDevINA228.h:162
static constexpr float kTempLSB
Die temperature LSB in deg-C.
Definition: sfDevINA228.h:160
sfTkError_t getBusVoltage_V(float &volts)
Read the bus voltage in Volts (24-bit VBUS, bits [23:4], 195.3125 uV/LSB).
Definition: sfDevINA228.h:71
Platform-independent base driver for the INA228/INA237 power monitor ICs.
Definition: sfDevINA2XX.h:189
sfTkError_t powerToWatts(float &watts, float powerLSBScale)
Shared POWER -> watts conversion. powerLSBScale is 3.2 (INA228) or 0.2 (INA237).
Definition: sfDevINA2XX.cpp:778
sfTkError_t calibrateImpl(float shuntResOhms, float maxCurrentA, float calScale, float currentFullScale)
Shared calibration math; only the two scale constants differ per device.
Definition: sfDevINA2XX.cpp:745
static const uint8_t kRegVShunt
Shunt Voltage Measurement (24/16-bit, R)
Definition: sfDevINA2XX.h:649
static const uint8_t kRegCurrent
Current Result (24/16-bit, R)
Definition: sfDevINA2XX.h:652
sfTkError_t readPowerRaw(uint32_t &value)
Shared raw POWER read (24-bit, unsigned) — identical on both devices.
Definition: sfDevINA2XX.cpp:808
sfTkError_t dieTemperatureToCelsius(float &celsius, uint8_t shift, float tempLSB)
Shared DIETEMP -> Celsius conversion.
Definition: sfDevINA2XX.cpp:790
static const uint8_t kRegVBus
Bus Voltage Measurement (24/16-bit, R)
Definition: sfDevINA2XX.h:650
Header file for the SparkFun INA2XX family base driver.