基于单片机的蓄电池检测系统设计 下载本文

成整个程序。软件主要功能包括:设置系统初始状态、电池电压、电流、剩余电量的在线测量,温度的测量、报警的设定和串行通讯、键盘的扫描、电池状态显示、声光报警等。

上述功能主要由:主程序模块、测量模块、键盘扫描模块、LCD显示模块、串口通信模块等来实现。

4.2 主程序模块

系统上电之后要对系统进行初始化设置,在初始化设置时主要对系统中用到的一些标志位和定时器进行设定,如果检查到报警值没有进行设置则设置报警值,对串口进行初始化等工作。在系统初始化之后要开启中断,开始扫描键盘,等待定时器的中断。具体框图如图4.1所示:

开始程序初始化 调键盘输入子程序调测量子程序调通讯子程序

调显示子程序图4.1 主程序流程框图

4.3 数据测量程序模块

为了满足监测的实时性,本系统单片机采用定时中断的方式访问DS2438,进行电池参数采集。首先设置单片机的计数器为定时方式,开启计数器,定时长短可随需要灵活设定。然后单片机运行其它程序,等待定时中断的到来。定时中断发生之后进入中断服务程序,调用DS2438的控制操作程序,进行数据采集,并将采集来的数据进行处理和显示,最后重新初始化定时中断,返回。如图4.2所示:

单总线读写DS2438 开始数据采集 程序初始化数据修正处理 单总线器件初始化

Y 定时中断 N Y 超限否 N 数据显示 报警输出 定时器复位 与上位机通讯 结束 图4.2 测量程序总流程图 4.3.1 单总线的工作原理

DS2438与单片机的通信采用的单总线协议,单总线技术有3个显著的特点:①单总线芯片通过一根信号线进行地址信息、控制信息及数据信息的传送,并通过该信号线为单总线芯片提供电源;②每个单总线芯片都有全球唯一的访问序列号,当多个单总线器件挂在同一单总线上时,对所有单总线芯片的访问都通过该惟一序列号进行区分:⑨单总线芯片在工作过程中,不需要提供外接电源,而通过它本身具有的“总线窃电”技术从总线上获取电源。为了较为全面地介绍单总线系统,将系统分为三个部分讨论:硬件结构、命令序列和信号方式(信号类型和时序)。

1)单总线芯片硬件电路

顾名思义,单总线只有一根数据线,系统中的数据交换、控制都由这根线完成,大部分器件完全依靠从数据线上获得的电源供电,个别器件在许可的情况下由本地电源供电。当数据线为高电平时,电荷存储在器件内部;当数据线为低电平时,器件利用这些电荷提供能量。主机或从机通过一个漏极开路或三态端口连接至该数据线,以允许设备在不发送数据时能够释放数据总线,以便总线被其它设备所使用。单总线采用线或配置,端口为漏极开路,硬件电路可参考图3.5信号采集模块。

2)单总线命令时序

当需要通过单总线访问单总线器件时,必须严格遵守单总线命令序列,如果出现序列混乱,则单总线器件不会响应。典型的单总线命令序列为:第一步,初始化;第二步,ROM命令;第三步,功能命令。

a) 初始化 基于单总线上的所有传输过程都是以初始化开始的,初始化过程由主机发出的复位脉冲和从机响应的应答脉冲组成。应答脉冲使主机知道总线上有从机设备,且准备就绪。

b) ROM命令

当主机接收到单总线器件发回来的应答脉冲之后,就可以发出ROM命令,该命令与每个单总线器件设备的唯一64位ROM代码相关。该代码在生产时就已经被固化在器件之中,如同器件的身份证一样。通过该代码,主机可以指定对某一个单总线器件进行操作。该ROM码中第一个字节表示族码,最后一个字节为CRC校验码。从机设备可能支持5种ROM(实际情况与具体型号相关,这里通常以DS2438为例进行说明),每种命令的长度均为8位。其所支持的5种ROM命令如下。

ⅰ)读ROM命令[33H](仅适用于单节点):该命令仅适用于总线上只有一个从机设备。它允许主机直接读出从机的64位ROM代码,而无须执行搜索ROM过程。如果该命令用于多节点系统,则必然发生数据冲突,因为每个从机设备都会响应该命令,从而无法识别正确的代码。

ⅱ)匹配ROM[55H]:匹配ROM命令后跟随64位ROM代码,从而允许主机访问多节点系统中某个指定的从机设备,仅当从机完全匹配64位ROM代码时才会响应主机,随后发出功能命令。其它设备将处于等待复位脉冲状态。

ⅲ)搜索ROM[F0H]:当系统初始上电时,主机必须找出总线上所有从机设备的ROM代码,这样主机就能够判断出从机的数目和类型。主机通过重复执行搜索ROM循环(搜索ROM命令跟随着位数据交换),以找出总线上所有的从机设备。如果总线只有一个从机设备则可以采用读ROM命令来替代搜索ROM命令。在每次执行完搜索ROM循环后主机必须返回至命令序列的第一步(初始化)。

ⅳ)跳跃ROM[CCH](通常用于单节点):采用该命令使得主机能同时访问总线上的所有从机设备,无须发出任何ROM代码信息。这种命令通常用于不需要从机设备向主机发送信息。值得注意,如果跳越ROM命令跟随的是读操作命令则该命令只能应用于单节点系统,否则将由于多个节点同时响应该命令而引起数据冲突。

ⅴ)报警搜索[ECH](仅用于少数单总线器件):除那些设置了报警标志的从机响应外,该命令的工作方式完全等同于搜索ROM命令。该命令允许主机设备判断那些从机设备发生了报警(如最近的测量温度过高或过低)。等同搜索ROM命令一样,在完成报警搜索循环后,主机必须返回至命令序列的第一步。

c) 功能命令

功能命令即主机控制某个单总线器件完成某一特定功能。通常在主机发出ROM命令之后紧接着发出,常用的功能有读暂存器、写暂存器、复制暂存器、回读EEPROM等命令。其他根据不同的单总线器件还有一些特定命令,DS2438的功能命令集如表3.3所示。

表4.1 DS2438的功能命令集

命令 功能描述 命令代码 存储器命令 读暂存器 读第XX页9个字节数据信息(该页8字节与1字节CRC校验码)

单总线上响应 传送9字节信息至主机 BEH(page00H-07H)

写暂存器 复制暂存器 回读EEPROM 转换温度 转换电压 向第XX页写入8字节数据信息 4EH(page00H-07H) 将暂存器中第XX页数据复制到EEPROM中 将EEPROM中第XX页数据重新读回暂存器中 寄存器命令 启动温度转换 启动电压转换 44H B4H B8H(page00H-07H) 48H(page00H-07H) 主机传送8字节信息至DS2438 无 传送回读状态至主机 无 无

3)单总线通信的信号方式

与其他所有的数据通信传输方式一样,所有的单总线器件在数据传输过程中要求采用严格的通信协议,以保证数据的完整性。单总线通信协议定义了如下几种信号类型,即复位脉冲、应答脉冲、写0、写1、读0和读1。所有这些信号(除了应答脉冲以外)都由主机发出同步信号。并且发送所有的命令和数据都是字节的低位在前,这一点与多数串行通信格式不同(多数为字节的高位在前)。单总线通信协议中不同类型的信号都采用一种类似于脉宽调制的波形表示,逻辑“0”用较长的低电平持续周期表示,逻辑“1”用较长的高电平持续周期表示。在主机初始化过程,主机通过拉低单总线至少480μs,以产生复位脉冲。接着,主机释放总线,并进入接收模式。当总线被释放后,4.7K上拉电阻将单总线拉高。在单总线器件(从机)检测到上升沿后,等待15μs~60μs,接着通过拉低总线60μs~240μs以产生应答脉冲。以下重点介绍写时隙和读时隙。

在写时隙期间,主机向单总线器件写入数据;而在读时隙期间,主机读入来自从机的数据。在每一个时隙内总线只能传输一位数据。无论是读时隙还是写时隙,它们都以主机驱动数据线为低电平开始,数据线的下降沿使从机触发其内部的延迟电路,使之与主机同步。在写时隙内,该延迟电路决定从机采样数据线的时间窗口。

单总线通信协议中存在两种写时隙:写0和写1。主机采用写1时隙向从机写入1,而采用写0时隙向从机写入O。所有写时隙至少需要60μs,且在两次独立的写时隙之间至少需要1μs的恢复时间。两种写时隙均起始于主机拉低总线。产生写1时隙的方式:主机在拉低总线后,接着必须在15μs之内释放总线,由上拉电阻将总线拉至高电平:产生写0时隙的方式:在主机拉低总线后,只需在整个时隙期间保持低电平即可(至少60μ s)。在写时隙起始后15-60μs期间,单总线器件采样总线电平状态。如果在此期间采样为高电平,则逻辑1被写入该器件;如果为0则写入逻辑0。

对于读时隙,单总线器件仅在主机发出读时隙时,才向主机传输数据,所以在主机发出读数据命令后,必须马上产生读时隙,以便从机能够传输数据。所有读时隙至少需要60μs,且在两次独立的读时隙之间至少需要1μs的恢复时间。