我有一个压力传感器、它通过电流发出信号、电流消耗在4到20mA 之间: https://www.amazon.com/gp/product/B093ZNL53C
使用 Arduino 库(https://github.com/adafruit/Adafruit_INA219/blob/master/Adafruit_INA219.h#L169)、大多数配置在400mA 至2A 的范围内、我正在尝试获得更高的保真度。
我看到数据表和库引导您完成了一个包含8个步骤的过程: https://github.com/adafruit/Adafruit_INA219/blob/master/Adafruit_INA219.cpp#L300、 但我无法找到与我要查找的内容完全匹配的设置。
这是我的尝试、如果有任何指导、我将不胜感激:
void Adafruit_INA219::setCalibration_32V_20mA (){
//默认情况下,我们对输入电压使用非常大的范围,
//哪个可能不是最适合系统的选择
//它不会消耗很多功率。 都具有挑战性
//如果要更改设置,如下所示。 你会的
//还需要更改任何相关的寄存器设置,例如
//将 VBUS_MAX 设置为16V 而不是32V 等等
// VBUS_MAX = 32V (假设为32V、也可以设置为16V)
// VSHUNT_MAX = 0.04 (假设增益8、320mV、也可以为0.16、0.08、0.04)
// RSHUNT = 0.1 (电阻器值、单位为欧姆)
// 1. 确定最大可能电流
// MaxPosible_I = VSHUNT_MAX / RSHUNT
// MaxPosible_I =.4A // kevin saye 修改
// 2. 确定最大预期电流
// MaxExpected_I = 0.012A // kevin saye 修改
// 3. 计算 LSB 的可能范围(最小值= 15位、最大值= 12位)
// MinimumLSB = MaxExpected_I/32767
// MinimumLSB = 0.000000366 // kevin saye 修改
// MaximumLSB = MaxExpected_i/4096
// MaximumLSB = 0.000002629 // kevin saye 修改
// 4. 在最小值和最大值之间选择 LSB
//(最好是一个接近 MinLSB 的圆数)
// CurrentLSB = 0.0000004 // kevin saye 修改
// 5. 计算校准寄存器
// Cal = TRUNC (0.04096/(Current_LSB * RSHUNT))
// Cal = 4096 (0x1000)
INA219_calValue = 1240000; // kevin saye 修改
// 6. 计算功率 LSB
// PowerLSB = 20 * CurrentLSB
// PowerLSB = 0.000008 (.008mW/位) // kevin saye 修改
// 7. 计算溢出前的最大电流和分流电压值
//
// Max_Current = Current_LSB * 32767
// Max_current =.032767A // kevin saye 修改
//
//如果 Max_current > Max_possible_I、则
// Max_Current_Previe_Overflow = MaxPosvable_I
//否则
// Max_Current_Before_Overflow = Max_Current .032767A // kevin saye 修改
//结束 If
//
// Max_ShuntVoltage = Max_Current_Before_Overflow * RSHUNT
// Max_ShuntVoltage =.0032767V
//
//如果 Max_ShuntVoltage >= VSHUNT_MAX
// Max_ShuntVoltage_Previe_Overflow = VSHUNT_MAX
//否则
// Max_ShuntVoltage_Before_Overflow = Max_ShuntVoltage .0032767V // kevin saye 修改
//结束 If
// 8. 计算最大功率
// MaximumPower = Max_Current_Before_Overflow * VBUS_MAX
//最大功率= 0.0032767 * 32V
//最大功率= 0.1048544W // kevin saye 修改
//设置乘法器以转换原始电流/功率值
// INA219_currentDivider_mA = 10;// Current LSB = 100uA/位(1000/100 = 10)
INA219_currentDivider_mA = 2500;// Current LSB = 400pA/位(1、000、0/400 = 10)//0.0000004 // kevin saye 修改
// INA219_powerMultiplier_mW = 2;//功率 LSB = 1mW/位(2/1)
INA219_powerMultiplier_mW = 250;//功率 LSB =每位0.008mW (2/.008) // kevin saye 修改
//将校准寄存器设置为上面计算的'Cal'
Adafruit_BusIO_Register CALIBRATION_reg =
Adafruit_BusIO_Register (i2c_dev、INA219_REG_CALIBRATION、2、MSBFIRST);
calibration_reg.write (INA219_calValue、2);
//设置 Config 寄存器以考虑上述设置
uint16_t CONFIG = INA219_CONFIG_BVOLTAGERANGE_32V |
INA219_CONFIG_GAIN_1_40mV | INA219_CONFIG_BADCRES_12BIT_128S_69MS |
INA219_CONFIG_SADCRES_12bit_128S_69MS |
INA219_CONFIG_MODE_SANDBVOLT_CONTINUE;
Adafruit_BusIO_Register CONFIG_reg =
Adafruit_BusIO_Register (i2c_dev、INA219_REG_CONFIG、2、MSBFIRST);
成功= CONFIG_REG.WRITE (CONFIG、2);
}