基于I2C总线和SD卡的火车轮轴承温度采集系统
火车轮轴承的损坏将导致重大交通事故,提前预防是避免事故发生的最好办法。现有的轴承温度采集系统大都不能实时采集温度信息,而且不能大量保存相关信息供人们分析。本文介绍的火车轮轴承温度采集系统运用高性能的处理器,能够在火车运行的过程中不断记录温度与时间信息,并实时地把相关信息存储到SD卡中。
1 系统设计原理
火车轮轴承温度采集系统的工作原理是,各测量点通过温度传感器获取轴承温度信息,随后通过I2C总线把这些信息转输给主机,主机收到后根据数据进行超温报警等动作,同时把数据存储在SD卡中,以便查询。该系统以S3C2440A为主控制器,外部各个温度传感器直接挂接在I2C总线上,就可以实现主机对传感器数据的采集,从而简化了硬件电路。同时利用S3C2440处理器速度快的特点,可以实时对温度进行采集,并且可以高速地存储大量温度信息。通过时钟芯片,还可以记录对应时刻各测量点温度的情况。
2系统硬件设计
主控制器直接采用了Mini2440最小系统板。其处理器为三星S3C2440A,主频高达400 MHz,很好地满足了系统对速度的要求。在温度测量方面,选取DS18B20数字温度传感器,它的精确度很好地满足了设计需要,价格较低,大大降低了开发成本。在通信方面,选取了I2c总线连接方式。利用处理器2个I/O口,简单方便地实现了数据的采集。时钟芯片:DS1302还为系统提供了准确时间信息,可让人们准确了解具体时刻各测量点的温度信息。该部分的示意图如图1所示。
系统采用SD卡来扩展存储器。在该系统中,SD卡用于存储大量的信息,也可以很方便地将相关信息转出。S3C2440A处理器中集成了SD卡控制器,给硬件电路的设计带来了方便。SD卡硬件连接图如图2所示。
在轴承温度采集系统实际工作中,电源的稳定是相当重要的。该系统需要5 V、3.3 V的工作电源。+5 V电压经过LM1117稳压后,可以得到+3.3 V的电压,供Mini2440最小系统板与SD卡电路使用,+5 V的电压由温度传感器、时钟芯片等器件使用。电源模块硬件图如图3所示。
3系统软件设计
设计的主要任务是完成测量点与主机的通信,以及对各测量点温度数据的采集、处理和存储。
3.1传感器数据的采集
考虑到系统对温度采集实时性的要求,系统每隔100ms采集1次温度传感器的数据,并不间断地对整组测量点进行轮流采集,确保让每个测量点的温度数据能及时地被主机处理。数据采集软件流程如图4所示。
3.2主机数据处理和管理软件的设计
此模块软件的主要任务是处理采集的数据并存储数据。软件将采集到的数据进行比较,如果温度有大于65℃,将启动报警程式,并可以根据温度的变化趋势采取相应的预防措施。同时,在每次读取传感器数据的过程中记录此刻的时间,软件将保存本次采集的温度和时间信息。当数据转出时,可以清晰地看到各个时刻所对应的不同温度。数据处理的软件流程如图5所示。
3.3 基于S3C2440的SD卡控制器设计
主控制器S3C2440片内集成了功能强大的SD卡的控制器,加上其提供的1组寄存器,使编程工作变得相对简单。程序中定义相关寄存器如下:
从各个寄存器定义后面的注释中可以看出相应寄存器的作用。
这些寄存器相互配合,就可以很方便地实现协议所要求的复杂时序。在对各个寄存器有了全方位的把握之后,就可以实现SD卡的相关功能,其操作过程为:
①CPU寄存器设置过程
◆正确设置SDICON寄存器;
◆正确设置SDIPRE寄存器;
◆等待74个时钟信号初始卡。
②CMD命令发送过程
◆向SDICARG寄存器中写入发送的参数;
◆确定命令类型并且通过设置SDICCON[8]来启动命令;
◆确定命令是否发送完成,没应答的话看SDICSTA[11],有应答的话看SDICSTA[9];
◆清除SDICSTA中的相应位。
③数据传输过程
◆向SDITIMER中写入超时值;
◆向SDIBSIZE中写入块大小的值;
◆设置块模式,总线宽度等,通过SDIDCON启动传输;
◆通过SDIFSTA检查TxFIFO是否可用,再通过SDIDAT写入发送数据;
◆通过SDIFSTA检查RxFIFO是否可用,再通过SDIDAT读入接收数据;
◆通过检查SDIDSTA[4]确定传输过程已完成;
◆清除SDIDSTA中的相应位。
程序采用模块化设计思想。以主程序为核心设置功能模块子程序,简化了设计结构。运行过程中通过主程序调用各功能模块子程序。通过程序的联合作用,实现了对SD卡的读写,对大量的温度、时间信息进行了实时可靠的保存。以下是数据采集保存部分的函数分析。
结 语
系统采用高性能处理器作为主控制器,高速地采集各节点温度信息,当温度过高时能及时报警,并能快速地存储大量温度与时间信息。运用SD卡能方便地将数据转出并进行分析。本系统
- 一种基于DSP的张力、深度、速度测量系统(04-15)
- I2C总线及EEPROM的Linux驱动程序的设计(01-05)
- 基于C语言的I2C总线软件模块设计(01-09)
- 基于MSP430单片机的智能IC卡水表控制器(07-08)
- 实战经验吐血推荐:怎样在Linux环境下轻松实现基于I2C总线的EEPROM驱动程序(07-25)
- 基于FPGA的嵌入式图像采集系统设计(06-05)