基于Linux/Qtopia的车载温度网络采集技术

发布时间:2010-11-29 15:48    发布者:techshare
关键词: linux , Qtopia , 车载 , 网络采集 , 温度
本文在嵌入式Linux平台上实现了车载信息采集系统的一部分——汽车常规温度的数据采集,如采集车内温度、暖风或空调温度、车外温度、水箱温度等。DS18B20是一种可组网单总线数字温度传感器,为信息采集提供了经济有效的可行方案。嵌入式Linux以其源码开放、容易定制和扩展、多硬件平台支持和内置网络功能等优良性能,逐渐成为车载设备广泛使用的系统平台。本文涉及的系统使用三星公司的S3C2410AL20处理器,操作系统采用 2.6.8.1内核Linux,GUI采用Trolltech公司的Qtopia;功能上主要实现:各路温度的采集显示、音频报警、温度数据的存储、相关功能设置等。当需要语音提示或报警时,应用程序调用语音模块;当需要存储或显示历史数据时,应用程序调用SD存储模块。

1 Linux系统开发概述

驱动程序的开发是嵌入式Linux开发的主要任务之一。设备驱动为上层应用程序提供控制硬件的设备接口,同时直接与Linux内核打交道。图1描述了Linux系统开发框架。



图1 Linux系统开发框架

应用程序开发是嵌入式Linux开发的另一个主要任务。Qt/Embedded 是著名Qt 库开发商Trolltech 公司开发的面向嵌入式系统的Qt 版本。Qtopia是在Qt/ Embedded 库的基础上,专门针对PDA、SmartPhone这类运行嵌入式Linux 的移动设备和手持设备所开发的开放源码的一套应用程序包和开发库。它包括全套的个人信息管理PIM ( Personal Information Management) ,如地址本、日程安排、MPEG播放、图像显示、浏览器等。

2 车载信息系统及硬件平台概述

车载信息采集系统开发主要包括用户界面开发,内核开发,音频模块设计,串口模块设计,CAN总线模块设计,车辆状态(又包含开关量、模拟量、数字量等)检测模块设计等。

本设计着重实现一线制温度网络的数据采集。一线制温度网络的温度信号特点是:数值不高,多在0"100 ℃范围内;温度信号变化较慢;系统对采集到的温度信号的实时性要求不高;精度要求不高。

一线网络的优点在于能测量大量的物理量,所有的通信都通过一线协议,而与被测的具体量无关。一线网络是能够方便地搭建起由一线传感器芯片组成的一系列测量环境参数的网络。

DS18B20是一种可组网的单总线数字温度传感器,具有以下功能特点:

① 适应宽的电压范围(3.0~5.5 V),在寄生电源方式下可由数据线供电。
② 独特的单线接口方式,DS18B20在与微处理器连接时仅需要1条口线即可实现微处理器与DS18B20的双向通信。
③ 温度范围为-55~+125 ℃,在-10~+85 ℃时精度为±0.5 ℃。
④ 可编程的分辨率为9~12位,对应的可分辨温度分别为0.5 ℃、0.25 ℃、0.125 ℃和0.062 5 ℃,可实现较高的精度测温。

单总线使得硬件开销极小,但需要相对复杂的软件进行补偿。由于DS18B20采用单总线串行数据传送,保证严格的读写时序成为测温关键,因此没有采用I/O驱动,而是单独编写一线制温度网络驱动。

本设计采用寄生电源连接方式,12位分辨率。寄生电源的优点为:远程温度检测无需本地电源;缺少正常电源条件下也可以读ROM。为确保 DS18B20在其有效变换期内得到足够的电源电流,在I/O线上通过MOSFET提供强的上拉(如图2所示)。当使用寄生电源方式时,VDD引脚必须连接到地。

系统核心控制器S3C2410X是三星公司基于ARM920T核的芯片。S3C2410X集成了1个LCD控制器(支持STN和TFT带有触摸屏的液晶显示屏)、SDRAM、触摸屏、USB、SPI、SD和MMC等控制器,4个具有PWM功能的计时器和1个内部时钟,8通道的10位 ADC,117位通用I/O口和24位外部中断源,8通道10位AD控制器,处理器工作频率最高达到203 MHz。系统显示采用SHARP 3.5 in的TFT_LCD液晶显示屏。系统框图如图2所示。




图2 信息采集系统及部分电路连接原理

3 驱动实现

本节将实现一线制温度传感器网络的驱动模块。驱动从总体上看分为两部分:驱动与内核接口层、硬件设备接口层。

3.1 驱动与内核接口层

驱动与内核接口层主要完成驱动模块在Linux内核的注册加载、卸载清除工作。这部分工作分别由初始化和退出函数完成。

① 初始化函数完成驱动模块加载:



② 退出函数完成驱动模块卸载:



3.2 硬件设备接口层

硬件设备接口层用来描述驱动程序与设备的交互。这些工作通过虚拟文件系统与设备驱动程序的接口实现。这个接口由file_operation结构定义,其结构如下:



3.2.1 打开设备函数

打开设备函数主要完成设备的初始化。



在使用内核定时器之前需定义一个定时器结构体 static struct timer_list CycleTimer。下面是定时器的具体操作:




3.2.2 读接口函数

用户程序执行读操作的时候可能没有可以读取的数据,此时需要让read操作等待直到有数据可以读取。在此采用等待队列使进程在无数据读取时进入等待,数据到达时唤醒。等待队列设置成一个循环缓冲区,每放入一个新数据作为缓冲区的头,存放时间最久还未被取走的数据为缓冲区的尾。


3.2.3 fasync异步通知函数

异步通知函数向进程发送SIGIO信号,通知访问设备的进程,表示设备已经准备好I/O读写了,避免主动查询,提高程序效率。使用异步通知需增加一个struct fasync_struct的结构指针,然后实现fasync接口函数。



最后在需要向用户空间通知的地方调用内核的kill_fasync函数。在打开设备函数中提到的DS18B20Event()功能是:将数据放入循环缓冲区,唤醒等待队列并启动异步通知,其后两项功能是这样实现的:



3.2.4 poll系统调用操作接口函数

当程序需要进行对多个文件读写时,如果某个文件没有准备好,则系统就会处于读写阻塞的状态,影响其他文件的读写。为了避免读写阻塞,使用poll函数。如果设备无阻塞地读,就返回POLLIN; 通常的数据已经准备好,可以读了,就返回POLLRDNORM。



3.2.5 release释放设备函数



写接口函数用来通知驱动。例如通知驱动读取通道2的数据,在应用程序中执行写接口函数write(fileno,&SLOT2,1),驱动设置当前读通道号为2。

至此完成驱动接口函数。此驱动属于字符设备驱动,将源程序放在driver/char 目录下。同时需要修改该目录下的Kconfig配置文件并添加 Config 18B20_S3C2410选项,修改driver/char/Makefile,添加obj$(CONFIG_18B20_S3C2410) +=S3C2410_18B20.O。最后重新配置内核,将驱动以模块形式添加到内核,这样就可以编译驱动了。

4 Qtopia应用程序设计

(1) 创建工程

首先利用QT Designer设计器创建一个窗体应用程序ThermometeRFigure.ui。窗体程序创建好后根据需要添加窗体控件、槽函数、信号等。图3为ThermometerFigure类的实现框图。





图3 ThermometerFigure类的实现框图

(2) ThermometerFigure类实现

利用uic工具产生相应的*.cpp和*.h文件(窗体类的实现文件和头文件)。编辑*.cpp和*.h文件实现各成员函数、信号槽的连接。具体实现如图3所示。

3) 创建main及初始化

首先创建main.cpp文件,并在main.cpp 中创建QApplication 对象。QApplication 类负责图像用户界面应用程序的控制流和主设置,对所有来自系统和其他源文件的事件进行处理和调度;还包括应用程序的初始化和结束。



(4) 编辑*.pro文件并生成Makefile



利用progen工具创建Thermometer.pro,具体实现如下:

执行qmake命令生成Makefile文件,执行之前要设置相关的环境变量,编译器路径等。
qmakeo Makefile Thermometer.pro

(5) 编译链接工程

执行make命令,将生成目标二进制文件Thermometer,此文件即可在设备上运行。

(6) 将可执行文件发布到Linux系统

将可执行文件添加到Qtopia的根文件系统中,将生成的新的根文件系统烧写到设备的Flash根文件系统区,这样就可以在桌面运行程序了。图4为 ThermometeRFigure类实现界面。



图4 ThermometerFigure类实现界面

结语

本文介绍了车载信息系统开发的部分实现方法。通过实例讲述了Linux的开发过程,包括驱动开发和应用程序开发流程。创新点在于将一线制传感器网络引入车载信息采集系统,大大简化了线路结构,有很高的实用价值。
本文地址:https://www.eechina.com/thread-42832-1-1.html     【打印本页】

本站部分文章为转载或网友发布,目的在于传递和分享信息,并不代表本网赞同其观点和对其真实性负责;文章版权归原作者及原出处所有,如涉及作品内容、版权和其它问题,我们将根据著作权人的要求,第一时间更正或删除。
旋极科技 发表于 2011-12-20 09:55:43
CAN总线测试分析
      我公司提供的CAN总线测试产品是汽车/坦克领域、工业自动控制领域和医疗设备领域等工程师首先的测试工具和产品。系列接口产品有如下接口产品:




      以上测试仿真板卡具有如下主要特点:
      ★  支持CAN2.0A和CAN2.0B总线协议
      ★  支持高、低速的波特率
      ★  大容量内存,能存储大量的CAN总线消息
      ★  单、双或者四通道的CAN总线接口
      ★  有CAN总线监听功能
      ★  有CAN总线分析功能
      ★  有故障检测和故障注入功能
Xtm(CAN总线分析、仿真工具)







软件介绍
      Xtm是一个用于控制嵌入式网络节点(电子控制单元)的软件环境。它也可用于显示和修改那些网络节点的内部状态。此外,用户能够模拟和分析嵌入式网络节点之间的通信,并且如果需要的话,用户还可以通过网络行为的仿真来替换丢失的网络节点。Xtm同样也可用于改变和完善网络通信。
目前支持的网络有:CAN,LIN,以太网(仅UDP)和FlexRay。通过一个外接的ECU,PC机的串口和K-line(通过相关的LAPcan卡适配器)也可用于通信。
      在测量或通用网络通信的同时,视频流的记录和再传送也是可能的。视频流和测量数据可以时间同步。
      Xtm有一个模块化设计:例如,硬件接口的实现和通信协议在最底层。接口被建立和参数化,但当正常运行Xtm时是不可见的。仅仅当接口生成产物(数据和信号)的时候,是可见的。
      Xtm是EK Tronic和Kornwestheim合并后的产物。许多基于Xtm的用户定制的项目已经成为现实。

主要特性
      ★  显示CAN/LIN/FlexRay消息
      ★  支持ASAP2文件和CCP/XCP测量
      ★  记录和再传送视频流
      ★  强大的script语言,可进行复杂的CAN总线测试与仿真
      ★  模拟信号的图像表达功能
      ★  基于DBC和LDF描述文件解码和生成CAN/LIN消息
      ★  有CAN/LIN消息的发送窗口
      ★  触发对象
      ★  面板窗口用于script程序和仿真信号的控制
      ★  高性能以及很好的实时特性





公司简介: 公司是中关村科技园区高新技术企业、北京市双软认定企业、中关村信用联盟星级会员、北京市守信企业、国家军用标准GJB9001A质量体系认证企业、军工保密资格认证单位、世界首席嵌入式芯片构架设计公司—ARM在中国唯一的授权培训中心。公司还获得了国家密码管理局颁发的“商用密码产品销售许可证”、“商用密码产品生产定点单位”证书,航天部合格供应商称号。 公司按照新标准被认定为2008年第一批国家级高新技术企业。 ...>>
联 系 人: 王先生
电  话: 021-64326688-617手  机: 15800481807电子邮箱: qiu.shenwang@163.com所在城市: 上海市[上海]
详细地址: 上海市古美路1528号A3栋2楼公司网站: http://www.watertek.com
您需要登录后才可以发表评论 登录 | 立即注册

厂商推荐

相关在线工具

相关视频

关于我们  -  服务条款  -  使用指南  -  站点地图  -  友情链接  -  联系我们
电子工程网 © 版权所有   京ICP备16069177号 | 京公网安备11010502021702
快速回复 返回顶部 返回列表