导言
面临巨大的轿车市场以及跟着全国各省市高速公路路网的建造与完善,对交通办理信息化的要求越来越高,gps车载体系的潜力不可估量,其开展前景比较达观。日本和西方各大公司都参加了这场高科技的比赛。各发达国家的许多出产商都加快了车载导航体系的研讨脚步。跟着嵌入式技能的开展,许多资源缺乏的瓶颈问题都很大程度上得到了处理。车载定位体系由车载定位终端、无线通讯链路和车载监控办理体系三部分组成。其首要功用是将移动方针的动态方位(经度和纬度)、时刻和海拔等对用户有用的信息,经过无线通讯链路传送到监控中心,然后在电子地图上对移动方针的运动轨道进行显现,并对车辆的精确方位、速度、运动方向和车辆状况等用户感兴趣的参数进行监控和查询,为调度办理供给可视化根据,进步车辆运转功率,还能起到节能减排的效果。也在必定程度上起到维护地球的效果。本文将gps定位技能应用于气车,与现有定位技能组合起来共同完结定位监控使命,将大大进步定位精确性及安全性,一起能够下降资金投入,具有很宽广的开展空间。
体系整体设计
体系硬件的结构设计
车辆监控体系由车载端(包含arm工控机、触摸屏、gps接纳模块和电源等)、通讯体系(gprs)、监控中心三大部分组成。车载端的gps模块实时接纳全球定位卫星的方位、时刻等数据,一方面发送给车内的arm微型工控机,得到车辆的当时方位并且在电子地图上显现:另一方面,数据将经过gprs终端模块发送到长途监控中心服务器,使得监控中心能实时得到一切车辆的方位信息,给车辆的安全监控以及长途凋度供给了根底。经过spi接口与can总线相连,运用can总线挂接传感器,检测轿车首要技能参数,can总线模块能够使本体系与其他车载模块的衔接,完结搜集车辆的状况信息以及进一步操控。can总线模块首要包含can总线的操控器和收发器,在这儿别离选用的是microchip公司的mcp2510和飞利浦公司的pca82c250。其间,can总线操控器mcp2510完结了can总线的协议,can总线收发器pca82c250供给协议操控器和物理传输线路之间的接口。因为can总线操控器mcp2510具有spi接口,因而,体系中将其与s3c2440的spi0相连。毛病检测模块首要是对轿车的首要技能参数进行检测,并显现到lcd显现器上,假如检测到毛病,会宣布报警信号。本文首要检测的技能参数包含燃油消耗量、制动力、转向力、发动机温度、冷却液温度、前照灯,以及车内噪声和尾气等方面。该模块首要是经过各种传感器把各种信号转换为电信号,再运用信号处理电路把电信号进行相应的处理,使其能与can总线模块进行数据传输。车载端的硬件组成框图,如图1所示。
图1 车载端的硬件组成框图
应用程序总结构
应用程序的整体流程图如图2所示。因为gprs模块和gps模块都是经过串口和监控终端衔接的,程序体系初始化的作业便是对串口进行初始化,使串口按gprs及gps模块的要求作业。之后创立同享内存是为gprs通讯子进程与gps子进程之间的通讯做准备。gps子进程担任从串口接纳gps信息并把这些信息写入同享内存内,gprs子进程则将同享内存内的gps信息经过网络送到远方的监控服务器。
gps驱动程序的编写
为了使arm上的应用程序能够处理gps接纳到的导航信号,要编写gps的驱动程序。
这个gps驱动程序也是归于字符型驱动程序,首要了解嵌入式开发中应用程序、库、内核、驱动程序的联系:应用程序调用应用程序库函数完结功用;应用程序以文件方式拜访各种资源;应用程序函数库的一部分直接完结功用,一部分函数经过体系调用由内核完结,内核处理体系调用,调用设备驱动程序,设备驱动程序直接与硬件通讯。如图3所示
一般linux的设备驱动有三种类型,字符设备、块设备、网络设备。而我要讲的gps模块的驱动程序是归于字符设备。关于字符设备宣布读/写恳求时,实践的硬件i/o操作一般紧接着产生。在设备办理中,除了设备类型外,内核还需要一对被称为主从设备号的参数,才干仅有标识一个设备。主设备号相同的设备运用相同的驱动程序,从设备号用于区别详细设备的实例。用指令cat/proc/devices能够检查体系中一切设备对应的主设备号。所以在gps驱动程序的开端界说设备称号#define device_name “s3c2440-gps”再界说主设备号,我是让体系主动分配的,以防主设备号已被占用,static int gps_major=0;驱动程序以一个模块初始化函数作为进口,如module_init(s3c2440_gps_init)向内核声明当时模块的初始化函数;再写gps的初始化函数:static int __init s3c2440_gps_init(void)函数,在这个函数里边注册一个设备,回来主设备号,能够写成:gps_major=register_chrdev(0,device _name,s3c2440_gps_fops),s3c2440_gps_fops是界说了的结构体,规则了驱动程序向应用程序供给的操作接口。如:static struct file_operations s3c2440_gps _fops ={.owner= this_module,。
open= s3c2440_gps_open,.release= s3c2440_gps_release=s3c2440_gps_release, .ioctl=s3c2440_gps_ioctl};持续向下写,gps_class=class_create(this_module,device_name);在/sysfs目录下创立这个设备的类。再是注册这个设备的类,如device_create(gps_class,null,mkdev(gps_major,0),null,device_name)。
gps应用程序即定位功用的完结
要完结gps的定位必须先要对gps数据包进行解析,gps上电后,每隔必定的时刻就会回来必定格局的数据,数据格局为$信息类型,每行最初的字符都是$,接着是信息类型,后边的是数据,以逗号分隔,完好的数据类型如下:$gprmc,080655.00,a,4546.40891,n,12639.65641,e,1.045,328.42,170809,,,a*60信息类型为:gpgsv:可见卫星信息、gpgll:地舆定位信息、gprmc:引荐最小定位信息、gpvtg:地上速度信息、gpgga:gps定位信息、gpgsa:当时卫星信息、这儿我只解析gprmc和gpgga的信息。一.gprmc数据详解:$gprmc,《1》,《2》,《3》,《4》,《5》,《6》,《7》,《8》,《9》,《10》,《11》,《12》*hh《1》utc时刻,hhmmss(时分秒)格局《2》定位状况,a=有用定位,v=无效定位《3》纬度ddmm.mmmm(度分)格局(前面的0也将被传输)《4》纬度半球n(北半球)或s(南半球)《5》经度dddmm.mmmm(度分)格局(前面的0也将被传输)《6》经度半球e(东经)或w(西经)……。