【外设移植】Ai-WB2+INA266
Part.01 外设介绍
INA226是一款由德州仪器 (TI) 生产的高精度电流、功率和电压监控器。它用于监测电源系统中的电流、电压和功率,广泛应用于电源管理、电池管理系统、服务器、电动汽车等领域。以下是INA226的一些主要特点:
●功能概述
电流检测:INA226通过外部分流电阻来测量电流。分流电阻两端的电压差与流经它的电流成比例。
电压监测:可以直接监测电源侧的电压,最大输入电压范围可达36V。
功率计算:INA226内部集成了功率计算功能,通过测量电流和电压,实时计算功率。
I2C通信接口:通过I2C接口与微控制器通信,读取电压、电流和功率数据。
● 主要特点
高精度:电流检测的精度可达到±0.1%,电压测量的精度为±0.01%。
宽输入电压范围:INA226的输入电压可支持0V到36V,适合多种电源监测应用。
分辨率高:能够检测非常小的电压差(微伏级),使其能够通过低阻值分流电阻测量较大电流。
可编程警报:可以设置电压、电流或功率的报警阈值,当监测值超出设定范围时触发报警。
低功耗:静态电流非常低(通常为 420μA),适用于低功耗应用。
●工作原理
INA226使用外部的分流电阻,将流过负载的电流转化为分流电阻上的电压降。然后通过内部的放大器放大电压降,最终通过ADC(模数转换器)将其转化为数字信号,并通过I2C总线发送给微控制器。
同时,INA226可以直接测量电源电压。利用这些信息,它可以计算系统的功耗,帮助优化系统性能。
上述的INA226模块一共有8个接口,分别是IN+(电流+输入) IN-(电流-输出) VBS(测量电压) ALE(闹钟,警报,一般不用) SCL和SDA(I2C通讯)以及GND和VCC。
如果想使用这个模块需要正确的接线, 比如现在想测量通过三个LED灯的电流,需要将这三个LED灯串联在上述的电路中。LED灯的-极接 INA226的IN+,然后把IN-接到GND上。即可完成电流测量的接线。
如果想测量电压,只需要将VBS接入待测电压的+极即可。
Part.02 接线图如下
Part.03 移植过程
根据INA226数据手册得知,如果想读取INA226的数据的话,需要用IIC访问以下的寄存器。
而这里需要注意一点的是,如果要想读取电流的数据的话,一定要先校准INA226, 也就是往INA226的0x05寄存器中写入数据。
比如说现在期望读取的最大的电流为5A, 用5/2^15 可以得到电流的lowest significant bit (LSB) 然后使用上面的公式 0.00512 /(LSB * 分流电阻的阻值), 计算的结果大概等于335。换算到代码中则为以下:
// 初始化INA266传感器并设置校准值
static void ina266_init(hosal_i2c_dev_t *i2c)
{
uint16_t calibration_value = 335;
ina266_set_calibration(i2c, calibration_value);
}
完整的读取代码如下:
#include <stdio.h>
#include <FreeRTOS.h>
#include <task.h>
#include <hosal_i2c.h>
#include <bl_gpio.h>
#include <blog.h>
#define INA266_DEFAULT_ADDR 0x40 // INA266 I2C地址
#define INA266_REG_CURRENT 0x04 // INA266电流寄存器地址
#define INA266_REG_CALIBRATION 0x05 // INA266校准寄存器地址
#define INA266_REG_BUS_VOLTAGE 0x02 // INA266总线电压寄存器地址
// 设置INA266校准寄存器
static void ina266_set_calibration(hosal_i2c_dev_t *i2c, uint16_t calibration_value)
{
uint8_t data[3];
// 将校准值写入校准寄存器
data[0] = INA266_REG_CALIBRATION; // 校准寄存器地址
data[1] = (calibration_value >> 8) & 0xFF; // 高字节
data[2] = calibration_value & 0xFF; // 低字节
hosal_i2c_master_send(i2c, INA266_DEFAULT_ADDR, data, sizeof(data), 100);
}
// 初始化INA266传感器并设置校准值
static void ina266_init(hosal_i2c_dev_t *i2c)
{
uint16_t calibration_value = 335;
ina266_set_calibration(i2c, calibration_value);
}
// 读取INA266电流
static float ina266_read_current(hosal_i2c_dev_t *i2c)
{
uint8_t reg_addr = INA266_REG_CURRENT;
uint8_t data[2];
int16_t raw_current;
// 读取电流寄存器的数据
hosal_i2c_master_send(i2c, INA266_DEFAULT_ADDR, ®_addr, sizeof(reg_addr), 100);
hosal_i2c_master_recv(i2c, INA266_DEFAULT_ADDR, data, sizeof(data), 100);
// 将读取到的数据转换为电流值
raw_current = (data[0] << 8) | data[1];
// 使用新的LSB值 0.0001A 来计算电流
float current = raw_current * 0.000152; // 每个LSB 0.0001A
return current;
}
// 读取INA266电压
static float ina266_read_voltage(hosal_i2c_dev_t *i2c)
{
uint8_t reg_addr = INA266_REG_BUS_VOLTAGE;
uint8_t data[2];
int16_t raw_voltage;
// 读取电压寄存器的数据
hosal_i2c_master_send(i2c, INA266_DEFAULT_ADDR, ®_addr, sizeof(reg_addr), 100);
hosal_i2c_master_recv(i2c, INA266_DEFAULT_ADDR, data, sizeof(data), 100);
// 将读取到的数据转换为电压值
raw_voltage = (data[0] << 8) | data[1];
// INA266的电压值计算公式,假设每个Lsb对应1.25mV,具体数值参考数据手册
float voltage = raw_voltage * 0.00125; // 1.25mV per LSB
return voltage;
}
// 主函数
int main(void)
{
// I2C 设备配置
static hosal_i2c_dev_t i2c0 = {
.config = {
.address_width = HOSAL_I2C_ADDRESS_WIDTH_7BIT, // 7位I2C地址模式
.freq = 50000, // 50kHz I2C速率
.mode = HOSAL_I2C_MODE_MASTER, // 主模式
.scl = 12, // SCL连接到GPIO 12
.sda = 3, // SDA连接到GPIO 3
},
.port = 0, // I2C端口号
};
hosal_i2c_init(&i2c0); // 初始化I2C
ina266_init(&i2c0); // 初始化INA266传感器并设置校准值
for (;;)
{
// 读取电流数据
float current = ina266_read_current(&i2c0);
blog_info("Current: %.3f A\r\n", current);
// 读取电压数据
float voltage = ina266_read_voltage(&i2c0);
blog_info("Voltage: %.3f V\r\n", voltage);
vTaskDelay(portTICK_RATE_MS * 500); // 延时1秒,进入下一次测量
}
return 0;
}
实验现象:
那么根据实际情况,加上对UT89XD的测量,电压的误差大概在0.1v电流的误差大概在0.06MA。
库文件
main.c
#include <stdio.h>
#include <FreeRTOS.h>
#include <task.h>
#include <hosal_i2c.h>
#include <bl_gpio.h>
#include <blog.h>
#include "ina226.h"
// 主函数
int main(void)
{
// I2C 设备配置
static hosal_i2c_dev_t i2c0 = {
.config = {
.address_width = HOSAL_I2C_ADDRESS_WIDTH_7BIT, // 7位I2C地址模式
.freq = 50000, // 50kHz I2C速率
.mode = HOSAL_I2C_MODE_MASTER, // 主模式
.scl = 12, // SCL连接到GPIO 12
.sda = 3, // SDA连接到GPIO 3
},
.port = 0, // I2C端口号
};
hosal_i2c_init(&i2c0); // 初始化I2C
ina266_init(&i2c0); // 初始化INA266传感器并设置校准值
for (;;)
{
// 读取电流数据
float current = ina266_read_current(&i2c0);
blog_info("Current: %.3f A\r\n", current);
// 读取电压数据
float voltage = ina266_read_voltage(&i2c0);
blog_info("Voltage: %.3f V\r\n", voltage);
vTaskDelay(portTICK_RATE_MS * 500); // 延时1秒,进入下一次测量
}
return 0;
}
ina226.c
#include "ina226.h"
// 设置INA266校准寄存器
void ina266_set_calibration(hosal_i2c_dev_t *i2c, uint16_t calibration_value)
{
uint8_t data[3];
// 将校准值写入校准寄存器
data[0] = INA266_REG_CALIBRATION; // 校准寄存器地址
data[1] = (calibration_value >> 8) & 0xFF; // 高字节
data[2] = calibration_value & 0xFF; // 低字节
hosal_i2c_master_send(i2c, INA266_DEFAULT_ADDR, data, sizeof(data), 100);
}
// 初始化INA266传感器并设置校准值
void ina266_init(hosal_i2c_dev_t *i2c)
{
uint16_t calibration_value = 335;
ina266_set_calibration(i2c, calibration_value);
}
// 读取INA266电流
float ina266_read_current(hosal_i2c_dev_t *i2c)
{
uint8_t reg_addr = INA266_REG_CURRENT;
uint8_t data[2];
int16_t raw_current;
// 读取电流寄存器的数据
hosal_i2c_master_send(i2c, INA266_DEFAULT_ADDR, ®_addr, sizeof(reg_addr), 100);
hosal_i2c_master_recv(i2c, INA266_DEFAULT_ADDR, data, sizeof(data), 100);
// 将读取到的数据转换为电流值
raw_current = (data[0] << 8) | data[1];
// 使用新的LSB值 0.0001A 来计算电流
float current = raw_current * 0.000152; // 每个LSB 0.0001A
return current;
}
// 读取INA266电压
float ina266_read_voltage(hosal_i2c_dev_t *i2c)
{
uint8_t reg_addr = INA266_REG_BUS_VOLTAGE;
uint8_t data[2];
int16_t raw_voltage;
// 读取电压寄存器的数据
hosal_i2c_master_send(i2c, INA266_DEFAULT_ADDR, ®_addr, sizeof(reg_addr), 100);
hosal_i2c_master_recv(i2c, INA266_DEFAULT_ADDR, data, sizeof(data), 100);
// 将读取到的数据转换为电压值
raw_voltage = (data[0] << 8) | data[1];
// INA266的电压值计算公式,假设每个Lsb对应1.25mV,具体数值参考数据手册
float voltage = raw_voltage * 0.00125; // 1.25mV per LSB
return voltage;
}
ina226.h
#include <hosal_i2c.h>
#include <bl_gpio.h>
#define INA266_DEFAULT_ADDR 0x40 // INA266 I2C地址
#define INA266_REG_CURRENT 0x04 // INA266电流寄存器地址
#define INA266_REG_CALIBRATION 0x05 // INA266校准寄存器地址
#define INA266_REG_BUS_VOLTAGE 0x02 // INA266总线电压寄存器地址
// 初始化INA266传感器并设置校准值
void ina266_init(hosal_i2c_dev_t *i2c);
// 初始化INA266传感器并设置校准值
void ina266_set_calibration(hosal_i2c_dev_t *i2c, uint16_t calibration_value);
// 读取INA266电流
float ina266_read_current(hosal_i2c_dev_t *i2c);
// 读取INA266电压
float ina266_read_voltage(hosal_i2c_dev_t *i2c);
- |
- +1 赞 0
- 收藏
- 评论 0
本文由雪飘梦飞转载自安信可科技公众号,原文标题为:【外设移植】Ai-WB2+INA266,本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。
相关研发服务和供应服务
相关推荐
M61/M62系列单模组烧录指导(未引出BOOT脚位的情况下)
为了解决M61和M62模组在未引出BOOT引脚下的二次烧录问题,本文提供了详细教程。需要使用支持波特率至2M的USB转TTL工具和上位机软件1.9.0版本。接线时可省略BOOT线,只需连接四条线。操作步骤包括打开软件、选择固件、插上模组、刷新串口并点击烧录。若无法烧录,需检查串口芯片支持情况及接线是否正确。此方法仅适用于安信可AT固件更新,自行开发需引出BOOT引脚。
Ai-BS21系列烧录指导——开发板or模组
本篇以Ai-BS21-32S_Kit为例指导烧录固件,这是由深圳市安信可科技有限公司开发的蓝牙星闪开发板。该模块核心处理器芯片Hi2821是一款高集成2.4GHzSoCBLE&SLE芯片,支持BLE5.4/SLE1.0,集成RF电路,RF包含功率放大器PA、低噪声放大器、TX/RXSwitch、集成电源管理等模块,支持1M/2M/4M3种带宽,最大支持12Mbit/s速率。
【经验】Ai-WB2系列模组AT固件使用教程
Ai-WB2系列模组AT固件使用教程:1.准备工作需要准备的软硬件:Ai-WB2系列模组或者开发板,Type-C数据线,安信可透传云服务器,连接为http://tt.ai-thinker.com/ttcloud2.连接路由器等。
ESP32-CAM 模组
描述- ESP32-CAM是一款集成了Wi-Fi和蓝牙功能的SoC模组,具有小巧的体积和丰富的功能。它采用低功耗的双核CPU,支持多种接口和应用场景,包括家庭智能设备、工业无线控制和无线监控等。
型号- ESP32-CAM,ESP32,ESP-32CAM
安信可WiFi+BLE蓝牙双模模组Ai-WB2系列:高性价比物联网解决方案
安信可Ai-WB2系列模组支持Wi-Fi 802.11b/g/n协议和BLE 5.0协议,集成Wi-Fi、传统蓝牙和低功耗蓝牙功能。且经过行业“双85”测试,产品可靠性稳定性很强,可广泛应用于物联网(IoT)、移动设备、可穿戴电子设备、智能家居等领域。
安信可BW20双频Wi-Fi+BLESoC模组,自带BLE5.0蓝牙,可支持Wi-Fi Mesh组网
BW20系列模组是安信可科技基于RTL8711系列芯片开发的双频Wi-Fi+BLESoC模组,支持双频(2.4 GHz 或 5.8 GHz)802.11a/b/g/n WLAN协议和Bluetooth 5.0协议。
安信可科技无线模组选型表
提供安信可科技无线模组选型,封装:DIP/SMD,尺寸:10.3mm*9.9mm*2.4(±0.2)mm-120.0mm*120.0mm*30.0mm,通信接口:UART/GPIO/ADC/PWM/I?C/SPI/Touch senser/PSRAM/SDIO/Duplex I²S/麦克风/扬声器,最大速率:2.5mW-100mW,参考距离:80m-5km,供电电压:1.9V-5.25V
产品型号
|
品类
|
封装
|
尺寸(mm)
|
通信接口
|
最大速率(mW)
|
参考距离(m/km)
|
供电电压(V)
|
空中速率(Kbps/Mbps)
|
天线形式
|
工作温度(℃)
|
NF-01-S
|
2.4G模组
|
DIP-8
|
28.6mm*15.3mm
|
SPI
|
5mW
|
240m
|
1.9V-3.6V
|
250Kbps-2Mbps
|
板载天线
|
-20℃~70℃
|
选型表 - 安信可科技 立即选型
请问,BW16模组是否可以直接替换ESP-12F模组?
BW16以及ESP-12F模组的供电以及AT串口是pin to pin的;
安信可WIFI+蓝牙模组Ai-WB2系列重新定义无线通信模组,简化用户端操作,配网成功率高达95%以上
安信可推出的Ai-WB2系列模组集成Wi-Fi&BT(蓝牙)于一体,搭载BL602芯片作为核心处理器,支持Wi-Fi 802.11b/g/n协议和BLE 5.0协议。智能家居、大小家电、工业自动化、监控设备、无线遥控、智能穿戴....各类终端都可通过Ai-WB2系列模组实现互联互通。
【产品】安信可ESP32系列低功耗UART-WiFi芯片模组,可支持RTOS操作系统二次开发
ESP32系列模组是深圳市安信可科技有限公司开发的一系列基于乐鑫ESP32的低功耗UART-WiFi芯片模组,可以方便地进行二次开发,接入云端服务,实现手机3/4G全球随时随地的控制,加速产品原型设计。
Combo 模组通用指令
描述- 本资料为《Combo 模组通用指令》版本 V4.18P_0.0.3,内容包括指令格式、默认配置说明、基础指令、IO 控制指令、SLE 专有指令、产测指令等。详细介绍了指令的格式、响应格式、错误码说明以及各种指令的功能和使用方法,旨在帮助开发者更好地理解和应用这些指令进行模块控制和数据传输。
型号- AI-BS21-32S
【元件】安信可科技24G人体存在感应雷达模组Rd-01搭载博流BL602芯片+矽典微的S3KM111L芯片,适用于高精准度场景
安信可自主研发的24GHz雷达模组搭载博流BL602芯片+矽典微的S3KM111L芯片,不仅能够正常检测人体存在、移动及微动,还可以检测出人体完全静止状态,解决了传统PIR人体红外感应在人体处于静止状态时就无法检测的痛点。
高性能开发板Ai-M61-32S-Kit助力Wi-Fi6+BLE5.3模组
Ai-M61-32S-Kit是针对Ai-M61-32S模组设计的开发板。Ai-M61-32S是由深圳市安信可科技有限公司开发的Wi-Fi6+BLE5.3模组,该模组搭载BL618芯片作为核心处理器,支持Wi-Fi 802.11b/g/n/ax协议和BLE协议,支持Thread协议。
BU03 定位模组 FAQ
描述- BU03定位模组采用DW3000 UWB射频前端芯片,内置全向陶瓷天线,支持TWR和PDOA算法。该模组适用于室内定位应用,具备低功耗特性(需用户自定义设计),并可通过Type-C接口与上位机通信配置参数或输出测距信息。
型号- BU03
电子商城
现货市场
服务
可定制显示屏的尺寸0.96”~15.6”,分辨率80*160~3840*2160,TN/IPS视角,支持RGB、MCU、SPI、MIPI、LVDS、HDMI接口,配套定制玻璃、背光、FPCA/PCBA。
最小起订量: 1000 提交需求>
可定制LED组件/LED传感/UV模组的电压、电流、波长等性能参数,电压:3-24V,,电流:30-3500mA,波长:270-940nm;材质:食品级POM,阻燃PC;防水等级:IP20-IP68。
最小起订量: 1000 提交需求>
登录 | 立即注册
提交评论