• STM32L476应用开发之六:电池SOC检测


    便携式设备由于使用需求而配备了锂电池,但使用过程中需要掌握电源的状态才能保证设备正常运行。而且在电池充放电的过程中,监控电池的充放电状态也是保证设备安全的需要。

    1、硬件设计

    电池SOC检测是一个难题,有很多的模型和检测电路。但对于我们这样一台很小的便携式一起来说,使用各类检测模型和电路无论成本还是周期都不允许,所以只能想别的办法。

    我们使用一个采样电路采集电压信号,形成以个0-2.5V的差分信号,如下图所示:

    再将差分信号引入到具有差分信号输入功能的ADC控制器,就可以采集电池的电压了。模拟量采集在前面已经试验过了:

     

    在STM32L476RG开发板中,有SPI3口已经引到端子可以使用。各引脚分别为:

    CN7-1         PC10            SPI3-SCK

    CN7-2         PC11            SPI3-MISO

    CN7-3         PC12            SPI3-MOSI

    在开发板上的位置如下红框标识:

     

    关于硬件配置这里就不再叙述了。

    2、软件设计

    前面说过了我们使用采集电池电压的方式来估算电池的SOC,那么首先我们来看一看电池SOC与电压的关系。一般的锂电池电压与SOC的关系可表示如下图:

     

    根据上图我们可以知道在10%到100%的范围内电压的变化是比较平缓的,但在10%以下就会计数下降。在我们估算SOC是其实在小于10%的时候就应该认为电池已经不具备工作条件。

    首先定义一个数组用于存储电池电压值,然后再检测到电压值后与存储的数据对比。获得相应的区间计算SOC值。

    float voltages[2][13];

     1 /*查找目标位置*/
     2 static uint16_t FindTargetLocation(float voltage)
     3 {
     4   uint16_t position=0;
     5   while(voltages [1][position]< voltage)
     6   {
     7     if(position<12)
     8     {
     9       position++;
    10     }
    11     else
    12     {
    13       position++;
    14       break;
    15     }
    16   }
    17   return position;
    18 }
    19 
    20 static float LookupCalcSoc(float voltage)
    21 {
    22   float temp;
    23   uint16_t index=14;
    24   index=FindTargetLocation(voltage);
    25 
    26   if(index<=0)
    27   {
    28     temp= voltages [0][0];
    29   }
    30   else if(index>=13)
    31   {
    32     temp= voltages [0][12];
    33   }
    34   else
    35   {
    36     float lowV= voltages [0][index-1];
    37     float lowS= voltages [1][index-1];
    38     float highS= voltages [1][index];
    39 
    40     temp=((resistance-lowS)*0.5)/(highS-lowS)+lowV;
    41   }
    42 
    43   return temp;
    44 }

    以上是我们对电池SOC的估算方式,当然不同的厂家电池也许充放电曲线会有些差异,但方法应该都是一致的。

    3、测试结果

    我们看一看在屏上显示出来的效果,有图标动态显示,也有数字指示,如下图所示:

     

    在这一次我们采用了简单的做法,这种做法叫做电压估算法。

  • 相关阅读:
    Dojo(发音:豆粥)的目标是解决DHTML应用程序长期存在的历史问题
    如何用Fireworks制作图标的透明效果
    2021.09.15膜你赛
    2021.09.14 膜你赛
    2021.08.29 膜你赛
    2021.08.28 膜你赛
    2021.10.06 膜你赛
    2021.09.18 膜你赛
    2021.09.13膜你赛
    2021.10.05膜你赛
  • 原文地址:https://www.cnblogs.com/foxclever/p/7672880.html
Copyright © 2020-2023  润新知