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];
/*查找目标位置*/
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检测的更多相关文章
- STM32L476应用开发之六:电池SOC检测(转)
源: STM32L476应用开发之六:电池SOC检测
- MVC5 网站开发之六 管理员 1、登录、验证和注销
上次业务逻辑和展示层的架构都写了,可以开始进行具体功能的实现,这次先实现管理员的登录.验证和注销功能. 目录 奔跑吧,代码小哥! MVC5网站开发之一 总体概述 MVC5 网站开发之二 创建项目 MV ...
- MVC5 网站开发之六 管理员 2、添加、删除、重置密码、修改密码、列表浏览
目录 奔跑吧,代码小哥! MVC5网站开发之一 总体概述 MVC5 网站开发之二 创建项目 MVC5 网站开发之三 数据存储层功能实现 MVC5 网站开发之四 业务逻辑层的架构和基本功能 MVC5 网 ...
- STM32L476应用开发之一:初次使用
今天终于收到了期待已久的NUCLEO-F412ZG,感谢电子发烧友论坛!多年以来基本都是在STM32平台上做一些设计开发工作.但是低功耗的基本没用过,这次要做便携式设备才对这方面有所接触,正好这时电子 ...
- iOS开发网络篇—Reachability检测网络状态
前言:当应用程序需要访问网络的时候,它首先应该检查设备的网络状态,确认设备的网络环境及连接情况,并针对这些情况提醒用户做出相应的处理.最好能监听设备的网络状态的改变,当设备网络状态连接.断开时,程序也 ...
- HTML5 移动开发(移动设备检测及对HTML5的支持)
1.如何选择要使用的特性以及所面向的浏览器 2.哪些浏览器支持HTML5 3.如何检测是否支持HTML5 4.如何开发贷容错性的Web应用程序 5.CSS3媒体查询如何增强检测脚本 使用HTML5 ...
- iOS开发之应用内检测手机锁屏,解锁状态
iPhone的锁屏监测分为两种方式监听: 1. 程序在前台,这种比较简单.直接使用Darwin层的通知就可以了: #import <notify.h> #define Notificati ...
- 李洪强iOS开发之使用 Reachability 检测网络
1.iOS平台是按照一直有网络连接的思路来设计的,开发者利用这一特点创造了很多优秀的第三方应用. 大多数的iOS应用都需要联网,甚至有些应用严重依赖网络,没有网络就无法正常工作. 2.在你的应用尝试通 ...
- iOS开发中使用CIDetector检测人脸
在iOS5 系统中,苹果就已经有了检测人脸的api,能够检测人脸的位置,包括左右眼睛,以及嘴巴的位置,返回的信息是每个点位置.在 iOS7中,苹果又加入了检测是否微笑的功能.通过使用 CIDetect ...
随机推荐
- PHP设计——单例模式与工厂模式
一.单例模式又称为职责模式,它用来在程序中创建一个单一功能的访问点,通俗地说就是实例化出来的对象是唯一的.所有的单例模式至少拥有以下三种公共元素:1. 它们必须拥有一个构造函数,并且必须被标记为pri ...
- 007_Reverse Integer
###solution1####small data # def reverse(x): # res=[] # t=0 # p=1 #记录位数 # y=x # if x<0: # x=-x # ...
- Flume思维导图
- if 语句
if 判断条件的时候,如果是多个条件一起进行判断,那么就需要逻辑运算符 并且-----------and 或者-----------or 非(取反)----not if 条件1 and 条件2 ...
- java 基础 浮点类型
1.浮点类型用于表示小数的数据类型. 2.浮点数原理:也就是二进制科学计数法. 3.Java的浮点类型有float和double两种. 4.Java默认浮点类型计算的结果是double类型,字面量也是 ...
- eclipse快捷键调试总结 -转--快捷键大全
(1)Ctrl+M --切换窗口的大小(2)Ctrl+Q --跳到最后一次的编辑处(3)F2 ---重命名类名 工程名 --当鼠标放在一个标记处出现Tooltip时候按F2则把鼠标移开时To ...
- MVC传参数给js的时候 如果是数值 变量要进行一下转换才能正确识别 例如var aaa = parseInt('@Model.ClickIndex');
这是拼接参数的格式 <div id="a1" style="font-size:12px" onclick="location = '@item ...
- bootstrap中的明星属性
1.明星属性 bootstrap中的明星属性 class='text-nowrap' 2.明星代码 $(window).resize(function () { location.reload(); ...
- Python内建函数-callable
Python内建函数-callable callable(object) 中文说明:检查对象object是否可调用.如果返回True,object仍然可能调用失败:但如果返回False,调用对象ojb ...
- 关于Anaconda的环境和包管理
Anaconda相对于原生python解释器具有更好的包管理功能,它有一个env文件夹,里面包含所要管理的所有环境:日常操作时我们可能会使用pytorch.Tensorflow等多个环境,由于每个环境 ...