STM32 驱动 INA226 测量电流电压功率
文章目录
- 一、INA226简介
- 二、引脚功能
- 三、寄存器介绍
- 1.配置寄存器 0x00
- 2.分流电压寄存器 0x01
- 3.总线电压寄存器 0x02
- 4.功率寄存器 0x03
- 5.电流寄存器 0x04
- 6.基准寄存器 0x05
- 四、IIC 时序说明
- 1.写时序
- 2.读时序
- 五、程序
- 六、实验现象
- 1.线路图
- 2.输出数据
一、INA226简介
INA226 是一款分流/功率监视器,具有 I2C或SMBUS 兼容接口。 该器件 监视分流压降和总线电源电压。 可编程校准值、转换时间和取平均值功能与内部乘法器相结合,可实现电流值(单位为安培)和功率值(单位为瓦)的直接读取。
二、引脚功能
IN+ | 电流输入 |
---|---|
IN- | 电流输出 |
GND | 电源地 |
VS | 电源正 |
SCL | 时钟线 |
SDA | 数据线 |
A0 | IIC地址设置引脚 |
A1 | IIC地址设置引脚 |
Alert | 报警输出引脚 |
VBUS | 总线电压输入引脚 |
INA226有两个地址引脚,A0和A1。下图描述了16个可能地址中的每一个的引脚逻辑。由原理图可知 INA226 模块 A0 A1 引脚被下拉至 GND ,故 IIC 地址则为 Write:1000 0000 0x80 Read:1000 0001 0x81
三、寄存器介绍
1.配置寄存器 0x00
配置寄存器设置控制设备的工作模式。该寄存器控制分流和总线电压测量以及所用的平均模式的转换时间设置。
Bit | 字段 | 类型 | 默认值(二进制) | 描述 |
---|---|---|---|---|
15 | RST | R/W | 0 | 设置成1 复位 |
14-12 | NC | R/W | 100 | 无功能 保留 |
11-9 | AVG | R/W | 000 | 采样平均次数 000 1次 001 4次 010 16次 011 64次 … |
6-8 | VBUSCT | R/W | 100 | 总线采样时间 000 140µs 001 204µs 010 332 µs 011 588 µs 100 1.1ms 101 2.116ms 110 4.156ms 111 8.244ms |
3-5 | VSHCT | R/W | 100 | 分流采样时间 同上 |
0:2 | MODE | R/W | 111 | 操作模式 000 关闭 001 分流电压 触发 010 总线电压 触发 011 分流及总线电压 触发 100 关闭 101 分流电压 连续测量 110 总线电压 连续测量 111 分流及总线电压 连续测量 |
2.分流电压寄存器 0x01
用于存储当前的分流电压读数 Vshunt。负数采用二进制补码格式表示。生成一个负数的补码方法是:对其绝对值的二进制数取反,然后加 1。如果最高有效位(MSB)为 ‘1’,则表示这是一个负数。最小分辨率(Vshunt _LSB)为 2.5uV。
注意分流电压最大81.92mV,而该模块的采样电阻是0.1R,故最大电流为 81.92mV / 0.1R = 819.2mA
分流电压计算:Vshunt = 寄存器值 * Vshunt _LSB(2.5uV)
3.总线电压寄存器 0x02
用于存储最近一次的总线电压读数 Vbus。如果启用了平均功能,则该寄存器显示的是平均后的数值。满量程范围为 40.96V(对应 7FFF);最小分辨率(Vbus_LSB)为 1.25 mV。
总线电压计算:Vbus = 寄存器值 * Vbus_LSB(1.25 mV )
4.功率寄存器 0x03
用于存储功率读数 Power ,如果启用了平均功能,该寄存器将显示平均值。功率寄存器的最低有效位(LSB)在内部被设定为等于 Current_LSB 所设定值的 25 倍。功率寄存器通过将电流寄存器的十进制值与总线电压寄存器的十进制值相乘来记录以瓦特(Watts)为单位的功率。
功率计算: Power = 寄存器值 * Power_ LSB
由手册可知 Power_LSB(功率最小分辨率) = Current_LSB(电流最小分辨率) * 25
Current_LSB 手册给出了计算公式,如下
Current_LSB = 最大电流 / 2^15 = 819.2mA / 2^15 = 0.025mA
而手册内有一段提示:While this value yields the highest resolution, it is common to select a value for the Current_LSB to the nearest round number above this value to simplify the conversion of the Current Register (04h) and Power Register (03h) to amperes and watts respectively
译文:虽然这个值可以提供最高的分辨率,但通常会选择一个略高于该值的整数作为 Current_LSB,以简化将电流寄存器(04h)和功率寄存器(03h)转换为安培(Amperes)和瓦特(Watts)的过程
也就是可以自己根据公式计算出的结果,选择一个合适的 Current_LSB 值,便于计算,这里公式得出的 Current_LSB = 0.025mA,本文重新选择为 0.05mA,之所以选择 0.05 也为了便于后续 CAL (基准值) 的计算,详见寄存器 0x05 说明
故 Power_LSB = 0.05mA * 25 = 1.25mW
功率计算: Power = 寄存器值 * Power_ LSB(1.25mW)
5.电流寄存器 0x04
用于存储电流读数 Current,如果启用了平均功能,该寄存器将显示平均值。电流寄存器的值是通过将分流电压寄存器中的十进制值与校准寄存器中的十进制值相乘来计算的
电流值 = 寄存器值 * Current_LSB(0.05mA) (Current_LSB 的计算在上文功率寄存器小节已经给出)
6.基准寄存器 0x05
该寄存器为器件提供用于产生测量差分电压的分流电阻值。它还设置电流寄存器的分辨率。编程该寄存器可设置 Current_LSB 和 Power_LSB。该寄存器也适用于整体系统校准。
该寄存器主要是是设置系统基准的,将 基准值(CAL) 写入寄存器即可
Current_LSB= 0.05mA (上文功率寄存器小节已经给出) ,根据原理图可知 Rshunt = 0.1R
CAL = 0.00512 / (0.00005A * 0.1R) = 1024 = 0x0400
实测调试发现所测出电流偏大,采用手册校准公式
5V 测试条件下 MeasShuntCurrent = 490 mV INA226_Current = 520mV
Corrected_Full_Scale_Cal = 490 * 1024 / 520 = 964.9 约等于 965 = 0x03C5
修改程序重新写入基准值CAL =0x03C5,再次测量输出与仪器显示数据基本一致
其它寄存器是报警功能及ID,本文未使用则不做说明
四、IIC 时序说明
1.写时序
MyI2C_Start(); //I2C起始MyI2C_SendByte(INA226_W); //发送从机地址,读写位为0,表示即将写入MyI2C_ReceiveAck(); //接收应答MyI2C_SendByte(Register); //发送寄存器地址MyI2C_ReceiveAck(); //接收应答MyI2C_SendByte(Data_H); //发送要写入寄存器的数据高位MyI2C_ReceiveAck(); //接收应答MyI2C_SendByte(Data_L); //发送要写入寄存器的数据低位MyI2C_ReceiveAck(); //接收应答MyI2C_Stop(); //I2C终止
2.读时序
该时序前还应加一个发送寄存器地址的时序:起始信号—IIC地址—ACK—寄存器地址—ACK
MyI2C_Start(); //I2C起始MyI2C_SendByte(INA226_W); //发送从机地址MyI2C_ReceiveAck(); //接收应答MyI2C_SendByte(RegAddress); //发送寄存器地址MyI2C_ReceiveAck(); //接收应答MyI2C_Start(); //I2C重复起始MyI2C_SendByte(INA226_R); //发送从机地址MyI2C_ReceiveAck(); //接收应答Data = MyI2C_ReceiveByte(); //接收指定寄存器的高位数据MyI2C_SendAck(0); //发送应答Data = (Data << 8)| MyI2C_ReceiveByte();//接收指定寄存器的低位数据MyI2C_Stop(); //I2C终止
五、程序
INA226.C
#include "stm32f10x.h" // Device header
#include "MyI2C.h"/*IIC 地址---------------------------------------------------------------------------------------------*/
#define INA226_W 0x80
#define INA226_R 0x81
/*寄存器地址--------------------------------------------------------------------------------------------*/
#define INA226_Configuration 0x00
#define INA226_Shuntvoltage 0x01
#define INA226_Busvoltage 0x02
#define INA226_Power 0x03
#define INA226_Current 0x04
#define INA226_Calibration 0x05
#define INA226_Mask 0x06
#define INA226_AlertLimit 0x07
#define INA226_ManufacturerID 0xFE
#define INA226_DieID 0xFF
/* INA226_curation Bit15-0 --------------------------------------------------------------------------*/
#define RST 0 // 0 设置成1复位 (Bit15)
#define Reservation 0x04 // 100 (Bit14-12 保留)
#define AVG 0x01 // 001 平均次数 4 (Bit11-9)
#define VBUSCT 0x04 // 100 总线电压转换时间 1.1ms (Bit116-8)
#define VSHCT 0x04 // 100 分流电压转换时间 1.1ms(Bit3-5)
#define MODE 0x07 // 111 运行模式 连续检测(默认)(Bit0–2)#define Configuration_H (RST << 7)|(Reservation << 4)|(AVG << 1)|(VBUSCT >> 2)
#define Configuration_L ((VBUSCT & 0x03) << 6)|(VSHCT << 3)|(MODE)/* INA226_Calibration ---------------------------------------------------------------------------------*/
//#define Calibration_H 0x04
//#define Calibration_L 0x00//MAX_Current = Full-scale range / R·SHUNT = 81.92mV / 0.1R = 819.2mA
//Current_LSB = 819.2mA / 2^15 = 0.025mA
//选择接近值:0.05mA = 0.00005A 手册推荐1mA 但是便于CAL计算和实际调试则重新选择为 0.05mA
//(手册:While this value yields the highest resolution, it is common to select a value for the Current_LSB to the nearest round number above this value to simplify the conversion of the Current Register (04h) and Power Register (03h) to amperes and watts respectively.)
//(虽然该值产生最高分辨率,但通常为Current_LSB选择一个值,使其与高于该值的最接近的整数相匹配,以简化电流寄存器(04h)和功率寄存器(03h)分别转换为安培和瓦的过程。)
//CAL = 0.00512 / (Current_LSB * R·SHUNT) = 0.00512 / (0.00005A * 0.1R) = 1024 = 0x0400
//Power_LSB = Current_LSB * 25 = 0.05mA * 25 = 1.25mW
//(手册:The power LSB has a fixed ratio to the Current_LSB of 25)
//(power LSB与Current_LSB的固定比率为25)#define Calibration_H 0x03
#define Calibration_L 0xC5
//实测发现电流偏大,采用手册校准公式 Corrected_Full_Scale_Cal = (Cal * MeasShuntCurrent) / INA226_Current
//5V 测试条件下 MeasShuntCurrent = 490 mV INA226_Current = 520mV Corrected_Full_Scale_Cal = 490 * 1024 / 520 = 964.9 = 965 = 0x03C5
void INA226_WriteReg(uint8_t Register, uint8_t Data_H, uint8_t Data_L)
{MyI2C_Start(); //I2C起始MyI2C_SendByte(INA226_W); //发送从机地址,读写位为0,表示即将写入MyI2C_ReceiveAck(); //接收应答MyI2C_SendByte(Register); //发送寄存器地址MyI2C_ReceiveAck(); //接收应答MyI2C_SendByte(Data_H); //发送要写入寄存器的数据高位MyI2C_ReceiveAck(); //接收应答MyI2C_SendByte(Data_L); //发送要写入寄存器的数据低位MyI2C_ReceiveAck(); //接收应答MyI2C_Stop(); //I2C终止
}
uint32_t INA226_ReadReg(uint8_t RegAddress)
{uint32_t Data;MyI2C_Start(); //I2C起始MyI2C_SendByte(INA226_W); //发送从机地址MyI2C_ReceiveAck(); //接收应答MyI2C_SendByte(RegAddress); //发送寄存器地址MyI2C_ReceiveAck(); //接收应答MyI2C_Start(); //I2C重复起始MyI2C_SendByte(INA226_R); //发送从机地址MyI2C_ReceiveAck(); //接收应答Data = MyI2C_ReceiveByte(); //接收指定寄存器的高位数据MyI2C_SendAck(0); //发送应答Data = (Data << 8)| MyI2C_ReceiveByte(); //接收指定寄存器的低位数据MyI2C_Stop(); //I2C终止return Data;
}
void INA226_Init(void)
{INA226_WriteReg(INA226_Configuration,Configuration_H,Configuration_L); //4次平均 1.1ms转换时间 连续检测INA226_WriteReg(INA226_Calibration,Calibration_H,Calibration_L); //基准值 0x0200
}
uint32_t INA226_GetShuntVoltage(void)//分流电压值 = 寄存器值 * LSB(2.5uA)
{uint32_t ShuntVoltage;ShuntVoltage = (uint32_t)((INA226_ReadReg(INA226_Shuntvoltage)) * 2.5 / 1000);return ShuntVoltage;
}
uint32_t INA226_GetBusVoltage(void)//总线电压值 = 寄存器值 * LSB(1.25mV)
{uint32_t BusVoltage;BusVoltage = (uint32_t)((INA226_ReadReg(INA226_Busvoltage)) * 1.25);return BusVoltage;
}
uint32_t INA226_GetCurrent(void)//电流值 = 寄存器值 * Current_LSB(0.05mA)
{uint32_t Current;Current = (uint32_t)((INA226_ReadReg(INA226_Current)) * 0.05);return Current;
}
uint32_t INA226_GetPower(void)//功率 = 寄存器值 * Power_LSB(1.25mW)
{uint32_t Power;Power = (uint32_t)((INA226_ReadReg(INA226_Power)) * 1.25);return Power;
}
main.c
#include "stm32f10x.h" // Device header
#include "Delay.h"
#include "OLED.h"
#include "INA226.h"
#include "MyI2C.h"uint32_t ShuntVoltage=0, BusVoltage=0, Current=0, Power=0; //定义用于存放各个数据的变量
int main(void)
{Delay_ms(2000);//上电延时/*模块初始化*/MyI2C_Init();OLED_Init(); INA226_Init();Delay_ms(1000);//初始化延时while (1){ShuntVoltage = INA226_GetShuntVoltage();Delay_ms(50);BusVoltage = INA226_GetBusVoltage();Delay_ms(50);Current = INA226_GetCurrent();Delay_ms(50);Power = INA226_GetPower();OLED_ShowString(1,1,"ShuntV:");OLED_ShowSignedNum(1, 9, ShuntVoltage, 6);//单位mV,由于OLED行限制,单位暂不显示OLED_ShowString(2,1,"BusV:");OLED_ShowSignedNum(2, 9, BusVoltage, 6);//单位mVOLED_ShowString(3,1,"Current:");OLED_ShowSignedNum(3, 9, Current, 6);//单位mAOLED_ShowString(4,1,"Power:");OLED_ShowSignedNum(4, 9, Power, 6);//单位mWDelay_ms(1000);}
}
六、实验现象
1.线路图
2.输出数据
负载仪恒阻模式 10R
3V 测试
5V 测试
以上内容个人理解,如有不正欢迎指正,需要资料及工程可留言邮箱
相关文章:
STM32 驱动 INA226 测量电流电压功率
文章目录 一、INA226简介二、引脚功能三、寄存器介绍1.配置寄存器 0x002.分流电压寄存器 0x013.总线电压寄存器 0x024.功率寄存器 0x035.电流寄存器 0x046.基准寄存器 0x05 四、IIC 时序说明1.写时序2.读时序 五、程序六、实验现象1.线路图2.输出数据 一、INA226简介 INA226 是…...
解决新搭建的centos虚拟器,yum下载不了的问题
1. 检查网络连接 确保虚拟机可以访问互联网: ping 8.8.8.8 # 测试基础网络连通性若不通: 检查网卡 IP 配置(参考之前的 IP 恢复步骤)。 确认虚拟机网络模式(如 NAT 或桥接模式)是否允许访问外网。 检查网…...
python连接Elasticsearch并完成增删改查
python库提供了elasticsearch模块,可以通过以下命令进行快速安装,但是有个细节需要注意一下,安装的模块版本要跟es软件版本一致,此处举例:7.8.1 pip install elasticsearch==7.8.1 首先连接elasticsearch,以下是免密示例 from elasticsearch import Elasticsearch# El…...
Python爬虫(7)Python数据存储实战:CSV文件读写与复杂数据处理指南
目录 一、背景与核心价值二、CSV基础与核心应用场景2.1 CSV文件结构解析2.2 适用场景 三、Python csv模块核心操作3.1 安装与基础读写3.2 高级功能:字典读写与自定义格式 四、处理复杂数据场景4.1 含特殊字符的字段4.2 嵌套数据(如JSO…...
Spring Boot 中的条件注解
Spring Boot条件注解的汇总: 注解作用判断依据使用场景ConditionalOnBean容器中存在指定Bean时,被注解的配置或Bean定义生效指定Bean在容器中存在依赖其他已存在Bean时配置相关功能ConditionalOnCheckpointRestore在特定检查点恢复相关条件满足时生效满…...
Java 字符串分解技术:substring、tokenizing 和 trimming 方法详解
关键点 Java 字符串处理是开发中不可或缺的一部分,广泛用于数据解析和格式化。substring() 方法能够精确提取字符串的子串,需注意索引范围以避免异常。String.split() 是分词的首选方法,支持正则表达式,灵活性高。trim() 和 stri…...
OpenCV进阶操作:图像金字塔
文章目录 前言一、图像金字塔1、什么是图像金字塔2、金字塔类型1) 高斯金字塔 (Gaussian Pyramid)2)拉普拉斯金字塔 (Laplacian Pyramid) 3、图像金字塔的作用 二、图像金字塔中的操作1、向下采样步骤 2、向上采样步骤 3、拉普拉斯金字塔4、结论 三、代码…...
Rust游戏开发全栈指南:从理论到实践的革新之路
一、Rust游戏开发生态全景 1.1 核心引擎框架 Rust游戏生态已形成多层级工具链,覆盖从轻量级2D到3A级项目的开发需求: Bevy:采用ECS架构的模块化引擎,提供优雅的API设计和活跃社区支持,支持实时热重载和跨平台部署Fy…...
[GXYCTF2019]Ping Ping Ping
解题步骤 1、先使用 内敛执行 查看当前的php文件 执行 命令执行 发现空格被过滤 ?ip127.0.0.1$IFS|$IFSwhomi 还有一个点就是这个 执行的命令是不能进行拼接的 可能就是被过滤了 | 所以我们使用 ; 进行绕过一下 空格过滤代替 $IFS ${IFS} ${IFS}$9 //这里$1到$9都可以 $IFS$1…...
马哥教育Linux云计算运维课程
课程大小:19.1G 课程下载:https://download.csdn.net/download/m0_66047725/90640128 更多资源下载:关注我 你是否找了很多资料看了很多视频聊了很多群友,却发现自己技术仍然原地踏步?本教程联合BAT一线导师倾囊相授…...
科技打头阵,创新赢未来——中科视界携千眼狼超高速摄像机亮相第三届科交会
2025年4月26日,合肥,第三届中国(安徽)科技创新成果转化交易会国际合作板块展区,中科视界及其旗下品牌“千眼狼”高速摄像机成为展会焦点。作为国内科学仪器的领军企业,中科视界以“科技打头阵,创…...
【Flutter】Unity 三端封装方案:Android / iOS / Web
关联文档:【方案分享】Flutter Unity 跨平台三维渲染架构设计全解:插件封装、通信机制与热更新机制—— 支持 Android/iOS/Web 的 3D 内容嵌入与远程资源管理,助力 XR 项目落地 —— 支持 Android/iOS/Web 的 3D 内容嵌入与远程资源管理&…...
高能效计算:破解算力增长与能源约束的科技密码
引言 在人工智能和大模型技术迅猛发展的今天,全球算力需求正以每年50%的速度激增[3]。然而,传统计算范式已逼近物理极限——国际能源署预测,到2030年数据中心的全球电力消耗占比可能突破3%[3]。面对这场"算力革命"与"能源危机…...
【质量管理】TRIZ(萃智)的工程系统进化法则
在文章【质量管理】现代TRIZ(萃智)理论概述-CSDN博客 我们谈到到现代TRIZ的理论、TRIZ与传统创新的差异等。在文章中我们有说到TRIZ的创始人阿奇舒勒发现其实技术的进化是有规律可循的。 那到底技术进步有什么规律呢? 技术进化发展趋势和路径…...
FastAPI系列07:“请求-响应”过程高阶技巧
“请求-响应”过程高阶技巧 1、自定义 Request自定义 Request的用途如何自定义 Request 2、自定义APIRouteAPIRoute的用途自定义 APIRoute的用途如何自定义 APIRoute 3、使用BackgroundTasks(后台任务)BackgroundTasks的用途如何使用BackgroundTasksBack…...
游戏服务器不加防护能活多久?
游戏服务器若不加防护,其存活时间受多种因素影响,但通常面临极高的安全风险,可能在数小时至数天内因攻击或漏洞利用而崩溃。以下是具体分析: 1. DDoS攻击与勒索风险 未加防护的服务器极易成为黑客攻击目标,尤其是DDoS…...
Embedding入门概述
概述 Embedding,嵌入,一种将离散的符号数据(如单词、句子、图像等)映射到连续的向量空间中的技术,这些向量能够捕捉数据之间的语义、结构等关系。就是把原本难以直接处理的符号数据,转换成计算机更容易理解…...
革新桌面自动化:微软UFO²操作系统深度解析与未来展望
一、系统架构:多智能体协同的OS级创新 微软UFO(Unified Framework for Operations)是首个深度集成于Windows底层的多智能体操作系统,其核心架构由HostAgent控制中枢与模块化AppAgent执行单元构成。 HostAgent作为系统级调度器…...
【Java】分布式事务解决方案
分布式事务是指在分布式系统中,为了保证多个节点上的操作要么全部成功提交,要么全部失败回滚,所采取的一系列技术手段和协议。 CAP理论 在一个分布式系统中以下三个基本属性无法被同时满足: C(一致性):一致性是指写…...
es数据导出
有大数据量导出的需求 整体思路:分页查询es,一页查询2000条,下一页查询的截止时间取上一页最后一条记录的创建时间(因为分页是按照创建时间逆序排列的),组装最后导出的list,利用EasyExcel导出到…...
chrony服务器(2)
安装与配置 [rootserver ~]# systemctl status ntp # 查看ntp状态 安装 # 默认已安装,若需要安装则可执行: [rootserver ~]# yum install chrony -y [rootserver ~]# systemctl start chronyd [rootserver ~]# systemctl enable chronyd Chrony配置文…...
C++入门小馆: STL 之queue和stack
嘿,各位技术潮人!好久不见甚是想念。生活就像一场奇妙冒险,而编程就是那把超酷的万能钥匙。此刻,阳光洒在键盘上,灵感在指尖跳跃,让我们抛开一切束缚,给平淡日子加点料,注入满满的pa…...
从零搭建云原生后端系统 —— 一次真实项目实践分享
一、引言:为什么选择云原生技术打造后端? 在当今数字化加速的时代,业务需求变化频繁,应用需要快速开发、快速上线、快速迭代。传统单体应用后端架构在灵活性、扩展性和稳定性方面越来越难以满足需求。 而云原生(Clou…...
东田数码科技前端面经
东田数码科技有限公司前端面经 一个月三次面试,也是逐渐积攒了许多经验,也有遇到面试官问到的重复的问题,也有一些我不懂的问题,以下是4.27东田前端面经,希望给大家做参考。 1-自我介绍 我是ac鸽,就读与…...
【音视频】SDL窗口显示
SDL视频显示函数简介 SDL_Init(): 初始化SDL系统SDL_CreateWindow():创建窗口SDL_WindowSDL_CreateRenderer():创建渲染器SDL_RendererSDL_CreateTexture():创建纹理SDL_TextureSDL_UpdateTexture(): 设置纹理的数据S…...
小球在摆线上下落的物理过程MATLAB代码
物理建模: 使用摆线参数方程定义轨迹:x r(θ - sinθ), y r(1 - cosθ)通过微分方程求解角度θ随时间变化关系,考虑能量守恒定律计算实时速度分量和切向加速度 可视化特性: 灰色虚线显示完整摆线轨迹红色小球实时显示当…...
【设计模式】享元模式
享元模式属于结构型设计模式 核心思想是通过共享技术,实现相似对象的高效复用。用 1%的资源支撑100%的需求——通过对象状态的分离与共享,用最小内存支持海量对象 内部状态:对象中不变的部分共享 外部状态:对象中变化的部分非共享…...
R中实现数值求导的包numDeriv
介绍 numDeriv 是一个用于数值求导的 R 包,它提供了计算函数导数的简单方法,支持一阶导数和高阶导数的计算。 计算一阶导数 grad(func, x, method"Richardson", sideNULL, eps1e-4, method.argslist(), ...) 参数: func&#x…...
常用的多传感器数据融合方法
1. 概述 根据具体需求(实时性、计算资源、噪声特性)选择合适的方法,实际应用中常结合多种方法(如UKF与神经网络结合)。 传统方法 (KF/EKF/UKF/PF)依赖数学模型,适合动态系统&#…...
[Lc_week] 447 | 155 | Q1 | hash | pair {}调用
447_Q1 题解 class Solution {typedef pair<int,int> PII;// 自定义哈希函数struct HashPII {size_t operator()(const PII& p) const {return hash<int>()(p.first) ^ (hash<int>()(p.second) << 1);}};public:int countCoveredBuildings(int n,…...
HTML5 新特性详解:语义化标签、表单与音视频嵌入
前言 HTML5作为当前Web开发的核心技术,为开发者提供了更强大、更语义化的工具集。本文将深入探讨HTML5的三大核心特性:语义化标签、增强的表单功能以及原生的音视频支持,帮助开发者构建更现代化、更易维护的网页应用。 一、HTML5语义化标签…...
关于 React Fiber 架构、Hooks 原理
下面将详细介绍你提到的关于 React Fiber 架构、Hooks 原理等相关知识点: React Fiber 架构概述 1. 架构演变 在 React 16 版本之前,采用的是栈调和(Stack Reconciler),流程是 JSX 经过 render 函数转换为虚拟 DOM&…...
音视频之H.265/HEVC熵编码
H.265/HEVC系列文章: 1、音视频之H.265/HEVC编码框架及编码视频格式 2、音视频之H.265码流分析及解析 3、音视频之H.265/HEVC预测编码 4、音视频之H.265/HEVC变换编码 5、音视频之H.265/HEVC量化 6、音视频之H.265/HEVC环路后处理 7、音视频之H.265/HEVC熵编…...
【视频生成模型】通义万相Wan2.1模型本地部署和LoRA微调
目录 1 简介2 本地部署2.1 配置环境2.2 下载模型 3 文生视频3.1 运行命令3.2 生成结果 4 图生视频4.1 运行命令4.2 生成结果 5 首尾帧生成视频5.1 运行命令5.2 生成结果 6 提示词扩展7 LoRA微调 1 简介 2 本地部署 2.1 配置环境 将Wan2.1工程克隆到本地: git cl…...
Java高频面试之并发编程-09
hello啊,各位观众姥爷们!!!本baby今天来报道了!哈哈哈哈哈嗝🐶 面试官:详细说说ThreadLocal ThreadLocal 是 Java 中用于实现线程本地变量的工具类,主要解决多线程环境下共享变量的…...
[Vulfocus解题系列]Apache HugeGraph JWT Token硬编码导致权限绕过(CVE-2024-43441)
[Vulfocus解题系列]Apache HugeGraph JWT Token硬编码导致权限绕过(CVE-2024-43441) Apache HugeGraph 是一款快速、高度可扩展的图数据库。它提供了完整的图数据库功能,具有出色的性能和企业级的可靠性。 Apache HugeGraph 存在一个 JWT t…...
MySQL最新安装、连接、卸载教程(Windows下)
文章目录 MySQL最新安装、连接、卸载教程(Windows下)1.MySQL安装2.MySQL连接2.1 命令行连接2.2 图形化连接(推荐) 3.MySQL卸载参考 MySQL最新安装、连接、卸载教程(Windows下) 1.MySQL安装 MySQL 一共可以…...
Scala 函数柯里化及闭包
一、柯里化 1.1 定义 柯里化是将一个接受多个参数的函数转换为一系列接受单个参数的函数的过程。每个函数返回一个新函数,直到所有参数都被收集完毕,最终返回结果。 1.2 示例 非柯里化函数(普通多参数函数) def add(a: Int, b…...
EasyRTC嵌入式音视频通信SDK助力视频客服,开启智能服务新时代
一、背景 在数字化服务浪潮下,客户对服务体验的要求日益提升,传统语音及文字客服在复杂业务沟通、可视化指导等场景下渐显不足。视频客服虽成为企业服务升级的关键方向,但普遍面临音视频延迟高、画质模糊、多端适配难、功能扩展性差等问题&a…...
OceanBase数据库-学习笔记1-概论
多租户概念 集群和分布式 随着互联网、物联网和大数据技术的发展,数据量呈指数级增长,单机数据库难以存储和处理如此庞大的数据。现代应用通常需要支持大量用户同时访问,单机数据库在高并发场景下容易成为性能瓶颈。单点故障是单机数据库的…...
Android 理清 Gradle、AGP、Groovy 和构建文件之间的关系
在 Android 开发中,我们常常会接触到一系列看似相近却各有分工的名词,比如:Gradle、Groovy、AGP、gradle-wrapper.properties、build.gradle、settings.gradle 等等。 它们彼此之间到底是什么关系?各自又承担了什么角色࿱…...
ubuntu 安装ollama后,如何让外网访问?
官网下载linux版本:https://ollama.com/download/linux 1、一键安装和运行 curl -fsSL https://ollama.com/install.sh | sh 2、下载和启动deepseek-r1大模型 ollama run deepseek-r1 这种方式的ollama是systemd形式的服务,会随即启动。默认开启了 …...
安卓的Launcher 在哪个环节进行启动
安卓Launcher在系统启动过程中的关键环节启动,具体如下: 内核启动:安卓设备开机后,首先由引导加载程序启动Linux内核。内核负责初始化硬件设备、建立内存管理机制、启动系统进程等基础工作,为整个系统的运行提供底层支…...
【银河麒麟高级服务器操作系统】在VMware虚拟机情况下出现软锁处理过程
系统环境及配置 系统环境 物理机/虚拟机/云/容器 VMware虚拟机,宿主机型号是YK SR750 网络环境 外网/私有网络/无网络 私有网络 硬件环境 机型 VMware Virtual Platform 处理器 Intel(R) Xeon(R) Gold 6348 CPU 2.60GHz 内存 64GB 整机类型/架构 x86…...
Ubuntu 22.04.4操作系统初始化详细配置
上一章节,主要讲解了Ubuntu 22.04.4操作系统的安装,但是在实际生产环境中,需要对Ubuntu操作系统初始化,从而提高系统的性能和稳定性。 一、查看Ubuntu系统版本和内核版本 # 查看系统版本 testubuntu:~$ sudo lsb_release -a Rel…...
[ACTF2020 新生赛]Upload
先写一个万能的一句话木马 使用一句话木马 发现这个是有内容过滤的 过滤了 <? 发现这个过滤的很死那就只能使用 不带 ? 的短标签了 使用script 标签 这个的使用只限于对方的php是5版本的 正好是低版本的 所以直接上传 改一下后缀为 phtml 成功上传 但是我们没有…...
Harbor2.0仓库镜像清理策略
背景 在持续集成和持续部署的流程中,频繁的构建和部署会生成大量的镜像版本。这些历史镜像如果不及时清理,会占用大量的存储空间,导致 Harbor 仓库膨胀,影响系统性能。 目前 公司的Harbor存储已经占用1T,好多的repo的…...
从零开始了解数据采集(二十一)——电子制造行业趋势分析案例
这次分享一个偏行业性的趋势分析案例,在项目中为企业实实在在的提高了良品率。不懂什么是趋势分析的同学,可以翻看前面的文章。 在广东某电子制造厂中,管理层发现最近几个月生产良品率有所波动,但无法明确波动原因,也…...
从零开始开发一个简易的五子棋游戏:使用 HTML、CSS 和 JavaScript 实现双人对战
介绍 五子棋,作为一种经典的棋类游戏,不仅考验玩家的策略与判断力,还能在繁忙的生活中带来一丝轻松。今天,我们将用 HTML、CSS 和 JavaScript 来开发一个简易的五子棋游戏,玩家可以在浏览器中与朋友展开一场刺激的对决…...
用Node.js施展文档比对魔法:轻松实现Word文档差异比较小工具,实现Word差异高亮标注(附完整实战代码)
引言:当「找不同」遇上程序员的智慧 你是否经历过这样的场景? 法务同事发来合同第8版修改版,却说不清改了哪里 导师在论文修改稿里标注了十几处调整,需要逐一核对 团队协作文档频繁更新,版本差异让人眼花缭乱 传统…...