做一个干电池的电量检测器03:数值拟合与电路仿真

        首先在表格中进行详细的计算,整理出所需的数据。接着,我们运用MATLAB的强大功能对这些数据进行插值处理,生成了一个离散的数值数组。这个数组的每个数值都精确地对应着模数转换器(ADC)采样到的信号。通过这些数值,我们进一步分析电池的电压,最终得出残余电量的准确数值。

% 数据输入
RES = [12.54941694, 19.41596793, 26.28251891, 33.1490699, 40.01562089, 46.88217187, ...
       53.74872286, 60.61527385, 67.48182484, 74.34837582, 81.21492681, 88.0814778, ...
       94.68793215, 101.8145798, 108.3450059, 115.5476817, 122.4142327, 129.2807837, ...
       136.1473347, 141.7029987, 147.4528681, 152.8065237, 156.1227558, 160.11784, ...
       162.9893067, 167.6526863, 171.4944665, 174.582185, 178.6731334, 182.9647278, ...
       187.1002642, 190.6115687, 193.6658462, 197.8214472, 200.2871632, 204.8128446, ...
       210.4309317, 214.0098613, 219.4822944, 224.8576247, 230.4063528, 237.2729038, ...
       244.1394548, 251.0060058, 257.8725567, 264.7391077, 271.6056587, 278.0400492, ...
       285.3387607, 292.2053117, 299.0718627];
capacity = [2.770610162, 3.128649151, 4.023746622, 4.907655375, 6.116036962, 7.055889307, ...
            8.28664833, 9.282444268, 10.43488226, 11.62088641, 12.58311619, 13.76912034, ...
            14.67727132, 16.44546178, 17.54746448, 19.45298929, 21.15367448, 23.34666329, ...
            25.98720083, 27.75613721, 30.99850348, 33.78993332, 36.72837049, 39.6083466, ...
            42.58986034, 46.3934487, 49.52826433, 52.14802282, 55.18975584, 58.59979403, ...
            61.82047008, 64.75890725, 67.65558652, 70.38962978, 72.64602132, 76.09507696, ...
            79.04410345, 81.19706151, 83.92797903, 86.24590853, 88.46500434, 90.79225777, ...
            92.89573683, 94.49572356, 96.00220457, 96.80059955, 97.71136122, 97.98466719, ...
            98.6579268, 98.80338014, 99.206174];

% 创建新的RES数据,间隔为1
new_RES = 0:1:300;

% 进行插值计算
new_capacity = interp1(RES, capacity, new_RES, 'spline', 'extrap');

% 保留小数点后一位
new_capacity = round(new_capacity, 1);

% 结果输出到同名的txt文件
fileID = fopen('插值结果.txt', 'w');
fprintf(fileID, 'RES\t容量百分比\n');
for i = 1:length(new_RES)
    fprintf(fileID, '%d\t%.1f\n', new_RES(i), new_capacity(i));
end
fclose(fileID);

% 可视化插值结果
figure;
plot(RES, capacity, 'o', 'MarkerFaceColor', 'b'); % 原始数据点
hold on;
plot(new_RES, new_capacity, '-r'); % 插值结果
xlabel('RES');
ylabel('容量百分比');
title('RES vs 容量百分比插值结果');
legend('原始数据', '插值数据');
grid on;

matlab运行后拟合的曲线如下: 

在MPLAB IDE中定义静态数组:

在Proteus中,建立仿真电路,显示电压和电量,如图:

 

 增加使用led光排分级显示剩余电量如图:

 

        基本到此就告以段落了,这是一个很小的题目,主要还是借此来熟悉单片机的开发环境,一个实用的电量计肯定不会是图中的电路来实现,因为受限于成本的原因,肯定采用廉价的国产8位单片机+灰度液晶显示表头+单只电池升压电路,但大致的思路是一样的。精度不是关键,关键是低成本和低功耗。

        有朋友告诉我说,碱性干电池是可以小电流充电来恢复部分电量的,有机会做实际的电路实验下,所以对此感兴趣是因为几年前垃圾分类的宣传中,听说一节干电池可以污染6平米的土地,所以印象深刻。好的,先这样吧!

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

# linux从入门到精通-从基础学起,逐步提升,探索linux奥秘(十九)--mysql数据库基本操作

linux从入门到精通-从基础学起,逐步提升,探索linux奥秘(十九)–mysql数据库基本操作 一、MySQL的基本操作(1)(难点) 1、名词介绍 以Excel文件举例: 数据库&#xff1a…

关于我的编程语言——C/C++——第四篇(深入1)

(叠甲:如有侵权请联系,内容都是自己学习的总结,一定不全面,仅当互相交流(轻点骂)我也只是站在巨人肩膀上的一个小卡拉米,已老实,求放过) 字符类型介绍 char…

【python】OpenCV—Tracking(10.4)—Centroid

文章目录 1、任务描述2、人脸检测模型3、完整代码4、结果展示5、涉及到的库函数6、参考 1、任务描述 基于质心实现多目标(以人脸为例)跟踪 人脸检测采用深度学习的方法 核心步骤: 步骤#1:接受边界框坐标并计算质心 步骤#2&…

Unity核心笔记

1、认识模型的制作 1.建模 2.展UV 3.材质和纹理贴图 4.骨骼绑定 5.动画制作 总结 2、图片导入概述 1.Unity支持的图片格式 2.图片设置的6大部分 3、纹理类型设置 1.纹理类型主要是设置什么 2.参数讲解 4、纹理形状设置 1.纹理形状主要设置什么 2.参数讲解 5、纹理高级设置 …

(57)MATLAB使用迫零均衡器和MMSE均衡器的BPSK调制系统仿真

文章目录 前言一、仿真测试模型二、仿真代码三、仿真结果四、迫零均衡器和MMSE均衡器的实现1.均衡器的MATLAB实现2.均衡器的性能测试 总结 前言 本文给出仿真模型与MATLAB代码,分别使用具有ISI的三个不同传输特性的信道,仿真测试了使用迫零均衡器和MMSE…

[项目] C++基于多设计模式下的同步异步日志系统

[项目] C基于多设计模式下的同步&异步日志系统 文章目录 [项目] C基于多设计模式下的同步&异步日志系统日志系统1、项目介绍2、开发环境3、核心技术4、日志系统介绍4.1 日志系统的价值4.2 日志系统技术实现4.2.1 同步写日志4.2.2 异步写日志 5、相关技术知识5.1 不定参…

动态规划应该如何学习?

动态规划如何学习 参考灵神的视频和题解做的笔记(灵神YYDS,以后也都会用这套逻辑去思考) 枚举选哪个: 动态规划入门:从记忆化搜索到递推_哔哩哔哩_bilibili 746. 使用最小花费爬楼梯 - 力扣(LeetCode&a…

RK3588的QT交叉编译环境搭建

主要参考为RK3568或RK3288开发板创建交叉编译环境{采用amd64的ubuntu系统配置交叉编译arm64开发环境}(保姆级包括安装QT)超详细记录版_rk3568交叉编译-CSDN博客 先说一下,使用的Ubuntu20.04.5版本,qt源码用的5.14.2版本,交叉编译器使用RK3588…

专利生成穿刺demo

一、做原型 做原型?具体需求是啥?只有一个“帮助客户生成专利说明书”这样一个笼统的要求? 只有这些肯定是不能用来指导原型开发的。既然目前没有准确的需求,那就先看看现有的产品现状吧。 1.竞品分析 怎么开展哪?…

数字信号处理Python示例(3)生成三相正弦信号

文章目录 前言一、三相正弦信号的表示二、生成三相正弦信号的Python代码三、三相正弦信号的图示与分析四、生成幅度不相等的三相正弦信号的Python代码五、幅度不相等的三相正弦信号的图示与分析写在后面的话 前言 首先给出三相正弦信号的数学表达式,并给出生成三相…

【linux 多进程并发】0302 Linux下多进程模型的网络服务器架构设计,实时响应多客户端请求

0302 多进程网络服务器架构 ​专栏内容: postgresql使用入门基础手写数据库toadb并发编程 个人主页:我的主页 管理社区:开源数据库 座右铭:天行健,君子以自强不息;地势坤,君子以厚德载物. 一、概…

Linux云计算 |【第五阶段】CLOUD-DAY9

主要内容: Metrics资源利用率监控、存储卷管理(临时卷ConfitMap、EmptyDir、持久卷HostPath、NFS(PV/PVC)) 一、Metrics介绍 metrics是一个监控系统资源使用的插件,可以监控Node节点上的CPU、内存的使用率,或Pod对资…

Kafka 判断一个节点是否还活着有那两个条件?

大家好,我是锋哥。今天分享关于【Kafka 判断一个节点是否还活着有那两个条件?】面试题?希望对大家有帮助; Kafka 判断一个节点是否还活着有那两个条件? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 在Ka…

PyQt5实战——多脚本集合包,UI以及工程布局(二)

个人博客:苏三有春的博客 系列往期: PyQt5实战——多脚本集合包,前言与环境配置(一) 布局 2.1 UI页面布局 整体框架分为分为三个部分,垂直分布。 第一个部分为功能选择按钮(如UTF-8转换&#…

Cpp::set map 的理解与使用(22)

文章目录 前言一、预备知识关联式容器键值对 二、set何为set?set的使用set的特点multiset 三、map何为map?map中的operator[ ]multimap 总结 前言 刚学完二叉搜索树,我们马上来感受一下直接与它相关的两个容器吧! 一、预备知识 关联式容器 在以往的 S…

PostgreSQL 学习笔记:PostgreSQL 主从复制

PostgreSQL 笔记:PostgreSQL 主从复制 博客地址:TMDOG 的博客 在现代应用程序中,数据库的高可用性和扩展性是至关重要的。PostgreSQL 提供了主从复制功能,可以在多个数据库实例之间复制数据,以实现冗余和负载均衡。本…

SQL,力扣题目1225,报告系统状态的连续日期【窗口函数】

一、力扣链接 LeetCode_1225 二、题目描述 表:Failed ----------------------- | Column Name | Type | ----------------------- | fail_date | date | ----------------------- 该表主键为 fail_date (具有唯一值的列)。 该表包含失败任务的天数.表…

晶台施密特触发器光耦KLH11LX,1MHz高传输速率

晶台推出KLH11LX系列由一个砷化镓红外发光二极管和一个高速集成电路检测器组成,该输出检测器包含了一个施密特触发器,利用其回滞特性,便于脉冲整形,提高抗噪性能。 功能图Functional Diagram 产品特点Product Features •高传输…

Mac在Typora配置PicGo图床,以github为例

Mac配置PicGo图床 0.准备阶段:下载PicGo https://picgo.github.io/PicGo-Doc/zh/guide/ 根据这个链接选择自己的安装方式 1.PicGo已损坏,无法打开 解决方法 打开iTerm,把sudo xattr -d com.apple.quarantine 输入命令行 然后把软件拖入命令行 sudo xa…

「Mac畅玩鸿蒙与硬件23」鸿蒙UI组件篇13 - 自定义组件的创建与使用

自定义组件可以帮助开发者实现复用性强、逻辑清晰的界面模块。通过自定义组件,鸿蒙应用能够提高代码的可维护性,并简化复杂布局的构建。本篇将介绍如何创建自定义组件,如何向组件传递数据,以及如何在不同页面间复用这些组件。 关键词 自定义组件复用组件属性传递组件通信组…