微波EDA网,见证研发工程师的成长!
首页 > 应用设计 > 汽车电子 > 基于Linux/Qtopia的车载温度网络采集

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

时间:05-10 来源:互联网 点击:

引言

本文在嵌入式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内核的注册加载、卸载清除工作。这部分工作分别由初始化和退出函数完成。

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

static int __init DS18B20_init(void){

……

register_chrdev(DS18B20_MAJOR,DEVICE_NAME, &DS18B20_fops);//完成设备注册

#ifdefCONFIG_DEVFS_FS//创建设备文件系统

devfs_mk_cdev(MKDEV(DS18B20_MAJOR,0),S_IFCHR | S_IRUSR | S_IWUSR | S_IRGRP,DEVICE_NAME);

#endif

……

}

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

static void __exit DS18B20_exit(void) {

#ifdef CONFIG_DEVFS_FS

devfs_remove(DEVICE_NAME);//移除设备文件

#endif

unregister_chrdev(DS18

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top