SparkFun INA2XX Arduino Library  v1.0.0-3-gc9007d6
Arduino Library for the SparkFun Qwiic Power Monitor (INA228 / INA237)
Loading...
Searching...
No Matches
sfDevINA237.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<int16_t, false>(milliVolts, kShuntLSBDefault, kShuntLSBReduced);
66 }
67
71 sfTkError_t getBusVoltage_V(float &volts)
72 {
73 return busVoltageToVolts<uint16_t, false>(volts, kBusLSB);
74 }
75
80 sfTkError_t getCurrent_A(float &amps)
81 {
82 return currentToAmps<int16_t, false>(amps);
83 }
84
89 sfTkError_t getPower_W(float &watts)
90 {
91 return powerToWatts(watts, kPowerLSBScale);
92 }
93
99 sfTkError_t getDieTemp_C(float &celsius)
100 {
102 }
103
104 // ========================= Raw Register Access ===========================
105
109 sfTkError_t getShuntVoltageRaw(int16_t &value)
110 {
111 return readSignedMeasurementRaw<int16_t, false>(kRegVShunt, value);
112 }
113
117 sfTkError_t getBusVoltageRaw(uint16_t &value)
118 {
119 return readUnsignedMeasurementRaw<uint16_t, false>(kRegVBus, value);
120 }
121
125 sfTkError_t getCurrentRaw(int16_t &value)
126 {
127 return readSignedMeasurementRaw<int16_t, false>(kRegCurrent, value);
128 }
129
133 sfTkError_t getPowerRaw(uint32_t &value)
134 {
135 return readPowerRaw(value);
136 }
137
138 protected:
139 // --- INA237 scaling and calibration constants ---
140 static constexpr float kCalScale = 819.2e6f;
141 static constexpr float kShuntLSBDefault = 5.0e-6f;
142 static constexpr float kShuntLSBReduced = 1.25e-6f;
143 static constexpr float kBusLSB = 3.125e-3f;
144 static constexpr float kTempLSB = 125.0e-3f;
145 static constexpr float kCurrentFullScale = 32768.0f;
146 static constexpr float kPowerLSBScale = 0.2f;
147 static constexpr uint8_t kDieTempShift = 4;
148};
INA237 power monitor driver (also covers the register-compatible INA238).
Definition: sfDevINA237.h:37
sfTkError_t calibrate(float shuntResOhms, float maxCurrentA)
Calibrate the device for current and power measurements.
Definition: sfDevINA237.h:52
static constexpr uint8_t kDieTempShift
DIETEMP data is a 12-bit value in [15:4].
Definition: sfDevINA237.h:147
sfTkError_t getBusVoltage_V(float &volts)
Read the bus voltage in Volts (16-bit VBUS, 3.125 mV/LSB).
Definition: sfDevINA237.h:71
static constexpr float kTempLSB
Die temperature LSB in deg-C.
Definition: sfDevINA237.h:144
static constexpr float kShuntLSBDefault
Shunt LSB in volts (ADCRANGE = 0).
Definition: sfDevINA237.h:141
sfTkError_t getBusVoltageRaw(uint16_t &value)
Read the raw 16-bit bus voltage value.
Definition: sfDevINA237.h:117
static constexpr float kBusLSB
Bus voltage LSB in volts.
Definition: sfDevINA237.h:143
sfTkError_t getDieTemp_C(float &celsius)
Read the die temperature in degrees Celsius.
Definition: sfDevINA237.h:99
static constexpr float kPowerLSBScale
Power LSB = 0.2 x CURRENT_LSB.
Definition: sfDevINA237.h:146
static constexpr float kCalScale
Calibration scale constant.
Definition: sfDevINA237.h:140
sfDevINA237()
Definition: sfDevINA237.h:39
sfTkError_t getCurrentRaw(int16_t &value)
Read the raw 16-bit current value.
Definition: sfDevINA237.h:125
sfTkError_t getPower_W(float &watts)
Read the calculated power in Watts (24-bit POWER, scaled by 0.2 * CURRENT_LSB).
Definition: sfDevINA237.h:89
sfTkError_t getShuntVoltage_mV(float &milliVolts)
Read the shunt voltage in millivolts (16-bit VSHUNT).
Definition: sfDevINA237.h:63
sfTkError_t getPowerRaw(uint32_t &value)
Read the raw 24-bit power value.
Definition: sfDevINA237.h:133
static constexpr float kCurrentFullScale
2^15, positive half of the 16-bit ADC.
Definition: sfDevINA237.h:145
sfTkError_t getCurrent_A(float &amps)
Read the calculated current in Amps (16-bit CURRENT, scaled by CURRENT_LSB).
Definition: sfDevINA237.h:80
static constexpr float kShuntLSBReduced
Shunt LSB in volts (ADCRANGE = 1).
Definition: sfDevINA237.h:142
sfTkError_t getShuntVoltageRaw(int16_t &value)
Read the raw 16-bit shunt voltage value.
Definition: sfDevINA237.h:109
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.