# 成功读取电压并显示
This commit is contained in:
68
Lib/ina226.c
68
Lib/ina226.c
@ -1,49 +1,61 @@
|
||||
#include "ina226.h"
|
||||
|
||||
static float CurrentLSB; // 电流分辨率
|
||||
static float CurrentLSB; // 电流分辨率
|
||||
|
||||
void INA226_Init(uint16_t r_shunt, float max_current) {
|
||||
uint16_t cal = 0;
|
||||
void
|
||||
INA226_Init (uint16_t r_shunt, float max_current)
|
||||
{
|
||||
uint16_t cal = 0;
|
||||
|
||||
// 1. 计算校准参数
|
||||
CurrentLSB = max_current / 32768.0f; // 公式来源
|
||||
cal = (uint16_t)(0.00512f / (CurrentLSB * r_shunt)); // 校准公式
|
||||
// 1. 计算校准参数
|
||||
CurrentLSB = max_current / 32768.0f; // 公式来源
|
||||
cal = (uint16_t)(0.00512f / (CurrentLSB * r_shunt)); // 校准公式
|
||||
|
||||
// 2. 配置寄存器设置(平均64次,转换时间8.244ms)
|
||||
INA226_WriteReg(CONFIG_REG, 0x45FF); // 配置值参考
|
||||
// 2. 配置寄存器设置(平均64次,转换时间8.244ms)
|
||||
INA226_WriteReg (CONFIG_REG, 0x45FF); // 配置值参考
|
||||
|
||||
// 3. 写入校准寄存器
|
||||
INA226_WriteReg(CAL_REG, cal); // 校准配置方法
|
||||
// 3. 写入校准寄存器
|
||||
INA226_WriteReg (CAL_REG, cal); // 校准配置方法
|
||||
}
|
||||
|
||||
// 寄存器写入函数
|
||||
void INA226_WriteReg(uint8_t reg, uint16_t value) {
|
||||
uint8_t data_t[2];
|
||||
data_t[0] = (uint8_t)(value >> 8);
|
||||
data_t[1] = (uint8_t)(value & 0xFF);
|
||||
IIC_WriteBytes(INA226_ADDR, reg, data_t, 2); // 需适配您的I2C驱动
|
||||
void
|
||||
INA226_WriteReg (uint8_t reg, uint16_t value)
|
||||
{
|
||||
uint8_t data_t[2];
|
||||
data_t[0] = (uint8_t)(value >> 8);
|
||||
data_t[1] = (uint8_t)(value & 0xFF);
|
||||
IIC_WriteBytes (INA226_ADDR, reg, data_t, 2); // 需适配您的I2C驱动
|
||||
}
|
||||
// 寄存器读取函数
|
||||
uint16_t INA226_ReadReg(uint8_t reg) {
|
||||
uint8_t data_t[2];
|
||||
IIC_ReadBytes(INA226_ADDR, reg, data_t, 2); // 需适配您的I2C驱动
|
||||
return (data_t[0] << 8) | data_t[1];
|
||||
uint16_t
|
||||
INA226_ReadReg (uint8_t reg)
|
||||
{
|
||||
uint8_t data_t[2];
|
||||
IIC_ReadBytes (INA226_ADDR, reg, data_t, 2); // 需适配您的I2C驱动
|
||||
return (data_t[0] << 8) | data_t[1];
|
||||
}
|
||||
|
||||
// 电压读取(单位:V)
|
||||
float INA226_ReadBusVoltage(void) {
|
||||
int16_t raw = (int16_t)INA226_ReadReg(BUS_V_REG);
|
||||
return raw * 0.00125f; // LSB=1.25mV
|
||||
float
|
||||
INA226_ReadBusVoltage (void)
|
||||
{
|
||||
int16_t raw = (int16_t)INA226_ReadReg (BUS_V_REG);
|
||||
return raw * 0.00125f; // LSB=1.25mV
|
||||
}
|
||||
|
||||
// 电流读取(单位:A)
|
||||
float INA226_ReadCurrent(void) {
|
||||
int16_t raw = (int16_t)INA226_ReadReg(CURRENT_REG);
|
||||
return raw * CurrentLSB; // 应用校准参数
|
||||
float
|
||||
INA226_ReadCurrent (void)
|
||||
{
|
||||
int16_t raw = (int16_t)INA226_ReadReg (CURRENT_REG);
|
||||
return raw * CurrentLSB; // 应用校准参数
|
||||
}
|
||||
|
||||
// 功率读取(单位:W)
|
||||
float INA226_ReadPower(void) {
|
||||
int16_t raw = (int16_t)INA226_ReadReg(POWER_REG);
|
||||
return raw * 25 * CurrentLSB; // P=25×CurrentLSB×raw
|
||||
float
|
||||
INA226_ReadPower (void)
|
||||
{
|
||||
int16_t raw = (int16_t)INA226_ReadReg (POWER_REG);
|
||||
return raw * 25 * CurrentLSB; // P=25×CurrentLSB×raw
|
||||
}
|
Reference in New Issue
Block a user