当前位置: 首页 > article >正文

做一个干电池的电量检测器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平米的土地,所以印象深刻。好的,先这样吧!


http://www.kler.cn/a/379082.html

相关文章:

  • Hugging Face魔塔使用
  • 使用 MONAI Deploy 在 AMD GPU 上进行全身分割
  • 二、应用层,《计算机网络(自顶向下方法 第7版,James F.Kurose,Keith W.Ross)》
  • Java毕业设计-基于微信小程序的校园二手物品交易系统的实现(V2.0)
  • ctfshow(91,96,97)--PHP特性
  • ffmpeg视频滤镜:膨胀操作-dilation
  • 学生自我导向学习倾向性测评
  • 力扣hot100-->hash表/map
  • 头歌网络安全爬虫
  • 编写 blender python 扩展 (extension / addon)
  • Kotlin by lazy和lateinit的使用及区别
  • qemu_imx6ul使用mount挂载Permission denied问题解决记录
  • 为什么要使用Golang以及如何入门
  • 【Linux】ProxySQL读写分离
  • 信息学科平台系统开发:基于Spring Boot的最佳实践
  • Android使用timer和thread实现定时器
  • 【数据结构】堆:建堆/向下调整/上向调整/堆排序/TOK问题
  • 数组、字符串、链表和队列的指针的定义
  • CQ社区版 v2024.10 | 支持k8s、helm部署!
  • SpringBoot中扩展Druid的过滤器实现完整的SQL打印
  • 学习笔记:黑马程序员JavaWeb开发教程(2024.10.27)
  • 心情追忆-AI分析报错
  • sklearn|机器学习:决策树(一)
  • 详解RabbitMQ三种队列类型
  • 两秒掌握git
  • laravel: Breeze 和 Blade, 登录 注册等