基于AVR单片机的自行车行车记录仪,软硬件协同
【摘要】自行车行车记录仪是集计算机技术、电子技术为一体的机电一体化高科技产品,具有精确度高,使用方便等优点。本项目将从行车记录仪的功能,硬件电路设计,软件设计,各项功能实现原理等方面来论述这一系统。自行车行车记录仪包括主控板,打印机驱动板,霍尔传感器,12864液晶显示器,EPSON微型打点打印机这五部分。该记录仪能记录实时的行车速度,行车总里程,单次行车里程,以及历史最高行车速度,具备外部环境温度显示,总里程设置,行车信息打印等功能,是面向自行车爱好者的一个高精度,功能强大的行车记录仪。
功能上,在设计行车记录仪时,以Atmega64单片机为核心,AT24LC64 EEPROM,DS1302,12864液晶显示器,霍尔传感器等构成外围电路,行车记录仪的核心部件是霍尔传感器,在下面讲述原理的时候会进行详细的描述。显示部分由12864液晶来完成,该液晶控制简单,显示区域大,低功耗,适合电池供电,可以通过设计菜单,从而来实现记录仪强大的功能。打印部分由EPSON M-150II微型打点打印机来完成,用户可以通过打印机记录行车的统计信息,以及最近一次的行车信息,各种里程信息以及时速,时间等信息,用户可以通过保管打印的信息,对自己的行车生涯进行统计。
系统软件设计包含用户UI界面,以及各个外围电路的驱动两大部分。使用的编译器是AVR官方推荐的ICCAVR,其中外围的驱动部分主要包括: DS1302时钟芯片驱动;DS18B20温度传感器驱动;24LC64 EEPROM驱动;EPSON M-150II微型打点打印机驱动;12864液晶驱动
硬件电路制作使用Protel DXP设计制做PCB板。分主控板和打印机驱动板焊接调试,进行性能和功能测试。
本系统硬件部分结构简单,软件部分使用自己设计UI界面,使用方便,中文显示,可操作性强,具有比较好的市场前景。
1. 引言
自行车行车记录仪(以下简称码表)在国内外已经有了广泛的应用,但是不管是国外的还是国产的码表都存在着很多缺点。
首先,对于国产码表来说,缺点主要有:
[*] 安装相当麻烦,根据使用者评价,一般安装需要半小时以上,而国外的进口码表则只要5分钟即可安装完毕,所以在设计该码表时需要在这方面进行改进。
[*] 即时速度显示混乱,其实这是计算精度不够造成,速度高于25M/S以后(特别是30M/S以后)当前速度就开始有波动,速度越快波动越大,这个问题还导致最高速度不可信,所以在设计时选择的CPU必须是具有较高计算速度,且实时性能较好的,这里选用了AVR的MEGA64高性能8位单片机,此单片机资源丰富,最高速度可以达到16MIPS/S。
[*] 里程和速度的清零功能未能真正实现,它不能像国外的SIGMA那样清除指定的数据,而是全部清零重置,连总里程和时钟都清零了,所以这个设计也是非常的失败的,需要改进。
[*] 时钟不准,根据大部分使用者的反应,一个月快了差不多半小时。
[*] 某些国产表的轮径设置最小只能适应20*2.0cm的轮胎,也就是说折叠车基本用不上,这点也是需要改进的。
[*] 最后一点对于普通用户来说都是比较反感的,说明书以及液晶上的显示都是全英文的,而且液晶显示简单,说明书也只是一个小纸片而已,对自行车码表没点了解、没有点钻研精神还不一定能搞清里面的功能和用法。
再次,对于外国的码表来说,观点主要有以下:
除了以上的第六个缺点以外,其它缺点基本都是不存在的,但是一个比较致命的要害是价格高,一般的消费群体买不起。就拿比较出名的德国品牌sigma,最便宜的到70多,但是功能实在单一。而功能强大,性能又好的则贵至好几百元,上千元不等,型号很多,价格范围波动也很大。
最后,总结出不管是国内还是国外码表,都存在以下缺点:
[*] 显示都是英文,对于一般的用户使用比较的不方便,而且安装较麻烦,初始化设置十分的繁琐。
[*] 功能单一,一般便宜的码表,往往只具备速度的记录,行车总里程,行车总时间的记录等等,并且通过液晶查看,不能有效的统一历史数据,或者只能查阅近几天的历史数据。
实现该系统所需要的知识如下:
单片机C语言编程;IIC,单总线等串行总线编程;模块化程序设计;霍尔传感器原理及实现方法;液晶显示编程;打印机实现原理;protel画原理图以及画PCB等。
核心元件,单片机,这里选择ATMEL公司的8位中高端单片机Atmega64,选择它的理由主要有以下几点:
[*] 在存储方面,使用的是ATMEL公司的AT24LC64 EEPROM存储器,该存储器走的是IIC(ATMEL公司开发的两线串行总线)总线模式,虽然可以用一般的单片机模拟IIC总线,但是为了提高效率则必须选择具有IIC总线接口的单片机,这个一般的51单片机已经不能满足,所以需考虑其它单片机。
[*] 打印机模块,有下面的打印机实现原理(图4.5)可知,我们必须选择具有双边沿触发的单片机,有这个功能的单片机ATMEL的AVR系列的中高端单片机能满足,比如Atmega64及以上的单片机都具有这一功能。
[*] 霍尔传感器,霍尔传感器测速必须具有两个内置外设,一个是外部下降沿中断,一个是内部定时器,Atmega64也能很好的满足。
[*] 内存空间要求:在做用户界面以及制作贪吃蛇等游戏时都必须开很大的缓存,所以必须具备一定的内存容量,初步估计需要2K内存以上,而Atmega64拥有4K内存,能够完全满足。
[*] 更重要的是,这款单片机价格便宜,只要20余元便能购置一片,所以选择这个单片机时比较合适的。
下面将从硬件系统,软件系统,各个模块的实现原理,软硬件调试这几个方面来详细的讲述这一个系统。
2. 系统框架
2.1 系统框架结构图
系统框架结构图如图2.1所示
图2.1 系统框架图
2.1.2 主控板
如上图2.1所示,主控板为系统核心,主要包含单片机ATmega64(ATEML公司8位中高端单片机)以及,各个模块接口。
2.1.3 打印机
如上图2.1所示,打印机模块需要一个驱动板以及一个打印机模块,打印机为EPSON公司的M-150II微型打点打印机,一行可以打96个点。
2.1.4 存储模块
如上图2.1所示,存储模块用的是ATMEL公司的AT24LC64 EEPROM(电可擦除编写存储器)存储器,大小一共是8千字节。
2.1.5 温度传感器
如上图2.1所示,温度传感器用的达拉斯公司的DS18B20单总线数字温度传感器,支持多个挂同一条总线,且测试温度较准。
2.1.6 霍尔传感器
如上图2.1所示,霍尔传感器使用的是A3144先行霍尔元件,在下面的第三章,硬件设计中将看到对霍尔传感器的改良。
2.1.7 液晶显示器
如上图2.1所示,液晶显示器使用的STN7920控制器的12864液晶显示器,该液晶宽128个点,高64个点,故名12864,并且自带中文字库,可显示区域大。
2.2 解决的主要内容
[*] 如何利用好强大的MEGA64单片机资源而不浪费,以及充分理解该单片机相关的控制单元内在的物理逻辑,由此才能深入的理解单片机的运行以及启动过程,并发现问题时能得到及时解决。
[*] 行车记录仪的硬件设计— 记录仪总共涉及到温度,时间,电源,液晶,打印机等多个模块组成,在设计硬件时需要充分考虑到各种干扰,美观度等因素。
[*] 多层菜单设计— 多层菜单是一个比较复杂的逻辑,如果设计不好会导致整个工程的混乱,使代码变得难于理解,甚至不能继续接下去的工作,所以多层菜单设计需要一个较好的算法来实现它。
[*] 各种总线协议驱动— 单片机内置IIC,SPI等总线协议,在温度获取,flash存储中等都需要用到这些总线,所以这些总线协议的驱动也是比较关键的。
[*] 打印机驱动电路— 在本设计中,用到了EPSON的M-150II打印机,其工作电流大,需要专门的硬件驱动电路,在设计这一块电路时,必须做好和主控板(记录仪)的接口,以方便用户进行数据导出和统计。
2.3 实现的主要功能
[*] 显示实时速度和平均速度
[*] 显示总里程和单次行车里程
[*] 显示时间和温度
[*] 节电保护
[*] 行车信息存储
[*] 用户菜单UI界面
[*] 时间修改
[*] 轮径设置,里程设置,等一些参数的设置
[*] 打印行车记录统计信息
[*] 贪吃蛇小游戏
3. 硬件系统设计
3.1 主控板
主控板主要包括:CPU,Atmega64;时钟芯片,DS1302;存储芯片,24LC64;JTAG在线仿真接口;中断独立按键模块;LED调试电路;12864液晶显示接口;DS18B20温度传感器接口;霍尔传感器接口;打印机驱动板接口。
对单片机的选择主要有以下要求:
[*] 在存储方面,使用的是ATMEL公司的AT24LC64 EEPROM存储器,该小存储器走的是IIC总线模式,虽然可以用一般的单片机模拟IIC总线,但是为了提高效率则必须选择具有IIC总线接口的单片机,这个一般的51单片机已经不能满足,所以需考虑其它单片机。
[*] 时钟模块,用的是达拉斯的DS1302芯片,只需普通的端口操作就能完成。
[*] 打印机模块,有下面的打印机实现原理可知,我们必须选择具有双边沿触发的单片机,有这个功能的单片机ATMEL的AVR系列的中高端单片机能满足,比如Atmega64及以上的单片机都具有这一功能。
[*] 霍尔传感器,霍尔传感器测速必须具有两个内置外设,一个是外部下降沿中断,一个是内部定时器。
[*] 内存空间要求:在做用户界面以及制作贪吃蛇等游戏时都必须开很大的缓存,所以必须具备一定的内存容量,初步估计需要2K内存以上。
由以上几点分析,这里我选择了ATMEL公司的AVR系列单片机Atmega64,该款单片机价格便宜,功能强大,能满足上面几点的全部要求。
结论:最终选择的单片机为ATMEL公司的Atmega64八位高性能单片机。
主控系统的核心如图3.1所示。
图3.1 核心板最小系统
3.2 霍尔传感器
霍尔传感器是实现行车记录仪最核心的部件,记录仪的核心记录参数(车速),便是由霍尔传感器实现的,所以在制作霍尔传感器时必须严格把关。
3.2.1霍尔传感器工作原理
霍尔传感器,顾名思义,利用的是霍尔效应。
霍尔效应的本质是:固体材料中的载流子在外加磁场中运动时,因为受到洛仑兹力的作用而使轨迹发生偏移,并在材料两侧产生电荷积累,形成垂直于电流方向的电场,最终使载流子受到的洛仑兹力与电场斥力相平衡,从而在两侧建立起一个稳定的电势差即霍尔电压。正交电场和电流强度与磁场强度的乘积之比就是霍尔系数。平行电场和电流强度之比就是电阻率。大量的研究揭示:参加材料导电过程的不仅有带负电的电子,还有带正电的空穴。
本记录仪中使用的霍尔元件A3144E正是利用这一效应而产生的。其实物结构图如图3.2所示
图3.2 霍尔元件结构图
霍尔元件工作原理:实物结构图如上图3.2所示,3脚为信号脚,1脚和2脚分别接电源和地。在没有经过磁场时,输出为高电平,当磁场渐渐变强时,则输出的电平会渐渐变低,当磁场周期性的出现时,在输出脚便会出现一个正弦波电压,霍尔元件信号输出如图3.3所示
图3.3 霍尔元件信号输出
3.2.2 霍尔传感器改良
如上图3.3所示在周期性磁场的作用下,霍尔元件,A3144E输出的是一个周期性的正弦波,而单片机能识别的只是1或0的高低电平,如果把这个信号直接接单片机则有很多缺点:
[*] 单片机无法识别该信号除了高电平和低电平时的电平
[*] 霍尔元件灵敏度低,只有在磁铁靠的很近的时候才有反应
针对以上缺点,需要对霍尔传感器进行改良,目的为了提高灵敏度和改善输出波形,改良的电路图如图3.4所示
图3.4 改良的霍尔传感器
工作原理:改良的霍尔传感器如上图3.4所示,在没有磁场的情况下,3144输出高电平,则运算放大器输出低电平,当经过磁场时,3144输出电平渐渐变低,当电平低于放大器负极时则放大器输出低电平,从而通过单片机采集这个低电平信号。
由以上工作原理可知,可以通过调节滑动变阻器R3,从而来调节触发电平。并且通过点亮灯LED1来指示信号的输出。
改良后的霍尔传感器信号输出波形如图3.5所示
图3.5 霍尔传感器输出信号
霍尔传感器信号输出如上图3.5可知,经过改良后的霍尔传感器能输出一个单片机能识别的方波,并且可以通过调节滑动变阻器R3来调节传感器的触发电平,同时通过指示灯LED1来指示信号的输出,最主要达到了增强信号的可处理性的目的。
3.3 打印机
打印机在打印的时候需要大电流提供,而单片机的IO管脚最多只能提供20mA的电流,所以打印机在打印之前需要有额外的驱动电路来提供打印需要的电流。打印机实物接口如下图3.6所示
图3.6 打印机实物接口
其中的信号接口如图3.7所示
图 3.7 打印机信号接口
打印机电机驱动如下图 3.8所示,打印机主要信号包括,电机驱动信号:Motor(+),4个打印针驱动信号:(6,7,8,9)。
电机驱动电路如下图3.8所示
图3.8 打印机电机驱动
打印机电机驱动如上图3.8所示,信号由AVR_PRINT_ON脚输入,高电平驱动,当产生高电平时,通过三极管Q1驱动打印机打印。
打印针的驱动如下图3.9所示
图3.9 打印针驱动
AVR_PRINT_A为信号输入脚,低电平驱动,当该脚为低电平时,通过三极管Q3和Q4驱动打印针PRINT_A打印。
3.4 其它外围电路
除了以上涉及核心电路外,其它比如时间显示,数据存储,温度显示等,都分别需要不同的硬件模块提供支持。
3.4.1 时钟模块
这里时钟采用了达拉斯的DS1302时钟芯片,时钟模块电路图如图3.10所示
图3.10 DS1302时钟模块
该模块采用串行工作模式,通过SCLK(Signal Clock,信号时钟), I/O(Input And Output,输入输出信号),RST(Reset 复位信号)三线控制芯片工作。
3.4.2 数据储存模块
数据存储采用了ATMEL公司的24LC64 EEPROM(可编程电可擦除存储芯片),模块电路图如图3.11所示
图3.11 EEPROM存储电路
该模块采用的是标准的I2C总线模式,操作简单方便,总容量为64Kbit,8K字节,对于存储记录仪的参数是绰绰有余。
3.4.3 温度传感模块
温度传感器采用的是达拉斯的DS18B20,单总线模式,温度传感器模块电路图如图3.12所示
图 3.12 温度传感器模块
温度传感器模块如上图3.1所示,DS18B20采用的是单总线模式,该数字温度传感器最大的的特点是,只需一个IO管脚便可以控制其工作,并且该传感器传感温度精确,最小可以精确到0.0625℃。
3.4.4 独立按键模块
独立按键模块是提供用户来控制和使用UI界面,原理图如下图3.13所示
图3.13 独立按键电路
独立按键电路如上图3.13所示,每个按键按下时都会产生一个中断,在设计嵌入式软件时可以通过在按键中断内判断按键值,并且可以通过定时器去除抖动,这种软件设计可以避免软件延时去抖,从而提高了整套软件的运行效率。
4. 软件系统设计
本套软件主要实现自行车行车记录的智能控制,其实现的功能主要有以下几点:
[*] 显示平均行车速度,实时行车速度,时间和温度
[*] 记录行车速度、行车总里程、单次行车里程
[*] 记录总行车时间,单次行车时间
[*] 轮胎圆周设定,总里程初值设定
[*] 自动关机,节电保护
[*] 行车统计信息打印
[*] 贪吃蛇小游戏
[*] 时间显示和时间设置
4.1 软件总体框架
软件总体流程图如下图4.1所示
图4.1 嵌入式软件整体流程图
4.2 软件说明
该嵌入式软件设计的思想主要是模块化的程序设计思想,其中需要驱动的模块主要有以下几点:
[*] DS1302时钟模块驱动
[*] DS18B20数字温度传感器模块驱动
[*] 24LC64 EEPROM存储模块驱动
[*] 12864液晶显示模块驱动
[*] 霍尔传感器计速模块驱动
[*] EPSON M-150II微型打点打印机驱动
软件主要包含三层结构,分别为应用层,封装层以及驱动层。其软件层次结构如下图4.2所示
图 4.2 嵌入式软件层次结构
这种软件设计的好处是便于移植,当更换某一芯片时,只需要改变相应芯片的驱动层,而不用修改封装和应用层,便可以使软件继续正常运转。
而如果更换单片机这一核心元件,也只需更改所有的驱动层便可以把软件移植到其它单片机平台,在编写涉及到硬件的代码时,可以尽量使用宏定义或者编写多层结构,使底层硬件操作的代码达到最少,从而方便移植。
4.3 各个模块实现原理
4.3.1 处理器模块
首先在选择CPU(Central Processing Unit,计算机中央处理器)之前,必须先分析完成这个作品所选的CPU必须具备的功能,如果CPU选的功能太过简单就不能达到预期的效果,很多东西不能实现,而如果选择很先进的CPU或者32位的高级单片机,首先第一个是不能充分利用这个单片机,第二是在成本上也会大幅上升,所以在选择单片机时必须对所需要的功能进行合理的分析。
分析情况:
[*] 在显示方面使用的是12864液晶的带字库液晶,该液晶操作简单,只需普通的IO端口操作便可以解决控制,所以它对单片机没有特殊的要求。
[*] 在存储方面,使用的是ATMEL公司的AT24LC64 EEPROM存储器,该存储器走的是IIC(ATMEL公司开发的两线串行总线)总线模式,虽然可以用一般的单片机模拟IIC总线,但是为了提高效率则必须选择具有IIC总线接口的单片机,这个一般的51单片机已经不能满足,所以需考虑其它单片机。
[*] 时钟模块,用的是达拉斯的DS1302芯片,只需普通的端口操作就能完成。
[*] 打印机模块,有下面的打印机实现原理(图4.5)可知,我们必须选择具有双边沿触发的单片机,有这个功能的单片机ATMEL的AVR系列的中高端单片机能满足,比如Atmega64及以上的单片机都具有这一功能。
[*] 霍尔传感器,霍尔传感器测速必须具有两个内置外设,一个是外部下降沿中断,一个是内部定时器。
[*] 内存空间要求:在做用户界面以及制作贪吃蛇等游戏时都必须开很大的缓存,所以必须具备一定的内存容量,初步估计需要2K内存以上。
由以上6点分析,这里我选择了ATMEL公司的AVR系列单片机Atmega64,该款单片机价格便宜,功能强大,能满足上面7点的全部要求。其资源如下:
[*] 工作于16M时性能高达16MIPS,速度快
[*] 64K flash程序代码空间
[*] 4K 的内部SRAM,足够满足UI界面以及其他的缓存
[*] 内置IIC和SPI总线接口
[*] 8路外部中断,有4路能实现双边沿中断
[*] 3路定时急速器(2路8位,1路16位)
[*] 两个串行USART口
[*] 53个普通IO端口(大部分复用)
由以上八点可以看出,该款单片机完全能够满足这个产品需要的功能,并且Atmega64为基于RSIC结构的8位低功耗CMOS微处理器,降低功耗,是做行车记录仪的首选单片机。
结论:最终选择的单片机为ATMEL公司的Atmega64八位高性能单片机。
4.3.2 用户UI界面原理
在这个嵌入式软件中,最关键也是最富有挑战的便是用户界面,即菜单系统,如果只是用简单的switch,case语句,那在三层菜单的基础上,那将会是一个非常庞大的代码,并且可读性差,维护十分困难,当需要增加或则删减菜单时都是一件非常痛苦的事情。
通过各种资料的搜索与整理,并且通过自己的改良,用了一种基于节点编号的方法实现了这个菜单系统。
首先、菜单是有层次的,并且每一层菜单都有不同的不同的条数,比如第一层菜单有四条,第一层菜单第一条的子菜单都3条,而第一层菜单第二条的子菜单有2条。
加入以个十百来标识菜单所在的层次,以每一位的大小来标识当前菜单再当前层次的条数,则可以推断出每条菜单都有一个唯一的ID,我们称之为节点。
基于节点编号的菜单系统的结构如下图4.3所示
图4.3 基于节点编号的菜单系统结构
结构分析:菜单系统结构图如上图4.3所示,可见很明显,菜单为3层菜单结构,第一层总共有两条菜单,其编号分别是1和2,在例如在第三层中节点编号为133的菜单,由该节点知,该条菜单再当前层次的第三条,并且位于上层菜单的第三条,位于上上层菜单(即一级菜单)的第一条。其它菜单的结构和这个一样。
由以上分析可知,菜单的结构很明显的构成了一个标准的二叉树,并且其父子节点有很明显的算术关系,其关系如下。
父节点 = 当前节点%10;(%操作为求余操作)
子节点 = 当前节点*10 + 1;
如果没有父节点或者子节点,则分别把这两个节点设置成空节点。
有了这个方法,要实现一个菜单系统便是一个很简单的事情了,这套菜单系统还能实现翻页等复杂操作,并且增加或删除节点十分方便I,只需修改相应节点的编号就可以实现。
菜单与实时显示界面的分离:在这套菜单系统中,用户可以通过按返回键激活菜单或者通过返回键返回实时界面,其实现原理也非常简单,只需设置一个标志位来标识是否激活菜单,从而达到实时界面与菜单的分离。
4.3.3 测速实现原理
测速的核心部件是霍尔元件,利用霍尔元件,再进行一些改良,如上硬件设计中提到的图3.4所示。从而使传感器在周期性的磁场作用下产生一个固定周期的方波。
那么,如何利用输出的一个方波来实现测速的目的呢?这里利用了单片机的两个内置外设:
[*] 外部IO中断
[*] 8位定时器T2
当出现方波的下降沿时,单片机可以利用外部中断采集到这个下降沿,并跳转到中断服务入口,在中断服务中可以通过打开定时器来实现记录每个方波或者一定方波个数n的时间t。
这里假设轮胎的圆周长是len厘米。则由以上数据可知如下公式。
速度 V = n*len/t (cm/s),其中len的单位为厘米,t的单位为秒。
4.3.4 微型打印机原理
在这里使用的打印机是EPSON公司的M-150II微型打点打印机,其总共包含4个打印针,每个打印针分别可以打印24个点,其在打印纸上的分布点如下图4.4所示
图4.4 打印机点在打印纸上的分布
由以上硬件设计中的图3.7所示知,控制打印机运转的主要有4种信号:
[*] 复位控制信号Reset Decetor
[*] 时序控制信号 Timing Decteor
[*] 电机运转控制信号 Motor
[*] 四个打印针控制信号 Print Solenoid
打印机点在打印纸上的分布如上图4.4所示,当打印机从左往右运动时,分别产生96个Timing Dector信号,单片机以这个信号为基准进行打点控制,每一个信号分别控制一个点,总共96个信号对应96个点,打打印完一行后,打印机需通过点击回到起始原点,当回到原点时,打印机通过Reset Decotor信号输出低电平开始新的一行的打印。
而打印机在打印的时候,每个打印针电路上的瞬间电流都是很大的,所以必须要通过驱动电路实现,其驱动电路已经在上面硬件电路设计中的打印机模块讲明了。
Timing Dector信号如下图4.5所示
图4.5 打印机Timing Dector信号
如上图4.5所示,打印机输出的为正弦波信号,通过驱动电路把信号转换成方波,此时的波形频率为需要的波形频率的1/2,这里可以通过两种方法进行改良:一种是硬件进行分频,另一种是利用单片机的双边沿促发功能。
第一种方法比较麻烦,需要拖入较大硬件,而第二种方法只要所选的单片机具有双边沿促发功能便可以很好的解决问题。
而这里选用的Atmega64总共有8个外部中断,分别是INT0~INT7,庆幸的是,其中有4个具有双边沿促发功能,分别是INT4~INT7,这里选用的是INT6。
5. 软硬件系统调试
5.1 硬件调试
在完成硬件PCB的加工之后,首先第一步便是进行硬件焊接以及调试,在调试过程中碰到过许多问题,并且经过分析和实践意义解决,接下去分析在硬件调试过程中碰到的各类问题与解决方法。
遇到的问题:
[*] 主控板电源,电流不够,当初设计的时候主要是为了降压在主控板的电源之后加了一个二极管来限制电压,结果是焊接了一个IN4148的小电流二极管,导致液晶很暗,并且不能调处液晶对比度,电源模块的电路图如图5.1所示
图5.1 主控板电源模块
解决方法是,使用大电流的二极管,SS26,很好的解决了这一问题。
[*] 霍尔传感器,感应灵敏度太低,在设计电路的时候以为霍尔元件在周期性磁场的作用下能直接输出单片机能接收的方波,但是实际测试并非如此,单用霍尔元件直接接单片机,灵敏度很低,要固定也不方便,原设计图霍尔传感器接口如图5.2所示
图5.2 霍尔元件接口
解决方法是,使用运算放大器对信号进行放大,并使用滑动变阻器来调节灵敏度,使之变成一个灵敏度可调的并输出方波的可调霍尔传感器,改良的电路如上硬件设计中的图3.4所示。
[*] 打印机子控板,布线太细,打印机的打印针在打印的瞬间,以及打印机的点击在运转的时候都是需要提供大电流的,能达到几百mA,瞬间甚至几个安培,而在布线的时候,打印针的地方只用了2.54mm的细线,在实际使用的时候只能打印16x16的大字,当打印压缩的字体时便变成很模糊的字,主要原因是打印针电流小,力度不够。
解决方法:手动焊接万用板来达到打印的效果,在使用万用板的时候也出现部分不能打印的结果,结果只是三极管坏掉,也得到了很好的解决。
5.2 软件调试
在上面的硬件调试完毕之后,其实已经完成了一些基本的驱动,打印机驱动,液晶驱动,霍尔元件驱动都已经完成,在软件上的主要难题主要有:
[*] DS18B20时序---作为单总线温度传感器,DS18B20是达拉斯的单总线结构数字温度传感器,由于其是单总线结构,所以在时序的控制上要求非常严格,在做这个驱动时碰到过许多问题,主要是时序很难控制,最后通过JTAG硬件仿真调试,解决了这一难题。
[*] 用户UI界面,以前从来没坐过多级的菜单,并且菜单层次多,条数多,如果用简单的switch,case语句来实现的话,那将会是一个非常庞大的代码,不仅编写困难,而且不易维护,增减麻烦。所以为了做好这一块,在网上搜索了大量的资料,最后使用的是基于节点编号的方法,并进行了一些改良,这种方法的结构图如上图软件设计中的图4.3所示
6. 欲求目标
6.1 要求达到的目标
要实现的功能主要如下:
[*] 显示实时速度和平均速度
[*] 显示总里程和单次行车里程
[*] 显示时间和温度
[*] 节电保护
[*] 行车信息存储
[*] 用户菜单UI界面
[*] 时间修改
[*] 轮径设置,里程设置,等一些参数的设置
[*] 打印行车记录统计信息
[*] 贪吃蛇小游戏
6.2 产品优缺点
优点:该产品的最大优点是显示实时速度和里程精确,误差小,并且可调节度大,能适应轮胎圆周10—250cm的自行车,使用用户UI界面,并且显示的全是浅显易懂的中文,显示更加人性化和方便,传感器灵敏度高,并且还具有打印功能,便于用户管理行车信息。
缺点:本产品的最大缺点是成本高,打印机以及液晶都是比较昂贵的,这点需要改进。另一个缺点便是没有包装,只是达到了实验级的产品,没有达到产品级别,这点在量产产品之后可以进行改良。 谢谢分享!:D
页:
[1]