随着技术的发展,我们的电子产品和电器越来越小,功能和复杂的应用也越来越多。随着复杂度的增加,电路的功率需求也增加了,并且在我们寻求使设备尽可能小和尽可能轻便的过程中,我们需要一种能够长时间提供高电流且同时具有高电流的电池。时间,减轻重量,使设备保持便携性。如果您想了解有关电池的更多信息,还可以阅读有关电池基本术语的本文。
在许多不同类型的电池中,铅酸电池,Ni-Cd电池和Ni-MH电池不适合使用,因为它们的重量更大或无法提供应用所需的电流,因此剩下锂离子电池既可以提供高电流,又可以保持轻巧的重量和紧凑的尺寸。以前,我们还构建了18650电池充电器和升压模块以及基于IoT的电池监视系统,如果有兴趣,可以查看一下。
为什么需要电池容量测试仪?
市场上有许多电池供应商以低廉的价格出售价格低廉的仿制锂离子电池版本,这些版本声称具有奇特的规格,这太好了。当您购买这些电池时,它们要么根本无法工作,要么根本无法工作,则充电容量或电流太低,以致根本无法与该应用程序一起工作。那么,如果电池不是这些廉价仿冒品之一,该如何测试锂电池呢?一种方法是在空载和空载时测量开路电压,但这一点都不可靠。
因此,我们将为锂离子18650 电池构建18650电池容量测试仪,该测试仪将通过电阻对充满电的18650电池放电,同时测量流经电阻的电流以计算其容量。如果在电池电压处于指定限制范围内时仍未获得要求的电池容量,则该电池有故障,请勿使用该电池,因为电池的荷电状态会在负载下以非常快的速度耗尽,从而形成局部电流回路(如果用于电池组)会导致发热并可能引起火灾。因此,让我们直接进入。
所需组件
- Arduino纳米
- 16×2字符液晶
- LM741运算放大器IC
- 2.2Ω,5W电阻器
- 7805正电压调节器IC
- 12V电源
- 10kΩ微调电位器
- 0.47uF电容器
- 33kΩ电阻
- 直流电源桶式插孔连接器
- PCB螺丝端子
- IRF540N N沟道Mosfet IC
- 冲浪板
- 焊接套件
- 散热片
Arduino电池容量测试仪电路图
18650电池容量测试仪的完整电路图如下所示。电路的解释如下-
计算和显示单位:
该电路又分为两部分,第一部分是为Arduino Nano和16×2字母数字LCD屏幕提供的低5V电源,以及它们的连接以实时显示电流和电压测量的结果。该电路由使用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,因此请确保已通过转到工具>板并选择ARDUINO NANO选择了Arduino Nano板,现在通过转到工具> PROCESSOR选择您的Nano具有的正确处理器当您在那里时,还可以选择Arduino在PC上连接的端口。我们使用Arduino驱动与其连接的16×2字母数字LCD并测量电池的电压和流过负载电阻的电流,如上一节所述,我们通过声明头文件来驱动16×2来开始代码字母数字液晶显示屏。您可以跳过本节,以在页面末尾获得完整的代码,并可以完全使用该代码,但是请耐心等待,因为我们将代码分成小部分并尝试进行解释。
现在已经定义了头文件,我们继续声明变量,然后在代码中使用它来计算电压和电流。另外,在本节中,我们必须定义用于驱动LCD的引脚以及将用于提供PWM输出并读取来自单元和电阻的模拟电压的引脚。
#包括
现在进入设置部分,如果您希望始终将Arduino连接到PC,并使用串行监视器监视进度并在此处初始化LCD屏幕。它还会在屏幕上显示一条欢迎消息“ Battery Capacity Tester Circuit”,持续3秒钟。
void setup(){Serial.begin(9600); lcd.begin(16,2); lcd.setCursor(0,0); //将光标置于第一列和第一行。lcd.print(“电池容量”); lcd.setCursor(0,1); lcd.print(“测试仪电路”); 延迟(3000); lcd.clear(); }
现在我们不需要将Arduino PWM引脚声明为Output,因为我们将在主循环中使用的 AnalogWrite 函数负责此部分。您确实需要在代码中定义要写入该引脚的PWM值。根据您的应用所需的放电电流仔细选择PWM值。 PWM值太大会导致锂离子电池中的电流大而电压降高,而PWM值太低会导致电池的放电时间长。在主循环功能中,我们将读取引脚A0和A1上的电压,因为Arduino板上有一个10位ADC,因此我们应该获得0-1023范围内的数字输出值,我们需要将其缩小到0-5V范围乘以5.0 / 1023.0。确保您使用校准的电压表或万用表正确测量Arduino Nano的5V和GND引脚之间的电压,因为大多数情况下调节电压不完全是5.0V,即使该参考电压之间的微小差异也会导致误差蠕变在电压读数中,因此请测量正确的电压并替换上面给出的乘数中的5.0。
现在解释代码的逻辑,我们连续测量电池的电压,如果电池电压超过代码中我们指定的上限,则液晶显示屏上会显示错误消息,让您知道电池是否过充电或连接有问题,并且MOSFET栅极引脚的电源停止,因此没有电流可以流过负载电阻器。至关重要的是,在将电池连接到容量测试板上之前,先将其充满电,然后才能计算其总充电容量。
AnalogWrite(MOSFET_Pin,PWM_VALUE); //读取模拟引脚0上的输入:int sensorValue_voltage_Cell = AnalogRead(A0); //将模拟读数(从0-1023转换为电压)(0-5V):浮动电压= sensorValue_voltage_Cell *(5.08 / 1023.0); Serial.print(“ VOLTAGE:”); Serial.println(电压); //这里的电压被打印在串行监视器lcd.setCursor(0,0); //将光标置于第一列和第一行。 lcd.print(“ Voltage:”); //在屏幕上打印电压读数lcd.print(voltage);延迟(100); int sensorValue_Shunt_Resistor = AnalogRead(A1);浮动电压1 = sensorValue_Shunt_Resistor *(5.08 / 1023.0);浮置电流=电压1 /电阻; Serial.print(“ Current:”); Serial.println(当前); lcd.setCursor(0,1);//将光标放在第一列和第二行上(计数从0开始!)。 lcd.print(“ Current:”); lcd.print(当前);
现在,如果电池电压在我们指定的电压上限和电压下限内,那么Nano将通过上述方法读取“电流”值,并将其乘以测量期间经过的时间,并将其存储在我们先前定义的容量变量中以毫安为单位。在整个过程中,实时电流和电压值将显示在随附的LCD屏幕上,如果需要,您还可以在串行监视器上看到它们。电池放电的过程将一直持续到电池电压达到程序中指定的下限以下,然后在LCD屏幕上显示电池的总容量,并通过拉MOSFET栅极来停止流经电阻的电流固定为低。
否则if(voltage> BAT_LOW && voltage <BAT_HIGH){//检查电池电压是否在安全极限内millisPassed = millis()-previousMillis; mA =电流* 1000.0; 容量=容量+(mA *(millisPassed / 3600000.0)); // 1小时= 3600000ms将其转换为mAh单位 延迟(1000); lcd.clear(); }
精度提升
无论如何,它是读取电压和电流的一种足够好的方法,但是它并不完美。实际电压与测量的ADC电压之间的关系不是线性的,这将在电压和电流的测量中造成一定的误差。
如果要提高结果的精度,则必须在图形上绘制从施加各种已知电压源获得的ADC值,然后使用任何喜欢的方法从中确定乘法器方程。这样,将提高准确性,并且您将非常接近实际结果。
而且,我们使用的MOSFET并非逻辑电平MOSFET,因此需要7V以上的电压才能完全导通电流通道,如果我们直接向其施加5V电压,则电流读数将不准确。但是您可以使用逻辑电平IRL520N N沟道MOSFET来消除对12V电源的使用,而可以直接使用Arduino的5V逻辑电平。
建立和测试电路
现在,当我们在面包板上设计和测试电路的不同部分时,在确保所有部分都按预期工作之后,我们使用Perfboard将所有组件焊接在一起,因为这是一种测试电路的专业得多,更可靠的方法。如果需要,可以在AutoCAD Eagle,EasyEDA或Proteus ARES或您喜欢的任何其他软件上设计自己的PCB。 Arduino Nano,16×2字母数字LCD和LM741 OPAMP安装在Female Bergstik上,以便以后可以重复使用。
我已经通过DC Barrel Jack连接器为恒定负载电流电路提供了12V电源,然后借助LM7805,为Nano和LCD屏幕提供了5V电源。现在为电路供电并调节微调电位器以设置LCD屏幕的对比度,现在应该在LCD屏幕上看到“欢迎消息”,然后如果电池的电压水平在工作范围内,则-电池的电压和电流将显示在此处。
这是一个非常基本的测试,用于计算您正在使用的电池的容量,可以通过获取数据并将其存储在Excel文件中以通过图形方法进行后期数据处理和可视化来进行改进。在当今的数据驱动世界中,无需使用NI LabVIEW,MATLAB Simulink等软件进行实际测试,就可以使用该电池放电曲线来建立电池的精确预测模型,以模拟和查看电池在负载条件下的响应。 。还有更多的应用程序等待着您。您可以在下面的视频中找到该项目的完整工作。如果您对此项目有任何疑问,请在下面的评论部分中写下它们,或使用我们的论坛。快去玩吧,如果您愿意,我们可以在下面的评论部分中指导您有关如何从此处继续进行操作。直到阿迪奥斯!