DIY编程器网

 找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 93|回复: 0
打印 上一主题 下一主题

基于VB6.0的燃料电池单片电压巡检系统的设计

[复制链接]
跳转到指定楼层
楼主
发表于 2012-1-16 16:16:21 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
关键词:?RS-485???燃料电池???PIC16F873???单片电压
1? 引言
燃料电池是21世纪最有望取代目前汽车燃油内燃机的新动力体系之一,它是一种将H2和O2的化学能通过电极反应直接转换成电能的装置。一个燃料电池堆是将多片电池片串联起来构成的,整个电堆的性能和单片电池电压有很大的关系。因此在燃料电池的研制中有必要采集不同条件下单片电池的电压值,通过分析找出H2和O2的反应环境和单片电池电压之间的关系。本文所要介绍的是作者单位正在进行的25kW燃料电池轿车项目中,燃料电池单片电压巡检测试、分析系统的设计。本系统的上位机软件采用Vb6.0编程语言进行开发,该语言功能强大,具有面向对象和可视化编程,界面友好,特别适于在 Windows环境下图形界面和用户程序的编制,数据采集由多个以8位PIC单片机为核心的数据采集模块来完成。
2? 系统组成和工作原理
本系统由上位机、主控单片机和若干个数据采集模块所组成,如图1所示。上位机为一台工业控制计算机,其主要功能是通过RS-232串口实现和主控单片机的通信,接收采集数据和发送控制命令;实时显示单片电池的电压值和绘制同一时刻单片电压变化趋势曲线;将测量数据分类保存到数据库,并具有对测量结果进行多种数学分析的功能。

?主控单片接收来自上位机的控制命令





?图1???? 系统组成图
实现对各个数据模块的控制,并将各个模块发来的数据通过RS-232串口转发给上位机。主控单片机和各个数据采集模块间采用RS-485总线进行通信,并设成主从结构,主控单片机设为主机,各个数据采集模块为从机。主控单片机在收到上位机的检测开始命令后,按照轮循的方式依次给各个数据采集模块发采集命令,在每发出一个采集命令后就等待接收该采集模块的采集数据,如果在等待时间内收到采集模块发回的采集数据,就将数据打包转发给上位机;如果等待超时仍然没有接收到数据就直接向下一个采集模块发采集命令,如此反复循环下去。

各数据采集模块的软硬件构成是完全一样的,并通过RS-485总线实现和主控单片机的通信。每个数据采集模块在收到来自主控单片机的测试命令后开始对其负责测试的16片电池电压值进行采样,然后将采样所得的16片电池电压值打包一起发送给主控单片机。每一个数据采集模块能采集16片单片电池的电压,可根据电池片的总数相应地增减数据采集模块的数量。
3? 数据采集模块设计
在本巡检系统中单片电池电压值的采集是由各个数据模块来完成。数据采集模块主要是以PIC16F873单片机为核心加一些外围电路构成如图2所示。PIC16F873单片机是Microchip公司生产的一款精简指令集(RISC),哈佛双总线和两级指令系统流水线结构的高性价比的8位嵌入式控制器,具有集成度高、速度快、工作电压低、功耗低、I/O直接驱动、指令简单易学易用等特点。其内置8k×14 Flash存储器,1个10位四输入通道A/D转换器,和一个UART。并可在线串行编程(ICSP),开发和使用都很方便,所需外围扩展器件少。在数据采集模块中多路模拟信号的输入是通过16路模拟开关CD4067来选择的,单片机通过I/O口RC1~RC4来选择具体那一路输入。由于单片电池电压一般比较低在0.5V~1.2V间,这个电压在CD4067的准许范围内,所以在CD4067的输入口没有加隔离电路。由于数据采集模块和主控单片机之间是通过485总线通信的,因此单片机的串口输入/输出要经过MAX485进行电平转换后才能接到485总线上。采样速率可由主控单片机控制。由于篇幅有限下位机软件设计在此没有提及。





图3???? 接收数据帧式

每一帧数据由20个字节组成,依次是:一个字节的帧起始标志为FF;一个字节的数据组号;16个字节的数据;一个字节的校验和,校验和是组号和16个字节的数据间相互异或的结果;最后一个字节为帧结束标志为FD。16个字节的数据中每个字节表示一片电池的电压值,为0~255的一个整数,将该数除以100及得到电压实际值,一般单片电池电压在0.5V~1.2V间。用MSComm进行串行通信接收数据时可采用两种方式实现,一种是查询方式,另一种是事件触发方式。在本系统中选择的是事件触发方式,每当接收缓冲区中数据字节数到达20个时就触发一个接收事件。接收通信程序如下:
Private Sub MSComm1_OnComm()
Dim InputData() As byte
Dim strSum? As byte
Dim i As Integer
Dim Volvalue(0 To 18) As Single
With MSComm1
Select Case .CommEvent?'判断通信事件
comEvReceive:???? ??'收到20字节的数据
InputData = .Input??‘读接收缓冲区
If InputData(0) = 253 And InputData(18) = 237 Then ‘判断收到的帧格式正确否
For i = 1 To 17 Step 1
Volvalue(i) = InputData(i)
Next I
strSum = InputData(1)
For i = 2 To 17??‘计算校验和
strSum = InputData(i) Xor strSum
Next I? ‘将接受数据校验和与发送校验和异或
If strSum = "0" Then?‘如果接收数据正确
Volvalue(N) = InputData(i) / 100
‘换算得到电压实际值
…………数据处理
Case Else
MSComm1.InbufferCount = 0 ‘清空接收缓冲区
Msgbox "串口通信错误"
Exit Sub
End? Sub

在此要注意的一点是从缓冲区读数据时,数组InputData()一定要定义成byte类型不能为Integer或Single,因为接收模式设置为二进制。上位机发送的指令较少也很简单在此就没有仔细分析。
5? 结束语
燃料电池作为21世纪前景比较看好的一种新的、洁净型能源,有关它的各项技术的研究都有助于推动它向实用阶段进一步发展。本文在单片电压的检测和分析系统的设计上作了一些工作。虽然是面向燃料电池的,但也可借鉴到其它类似的多点检测和控制系统的设计当中去。
                          
                       
                          
                               
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|文字版|手机版|DIY编程器网 ( 桂ICP备14005565号-1 )

GMT+8, 2025-9-21 02:43 , 耗时 0.092812 秒, 19 个查询请求 , Gzip 开启.

各位嘉宾言论仅代表个人观点,非属DIY编程器网立场。

桂公网安备 45031202000115号

DIY编程器群(超员):41210778 DIY编程器

DIY编程器群1(满员):3044634 DIY编程器1

diy编程器群2:551025008 diy编程器群2

QQ:28000622;Email:libyoufer@sina.com

本站由桂林市临桂区技兴电子商务经营部独家赞助。旨在技术交流,请自觉遵守国家法律法规,一旦发现将做封号删号处理。

快速回复 返回顶部 返回列表