- 测量串联电池组中的单个电池电压
- 差分电路测量单个电池电压
- 电路原理图
- 使用Easy EDA进行PCB设计和制造
- 在线计算和订购样品
- 测试电压监控电路
- 使用Arduino测量锂电池电压
- 编程Arduino
- 单体电池电压显示工作
电动汽车的行驶里程和性能取决于其电池组的容量和效率。电池管理系统(BMS)负责维护电池组的健康。BMS是EV中的复杂设备,它执行许多活动,例如监视电池,平衡电池,甚至保护它们免受温度变化的影响。在此电池管理系统文章中,我们已经学到了足够的知识,因此,如果您是新来的,请在这里查看。
要执行任何操作,BMS的第一步将是了解锂电池组中电池的当前状态。这是通过测量电池组中电池的电压和电流(有时还包括温度)来完成的。 BMS仅使用这两个值就可以计算SOC或SOH并执行电池平衡等操作。因此,测量电池的电压和电流对于任何BMS电路都是至关重要的,无论是简单的移动电源,笔记本电池还是像EV /太阳能电池。
在本文中,我们将学习如何测量锂电池组中所用电池的单个电池电压。为了这个项目,我们将使用四个串联连接的18650锂电池形成一个电池组,并使用运算放大器设计一个简单的电路来测量单个电池的电压,并使用Arduino在LCD屏幕上显示它。
测量串联电池组中的单个电池电压
测量一组串联电池组中单个电池电压的问题在于,参考点保持不变。下图说明了相同的
为简单起见,让我们假设所有四个电池的电压电平均为4V,如上所示。现在,如果我们使用像的Arduino微控制器来测量电池电压,我们将在测量1个的电压没有问题,ST细胞,因为它的另一端连接到地。但是,对于其他电池,我们必须与之前的电池一起测量该电池的电压,例如,当我们测量第四个电池的电压时,我们将一起测量所有四个电池的电压。这是因为参考点无法从地面更改。
因此,我们需要在此处引入一些额外的电路,以帮助我们测量各个电压。粗略的方法是使用一个分压器来映射电压电平,然后对其进行测量,但是这种方法会将读取值的分辨率降低到0.1V以上。因此,在本教程中,我们将使用运算放大器差分电路来测量每个电池端子之间的差异,以测量单个电压。
差分电路测量单个电池电压
我们已经知道运算放大器在用作差分放大器时会提供提供给其反相和同相引脚的两个电压值之差。因此,为了测量4个电池电压,我们需要三个差分运算放大器,如下所示。
注意,该图像仅用于表示;实际电路需要更多组件,将在本文后面进行讨论。第一运算放大器O1措施2的电压ND细胞通过计算2之间的差次电池端子和1个ST即小区终端(8-4)。类似地,运算放大器O2和O3措施的3次和4次分别的电池电压。我们还没有使用的运算放大器的1日,因为它可被直接测量细胞。
电路原理图
下面给出了用于监控锂电池组中多节电池电压的完整电路图。该电路是使用EasyEDA设计的,我们也将使用它来制造PCB。
如您所见,我们的电路中有两个四方封装轨到轨高压运算放大器OPA4197,均由总封装电压供电。一个IC(U1)被用作通称电压跟随器的生成缓冲电路,而另一个IC(U2)被用于形成差分放大器电路。需要一个缓冲电路来防止任何一个电池单独装入,这是不应从单个电池消耗电流,而只能从整体上构成电池组。由于缓冲电路具有非常高的输入阻抗,因此我们可以用来从电池读取电压,而无需从电池获取功率。
IC U1中的所有四个运算放大器分别用于缓冲四个单元的电压。来自单元的输入电压标记为B1 +至B4 +,缓冲的输出电压标记为B1_Out至B4_Out。然后将该缓冲电压发送到差分放大器,以如上所述测量单个电池电压。由于差分放大器的增益设置为1,因此所有电阻的值都设置为1K。您可以使用任何电阻器值,但除了电阻器R13和R14以外,其他所有电阻器的值都应相同。这两个电阻构成一个分压器,用于测量电池组的电压,因此我们可以将其与测得的电池电压总和进行比较。
轨到轨,高压运算放大器
上面的电路需要使用OPA4197之类的轨到轨高压运算放大器,这有两个原因。两款运算放大器IC均以最大(4.3 * 4)17.2V的电池组电压工作,因此,运算放大器应能够处理高电压。此外,由于我们使用的是缓冲电路,因此缓冲器的输出应等于第4个电池端子的电池组电压,这意味着输出电压应等于运算放大器的工作电压,因此我们需要使用Rail来铁路运算放大器
如果找不到轨到轨运算放大器,则可以用简单的LM324替换IC。该IC可以承受高压,但不能用作轨到轨,因此您必须在U1运算放大器IC的第一个引脚上使用10k上拉电阻。
使用Easy EDA进行PCB设计和制造
现在我们的电路已经准备就绪,是时候制造它了。由于我使用的运算放大器仅以SMD封装提供,因此我必须为电路制造PCB。因此,像往常一样,我们使用称为EasyEDA的在线EDA工具来制造PCB,因为它非常易于使用,因为它具有良好的封装面积并且是开源的。
设计完PCB之后,我们可以通过低成本的PCB制造服务订购PCB样品。他们还提供元件采购服务,因为他们拥有大量电子元件,用户可以与PCB订单一起订购所需的元件。
在设计电路和PCB时,您还可以公开您的电路和PCB设计,以便其他用户可以复制或编辑它们并从您的工作中受益,我们还对该电路公开了整个电路和PCB布局,请检查下面的链接:
easyeda.com/CircuitDigest/Multicell-Voltage-measuring-for-BMS
您可以 通过选择“层”窗口中的层来 查看PCB的任何层(顶层,底层,顶层丝绸,底层丝绸等)。最近,他们还引入了3D视图选项,因此您还可以使用 EasyEDA中的3D视图按钮查看Multicell电压测量PCB,以了解制造后的 外观:
在线计算和订购样品
完成该锂电池电压测量电路的设计后 ,您可以通过JLCPCB.com订购PCB。要从JLCPCB订购PCB,您需要Gerber File。要下载PCB的Gerber文件,只需单击EasyEDA编辑器页面上的Generate Fabrication File按钮,然后从那里下载Gerber文件,或者您可以单击JLCPCB上的订购,如下图所示。这会将您重定向到JLCPCB.com,您可以在其中选择要订购的PCB数量,所需的铜层数,PCB厚度,铜重量以及甚至是PCB颜色,如下图所示:
单击JLCPCB按钮上的订购后,它将带您到JLCPCB网站,在这里您可以以非常低的价格订购任何彩色PCB,所有颜色的订购价均为2美元。他们的构建时间也非常短,DHL交付3-5天的时间为48小时,基本上,您将在订购一周后获得PCB。此外,他们还为您的第一笔订单提供20美元的运费折扣。
订购PCB后,您可以 查看 日期和时间以显示 PCB的 生产进度 。您可以通过在“帐户”页面上进行检查,然后单击PCB下方的“生产进度”链接,如下图所示。
订购几天的PCB后,我得到了包装良好的PCB样品,如下图所示。
确保轨道和脚印正确后。我开始组装PCB,我使用了母接头来放置Arduino Nano和LCD,以便以后在其他项目中需要它们时可以将其卸下。完全 焊接的板 如下图所示
测试电压监控电路
焊接完所有组件后,只需将电池组连接到板上的H1连接器。我已使用连接电缆来确保将来不会意外更改连接。小心不要以错误的方式连接它,否则可能导致短路并永久损坏电池或电路。我用于测试的带有电池组的PCB如下所示。
现在,使用H2端子上的万用表测量各个销售电压。端子上标有数字,以标识正在测量的电池电压。通过这里我们可以得出电路正在工作的结论。但是为了使它更有趣,让我们连接一个LCD并使用Arduino测量这些电压值并将其显示在LCD屏幕上。
使用Arduino测量锂电池电压
将Arduino连接到我们的PCB的电路如下所示。它显示了如何将Arduino Nano连接到LCD。
如上图所示,PCB上的插头H2应连接至Arduino板的模拟引脚。模拟引脚A1至A4用于分别测量四个电池的电压,而引脚A0连接至P1的插头引脚v'。此v'引脚可用于测量总电池组电压。我们还连接在1日P1的销到Arduino的Vin的销和3次P1的销Ó的Arduino的接地引脚到功率Arduino的与电池组。
我们可以编写一个程序来测量电池组的所有四个电池电压和电池组电压,并将其显示在LCD中。为了使它更有趣,我还添加了所有四个电池电压,并将该值与测得的电池组电压进行比较,以检查我们实际测量电压的接近程度。
编程Arduino
完整的程序可以在此页的末尾找到。该程序非常简单,我们只需使用模拟读取功能即可通过ADC模块读取电池电压,并使用LCD库在LCD上显示计算出的电压值。
浮点Cell_1 = AnalogRead(A1)*(5.0 / 1023.0); //测量第一个电池电压 lcd.print(“ C1:”); lcd.print(Cell_1);
在上面的代码段中,我们测量了单元1的电压,并将其乘以5/1023,以将0到1023的ADC值转换为实际的0到5V。然后,我们在LCD上显示计算出的电压值。同样,我们对所有四个电池以及整个电池组都执行此操作。我们还使用了可变的总电压来汇总所有电池电压,并将其显示在LCD上,如下所示。
float Total_Voltage = Cell_1 + Cell_2 + Cell_3 + Cell_4; //将所有四个测得的电压值 相加lcd.print(“ Total:”); lcd.print(Total_Voltage);
单体电池电压显示工作
准备好电路和代码后,将代码上传到Arduino板,然后将移动电源连接到PCB。LCD现在应显示所有四个电池的单个电池电压,如下所示。
如您所见,单元格1至4的显示电压分别为3.78V,3.78V,3.82V和3.84V。因此,然后我用万用表检查了这些电池的实际电压,结果发现有些不同,其差异如下表所示。
实测电压 |
实际电压 |
3.78伏 |
3.78伏 |
3.78伏 |
3.78伏 |
3.82伏 |
3.81伏 |
3.84伏 |
3.82伏 |
如您所见,对于单元1和单元2我们已经获得了准确的结果,但是单元3和单元4的误差高达200mV。这在我们的设计中最有可能发生。由于我们使用的是运算放大器微分电路,因此随着电池数量的增加,被测电压的精度将下降。
但是,此错误是固定错误,可以通过获取样本读数并添加乘数来更正该错误,从而在程序中进行更正。在下一个LCD屏幕上,您还可以看到被测电压与通过分压器测得的实际电池组电压之和。如下所示。
被测电压之和为15.21V,通过Arduino A0引脚测得的实际电压为15.22V。因此,差值为100mV,这还不错。这些类型的电路可用于减少积压,例如在移动电源或笔记本电脑电池中。电动汽车BMS使用LTC2943之类的特殊IC,因为即使100mV的误差也是不能容忍的。尽管如此,我们已经学习了如何在价格受约束的小型电路中实现这一点。
可以在下面的视频中找到设置的完整工作。希望您喜欢这个项目并从中学到一些有用的东西。如果您有任何疑问,请将其留在评论部分或使用论坛进行快速答复。