【外设移植】Ai-WB2+INA266

2024-10-30 安信可科技公众号
模组,Ai-WB2,安信可科技 模组,Ai-WB2,安信可科技 模组,Ai-WB2,安信可科技 模组,Ai-WB2,安信可科技

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, &reg_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, &reg_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, &reg_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, &reg_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);

授权代理商:世强先进(深圳)科技股份有限公司
技术资料,数据手册,3D模型库,原理图,PCB封装文件,选型指南来源平台:世强硬创平台www.sekorm.com
现货商城,价格查询,交期查询,订货,现货采购,在线购买,样品申请渠道:世强硬创平台电子商城www.sekorm.com/supply/
概念,方案,设计,选型,BOM优化,FAE技术支持,样品,加工定制,测试,量产供应服务提供:世强硬创平台www.sekorm.com
集成电路,电子元件,电子材料,电气自动化,电机,仪器全品类供应:世强硬创平台www.sekorm.com
  • +1 赞 0
  • 收藏
  • 评论 0

本文由雪飘梦飞转载自安信可科技公众号,原文标题为:【外设移植】Ai-WB2+INA266,本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。

评论

   |   

提交评论

全部评论(0

暂无评论

相关推荐

【经验】安信可双频Wi-Fi+蓝牙SoC模组BW16如何搭建Arduino开发环境?

安信可BW16模组是基于 RTL8720DN开发的双频Wi-Fi+蓝牙SoC模组,具备超强性能。本文着重介绍BW16及开发板如何搭建Arduino开发环境。

设计经验    发布时间 : 2023-06-10

M61/M62系列单模组烧录指导(未引出BOOT脚位的情况下)

为了解决M61和M62模组在未引出BOOT引脚下的二次烧录问题,本文提供了详细教程。需要使用支持波特率至2M的USB转TTL工具和上位机软件1.9.0版本。接线时可省略BOOT线,只需连接四条线。操作步骤包括打开软件、选择固件、插上模组、刷新串口并点击烧录。若无法烧录,需检查串口芯片支持情况及接线是否正确。此方法仅适用于安信可AT固件更新,自行开发需引出BOOT引脚。

设计经验    发布时间 : 2024-10-28

打卡智能家居之旅(2):设备接入HomeAssistant的方法

上次我们在安装HomeAssistant的时候(打卡智能家居学习之旅(1):了解HomeAssistant),顺便把MQTT 集成安装好了。为什么要装MQTT 集成呢?Wi-Fi 设备(Ai-WB2 或者Ai-M6x等模组)接入服务器必定要使用网络协议,而MQTT 是这些网络协议中最常用的。本文介绍了如何将设备接入HomeAssistant的方法。

设计经验    发布时间 : 2024-07-06

【经验】Ai-WB2系列模组AT固件使用教程

Ai-WB2系列模组AT固件使用教程:1.准备工作需要准备的软硬件:Ai-WB2系列模组或者开发板,Type-C数据线,安信可透传云服务器,连接为http://tt.ai-thinker.com/ttcloud2.连接路由器等。

设计经验    发布时间 : 2023-02-03

【IC】安信可科技发布2款UWB模组BU03和BU04,实现室内厘米级高精度测距定位

BU03和BU04这两款定位模组使用的芯片都是一样的,不同的是BU03是没有带主控MCU的,并且体积小巧,可以集成到自己的主板上,用主芯片直接驱动。

产品    发布时间 : 2024-10-11

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速率。

设计经验    发布时间 : 2024-06-24

安信可WiFi+BLE蓝牙双模模组Ai-WB2系列:高性价比物联网解决方案

安信可Ai-WB2系列模组支持Wi-Fi 802.11b/g/n协议和BLE 5.0协议,集成Wi-Fi、传统蓝牙和低功耗蓝牙功能。且经过行业“双85”测试,产品可靠性稳定性很强,可广泛应用于物联网(IoT)、移动设备、可穿戴电子设备、智能家居等领域。

器件选型    发布时间 : 2024-09-06

安信可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协议。

产品    发布时间 : 2024-10-10

【产品】安信可ESP32系列低功耗UART-WiFi芯片模组,可支持RTOS操作系统二次开发

ESP32系列模组是深圳市安信可科技有限公司开发的一系列基于乐鑫ESP32的低功耗UART-WiFi芯片模组,可以方便地进行二次开发,接入云端服务,实现手机3/4G全球随时随地的控制,加速产品原型设计。

产品    发布时间 : 2023-05-04

安信可WIFI+蓝牙模组Ai-WB2系列重新定义无线通信模组,简化用户端操作,配网成功率高达95%以上

安信可推出的Ai-WB2系列模组集成Wi-Fi&BT(蓝牙)于一体,搭载BL602芯片作为核心处理器,支持Wi-Fi 802.11b/g/n协议和BLE 5.0协议。智能家居、大小家电、工业自动化、监控设备、无线遥控、智能穿戴....各类终端都可通过Ai-WB2系列模组实现互联互通。

原厂动态    发布时间 : 2023-03-31

请问,BW16模组是否可以直接替换ESP-12F模组?

BW16以及ESP-12F模组的供电以及AT串口是pin to pin的;

技术问答    发布时间 : 2024-09-30

【元件】安信可科技24G人体存在感应雷达模组Rd-01搭载博流BL602芯片+矽典微的S3KM111L芯片,适用于高精准度场景

安信可自主研发的24GHz雷达模组搭载博流BL602芯片+矽典微的S3KM111L芯片,不仅能够正常检测人体存在、移动及微动,还可以检测出人体完全静止状态,解决了传统PIR人体红外感应在人体处于静止状态时就无法检测的痛点。

产品    发布时间 : 2024-05-08

【IC】安信可最新发布Ai-M61和Ai-M62两款WiFi 6+BLE5.3+X模组,最高主频可达320M

通过长期细致深入的研发设计及反复打磨,安信可重磅新品WiFi 6+BLE5.3+X模组——Ai-M61和Ai-M62两款系列模组惊艳亮相,力求为用户带来性能和体验的全面提升!Ai-M61&Ai-M62系列分别搭载BL618、BL616芯片作为处理器,支持Wi-Fi 802.11b/g/n/ax协议和BLE 5.3协议以及丰富的外围接口。

新产品    发布时间 : 2023-04-04

技术问答    发布时间 : 2024-09-30

展开更多

电子商城

查看更多

品牌:安信可科技

品类:WiFi+蓝牙模块

价格:¥8.5000

现货: 20

品牌:安信可科技

品类:NB-IoT模组

价格:¥17.7500

现货: 10

品牌:安信可科技

品类:Wi-Fi 6+BLE5.3模组

价格:¥16.2500

现货: 10

品牌:安信可科技

品类:雷达模组

价格:¥12.7500

现货: 5

品牌:安信可科技

品类:LoRa模组

价格:¥19.7500

现货: 5

品牌:安信可科技

品类:LoRaWAN模组

价格:¥25.6300

现货: 5

品牌:安信可科技

品类:蓝牙模组

价格:¥4.6300

现货: 4

品牌:安信可科技

品类:雷达模组

价格:

现货: 0

品牌:安信可科技

品类:蓝牙模组

价格:¥8.2600

现货: 0

品牌:安信可科技

品类:蓝牙模组

价格:¥10.0800

现货: 0

品牌:

品类:

价格:

现货:

品牌:

品类:

价格:

现货:

品牌:

品类:

价格:

现货:

品牌:

品类:

价格:

现货:

品牌:

品类:

价格:

现货:

品牌:

品类:

价格:

现货:

品牌:

品类:

价格:

现货:

现货市场

查看更多

品牌:RF-LINK

品类:WiFi模块

价格:¥25.5000

现货:16,272

品牌:SKYWORKS

品类:低噪放模组

价格:¥2.5000

现货:11,296

品牌:中科银河芯

品类:温湿度传感器模组

价格:¥6.9000

现货:8,000

品牌:u-blox

品类:无线及智能模块模组

价格:¥136.7300

现货:6,000

品牌:Sierra Wireless

品类:4G IoT 模组

价格:¥221.3700

现货:500

品牌:AVAGO

品类:Camera Module

价格:¥90.4758

现货:117

品牌:芯波科技

品类:WIFI SIP 模组

价格:¥15.0000

现货:40

品牌:高新兴物联

品类:NB-IOT模组

价格:¥25.0000

现货:28

品牌:高新兴物联

品类:NB-IOT模组

价格:¥22.0000

现货:20

品牌:高新兴物联

品类:LTE CAT1模组

价格:¥63.3334

现货:20

品牌:

品类:

价格:

现货:

品牌:

品类:

价格:

现货:

品牌:

品类:

价格:

现货:

品牌:

品类:

价格:

现货:

品牌:

品类:

价格:

现货:

品牌:

品类:

价格:

现货:

品牌:

品类:

价格:

现货:

品牌:

品类:

价格:

现货:

品牌:

品类:

价格:

现货:

品牌:

品类:

价格:

现货:

服务

查看更多

TFT LCD液晶显示屏/模组定制

可定制显示屏的尺寸0.96”~15.6”,分辨率80*160~3840*2160,TN/IPS视角,支持RGB、MCU、SPI、MIPI、LVDS、HDMI接口,配套定制玻璃、背光、FPCA/PCBA。

最小起订量: 1000 提交需求>

LED组件/LED传感/UV模组定制

可定制LED组件/LED传感/UV模组的电压、电流、波长等性能参数,电压:3-24V,,电流:30-3500mA,波长:270-940nm;材质:食品级POM,阻燃PC;防水等级:IP20-IP68。

最小起订量: 1000 提交需求>

查看更多

授权代理品牌:接插件及结构件

查看更多

授权代理品牌:部件、组件及配件

查看更多

授权代理品牌:电源及模块

查看更多

授权代理品牌:电子材料

查看更多

授权代理品牌:仪器仪表及测试配组件

查看更多

授权代理品牌:电工工具及材料

查看更多

授权代理品牌:机械电子元件

查看更多

授权代理品牌:加工与定制

世强和原厂的技术专家将在一个工作日内解答,帮助您快速完成研发及采购。
我要提问

954668/400-830-1766(工作日 9:00-18:00)

service@sekorm.com

研发客服
商务客服
服务热线

联系我们

954668/400-830-1766(工作日 9:00-18:00)

service@sekorm.com

投诉与建议

E-mail:claim@sekorm.com

商务合作

E-mail:contact@sekorm.com

收藏
收藏当前页面