收藏 分销(赏)

电子设计汽车行驶状态记录仪设计报告模板.doc

上传人:精*** 文档编号:4874967 上传时间:2024-10-16 格式:DOC 页数:210 大小:574.50KB 下载积分:20 金币
下载 相关 举报
电子设计汽车行驶状态记录仪设计报告模板.doc_第1页
第1页 / 共210页
电子设计汽车行驶状态记录仪设计报告模板.doc_第2页
第2页 / 共210页


点击查看更多>>
资源描述
电子设计汽车行驶状态记录仪设计报告 208 资料内容仅供参考,如有不当或者侵权,请联系本人改正或者删除。 大学生电子设计 设计报告 汽车行驶状态记录仪 Vehicle travelling data recorder 目录 摘要 …………………………………………………………1 一、 方案论…………………………………………………2 1.1系统微处理器的个数选择……………………………2 1.2存储显示微处理器作为主控制的选择………………2 二、 系统设计………………………………………………3 2.1系统基本功能…………………………………………3 2.2系统性能指标…………………………………………3 2.3系统的提升部分………………………………………3 2.4硬件设计………………………………………………4 2.5软件设计………………………………………………5 2.6特殊元件介绍…………………………………………17 三、 测试说明………………………………………………18 3.1测试工具………………………………………………18 3.2霍尔元件功能测试……………………………………18 3.3软件调试………………………………………………18 3.4测试数据 ……………………………………………………18 3.5调试过程中遇见的问题分析以及解决方案…………20 3.6系统功能参数…………………………………………21 3.7创新与特点……………………………………………21 四、 结束语 …………………………………………………22 五、 附录 ……………………………………………………22 汽车行驶状态记录仪 Vehicle travelling data recorder 摘要: 本项目名称为”汽车行驶状态记录仪”, 系统微处理器采用双单片机, 关键部件有GPS模块、 温度传感器和霍尔元件等, 用于提取有效信息对汽车行驶位置进行精确定位, 并获取轨迹、 速度、 温度等信息, 然后进行存储, 以供用户查询汽车一个星期的行驶路径( 注: 考虑成本问题,样机记录时间长度为6天; 如果作为产品,能够记录1个月甚至一年以上, 根据用户的要求而定) 。本设计采用数字化电路, 软件采用C语言, 有利于对数据进行准确分析, 减少干扰。系统电路采用模块化的设计思想, 由5个模块组成, 分别为GPS接收模块、 数据处理分析模块、 存储模块、 键盘处理模块和显示模块。其中显示模块可采用LCD显示, 还可提供经过串口与PC通信, 然后在电子地图上将汽车轨迹形象地显示出来。 关键字: 单片机; GPS模块; 温度传感器; 霍尔元件; LCD; PC地图 Abstract: With the theme of automobile electron, the Guangdong Universities Students Electron Design Contest aims at perfecting function of the automobile by designing the electric circuits. And our design project is the automobile travel condition recording instrument. This system adopts the microprocessor (MCU) to analyze the GPS module, the temperature sensor and the Hall part position the automobile accurately, More over, it can gain and restore the data of temperature value and velocity for inquiry of the automobile’s week-long travelling route. Digital electric circuits are applied in all of this system, all the softwares are programmed in monolithic integrated circuit C language in order to analyze the data and orientate precisely, and reduce the disturbance (interference) and the error of the data due to the hardware electric circuit. There are five modules in the system circuit: GPS receive module, data processing analysis module, memory module, keyboard processing module and demonstration module. And demonstration module includes the LCD demonstration module and the PC electron map demonstration module in which the electronic map is connected with GPS through the serial port. Key words: MCU; GPS module; Temperature sensor; Hall part; LCD; PC map 一、 方案论证 89C52微处理芯片 GPS接收模块 PC地图显示模块 数据存储模块 时钟模块 霍尔传感器 温度传感器 键盘扫描 1.1,系统微处理器的个数选择。 方案 一 : 采用一个CPU控制芯片。判断1分钟是否到了, 没到则处于显示和发送数据的状态, 到了就采集GPS接收到的数据, 提取出有效信息进行存储。该方案有效地利用了单片机的顺序执行程序的方式, 避免了读出存储芯片总线与存储到时钟芯片, 存储芯片的总线冲突。可是发送给PC地图的数据必须是2秒一组, 接受到GPS的数据也是2秒一组, 这对串口的使用产生了冲突, 更重要的是我们是对GPS数据进行定时采集, 如果恰巧那个时间GPS接收的数据不完整, 那么那一分钟里将得不到有效信息, 产生很大的误差, 因此一块微处理芯片的处理方案不能保证系统的稳定性。 存储微处理器 显示微处理器 时钟模块 存储模块 GPS接收模块 霍尔传感器 温度传感器 PC电子地图 LCD显示模块 键盘模块 存储微处理器 显示微处理器 时钟模块 存储模块 GPS接收模块 霍尔传感器 温度传感器 PC电子地图 LCD显示模块 键盘模块 方案 二 : 采用两块89C52控制芯片。一块微处理器芯片先对时钟芯片进行初始化, 而后的主要功能则是对霍尔传感器和温度传感器以及GPS接收的有效数据进行采集, 而且对接收到的数据进行检查验证是否正确, 当接收到一个中断的时候, 则将数据存到存储器里面。另一块微处理器芯片读取时钟芯片进行初始化时钟单元, 然后利用定时计数器对时钟单元进行准确的累加, 定时产生中断给存储芯片, 让存储芯片能够对数据及时地存储。经过定时中断的方式每2秒产生一组数据给PC地图, 用循环查询的方式读取总线和验证总线数据是否正确, 而且送到LCD上显示。 方案二采用两块控制芯片的优势: ( 1) 、 有两个串口, 能够分开设置相同的波特率, 同时进行接收和发送, 保证两不误。 ( 2) 、 减轻单个处理芯片的压力, 让中断响应和对数据的读取都能及时响应。 ( 3) 、 程序代码采用了大量的变量, 导致单片机的内部数据存储器的空间不够, 增加一个单片机就不用扩展外部数据存储器, 不会降低性价比, 反而更方便操作。 ( 4) 、 有效准时地存储数据和读取数据, 保证了数据的完整度和准确度, 充分提高了系统的稳定性。 因此, 虽然在方案二中增加多一块单片机的成本, 可是相比之下方案二有着更大的优越性, 我们采用了方案二。 1.2,存储/显示微处理器作为主控制的选择。 方案一: 存储控制器作为主控制器。利用一条导线连接存储处理芯片和显示处理芯片, 经过接受GPS的时钟数据判断是否一分钟到了, 如果是则拉下导线电平告知读取芯片释放总线, 让存储芯片将当前采集的数据存储进去, 然后将导线电平拉高, 告诉其能够对存储芯片进行读写。该方案将存储芯片作为了住控制器, 经过线扫描控制从控制器。优势是节省了时间, 对芯片能够很充分利用。不足之处就是如果当前的数据存储不进EEPROM, 则, 一直对总线无法读取, 那么显示的数据将会产生错误或者拖延。而且当读取芯片在读取芯片时则那么那个控制线无效, 数据将无法进行及时存储。因此系统稳定性不高。 方案二: 将显示微处理器作为主控制器。经过给引脚发送高电平让存储控制器产生中断进行存储。该方案中先由GPS根据接收的数据进行初始化时钟芯片, 后提供给显示芯片初始化时钟单元, 由定时器产生中断来累加时钟单元, 而且及时产生中断信号给存储芯片, 这样的电路优势是: 在中断前两个芯片都能准时地接收和发送数据, 让数据得以准时而且正确地更新。中断过程中空出总线提供给存储芯片进行存储。而且中断是由计时器控制空出总线的时间, 因此两芯片不会互相牵制。保证了系统的稳定性。相比之下方案二有着很高的实用性和稳定性, 因此我们采用了方案二。 二、 系统设计。 2.1系统的基本功能. 根据我们的目标所要实现的功能, 我们经过仔细分析, 充分考虑各种影响因素, 制定出了整体的设计方案。以两块单片机89C52为核心, 协调完成以下几个功能: 存储单片机完成采集GPS接收数据, 采集霍尔传感器和温度传感器的数据, 进行验证和存储; 显示单片机完成数据的读取, 以及在LCD上和PC电子地图上显示的功能。两个单片机共用EEPROM和时钟芯片, 采用I2C总线接口方式, 只使用两个端口, 节省了单片机资源, 使系统更为可靠。 2.2 系统的性能指标 工作电压: 7.5~12V 工作电流: 不大于500MA 工作环境温度: -40℃~+80℃ 工作环境相对湿度: <85%( 25℃) 产品外形尺寸: 该作品体积小巧, 安装方便, 长16cm, 宽8cm, 高3cm GPS接收经纬度精度: 定位精确到小数后4位, 误差小于5米。 2.3系统的提升部分。 系统经过设置键盘模块, 让显示部分能够显示当前时间以及行驶状态, 或是经过手动方式利用键盘设置时间定点查询某一时刻的速度温度, 经纬度, 而且在电子地图上及时显示出来。另外还能够从某点开始回放我们这些日子走过的那些路线, 以及当时的环境, 让人们清晰地知道最近车的行驶过程。 系统上原来LCD的界面简单, 繁杂的数据变化让人的视觉神经逐渐麻痹, 我们经过设计创新了让画面更加美化, 而且产生了循环渐变的FLASH数据更新效果。让整个LCD界面显得美观大方。 2.4 硬件设计。 ( 1) 电源模块 本系统是采用了汽车上的12V直流电源, 进行整流滤波降压为5V电源提供给系统的运行使用。为了保证电源的正常供给, 我们在12V输入的时候加入了2.0A的保险丝以防电流过大。并加入7805的稳压管保证了整个系统电源的稳定。 具体电路如图: (2) 原理图模块 本系统主要用软件实现的, 对器件的需求量比较少, 只需2个单片机和EEPROM和PCF8563以及GPS模块等器件, 因此我们的电路板比较简单, 大大提高了性价比, 经济方便。下面是我们项目的电路图, 两个单片机, 一个作为显示模块, 一个作为存储模块。 2.5 软件设计。 ( 1) 功能模块。 该系统主要采用两块89C52单片机分别作为存储和显示的微处理器, 外围电路由ublox GPS提供经纬度和时间数据, DS18B20提供温度数据, 霍尔元件实现对汽车的测速。所获得的数据用来初始化时钟芯片PCF8563, 而且都存储到EEPROM中, 显示微处理器芯片分别读取EEPROM和PCF8563的数据, 然后在LCD和PC电子地图上显示, 具体电路框图如下: 存储微处理器 STC 89C52 显示微处理器 STC 89C52 GPS-25 -LP DS18B20 霍尔元件 276 EEPROM PCF8563 LCD 显示 PC电子地图 控制从机启动 从机释放总线 (1) 存储模块。 在存储模块的单片机中, 分别对GPS模块, 温度传感器DS18B20的数据采集, 对霍尔元件进行脉冲计数。GPS接收到数据帧有定位信息GPGGA帧、 卫星信息GPGSA帧、 地理定位信息GPGLL帧、 卫星状态GPGSV帧、 最小信息GPRMC帧等等, 可是我们仅仅需要提取信息全面的GPRMC帧。在我们的软件中只需判断是不是以”$GPRMC”字符串开头, 是则接收, 否则退出。下面是按照”, ”的第几个来对GPS模块对应的位置进行采集相关的数据。 void receice () interrupt 4 using 1 { unsigned char temp; RI=0; temp=SBUF; switch(data_item) { case 0: if(temp=='$') { data_item++; } break; case 1: if(temp=='G') { data_item++; } else { data_item=0; } break; case 2: if(temp=='P') { data_item++; } else { data_item=0; } break; case 3: if(temp=='R') { data_item++; } else { data_item=0; } break; case 4: if(temp=='M') { data_item++; } else { data_item=0; } break; case 5: if(temps=='C') { data_item++; } else { data_item=0; } break; case 6: if(temp==',') { data_item++; time_num=0; lat_num=0; lon_num=0; speed_num=0; date_num=0; g_clock=0; } else { data_item=0; } break; case 7: if(temp==',') { time_num=0; g_clock++; break; } if(temp=='$') { data_item=1; break; } switch(g_clock) { case 0: if(time_num<9) { gps_timer[time_num++]=temp; } break; case 2: if(lat_num<10) { gps_lat[lat_num++]=temp; } break; case 3: { SN=temp; } break; case 4: if(lon_num<11) { gps_lon[lon_num++]=temp; } break; case 5: { EW=temp; } break; case 6: if(speed_num<5) { gps_speed[speed_num++]=temp; } break; case 8: if(date_num<6) { gps_date[date_num++]=temp; } break; default: break; } default: break; } } 对温度传感器和脉冲个数的采集, 分别只需调用下面的函数就能够采集温度和计数脉冲, 详细代码见附录, 整体的流程图如下: tempture=DS18B20ReadTemp(); //采集温度 void Signal_INT(void) interrupt 2 using 3//传感器中断 { round_count++; TR0=1; } 开始 初始化串口和中断 接收完整数据? 初始化PCF8563 读18B20数据 是否计数霍尔元件的时间到? 采集GPS的数据是否完整 检查是否收到存储的指令( 一分钟) 存储 Y N N Y 第一次存储完后启动从机 返回 Y 返回 N 中断通信入口 是否需要的数据 采集数据 Y 退出 外部中断入口 脉冲加一 定时时间是 否到? 取值 退出 N Y N (2) 显示模块 在这个模块中, 主要是处理LCD界面的显示以及发数据到PC地图上定位。操作的方式是读取EEPROM, 定时将数据发送给PC地图, 则在电子地图上显示对应的位置, 直观, 操作又方便。由于电子地图只有接收到与串口参数设定的数据一致时才能够定位, 因此将按照它的参数每两秒发送一组数据, 下面就是每两秒发送一组数据给PC地图的程序: /******************************************************************************/ void Timer1(void) interrupt 1 using 1//中断入口, 冒号闪烁 { unsigned char temp,i; TH0=(65535-46080)/256; //50ms定时 TL0=(65535-46080)%256; timecount++; num_Send++; auto_num++; num_xianshi++; keep_int0++; rr_num++; if(rr_num>=5) { rr_num=0; flag_move=1; } if(keep_int0>=20) { keep_int0=0; keep++; } if(num_xianshi>40) { flag_xianshi=~flag_xianshi; num_xianshi=0; } if(timecount > 9)//500MS { timecount = 0; flag = ~flag; //调试的时候实现时间显示闪烁 } if(auto_num>200)//自动回放的时候6秒更新一组数据 { auto_num=0; flag_auto=1; } if(num_Send>40)//两秒的时候发送一组数据给PC地图 { num_Send=0; /**********************当前状态的发送*******************/ if(key_now_last==1) { for(i=0;i<67;i++) { switch(i) { case 0 : temp='$';break; case 1 : temp='G';break; case 2 : temp='P';break; case 3 : temp='G';break; case 4 : temp='G';break; case 5 : temp='A';break; case 6 : temp=',';break; case 7 : temp=((hour_CLK-8)+24)%24/10+'0';break; case 8 : temp=((hour_CLK-8)+24)%24%10+'0';break; case 9 : temp=(min_CLK/10)+'0';break; case 10: temp=(min_CLK%10)+'0';break; case 11: temp='0';break; case 12: temp='0';break; case 13: temp=',';break; case 14: temp=read_latlon[0]/10+'0';break; case 15: temp=read_latlon[0]%10+'0';break; case 16: temp=read_latlon[1]/10+'0';break; case 17: temp=read_latlon[1]%10+'0';break; case 18: temp='.';break; case 19: temp=read_latlon[2]/10+'0';break; case 20: temp=read_latlon[2]%10+'0';break; case 21: temp=read_latlon[3]/10+'0';break; case 22: temp=read_latlon[3]%10+'0';break; case 23: temp=',';break; case 24: temp=read_latlon[4];break; case 25: temp=',';break; case 26: temp=read_latlon[5]/10+'0';break; case 27: temp=read_latlon[5]%10+'0';break; case 28: temp=read_latlon[6]%10+'0';break; case 29: temp=read_latlon[7]/10+'0';break; case 30: temp=read_latlon[7]%10+'0';break; case 31: temp='.';break; case 32: temp=read_latlon[8]/10+'0';break; case 33: temp=read_latlon[8]%10+'0';break; case 34: temp=read_latlon[9]/10+'0';break; case 35: temp=read_latlon[9]%10+'0';break; case 36: temp=',';break; case 37: temp=read_latlon[10];break; case 38: temp=',';break; case 39: temp='1';break; case 40: temp=',';break; case 41: temp='0';break; case 42: temp='7';break; case 43: temp=',';break; case 44: temp='1';break; case 45: temp='.';break; case 46: temp='4';break; case 47: temp=',';break; case 48: temp='7';break; case 49: temp='.';break; case 50: temp='6';break; case 51: temp='2';break; case 52:temp=',';break; case 53: temp='M';break; case 54: temp=',';break; case 55: temp='7';break; case 56: temp='.';break; case 57: temp='0';break; case 58: temp=',';break; case 59: temp='M';break; case 60: temp=',';break; case 61: temp=' ';break; case 62: temp=',';break; case 63: temp='*';break; case 64: temp='6';break; case 65: temp='6';break; case 66: temp='\n';break; } SBUF=temp; while(TI==0); TI=0; } } /****************************停止/回放状态的发送*********/ else { for(i=0;i<67;i++) { switch(i) { case 0 : temp='$';break; case 1 : temp='G';break; case 2 : temp='P';break; case 3 : temp='G';break; case 4 : temp='G';break; case 5 : temp='A';break; case 6 : temp=',';break; case 7 : temp=((hour-8)+24)%24/10+'0';break; case 8 : temp=((hour-8)+24)%24%10+'0';break; case 9 : temp=(min/10)+'0';break; case 10: temp=(min%10)+'0';break; case 11: temp='0';break; case 12: temp='0';break; case 13: temp=',';break; case 14: temp=read_latlon[0]/10+'0';break; case 15: temp=read_latlon[0]%10+'0';break; case 16: temp=read_latlon[1]/10+'0';break; case 17: temp=read_latlon[1]%10+'0';break; case 18: temp='.';break; case 19: temp=read_latlon[2]/10+'0';break; case 20: temp=read_latlon[2]%10+'0';break; case 21: temp=read_latlon[3]/10+'0';break; case 22: temp=read_latlon[3]%10+'0';break; case 23: temp=',';break; case 24: temp=read_latlon[4];break; case 25: temp=',';break; case 26: temp=read_latlon[5]/10+'0';break; case 27: temp=read_latlon[5]%10+'0';break; case 28: temp=read_latlon[6]%10+'0';break; case 29: temp=read_latlon[7]/10+'0';break; case 30: temp=read_latlon[7]%10+'0';break; case 31: temp='.';break; case 32: temp=read_latlon[8]/10+'0';break; case 33: temp=read_latlon[8]%10+'0';break; case 34: temp=read_latlon[9]/10+'0';break; case 35: temp=read_latlon[9]%10+'0';break; case 36: temp=',';break; case 37: temp=read_latlon[10];break; case 38: temp=',';break; case 39: temp='1';break; case 40: temp=',';break; case 41: temp='0';break; case 42: temp='7';break; case 43: temp=',';break; case 44: temp='1';break; case 45: temp='.';break; case 46: temp='4';break; case 47: temp=',';break; case 48: temp='7';break; case 49: temp='.';break; case 50: temp='6';break; case 51: temp='2';break; case 52:temp=',';break; case 53: temp='M';break; case 54: temp=',';break; case 55: temp='7';break; case 56: temp='.';break; case 57: temp='0';break; case 58: temp=',';break; case 59: temp='M';break; case 60: temp=',';break; case 61: temp=' ';break; case 62: temp=',';break; case 63: temp='*';break; case 64: temp='6';break; case 65: temp='6';break; case 66: temp='\n';break; default:break; } SBUF=temp; while(TI==0); TI=0; } } } } 开始 初始化中断和LCD显示 等待接收主机的 启动命令? 读PCF8563并显示 对应数据显示 是否释放总线 返回 N Y 2.6特殊元件的介绍。 ( 1) GPS模块 GPS(Global Positioning System)是全球定位系统的缩写, 全球定位系统现在也经常称为全球卫星导航技术, 是美国从20世纪70年代开始研制, 于1994年全面建成, 具有在海陆空进行全方位实时三维导航与定位能力的新一代卫星导航与定位系统。GPS卫星时刻发布其位置与时间数据信号, 用户接收机能够测量每颗卫星信号到接收机的时间延迟, 根据信号传输的速度就能够计算出接收机到不用卫星的距离, 同时手机到至少4颗卫星的数据时就能够计算出三维坐标, 速度和时间 。 GPS接收到数据帧有定位信息GPGGA帧, 卫星信息GPGSA帧, 地理定位信息GPGLL帧, 卫星状态GPGSV帧, 最小信息GPRMC帧等等, 可是我们仅仅需
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4009-655-100  投诉/维权电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服