DIY编程器网

标题: 基于AVR单片机的自行车行车记录仪,软硬件协同 [打印本页]

作者: admin    时间: 2015-4-29 08:07
标题: 基于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. 引言
          自行车行车记录仪(以下简称码表)在国内外已经有了广泛的应用,但是不管是国外的还是国产的码表都存在着很多缺点。
           
          首先,对于国产码表来说,缺点主要有:
           
           
          再次,对于外国的码表来说,观点主要有以下:
          除了以上的第六个缺点以外,其它缺点基本都是不存在的,但是一个比较致命的要害是价格高,一般的消费群体买不起。就拿比较出名的德国品牌sigma,最便宜的到70多,但是功能实在单一。而功能强大,性能又好的则贵至好几百元,上千元不等,型号很多,价格范围波动也很大。
           
          最后,总结出不管是国内还是国外码表,都存在以下缺点:
        实现该系统所需要的知识如下:
          单片机C语言编程;IIC,单总线等串行总线编程;模块化程序设计;霍尔传感器原理及实现方法;液晶显示编程;打印机实现原理;protel画原理图以及画PCB等。
           
          核心元件,单片机,这里选择ATMEL公司的8位中高端单片机Atmega64,选择它的理由主要有以下几点:
          下面将从硬件系统,软件系统,各个模块的实现原理,软硬件调试这几个方面来详细的讲述这一个系统。
           
          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 解决的主要内容   
           
          2.3 实现的主要功能
        3. 硬件系统设计
          3.1 主控板
          主控板主要包括:CPU,Atmega64;时钟芯片,DS1302;存储芯片,24LC64;JTAG在线仿真接口;中断独立按键模块;LED调试电路;12864液晶显示接口;DS18B20温度传感器接口;霍尔传感器接口;打印机驱动板接口。
           
          对单片机的选择主要有以下要求:
           
          由以上几点分析,这里我选择了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 软件说明
          该嵌入式软件设计的思想主要是模块化的程序设计思想,其中需要驱动的模块主要有以下几点:

           
          软件主要包含三层结构,分别为应用层,封装层以及驱动层。其软件层次结构如下图4.2所示
       

        图 4.2 嵌入式软件层次结构

           
          这种软件设计的好处是便于移植,当更换某一芯片时,只需要改变相应芯片的驱动层,而不用修改封装和应用层,便可以使软件继续正常运转。
           
          而如果更换单片机这一核心元件,也只需更改所有的驱动层便可以把软件移植到其它单片机平台,在编写涉及到硬件的代码时,可以尽量使用宏定义或者编写多层结构,使底层硬件操作的代码达到最少,从而方便移植。
           
          4.3 各个模块实现原理
          4.3.1 处理器模块
          首先在选择CPU(Central Processing Unit,计算机中央处理器)之前,必须先分析完成这个作品所选的CPU必须具备的功能,如果CPU选的功能太过简单就不能达到预期的效果,很多东西不能实现,而如果选择很先进的CPU或者32位的高级单片机,首先第一个是不能充分利用这个单片机,第二是在成本上也会大幅上升,所以在选择单片机时必须对所需要的功能进行合理的分析。
           
          分析情况:
           
          由以上6点分析,这里我选择了ATMEL公司的AVR系列单片机Atmega64,该款单片机价格便宜,功能强大,能满足上面7点的全部要求。其资源如下:
          由以上八点可以看出,该款单片机完全能够满足这个产品需要的功能,并且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所示。从而使传感器在周期性的磁场作用下产生一个固定周期的方波。
           
          那么,如何利用输出的一个方波来实现测速的目的呢?这里利用了单片机的两个内置外设:

          当出现方波的下降沿时,单片机可以利用外部中断采集到这个下降沿,并跳转到中断服务入口,在中断服务中可以通过打开定时器来实现记录每个方波或者一定方波个数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种信号:

          打印机点在打印纸上的分布如上图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的加工之后,首先第一步便是进行硬件焊接以及调试,在调试过程中碰到过许多问题,并且经过分析和实践意义解决,接下去分析在硬件调试过程中碰到的各类问题与解决方法。
           
          遇到的问题:
       

        图5.1 主控板电源模块

           
              解决方法是,使用大电流的二极管,SS26,很好的解决了这一问题。
           
       

        图5.2 霍尔元件接口

           
          解决方法是,使用运算放大器对信号进行放大,并使用滑动变阻器来调节灵敏度,使之变成一个灵敏度可调的并输出方波的可调霍尔传感器,改良的电路如上硬件设计中的图3.4所示。
           
          解决方法:手动焊接万用板来达到打印的效果,在使用万用板的时候也出现部分不能打印的结果,结果只是三极管坏掉,也得到了很好的解决。
           
          5.2 软件调试
          在上面的硬件调试完毕之后,其实已经完成了一些基本的驱动,打印机驱动,液晶驱动,霍尔元件驱动都已经完成,在软件上的主要难题主要有:
           
           
          6. 欲求目标
          6.1 要求达到的目标
          要实现的功能主要如下:
           
          6.2 产品优缺点
          优点:该产品的最大优点是显示实时速度和里程精确,误差小,并且可调节度大,能适应轮胎圆周10—250cm的自行车,使用用户UI界面,并且显示的全是浅显易懂的中文,显示更加人性化和方便,传感器灵敏度高,并且还具有打印功能,便于用户管理行车信息。
           
          缺点:本产品的最大缺点是成本高,打印机以及液晶都是比较昂贵的,这点需要改进。另一个缺点便是没有包装,只是达到了实验级的产品,没有达到产品级别,这点在量产产品之后可以进行改良。
作者: 李小路    时间: 2020-10-2 11:21
谢谢分享!




欢迎光临 DIY编程器网 (http://diybcq.com/) Powered by Discuz! X3.2