物联网电动汽车智能电池监控

简介

本文演示的硬件和软件,以创建一个实用的移动工程工具来监控和检查卫生随着铅酸蓄电池等诸多参数的组合,汽车电池被选为一个简单的例子。许多现代类型的电池(如锂电池)的设计与智能电池芯片内置的,它提供了大量有关负责他们的状态等信息。铅酸电池通常由简单的,没有任何形式的在他们的智能电池芯片,使汽车车间的任务,以测试电池。

然而,有足够的空间在任何汽车有一个微小的传感器,可以实时监控铅酸电池,所以一个小项目的设立是为了得到适当的硬件和软件协同工作,提供智能电池一样的功能用于汽车电池。

一个简单的和非侵入性的方式被使用,因此,没有电缆或电线是要被切割或在汽车中断开,只有探针附着到电池端子,并且在电池线1非接触式电流传感器。

背景

智能电池芯片,因为它通常被认为是在现代的电池,例如锂电池持续收集三种运行时间参数:电池电压,电池电流和电池温度。根据智能电池芯片的功能,它可以发送原始数据或执行计算,以呈现更高级的数据,基于原始输入数据,例如计算电池的充电 - 放电循环的次数。

提供的用于铅酸电池的智能电池芯片的功能相当于同三个传感器的需要:电压,电流和温度。Arduino的微控制器平台似乎是一个良好的开端,这些传感器。它结合了硬件和软件比较好,可以与Windows PC上运行的软件轻松通过串行连接进行通信。

下面的图示出了电池参数是如何通过汽车微控制器测量,处理,记录和可选发送到Windows PC的破坏NET应用程序battmon。

说明汽车电池的智能监控器(battmon)有显著能力获得,显示和记录几个关键电池参数,并计算出基于几个充电或发动机起动周期来通知用户有关电池的健康和预期寿命等几个电池的性能。下面原始的汽车电池参数显示和记录

  • 电池电流
  • 电池电压
  • 电池温度

基于它们,从车载电池中,以下的电池参数,计算出的上述数据,显示活在运行时间和记录到SD卡以及

  • 剩余容量SOC的状态(0到100%),分别,而
    • 充电
    • 在休息
    • 放电
  • 发动机启动方式:电流消耗和时间
  • 电池内阻
  • 电池起动安培(CA),而如果温度足够低,则冷起动安培(CCA)
  • 的充放电循环数
  • 估计电池容量(A *小时)的基础上库仑负责接受和无罪释放
  • 充电时间

Battmon可以提供重要的电池健康信息:

  • 在几秒钟内
  • 而不需要从汽车卸下电池
  • 对机动车辆而驾驶,停放时,当发动机关闭

视觉上屏幕和,如是否电池正在接受电荷,以及如何好。下图突出显示这些点上,从汽车电池,身体健康起汽车发动机采取battmon截图(10秒图表记录滚动窗口)。

从长远来看,有机会的可以安装在汽车battmon运作了一段时间,它可以让battmon收集足够的数据用于汽车电池的数据统计分析,并随着时间的推移或温度得到电池的发展趋势。

此外,通过检查battmon记录的数据,有可能分离并探讨电池行中的任何怀疑电压或电流尖峰,槽或不寻常的事件。

Battmon - 微控制器部分

battmon的微控制器部分的目的是为了执行三个任务:

  • 收集毫秒时间尺度的原始数据电池
  • 执行原电池有限的数据处理
  • 保存数据到SD卡和/或发送实时数据到PC机

在库仑(Q)电池充电是通过集成的电池电流随着时间的推移,分别为正和负电流连续地计算,所以充电和充电列分别计算并监控如何电池被释放,并分别接受电荷。

下图说明battmon微控制器部分的设计。Arduino的欧诺R3兼容的微控制器使用。

硬件

电池电压传感器

电压传感器是基于内置的Arduino微控制器与1 5伏10位ADC通道0:3分,因此,提供0到15伏特的范围,以涵盖大部分的汽车电池电压测量的需要。建于电压传感器似乎是在硬件的温度补偿,但对于校准进行了测试。

电池电流传感器

拆分回路直流霍尔电流传感器使用,它提供了线性电压输出正比于电池电流。几款车型都试过了,用YHDC + -100电流传感器作为最实用的项目。-100A的负电流产生的阅兵式0 V输出,没有电流,使2.4伏和+ 100A的正向电流,使5.0伏特。直流电流传感器连接到Arduino的微控制器的5伏10位ADC通道1。

电池电流传感器进行校准的微控制器。电池电流传感器提供,需要温度补偿,这是由软件在battmon的微控制器部分完成信号。

可选的高电流范围分割闭环直流霍尔传感器支持的ADC 2路的重型发动机配备的车辆,占地+ -500A电池的电流范围。

温度传感器

温度传感器内置到的Arduino微控制器内部ADC通道,并使用单独的校准范围为-20°C至+70°C。微控制器电路板被安装在或靠近的汽车电池,因此温度报道的微控制器被假定为接近汽车电池的温度。

组装单片机设置的照片显示为已组装设置下方,作为安装在汽车电池(微控制器电路板被认为是包裹在塑料袋)。

微控制器软件

收集汽车电池的数据是在微控制器battmon部分的第一项任务。其软件由两部分组成:一次性初始化步骤和测量回路的功能不断被调用。

在初始化过程中,微控制器的日期和时间由RTC时钟初始化,并且SD卡进行检查,以探讨是否可以创建一个日志文件。此外,微控制器的串行端口在11520波特率最高速度​​初始化。

一用造成最大数据传输率约为1组完整的数据,每4毫秒/ D转换的ADC上的Arduino微控制器的模拟输入的默认设置。更快的速率是可能的通过设置微控制器的ADC时钟至高达1 MHz,这能提供更高的采样速率,但导通,以产生相当嘈杂电压数据。还是在微控制器的源代码较高的ADC速率选择留在条件编译volt_amp_temp.ino文件。

//使用默认ADC时钟设置,即在每个呼叫111微秒的默认分频功能的回报。
//更快的选项:设置ADC时钟到了极致高速,即到1 MHz。然后analogRead(PORTNO)返回16微秒
//#定义FASTADC 1
//建议的最大ADC时钟频率是由转换电路内部DAC的限制。 
//为了获得最佳性能,ADC时钟应不超过200千赫。 
//然而,频率高达1 MHz不降低ADC的分辨率显著。 
//工作频率高于1 MHz时没有特点的ADC。

//电池电流探头运行在1 MHz的重读确定
//电池电压探头运行噪音在1 MHz
#IFDEF FASTADC
//定义设置和清除寄存器位
#ifndef CBI
#定义CBI(SFR,位)(_SFR_BYTE(SFR)=〜_BV(位))
#ENDIF
#ifndef SBI
#定义SBI(SFR,位)(_SFR_BYTE(SFR)| = _BV(位))
#ENDIF
#ENDIF 

测量回路功能读取电压,温度和电流传感器反复的原始数据。这取决于有多少微控制器有做在每个通,一个环可以采用少至4毫秒。

此外,测量循环代码使用一些智能逻辑,找出任何显著变化是否在任何的这些电池参数发生,并且执行积分的电流随着时间的推移,以分别计算出电池的库仑电荷为进来或出去。

监控电池充放电充过的电池寿命可以提供有价值的信息,通过Windows PC上battmon。NET程序作进一步分析。

下方的图表显示battmon的单片机软件部分的设计:

送电池数据到PC机串口

有没有必要送每一次测量循环完成各道次的电池数据。相反,测量功能采用一些聪明的逻辑,找出任何显著变化无论是在任何这些电池参数发生。如果是这样,数据的发送与逗号作为分隔符下面的文本格式:

现场 1 2 3 4 5 6 7 8
意思 日期时间戳 电池电压 电池电流 电池温度 电池状态 充电了 付费 理由发送
计量单位 ISO 8601格式毫秒 安培 摄氏度 C,D,I编码状态 库仑 库仑 C,V,T,B编码的原因
范围 时间现在或过去 0到15伏 -100 A到100Å -20°C至+70°C 充电,放电,空载时(怠速) > 0■ > 0■ 下改变电流,V为电压,B两种,T代表温度

其中一个例子字符串从battmon串行数据输出:

2014-01-30T20:48:28.321,14.3,0.6,16.1,C,118481,94206,C

在C#代码,数据,每一个这样的行会匹配battmon C#的数据结构(除原因遥感领域,这是不对应)。

[Serializable接口] 公共 结构 strctBattMonData
{
    公开日期时间dtBattDateTime;
     public  double dblBatVolts;
     public  double dblBatAmperes;
     public  double dblBattTemp;
     public  char chBattState;
     public  long liQIn;
     public  long liQOut;
}

样品battmon串行数据输出文件包含在本文中。

因此,微控制器以恒定的波特率115200波特,但在可变数据速率发送电池数据。由于Windows电脑可以处理更大量的数据吞吐量从阅读的电池数据比单片机产生,测量回路发送一条线,即使在电池参数未检测到更换电池的数据,如心脏跳动的信号​​,每一秒。

然而,如果观察到任何这些电池参数没有显著变化,没有数据被记录到SD卡。如果其中:电压,温度或电流没有变化,数据被立即记录到SD卡中。由于记录数据到SD卡是缓慢的,一些暂态数据可以被跳过。

Battmon - .NET应用部分

在Windows平台上,微软NET框架4.5用来开发Battmon部分,其执行在线电池的数据处理和在几种形式进行显示:

  • 汽车式模拟仪表(V,A,℃)
  • 数字显示(V,A,℃)
  • 软件图表记录(电压,电流随时间变化)

在分析之前录制battmon数据,现场仪表不活跃,而battmon图表记​​录器获取的数据文件,然后允许滚动到所需的检查点。此外,所有先前录制的文件是由时间戳总结了通过下拉菜单中的属性表录制时进行快速审查(无纸记录数据)。

下面拍摄的画面展示了在一个画面的所有功能:

NexGen公司。NET控件中使用了battmon用户界面的一部分,用于模拟汽车风格的仪表和数字显示器。

battmon的数字显示以及软件图表记录显示瞬时值,正是因为他们是从battmon单片机接收。电流和电压含有一定的抖动时,汽车配件经营,所看到的屏幕截图。这将导致模拟仪表的生涩操作。以流畅简洁的纹波过滤器只适用于模拟计值号针运动。其结果是,battmon瞬间截屏可以显示不同的值,用于模拟和数字电流,由于模拟仪表显示平滑值,而数字显示器可显示瞬时之一。

汽车电池电量显示为充电(SoC)的取值范围为0%至100%的三(3)模式状态:充电时,处于静止状态,并且在实际的电池温度显示放电略高于电量指示组。

电池的开路电压测量值,以确定SOC为其他部分可以用于估计当所有汽车配件被关闭,发动机不运转时充电状态 - battmon会探测到这种情况时,电池电流是不大于±0.1阿多(中间栏指示器)。

由于SoC的是通过表函数在20°C在C值测量铅酸蓄电池计算:

系统芯片 - C / 3 - C / 5 - C / 10 - C / 20 - C / 100 在休息 + C / 40 + C / 20 + C / 10 + C / 5
0 9.5 10.2 10.99 11.46 11.5 11.6      
10 9.95 10.6 11.27 11.6 11.68 11.7 11.7 12.08 12.38 12.6
20 10.38 10.91 11.5 11.85 11.89 11.9 11.9 12.25 12.6 12.75
30 10.72 11.12 11.68 12.06 12.08 12.1 12.55 12.55 12.8 12.95
40 10.88 11.33 11.88 12.21 12.24 12.25 12.7 12.85 12.85 13.2
50 11.15 11.55 12 12.33 12.28 12.3 12.8 13.05 13.2 13.35
60 11.35 11.65 12.11 12.45 12.39 12.4 12.9 13.15 13.3 13.52
70 11.5 11.8 12.25 12.5 12.49 12.5 12.95 13.2 13.4 13.7
80 11.6 11.9 12.35 12.55 12.57 12.58 13 13.3 13.65 14
90 11.65 12.45 12.5 12.58 12.59 12.6 13.15 13.6 14.1 15.2
100 11.7 12.08 12.5 12.6 12.62 12.63 13.5 14.2 15.2 15.9

battmon通过执行电池电压调整-0.0235 V /℃的温度变化,使电压至20℃,以确定系统芯片。

的Battmon C#代码结构

对于battmon NET应用程序的类名称显示在下面的图片:

超一流的Generic12Vbattery只包含足够的成员和方法来表示一般的铅酸6芯12伏电池。

Generic12Vbattery类也包含静态表中的C因子在运行时放电,充电和在无负载(怠速)在确定收费系统(SoC)的状态。

//         保护静态双[] cdblSOCVALS =新的双[NUMSOCTBLCOLS]
 // --------------放电----- |〜空载〜| ++++++++充电+++++++++ 
 // - C / 3〜C / 5 - C / 10 - C / 20 - C / 100在休息+ C / 40 + C / + 20℃/ 10 + C / 5
 {-0。333,-0。20,-0。10,-0。05,-0,0100,0,025,0,05,0,1,0,2 } ;
 //

对于特定的电池,另一类AutomotiveBattery源自Generic12Vbattery超类。人们在这里用户可以设置的CA,CCA和容量值,以及品牌,型号和序列号。当battmon将收集的数据与实际的汽车电池,它会再比较哪个用户提供了新的电池与实际测量制造商的数据表所提供,从而使一个想法就已经给电池从新怎样降低。

专用类batt_data_parser服务只有一个目的:从battmon微控制器验证电池的数据,可以通过串口实时发送或从SD卡读取。

Ser_Port_Listener类具有描述性的名称和处理,通过串口接收实时的电池数据,验证每个字段对可接受的序列号范围。

两个设置类负责持久化存储:BattMonSettings类持有battmon。NET程序设置,而设置类保存了所有已知的最新汽车关键电池参数。在battmon主屏幕的下拉列表是从持久检索到的数据建立设置类的实例。

Form1中包含一个单一的并发队列的传入流量表单片机和C#的用户界面之间的数据交换。

// // 电池数据包队列
    的公共 ConcurrentQueue  cnquBattDataQueue = NULL;

就说明了如下图:

在battmon的C#代码智能逻辑能够检测发动机起动事件,该事件被计数并从正在进行的电池数据记录分别记录。在运行时执行的操作电池发动机起动事件中快速分析,并立即显示出来。

battmon而汽车发动机在怠速运行在Windows 8平板电脑上运行的现场的照片如下所示。A型USB连接器上可以看出片剂的与从发动机室中的黑线来承载由battmon Arduino的基于微控制器发送的实时电池数据的左上角。

视频汽车起动时记录battmon现场操作也可以。Battmon .NET项目可以单独从本文开头的链接下载。它可以为任何Windows 7或8平台(ARM,Win32或X64)来构建。

过去的汽车电池数据Battmon分析

一旦battmon才知道的任何发动机启动周期的数据,无论它是用单片机发动机启动时连接到PC机实时运行,或数据被导入到从记录的微控制器运行SD卡独立battmon上电脑,快速浏览是立即可用的任何过去的发动机起动数据。

下拉列表包含所有已知battmon发动机起动事件在很短的格式,其中包括时间戳和关键参数,如起动电机运行,电池温度,内部电阻的持续时间,来计算CA,最大放电电流,库仑释放和进一步如果电池有足够的时间来充电了多长时间。屏幕截图battmon显示的一部分展示了它。

有计算的,并在此部分battmon屏幕上,这在下面解释的示数的汽车电池参数。

发动机起动周期

下拉框显示一个发动机起动周期的日期和时间,这是突出。长启动马达跑在几秒钟内如何,其最大电流消耗电池供电,以安培为单位。

充电输出与收费

库仑的电荷,在库仑,分别为负责外出时启动运行,并负责准备回电池时,发电机充电电池。这些值被预计为同一量级。如果他们是截然不同的,然后电池不被充电足够的发动机运行后启​​动周期之后。

完全充电复选框,充电时间

一次充电汽车电池拍摄时使用标准电池时,充电电流随时间下降,最终接近零计算。充电时间给出了一个想法长途车需要如何操作电池发动机起动后恢复其充电状态。

电池内阻和CA

电池内阻显示在欧姆,起动安培(CA)是计算每个发动机起动循环。

前次发动机起动事件可以被处理,以显示和分析月规模汽车电池的内阻作为时间的函数来检测电池内电阻是否发生恶化,或者作为函数的电池温度。这种图的示例如下所示:

Battmon的功能增强了汽车仪表盘的电池图标

Battmon功能可能会成为汽车车载嵌入式计算机固件的一部分。这样一来,关键battmon数据可以通过在车辆仪表盘上的智能电池图标来表示,存储在板载了更多的电池信息,计算机需要时检索审查。

因此,一个原始的两家国有汽车仪表板的电池警告图标(不亮健康的电池和亮时电池电压过低)

可以替换为更翔实的智能电池图标可供机动车辆驾驶员/驱动器,具有实时的电池数据,如原型图所示为两种情况:一个健康的汽车电池和蓄电池硫酸,它接受主管不佳:

 ...... 

对于数字汽车仪表盘带有触摸屏功能监听智能电池图标会打开一个对话框,有更多的信息,类似于battmon C#。NET应用程序提供。

景点

这battmon项目表现出了如何收集和分析汽车铅酸蓄电池的实时数据在运行时显示它们,以及使用基于Arduino的微控制器和C#。NET Framework应用程序的Windows PC上的组合录制到microSD卡。电量(SOC)和其他关键电池参数的状态都来源于生活的电池数据。

你可能感兴趣的:(物联网技术,嵌入式,C#)