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

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];

 /*查找目标位置*/
static uint16_t FindTargetLocation(float voltage)
{
uint16_t position=;
while(voltages [][position]< voltage)
{
if(position<)
{
position++;
}
else
{
position++;
break;
}
}
return position;
} static float LookupCalcSoc(float voltage)
{
float temp;
uint16_t index=;
index=FindTargetLocation(voltage); if(index<=)
{
temp= voltages [][];
}
else if(index>=)
{
temp= voltages [][];
}
else
{
float lowV= voltages [][index-];
float lowS= voltages [][index-];
float highS= voltages [][index]; temp=((resistance-lowS)*0.5)/(highS-lowS)+lowV;
} return temp;
}

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

3、测试结果

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

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

STM32L476应用开发之六:电池SOC检测的更多相关文章

  1. STM32L476应用开发之六:电池SOC检测(转)

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

  2. MVC5 网站开发之六 管理员 1、登录、验证和注销

    上次业务逻辑和展示层的架构都写了,可以开始进行具体功能的实现,这次先实现管理员的登录.验证和注销功能. 目录 奔跑吧,代码小哥! MVC5网站开发之一 总体概述 MVC5 网站开发之二 创建项目 MV ...

  3. MVC5 网站开发之六 管理员 2、添加、删除、重置密码、修改密码、列表浏览

    目录 奔跑吧,代码小哥! MVC5网站开发之一 总体概述 MVC5 网站开发之二 创建项目 MVC5 网站开发之三 数据存储层功能实现 MVC5 网站开发之四 业务逻辑层的架构和基本功能 MVC5 网 ...

  4. STM32L476应用开发之一:初次使用

    今天终于收到了期待已久的NUCLEO-F412ZG,感谢电子发烧友论坛!多年以来基本都是在STM32平台上做一些设计开发工作.但是低功耗的基本没用过,这次要做便携式设备才对这方面有所接触,正好这时电子 ...

  5. iOS开发网络篇—Reachability检测网络状态

    前言:当应用程序需要访问网络的时候,它首先应该检查设备的网络状态,确认设备的网络环境及连接情况,并针对这些情况提醒用户做出相应的处理.最好能监听设备的网络状态的改变,当设备网络状态连接.断开时,程序也 ...

  6. HTML5 移动开发(移动设备检测及对HTML5的支持)

    1.如何选择要使用的特性以及所面向的浏览器 2.哪些浏览器支持HTML5 3.如何检测是否支持HTML5 4.如何开发贷容错性的Web应用程序 5.CSS3媒体查询如何增强检测脚本   使用HTML5 ...

  7. iOS开发之应用内检测手机锁屏,解锁状态

    iPhone的锁屏监测分为两种方式监听: 1. 程序在前台,这种比较简单.直接使用Darwin层的通知就可以了: #import <notify.h> #define Notificati ...

  8. 李洪强iOS开发之使用 Reachability 检测网络

    1.iOS平台是按照一直有网络连接的思路来设计的,开发者利用这一特点创造了很多优秀的第三方应用. 大多数的iOS应用都需要联网,甚至有些应用严重依赖网络,没有网络就无法正常工作. 2.在你的应用尝试通 ...

  9. iOS开发中使用CIDetector检测人脸

    在iOS5 系统中,苹果就已经有了检测人脸的api,能够检测人脸的位置,包括左右眼睛,以及嘴巴的位置,返回的信息是每个点位置.在 iOS7中,苹果又加入了检测是否微笑的功能.通过使用 CIDetect ...

随机推荐

  1. PHP设计——单例模式与工厂模式

    一.单例模式又称为职责模式,它用来在程序中创建一个单一功能的访问点,通俗地说就是实例化出来的对象是唯一的.所有的单例模式至少拥有以下三种公共元素:1. 它们必须拥有一个构造函数,并且必须被标记为pri ...

  2. sqlserver 数据库插入汉字变成乱码的解决方案

     alter database 数据库名collate Chinese_PRC_CI_AS在英文版(或者其他版本)的数据库中插入中文会出现乱码这个就可以修改数据库排序规则.不会出现乱码了 

  3. 使用X.509数字证书加密解密实务(一)-- 证书的获得和管理

    http://www.cnblogs.com/chnking/archive/2007/08/18/860983.html

  4. webstorm更改scss输出路径

    --no-cache --update $FileName$:$FileParentDir$\css\$FileNameWithoutExtension$.css $FileNameWithoutEx ...

  5. python 模块 - pymongo模块

    mongoDB 数据库: pymongo 操作: import pymongo # 连接mongo数据库 client = pymongo.MongoClient(host='localhost', ...

  6. SpringBoot 使用 MyBatis 分页插件 PageHelper 进行分页查询

    前言:本文档使用的是 SpringBoot,如果是 Spring 还需要在 MyBatis 配置 xml 中配置拦截器,并且 PageHelper 是针对 MyBatis 的,MyBatis 的集成不 ...

  7. LaTeX IEEE模板

    因为课程作业的要求需要完成一篇IEEE格式的论文,所以选择入门LaTeX.但是期间遇到了各种各样莫名其妙的坑.前前后后挣扎了两个多星期终于完成了IEEE模板的设置.下面详细记录一下让我深恶痛绝的心路历 ...

  8. Linux安装JDK(rpm)

    我以JDK1.8为例 ⒈下载 https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html ...

  9. Python 标准异常总结

    AssertionError 断言语句(assert) AttributeError 尝试访问未知的对象属性 EOFError 用户输入文件末尾标志EOF(Ctrl+d) FloatingPointE ...

  10. Linux中Grep常用的15个例子【转】

    转自:https://www.aliyun.com/jiaocheng/1390860.html?spm=5176.100033.1.9.6a1e41e8Pdjynm 摘要:Grep命令主要用于从文件 ...