kotlin做网站,wap页面是什么,保定建站服务,企业网站模板源码免费便携式设备由于使用需求而配备了锂电池#xff0c;但使用过程中需要掌握电源的状态才能保证设备正常运行。而且在电池充放电的过程中#xff0c;监控电池的充放电状态也是保证设备安全的需要。
1、硬件设计
电池SOC检测是一个难题#xff0c;有很多的模型和检测电路。但对…便携式设备由于使用需求而配备了锂电池但使用过程中需要掌握电源的状态才能保证设备正常运行。而且在电池充放电的过程中监控电池的充放电状态也是保证设备安全的需要。
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 position0;while(voltages [1][position] voltage){if(position12){position;}else{position;break;}}return position;
}static float LookupCalcSoc(float voltage)
{float temp;uint16_t index14;indexFindTargetLocation(voltage);if(index0){temp voltages [0][0];}else if(index13){temp voltages [0][12];}else{float lowV voltages [0][index-1];float lowS voltages [1][index-1];float highS voltages [1][index];temp((resistance-lowS)*0.5)/(highS-lowS)lowV;}return temp;
}
以上是我们对电池SOC的估算方式当然不同的厂家电池也许充放电曲线会有些差异但方法应该都是一致的。
3、测试结果
我们看一看在屏上显示出来的效果有图标动态显示也有数字指示如下图所示 在这一次我们采用了简单的做法这种做法叫做电压估算法。
欢迎关注