INA226电流/功率计模块使用方法

之前的文章简要介绍了开源INA226电流计模块的功能特点,本文将详细介绍INA226电流计模块的使用方法。

特性

  • 感测总线电压范围:0V - 36V
  • 高侧/低侧电流感测
  • 电压、电流、功率测量
  • 0.1% 增益误差
  • 10uV 偏移
  • 可配置测量平均值
  • 16个可配置I2C地址
  • 2.7V - 5.5V 电源供电
  • 2路电源轨,可选为负载电源,作为 CH347高速USB桥接模块 扩展时,为 3.3V5V
  • Alert指示灯
  • 非共地连接时,可选远端电压感测
  • 引脚兼容CH347模块,即插即用

硬件连接

原理图

3d PCB

模块实物

P4为10*2 2.54mm插针,是模块的电源和I2C接口,兼容CH347模块接口,可以直接插到CH347模块上使用。P4实际使用了加长排座,这样INA226模块插到CH347模块上时不会影响CH347模块连接其他设备,尤其是可以多个INA226模块同时插到CH347模块上使用,测量多路电流。

INA226模块上实际连接的插针只有8个引脚,1个5V电源,1个3.3V电源,1个SCL,1个SDA,4个GND

INA226芯片实际使用3.3V电源,CH347模块上有5V3.3V两路电源,所以在接口设计上这两路电源都接入INA226模块了,其中5V电源连接到J1,3.3V电源除了给INA226芯片供电,还连接到J2J1J2可以通过跳线帽选通为待测设备供电,也就是P1端口。

注意:

如果使用外部电源为待测设备供电,一定要将J1J2上的短路帽拔下来,否则会损坏模块!

J1J2不能同时连接短路帽!

当仅测量电流时,可以像使用电流表一样,将待测点断开,然后将P1的1引脚和P2的2引脚,也就是电路板上标注的"+"的两个脚串入,这样就可以测量电流了。当电流流向与板子上箭头相同时为正,反向则为负。

当需要测量电压和功率时,接线就稍微复杂一些,既要测量电流,又要测量电压,此时需要将待测设备的电源接入P1,待测设备接入P2,注意极性,"+“接电源正极,”-"接电源负极。如果待测设备为5V3.3V电源供电,电流小于500mA,则可以通过短路帽选通J1J2来为待测设备供电,省去连接外部电源。如果待测设备电流较大,为了精确测量功率,则需要考虑远端测量电压,此时要将J3J4上的短路帽拔下来,而使用杜邦线或其他导线将"V+"和"V-"连接到设备端的电源引脚,要注意极性不要接反,这样可以测量远端电压,从而排除电源线损耗对功率测量的影响。

J5 J6 J7 J8为电流计模块I2C地址设置,单个模块使用时保持短路帽默认位置即可,此时对应7位地址为0b1000000。多个模块同时使用时可以设置不同地址来区分各个模块。

LED为INA226芯片的Alert指示灯,可以通过软件设置报警逻辑和阈值来触发报警。

INA226模块目前发货默认感测电阻为20mΩ,对应电流测量范围为0 - 4A,分辨率为125uA,电压分辨率为1.25mV,非常给力,应对常规测量绰绰有余。并且可以编程自动化测量,连续监测记录数据。

示例程序

之前示例测试ESP32模块的电压、电流、功率:

10Hz采样

代码如下:

import matplotlib.pyplot as plt
import matplotlib.animation as animation
import numpy as np
from time import sleep
from i2c_devices.ina226 import INA226# Initialize the INA226 sensor
sensor = INA226()def read_sensor_data():return [sensor.get_bus_voltage(), sensor.get_current(), sensor.get_power()]# Generator function to produce data from the sensor sensor
def generate_sensor_data():data_buffer = []while True:data = read_sensor_data()data_buffer.append(data)yield data_buffersleep(0.1)# Create a figure with 6 subplots for accelerometer and gyroscope data
fig, axs = plt.subplots(3, 1, figsize=(8, 12))# Initialize empty lines for the accelerometer and gyroscope data plots
lines = [axs[i].plot([], [], lw=2)[0] for i in range(3)]# Set the number of data points to be displayed on the plot
num_display_points = 50def init():for line in lines:line.set_data([], [])return linesdef update(frame):data_buffer = next(data_generator)# Generate the x-axis values (time steps) based on the number of data pointstime_steps = np.arange(len(data_buffer))# Get the starting index to display a specific number of data pointsstart_index = max(0, len(data_buffer) - num_display_points)# Update the plot data for accelerometer and gyroscopefor i in range(3):lines[i].set_data(time_steps[start_index:], [data[i] for data in data_buffer[start_index:]])axs[i].set_xlim(start_index, start_index + num_display_points - 1)# Update the x-axis limits for scrolling effectaxs[0].set_ylim(0, 10000)axs[1].set_ylim(0, 100000)axs[2].set_ylim(0, 200)return lines# Create the generator for sensor sensor data
data_generator = generate_sensor_data()# Create an animation for real-time plotting, update every 100 milliseconds (0.1 seconds)
ani = animation.FuncAnimation(fig, update, frames=range(100), init_func=init, blit=True, interval=100)# Add labels and title to each subplot
axis_labels = ['Voltage in mV', 'Current in uA', 'Power in mW']
for i in range(3):axs[i].set_title(f'{axis_labels[i]}')axs[i].set_xlabel('Time Steps')axs[i].set_ylabel('INA226 Data Value')plt.tight_layout()
plt.show()
sensor.close()

公众号 | FunIO
微信搜一搜 “funio”,发现更多精彩内容。
个人博客 | blog.boringhex.top

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/736503.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Microsoft SQL Server 编写汉字转拼音函数

目录 应用场景 举例 函数实现 小结 应用场景 在搜索应用中,我们一般会提供一个搜索框,输入关健字,点击查询按钮以获取结果数据。大部分情况我们会提供模糊查询的形式以在一个或多个字段进行搜索以获取结果。这样可以简化用户的操作&…

(C语言)strlen函数模拟实现(三种方法)

目录 1. strlrn函数 2. 注意事项&#xff1a; 3. 计数器法 4. 指针减指针方法&#xff1a; 5. 递归方法&#xff1a; 1. strlrn函数 头文件<string.h> 实现函数模拟须知&#xff1a; • 字符串以 \0 作为结束标志 &#xff0c;strlen函数返回的是在字符串中 \0 …

[AutoSar]BSW_Com010 CAN IF 模块介绍

目录 关键词平台说明一、CAN IF 所在架构位置二、CAN interface 简介三、CAN interface 主要功能描述3.1 CANIF 被调用方式3.1.1 中断模式3.1.2 轮询模式3.1.3 混合模式 3.2 Hardware object handles&#xff08;HO&#xff09;3.4 Dynamic L-PDUs3.4.1 Dynamic Transmit L-PDU…

HSCCTF 3th 2024 Web方向 题解wp

WEB-CHECKIN【*没出】 直接给了源码 <?php highlight_file(__FILE__); error_reporting(0); $a$_POST[1]; $b"php://filter/$a/resource/dev/null"; if(file_get_contents($b)"2024"){echo file_get_contents(/flag); }else{echo $b; }咋这么像 WEB…

人工智能迷惑行为大赏(AI智障)

目录 人工智能 人工智能的“幽默”瞬间 技术原理探究 社会影响分析 人工智能 人工智能&#xff08;Artificial Intelligence&#xff0c;AI&#xff09;是一个涵盖了多个学科的综合领域&#xff0c;主要研究如何应用计算机来模拟人类的某些思维过程和智能行为&#xff0c;如…

阿里云-零基础入门推荐系统 【Baseline】

文章目录 赛题介绍评价方式理解赛题理解代码实战导包df节省内存函数读取采样或全量数获取 用户 - 文章 - 点击时间字典获取点击最多的topk个文章itemcf的物品相似度计算itemcf 的文章推荐给每个用户根据物品的协同过滤推荐文章召回字典转换成df生成提交文件获取测试集从所有的召…

mysql如何开启手动提交事务

在mysql中&#xff0c;有一个变量autocommit&#xff0c;表示自动提交&#xff0c;默认为1&#xff0c;表示开启自动提交。通过以下命令查询 select autocommit;当autocommit为1时&#xff0c;任何一条sql语句都是一个事务&#xff0c;执行完由mysql自动提交。如果想自己决定什…

matlab 基操~

MATLAB基本操作 1. 对象定义 使用sym定义单个对象、使用syms定义多个对象 2. 使用limit求极限 $$ \lim_{v \rightarrow a} f(x) $$ limit(f,v,a) % 使用limit(f,v,a,left)可求左极限 3. 导数 使用diff(f,v,n)对$ f(v)v^{t-1} $求 $ n $ 阶导 $ \frac{d^nf}{d^nv} $&#xf…

智谱清华LongAlign发布:重塑NLP长文本处理

引言 随着大型语言模型&#xff08;LLMs&#xff09;的不断进化&#xff0c;我们现在能够处理的文本长度已经达到了前所未有的规模——从最初的几百个tokens到现在的128k tokens&#xff0c;相当于一本300页的书。这一进步为语义信息的提供、错误率的减少以及用户体验的提升打…

MySQL三种日志

一、undo log&#xff08;回滚日志&#xff09; 1.作用&#xff1a; &#xff08;1&#xff09;保证了事物的原子性 &#xff08;2&#xff09;通过read view和undo log实现mvcc多版本并发控制 2.在事务提交前&#xff0c;记录更新前的数据到undo log里&#xff0c;回滚的时候读…

java学习之路-数据类型与变量

目录 数据类型与变量 1. 字面常量 2. 数据类型 3. 变量 3.1 变量概念 3.2 整型变量 3.2.1 整型变量 3.2.2 长整型变量 3.2.3 短整型变量 3.2.4 字节型变量 3.3 浮点型变量 3.3.1 双精度浮点型 3.3.2 单精度浮点型 3.4 字符型变量 3.5布尔型变量 3.6 类型转换 …

苍穹外卖学习-----2024/03/010---修改套餐,套餐状态修改开发

修改套餐 4.1 需求分析和设计 产品原型&#xff1a; 接口设计&#xff08;共涉及到5个接口&#xff09;&#xff1a; 根据id查询套餐根据类型查询分类&#xff08;已完成&#xff09;根据分类id查询菜品&#xff08;已完成&#xff09;图片上传&#xff08;已完成&#xf…

Linux 地址空间

目录 一、程序地址空间 1、虚拟地址 Makefile新写法 2、进程地址空间分布 3、栈&堆 4、static修饰局部变量 5、字符串常量不可修改 6、虚拟地址与物理地址的联系 二、CPU读取程序全过程 1、形成可执行程序 2、生成虚拟地址 3、程序的启动 4、创建进程 5、地…

【Redis】RedisTemplate序列化传输数据

使用自定义的序列化器 使用RedisTemplate默认的序列化器发送数据&#xff0c;会将key全都当成Object处理&#xff0c;从而按照对象的方式转成json格式发送到服务器&#xff0c;这样会导致两个问题。一是不方便阅读&#xff0c;二是会大大浪费内存。因此&#xff0c;建议自定义…

Linux之线程控制

目录 一、POSIX线程库 二、线程的创建 三、线程等待 四、线程终止 五、分离线程 六、线程ID&#xff1a;pthread_t 1、获取线程ID 2、pthread_t 七、线程局部存储&#xff1a;__thread 一、POSIX线程库 由于Linux下的线程并没有独立特有的结构&#xff0c;所以Linux并…

一篇搞定mysql数据库基础

目录 一、MySQL具体的特点 1.关系型数据库&#xff08;RDBMS&#xff09;&#xff1a; 2.MySQL是一个“客户端-服务器”结构的程序 Q1:服务器能不能知道客户端什么时候发请求&#xff1f;&#xff1f; Q2:服务器是只给一个客户端提供服务吗&#xff1f;&#xff1f; 二、M…

LeetCode 80.删除有序数组中的重复项 II

目录标题 删除有序数组中的重复项 II题目解题思路实现代码代码讲解总结删除有序数组中的重复项 II 题目 解题思路 慢指针指向满足条件的数字的末尾,快指针遍历原数组。 并且用一个变量记录当前末尾数字出现了几次,防止超过两次。最后返回维护慢指针的结果+1即可。 实现代…

ChatGPT用不了,发了没反应,终于解决了!

大概在几天前的早上&#xff0c;ChatGPT突然就用不了。 这完全打乱了我的工作节奏&#xff01;&#xff01;&#xff01;&#xff08;所以&#xff0c;我就去玩了&#xff09; 用不了的具体表现是&#xff0c;你输入内容之后&#xff0c;内容消失&#xff0c;按钮变灰&#xff…

上位机图像处理和嵌入式模块部署(qmacvisual条形码识别)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 前面我们谈到过&#xff0c;qmacvisual提供功能的方式主要就是插件导入。目前&#xff0c;大家如果能正确地把qmacvisual编译出来的话&#xff0c;…

Constrained Iterative LQR 自动驾驶中使用的经典控制算法

Motion planning 运动规划在自动驾驶领域是一个比较有挑战的部分。它既要接受来自上层的行为理解和决策的输出,也要考虑一个包含道路结构和感知所检测到的所有障碍物状态的动态世界模型。最终生成一个满足安全性和可行性约束并且具有理想驾驶体验的轨迹。 通常,motion plann…