基于Arduino的18650锂电池容量测试仪

  • 基于Arduino锂电池容量测试仪
    • 为什么我们需要电池容量测试仪?
    • 所需元器件
    • 计算和显示单元
    • 恒定负载电流电路
    • 电压测量
    • 测量电池容量的 Arduino 程序
    • 精度改进
    • 构建和测试电路
    • 电路图和代码

基于Arduino锂电池容量测试仪

随着技术的出现,我们的电子产品和电器变得越来越小,具有更多功能和更复杂的应用。随着复杂性的增加,电路的功率要求也增加了,为了使设备尽可能小和便携,我们需要一种可以长时间提供大电流的电池,同时时间,重量要轻得多,以便设备应该保持便携。

为什么我们需要电池容量测试仪?

市场上有许多电池供应商出售廉价仿冒版的锂离子电池,声称其规格奇特且价格低廉,令人难以置信。当您购买这些电池时,它们要么根本不工作,要么如果它们可以工作,充电容量或电流太低以至于它们根本无法与应用程序一起工作。那么,如果电池不是这些廉价仿冒品之一,如何测试锂电池呢?其中一种方法是在空载和负载情况下测量开路电压,但这并不可靠。
因此,我们将为锂离子 18650 电池构建一个18650 电池容量测试仪,该测试仪将通过电阻器对充满电的 18650 电池进行放电,同时测量流过电阻器的电流以计算其容量。如果您在电池电压处于指定限制范围内时未获得声称的电池容量,则该电池有故障,您不应使用该电池,因为电池的充电状态会在负载下以非常快的速度耗尽,从而产生如果在电池组中使用本地电流回路,会导致发热并可能起火。所以让我们直接进入它。

所需元器件

Arduino纳米
16×2字符液晶
LM741 运算放大器 IC
2.2Ω、5W 电阻器
7805正电压稳压IC
12V电源
10kΩ微调电位器
0.47uF电容
33kΩ电阻
直流电源筒形插孔连接器
PCB螺丝端子
IRF540N N沟道MOSFET IC
穿孔板
焊接套件
散热片

计算和显示单元

分为两部分,首先是 Arduino Nano 的低 5V 电源和 16×2 字母数字 LCD 屏幕及其连接,以实时显示电流和电压测量的结果。该电路由使用 SMPS 的 12V 电源供电,或者您可以使用 12V 电池以及为 Arduino 和 LCD 屏幕供电的最大电流约为 60-70mA。
要将电压降至 5V,我们将使用一个线性稳压器,它可以承受高达 35V 的电压,并且需要至少 7.5V 的输入电源来提供稳定的 5V 电源,并且多余的电压会以热量的形式消散,因此如果您的输入LM7805稳压IC电压大于12V,考虑加散热片,以免损坏。LCD 由 7805 的 5V 电源供电,并连接到 Arduino 并以 4 位模式工作。我们还添加了一个10k Ω抽头电位器来控制 LCD 显示屏的对比度。

恒定负载电流电路

其次是基于PWM的恒流负载电路,使流过电阻的负载电流可以由我们控制并保持恒定,从而不会随着电池电压的下降而因电流随时间的变化而产生误差。它由LM741 OPAMP IC和IRF540N N 沟道 MOSFET 组成,通过根据我们设置的电压电平打开和关闭 MOSFET 来控制流过 MOSFET 的电流。
运算放大器工作在比较器模式,所以在这种模式下。只要运算放大器的非反相引脚的电压高于反相引脚的电压,运算放大器的输出就会为高电平。同样,如果运放反相引脚的电压高于同相引脚,运放的输出将被拉低。在给定的电路中,非反相引脚电压电平由 Arduino NANO 的 D9 PWM 引脚控制,该引脚以 500Hz 频率切换,然后通过电阻值为 33kΩ 的低通 RC 电路滤波器和电容为 0.47 的电容器uF,在同相引脚提供几乎恒定的直流信号。反相引脚连接到负载电阻,读取电阻和公共 GND 两端的电压。OPAMP 的输出引脚连接到 MOSFET 的栅极端子以将其打开或关闭。OPAMP 将尝试通过切换连接的 MOSFET 使其两端的电压相等,因此流过电阻的电流将与您在 NANO 的 D9 引脚上设置的 PWM 值成正比。在这个项目中,我将电路的最大电流限制为 1.3A,这是合理的,因为我拥有的电池的最大额定电流为 10A。

电压测量

典型的充满电的锂离子电池的最大电压为 4.1V 至 4.3V,低于 Arduino Nano 的模拟输入引脚的 5V 电压限制,其内部电阻超过 10kΩ,因此我们可以直接连接单元到任何模拟输入引脚,而不必担心流过它们的电流。所以,在这个项目中,我们需要测量电池的电压,以便我们可以确定电池是否在正确的电压工作范围内,以及是否完全放电。

我们还需要测量流过电阻的电流,因为我们不能使用分流器,因为电路的复杂性会增加,负载路径中的电阻增加会降低电池放电率。使用较小的分流电阻器将需要一个额外的放大器电路,以使来自它的电压读数对 Arduino 可读。

所以我们直接读取负载电阻两端的电压,然后使用欧姆定律将负载电阻值得到的电压除以得到流过它的电流。电阻器的负极直接连接到 GND,因此我们可以放心地假设我们在电阻器上读取的电压是电阻器中的电压降。

测量电池容量的 Arduino 程序

现在完成硬件电路后,我们开始进行 Arduino 编程。现在,如果您的 PC 上没有安装 Arduino IDE,那么您在这里做什么!转到官方 Arduino 网站并下载并安装 Arduino IDE,或者您也可以在任何其他编辑器中编码,但这是另一天的话题,现在我们坚持使用 Arduino IDE。现在我们正在使用 Arduino Nano,因此请确保您已通过转到TOOLS> BOARDS并在那里选择ARDUINO NANO选择了 Arduino Nano 板,现在通过转到TOOLS> PROCESSOR选择您的 nano 具有的正确处理器当您在那里时,还可以选择您的 Arduino 在您的 PC 上连接到的端口。我们正在使用 Arduino 驱动与其连接的 16×2 字母数字 LCD,并测量电池的电压和流过负载电阻的电流,如上一节所述,我们通过声明头文件来驱动 16×2 来开始我们的代码字母数字液晶屏。您可以跳过此部分以在页面末尾获取完全煮熟和提供的代码,但请耐心等待我们将代码分成小部分并尝试解释。

现在已经定义了头文件,我们继续声明变量,我们将在代码中使用来计算电压和电流。此外,在本节中,我们必须定义用于驱动 LCD 的引脚以及将用于提供 PWM 输出并读取来自电池和电阻器的模拟电压的引脚。

#include <LiquidCrystal.h>  //Default Arduino LCD Librarey is included
const int rs = 3, en = 4, d4 = 5, d5 = 6, d6 = 7, d7 = 8; //Mention the pin number for LCD connection
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
const float BAT_LOW = 3.0;    //to define the low voltage limit of the Li Ion cell
const float BAT_HIGH = 4.5;   //to define the high voltage limit of the cell
const int MOSFET_Pin=9;
const int PWM_VALUE=150;
unsigned long previousMillis = 0; // Previous time in ms
unsigned long millisPassed = 0;  // Current time in ms
float Capacity=0;     //Variable to define the battery Capacity
float Resistor=2.2;   // Load Resistor Value is 2.2ohms
float mA;

现在进入设置部分,如果您想让您的 Arduino 一直连接到您的 PC 并使用串行监视器监控进度并在此处初始化 LCD 屏幕。它还将在屏幕上显示一条欢迎消息“电池容量测试器电路”3 秒钟。

void setup()
{Serial.begin(9600);lcd.begin(16, 2);lcd.setCursor(0, 0); // Set the cursor on the first column and first row.lcd.print("Battery Capacity");lcd.setCursor(0,1);lcd.print("Tester Circuit");delay(3000);lcd.clear();
}

精度改进

无论如何,这是一种读取电压和电流的好方法,但它并不完美。实际电压和测得的 ADC 电压之间的关系不是线性的,这将导致电压和电流测量出现一些误差。

如果您想提高结果的准确性,则必须在图表上绘制通过应用各种已知电压源获得的 ADC 值,然后使用您喜欢的任何方法从中确定乘数方程。这样,准确性将得到提高,并且您将非常接近实际结果。

此外,我们使用的 MOSFET 不是逻辑电平 MOSFET,因此它需要超过 7V 才能完全打开电流通道,如果我们直接对其施加 5V,电流读数将不准确。但是您可以使用逻辑电平 IRL520N N 沟道 MOSFET 来消除 12V 电源的使用,并直接使用 Arduino 的 5V 逻辑电平。

构建和测试电路

我通过 DC Barrel Jack 连接器为恒定负载电流电路提供了 12V 电源,然后在 LM7805 的帮助下,为 Nano 和 LCD 屏幕提供了 5V。现在给电路通电并调节微调电位器来设置液晶屏的对比度,此时你应该在液晶屏上看到欢迎信息,然后如果电池的电压电平在工作范围内,那么当前- 电池的电压和电流将显示在那里。

电路图和代码

已上传,可在个人主页中查看。

基于Arduino锂电池容量测试仪相关推荐

  1. 创意小项目:单片机锂电池容量测试仪设计制作 附C语言源代码

    前几天在家看到我家的锂电吸尘器没电了,但是充满后用了一会就又没了,电量明明显示还有两格,心想这个东西太不靠谱了,于是就寻思如果能测试出电池的容量就好了,便自己动手做了一个锂电容量测试仪, 老规矩废话不 ...

  2. 基于arduino的ESP32 学习笔记(一) 基于ESP32的智能花盆

    前言 本文的目的是为了给将要制作的ESP32手环做技术储备 准备学习下ESP32,还有嵌入式GUI框架LVGL,通过做几个小项目练手是不错的选择,最终目标是做一个ESP32的手环 做一个ESP32手环 ...

  3. 基于Arduino Pro Mini的四轴飞行器

    一.四轴飞行器的结构 四轴飞行器属于一种多旋翼飞行装置,有四个轮子来保持悬浮和推进飞行,简称四轴或四旋翼.四轴飞行器的四个旋翼具有相同的大小,位置分布对称,成十字形交叉状.四轴飞行器搭载的飞行控制装置 ...

  4. Arduino毕业设计——基于Arduino+PID+AI的自动驾驶小车控制系统设计与实现(毕业论文+程序源码)——自动驾驶小车控制系统

    基于Arduino+PID+AI的自动驾驶小车控制系统设计与实现(毕业论文+程序源码) 大家好,今天给大家介绍基于Arduino+PID+AI的自动驾驶小车控制系统设计与实现,文章末尾附有本毕业设计的 ...

  5. 基于Arduino开发的智能蓝牙小车

    基于Arduino的智能蓝牙小车 材料准备: Arduino开发板一块.四驱小车底板及相关配件一套.L298N驱动模块一个.HC-05/06蓝牙模块一块,九伏电源一块(用于主板供电).12V锂电池一块 ...

  6. 基于arduino的5路循迹小车(1)

    基于arduino的5路循迹小车(1) 初步小车运动 1.硬件选用 1.开发板使用arduino 2560 2.电机驱动板使用 大功率电机驱动板(PWM由两个端子控制) 3.电源12V锂电池 4.降压 ...

  7. EBC-B10电池容量测试仪之通信协议分析

    手上有台EBC-B10电池容量测试仪,挺好的国货.可以用来测试电池容量,也可以用来给锂电池充电. 对于有数块1S,3S电池的人来说,充电参数略多设置有些麻烦.好在可以通过串口接电脑设置参数.不过想着还 ...

  8. 基于Arduino通过并联L298N实现四驱麦克纳姆轮巡迹小车

    1 前言 本人也是零基础进行Arduino学习的初学者,做小车期间遇到过很多困难,在此写下整个小车的制作流程以及遇到的问题与解决方案,希望对后来者有所帮助.在制作期间参考了许多文章得到了大佬的指点,以 ...

  9. 基于Arduino单片机的nRF24L01+无线遥控装置设计(爆肝制作)

    目录 前言 一.总体思路 二.硬件介绍 (一)主机 (二)从机 三.电路设计 (一)主机 (二)从机 四.程序代码 (一)主机 (二)从机 五.总结及改进 六.所用到的文献链接 前言 此文章只涉及单片 ...

最新文章

  1. 程序员 专属的新年祝福原来是这样的! (附中奖名单)
  2. 谷歌引入自动网络设计,高效解决大规模深度推荐模型的特征嵌入问题
  3. P4445 最长回文串
  4. java 线程 函数_java – 从后台线程调用主线程上的函数
  5. 妙味css3课程---1-1、css中自定义属性可以用属性选择器么
  6. HTML 基础语言
  7. 深挖前端 JavaScript 知识点 —— 史上最全面、最详细的 Cookie 总结
  8. BZOJ1877 [SDOI2009]晨跑 【费用流】
  9. 如何用 Nodejs 分析一个简单页面
  10. ffmpeg系列之编译安卓版ffmpeg库
  11. 小学计算机课动画制作的评课稿,信息技术评课稿
  12. Manjaro安装deb包
  13. 他是世界上最杰出程序员之一,1 个月写了个操作系统,退休后去做飞行员!...
  14. 编写短信验证码(Java基础)
  15. 期货居间人一年能赚多少?期货居间人开户手续费有什么优势?
  16. NXP-MPC5748G车载MCU使用(食用)方法(踩坑)实用指南(骗人教程)(三):MATLAB/SIMULINK生成代码给MPC5848G嵌入式处理器运行
  17. A股数据分析之收集数据:股票列表和股价
  18. 笔记《基于无人驾驶方程式赛车的传感器融合目标检测算法研究及实现》
  19. xcode11新项目删除main.storyboard 两种方法
  20. 所谓上拉电阻和下拉电阻

热门文章

  1. day1 704.二分查找 27.移除元素
  2. temp = (temp 0x55555555) + ((temp 0xaaaaaaaa) 1)
  3. cmd命令创建文件文件夹
  4. html中div分页操作
  5. 一些实用的cmd命令,让你变得很牛X
  6. 开发人员为什么要选择APL(抽象编程语言)平台?
  7. security 二层交换安全
  8. cisco packet tracer_交换机配置/mac地址表(图解version:8+)
  9. SEO新手不知道每天做什么,看了你就知道
  10. 和利时scada系统服务器参数,设备数据采集之SCADA系统