毕业论文-数字寻北仪_第1页
毕业论文-数字寻北仪_第2页
毕业论文-数字寻北仪_第3页
毕业论文-数字寻北仪_第4页
毕业论文-数字寻北仪_第5页
已阅读5页,还剩37页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

目录1引言 12概述 22.1数字寻北仪系统概况 22.2本设计方案思路 22.3研发方向和技术关键 22.4主要技术指标 33方案选择与论证 43.1处理器选择 43.2磁电传感器模块 53.3ADC模块 53.4步进电机模块 63.5步进电机驱动模块 63.6温度传感器与时钟芯片模块 63.7显示模块 63.8供电模块 73.9最終方案和系统原理框图 74硬件设计 84.1微控制器模块的设计 84.1.1概述 84.1.2ATmega16单片机简介 84.2磁阻传感器模块的设计 94.2.1磁阻传感器HMC1052 94.2.2HMC1052的放大电路 104.2.3HMC1052的设置/复位电路 104.3ADC模块的设计 114.3.1ATmega16内部AD简介 114.3.2ADC外围电路设计 114.4电机与驱动模块 124.4.1步进电机 124.4.2步进电机细分驱动器TA8435 134.5温度传感模块 154.5.1温度传感器DS18B20简介 154.5.2DS18B20工作原理 154.6时钟模块 174.6.1时钟接口概述 174.6.2DS1302简介 174.7键盘接口电路设计 194.8显示模块 194.8.1液晶显示器简介 194.8.2液晶显示器使用说明 204.9电源模块 224.10硬件电路的布线与焊接 225软件设计 235.1主程序流程图 235.2寻北子程序流程图 245.3日历程序流程图 255.4温度测量程序流程图 265.5液晶显示流程图 276制作与调试 286.1硬件电路的布线与焊接 286.1.1总体特点 286.1.2电路划分 286.1.3焊接 286.2调试 287结论 29参考文献 31附录 321引言近年来,寻北仪在军事和民用方面得到了广泛的应用,引起了业内人士的极大关注。寻北仪能在静止状态下快速地测量出载体纵轴与地理真北的夹角,即初始方位角,它不仅广泛应用于火炮、坦克、汽车等载体中,而且还能为隧道、矿山等地下作业提供方位基准。目前,寻北技术可以分为两类:惯性寻北技术和磁电寻北技术。惯性寻北常用陀罗仪作为传感器,而磁电寻北技术主要使用磁电式传感器。惯性寻北技术是惯性技术领域的重要组成部分,是现代信息化战争中确保武器系统快速、机动、精确打击的重要保障技术之一。因此,国际上众多发达国家均在发展高性能战略、战术武器的同时,也投入大量人力、物力研制开发高精度、快速寻北系统。无论气浮、液浮、光纤、还是磁悬浮陀螺寻北仪,都可全天候可靠地工作,不受外部环境如地球磁场、地形、气候的影响;都可在没有任何外部方位信息情况下实现自主寻北功能,测出当地地理北向。磁电寻北技术是依靠地磁场的分布来确定方位的,相比之下磁电式寻北仪精度不如惯性寻北仪高,但磁电式传感器具有体积小、功耗低、易于安装,且温度特性好、实时性和抗干扰能力强、误差不随时间积累等特点,因此在车辆航位推算系统中采用磁电式传感器具有较高的性价比。惯性寻北仪虽然寻北精度高,但价格昂贵、体积大、对环境要求高(如要求载体静止、无振动)、且误差随时间积累,因此不适合于要求低成本的车辆导航。进入2l世纪后,寻北仪在军事上的需求越来越迫切,在隧道施工、矿山开采、大地测量、资源勘测等民用工程中也越来越显示出广阔的应用前景。而随着光学等固体陀螺的问世和技术上的日益完善,快速反应,高精度要求,恶劣环境中的可靠性工作的新型寻北仪已经相继问世,尤其与GPS等高技术相融合的寻北仪将会进一步地改善寻北仪的性能。本次设计的数字寻北仪是基于磁阻传感器HMC1052的磁电式寻北仪,具有自动寻北功能,通过步进电机旋转来指示磁北方向,并能够显示步进电机转过的角度,寻北时间短,寻北精度较高(<1°),体积小等特点,因此具有较高的性价比。2概述2.1数字寻北仪系统概况数字寻北仪是一种重要的导航工具,已广泛应用于航空、航海、机器人和车辆导航等领域。一般在飞机和航海导航系统中使用的惯性导航系统,由于价格昂贵、结构复杂、导航误差随时间累计等原因而不适合车载使用;传统定位装置如罗盘,虽然价格便宜,但不能工作于像行驶的汽车这种不稳定的环境中。另外,传统罗盘不能够电子输出,其信号不能集成到汽车的控制系统中,给实现基于精确导航的智能交通带来了不便。当今,GPS(GlobePositioningSystem)全球定位系统已日趋成熟,作为一种全新的导航方式在军用与民用领域都发挥着巨大作用。但是GPS也有其局限性,如存在定位死区,有累计误差,对静止物体无法直接定向等。同时相对于GPS,具有还具有结构简单,成本低,可靠性高等优点。所以即便在GPS越来越普与的今天,数字寻北仪仍然在诸多领域有着广泛的应用。2.2本设计方案思路本系统利用磁阻传感器指向磁北时其阻值为极值的特性设计一数字寻北仪器,具体为将磁阻传感器固定在步进电机转盘上,一边旋转电机一边测量阻值,直到阻值最大为止,传感器指向磁北。磁阻传感器是测量地磁场的强度,并将磁场信号转换成电信号,然后通过ADC将模拟信号转换成数字信号,再将数据传到单片机进行运算处理,从而控制步进电机的转动。液晶显示器用来显示步进电机旋转的角度。为了使本设计更加完美,系统又扩展了两个功能:显示日期和温度。2.3研发方向和技术关键磁阻传感器信号前端放大处理。ADC的信号采集。逼近算法的设计。(4)主控模块与电机控制模块的隔离,避免电机运转对主控制电路产生干扰而造成误动作。(5)步进电机细分驱动,确保能够提供电机工作所需的电流,同时实现细分控制。(6)磁阻传感器抗干扰设计。地磁场强度很微弱,约为0.5~0. 6gauss,因此系统很容易受到外界环境干扰,步进电机的存在对系统的干扰很大,所以,如何做好步进电机的磁场屏蔽也成为该系统的一大难题。2.4主要技术指标(1)+5V供电,电流小于1A。(2)角度测量精度为1°。(3)响应时间<2s。(4)测量和显示步进电机旋转时的角度。(5)显示时间,日期,星期。(6)具有校时功能。(7)显示温度。(8)能够指示设置的任意方位。(9)能够测量方位角。

3方案选择与论证数字寻北仪系统结构的组成框图如下图3-1。该系统由处理器模块、A/D采样模块、磁阻传感器模块、电机与驱动模块、键盘、温度传感器、显示模块与电源模块组成。为更好地实现各模块的功能,我们分别对各模块的设计方案并分别进行了论证。电机及驱动A/D采样磁电传感器电机及驱动A/D采样磁电传感器时钟芯片温度传感器时钟芯片温度传感器微处理器键盘显示电源键盘显示电源图3-1数字寻北仪系统总框图3.1处理器选择方案一:采用可编程逻辑器件CPLD作为控制器。CPLD可以实现各种复杂的逻辑功能、规模大、密度高、体积小、稳定性高、IO资源丰富、易于进行功能扩展。采用并行的输入输出方式,提高了系统的处理速度,适合作为大规模控制系统的控制核心。方案二:采用Atmel公司的ATmaga16单片机作为主控制器。ATmaga16是一款高性能、低功耗的8位AVR微处理器,片内含16k空间的可反复擦些10,000次的Flash只读存储器,具有1Kbytes的随机存取数据存储器(RAM),32个IO口,两个具有独立预分频器和比较器功能的8位定时器/计数器,一个具有预分频器、比较功能和捕捉功能的16位定时器/计数器,四通道PWM,内置8路10位ADC。maga系列的单片机更容易编写PWM且maga系列的单片机可以在线编程、调试,方便地实现程序的下载与整机的调试。本系统不需要复杂的逻辑功能,对数据的处理速度的要求也不是非常高,ATmega16的I/O口、定时器/计数、中断逻辑以与ADC等资源足以满足设计要求,且单片机价格较CPLD要低得多,故最终确定选择ATmega16作为系统的主控制器。3.2磁电传感器模块方案一:采用磁通门传感器。磁通门传感器分辨率可达几十个微高斯,提供了一种低成本的磁场探测方法,但缺点是体积偏大、易碎、响应速度较慢。方案二:采用霍尔传感器。霍尔器件成本低廉、体积较小、测量磁场范围宽,但是精度,线性度较差,响应时间较慢,温度漂移较大。方案三:采用磁阻传感器。磁电阻传感器具有体积小、灵敏度高、可靠性高、可作为集成电路生产、易在电路板上安装等优点。此外磁阻传感器功耗极低,因此非常适合电子指南针、数字寻北仪等磁定位系统。综合以上几点,本设计最终选定方案三,选用磁阻传感器HMC1052作为系统的磁电传感器。3.3ADC模块方案一:采用专用的ADC芯片。常见的ADC有ADC0809,TLC1549等。专用ADC芯片具有转换精度高,转换时间快,非线性误差小等优点;缺点是功耗较大,价格贵,且占用单片机口线多,从而也造成布线困难。方案二:使用ATmega16内部ADC。ATmega16有一个10位的逐次逼近型ADC。非线性误差0.5LSB,绝对精度±2LSB,转换时间65-260us,最高采样率为15KSPS。ADC集成于单片机内部,因此不占用单片机口线且价格便宜。本系统要求角度测量精度为1°,我们知道,地球表面某点磁场强度随水平角度的变化而变化,且构成了正弦波形,即地磁场在某点从磁北到磁南,场强由大到到小,遵循余弦变化趋势。并且可知波形的变化率在峰值时最小,因此要保证测量精度<=1°,则要求ADC的最小分辨率<=A(cos0°-cos1°),(A为磁阻传感器输出信号经放大后的振幅),假如A=1V,则要求ADC的最小分辨率为3.84mV,再考虑到A/D转换器误差和线性度误差,ADC的最小分辨率应为LSB/2=1.92mV。 ATmega16内部ADC的最小分辨率为2.56V/1024=2.5mV>1.92mV,因此实时采样并不能满足系统的要求,但可以通过过采样算法来弥补ADC分辨率的不足,即牺牲采样率来换取ADC的位数。假如将ADC的位数扩展到11位,此时ADC的LSB变为2.56V/2048=1.25mV<1.92mV,但此时ADC的最大采样率减为15KSPS/4=3.75KSPS,幸好本系统对ADC的采样率不高,因此,方案二完全可行。3.4步进电机模块步进电机的选择需同时满足步进角与转速的要求。本设计要求系统响应时间<2s,即要求电机在2s内至少转过180°,转速>=0.5r/2s=0.25r/s=15r/min,即要求步进电机的转速>15r/min。此外,系统要求角度测量精度为1°,因此要求步进电机的步进角<=0.5°。但市场上步进角小于0.5°的步进机很不常见,而且价格昂贵,体积较大。考虑到以上两方面的因素,最终选用一款EPSON公司生产的步进机,8欧姆,最大转速1200r/min,步进角1.8°,然后经过细分驱动器将步进角1/4细分为0.45°。3.5步进电机驱动模块方案一:采用由达林顿管组成的H型PWM电路。PWM电路由四个大功率晶体管组成H桥电路构成,四个晶体管分为两组,交替导通和截止,用单片机控制达林顿管使之工作在开关状态,调整输入控制脉冲的占空比,便可调整电机转速。这种电路由于管子只工作在饱和和截止状态,效率非常高。H型电路使实现转速和方向的控制简单化,且电子开关的速度很快,稳定性也很强。缺点是不具有步进细分功能。方案二:采用专用集成芯片TA8435和少量的外围元件组成电机的驱动电路。TA8435是一个细分二相步进电机驱动专用芯片,该芯片具有输出电流大、控制简单、占用单片机口线少、价格便宜等优点,同时还具有整步、半步、1/4细分、1/8细分运行方式可供选择。因为本设计要求将步进角细分为小于0.5°,故选择方案二。3.6温度传感器与时钟芯片模块作为拓展功能,本系统增加了显示年、月、日,时、分、秒,星期以与温度等功能,并具有校时的功能。本设计使用较常用的温度传感器DS18B20来测量外界温度,使用时钟芯片DS1302来简化系统软件。3.7显示模块方案一:使用多个数码管显示。LED数码管是利用二极管发光显示数字和字母,具有亮度大、接口设计比较容易,价格相对较便宜等优点。但是由于它工作电流较大、不能显示字符,显示的信息量有限。方案二:采用液晶显示。液晶特别是具有字符显示功能的液晶显示器,来实现显示功能,不仅可以实现基本的显示信息,而且可以显示丰富的符号指示信息,信息量丰富且直观易懂。而且液晶显示有功耗低,体积小。综上考虑,本设计采用方案二,使用LCD1602来显示。3.8供电模块方案一:采用两个电源供电。将电动机驱动电源与单片机以与其周边电路电源完全隔离。这样做可以将电动机驱动所造成的干扰彻底消除,提高了系统的稳定性。方案二:采用单一电源供电。通过光耦将电机驱动电路与单片机与周边电路隔离;但假如使用该方案,则用到光耦较多,电路相对复杂,而且成本较高。考虑以上两方面因素,本设计选用方案一。3.9最終方案和系统原理框图经过方案论证的过程之后,我们选定了仅采用单片机作为核心部件的方案,其系统总方框图如图所示。液晶显示液晶显示内部A/D内部A/D单片机(Atmage16)磁阻传感器键盘磁阻传感器键盘温度传感器时钟芯片温度传感器时钟芯片步进电机细分驱动器电源步进电机细分驱动器电源图3-2系统原理框图选用ATmega16作为主控制器。选用磁阻传感器HMC1052测量磁场强弱。采用ATmega16内部ADC采集磁电信号。使用EPSON步进电机指示磁北方向。采用专用芯片TA8435驱动步进电机,并实现步进角细分。采用双电源为系统供电,使用LM7805作为稳压芯片。使用LCD1602显示时间、温度以与电机转过角度。(8)使用DS18B20测量温度。(9)用时钟芯片DS1302来设计万年历。

4硬件设计4.1微控制器模块的设计4.1.1概述单片机是本次毕业设计中控制模块的核心芯片,可以说单片机系统就是整个系统的控制核心。而本次毕业设计所采用的单片机是AVR单片机系列中的ATmega16。4.1.2ATmega16单片机简介ATmega16是基于增强的AVRRISC结构的低功耗8位CMOS微控制器。由于其先进的指令集以与单时钟周期指令执行时间,ATmega16的数据吞吐率高达1MIPS/MHz,从而可以缓减系统在功耗和处理速度之间的矛盾。AVR内核具有丰富的指令集和32个通用工作寄存器。所有的寄存器都直接与算逻单元(ALU)相连接,使得一条指令可以在一个时钟周期内同时访问两个独立的寄存器。这种结构大大提高了代码效率,并且具有比普通的CISC微控制器最高至10倍的数据吞吐率。ATmega16有如下特点:16K字节的系统内可编程Flash,512字节EEPROM,1K字节SRAM,32个通用I/O口线,32个通用工作寄存器,用于边界扫描的JTAG接口,支持片内调试与编程,三个具有比较模式的灵活的定时器/计数器,片内/外中断,可编程串行USART,有起始条件检测器的通用串行接口,8路10位具有可选差分输入级可编程增益的ADC,具有片内振荡器的可编程看门狗定时器,一个SPI串行端口,以与六个可以通过软件进行选择的省电模式。工作于空闲模式时CPU停止工作,而USART、两线接口、A/D转换器、SRAM、T/C、SPI端口以与中断系统继续工作;掉电模式时晶体振荡器停止振荡,所有功能除了中断和硬件复位之外都停止工作;在省电模式下,异步定时器继续运行,允许用户保持一个时间基准,而其余功能模块处于休眠状态;ADC噪声抑制模式时终止CPU和除了异步定时器与ADC以外所有I/O模块的工作,以降低ADC转换时的开关噪声;Standby模式下只有晶体或谐振振荡器运行,其余功能模块处于休眠状态,使得器件只消耗极少的电流,同时具有快速启动能力;扩展Standby模式下则允许振荡器和异步定时器继续工作。ATmega16片内ISPFlash允许程序存储器通过ISP串行接口,或者通用编程器进行编程,也可以通过运行于AVR内核之中的引导程序进行编程。ATmega16引脚图如图4-1所示。图4-1ATmega16引脚图4.2磁阻传感器模块的设计4.2.1磁阻传感器HMC1052HMCI052是一个双轴线性磁传感器,有两个由磁阻薄膜合金组成的惠斯通桥。当桥路加上供电电压,传感器将磁场强度转化为电压输出,包括环境磁场和测量磁场。HMC1052包含两个敏感元件,它们的敏感轴互相垂直。敏感元件A和B,共存于单硅芯片中,完全正交,且参数匹配。HMC1052的尺寸小,低工作电压,而且消除了两个敏感元件引起的非正交误差。除了惠斯通电桥,HMCI052有两个位于芯片上的磁耦合带;偏置带和置位/复位带。敏感元件A和B,都有这两个带。置位/复位带,用于确保精度。偏置带,用于校正传感器,或偏置任何不想要的磁场。HMC1052管脚图如图4-2-1所示。图4-2-1HMC1052引脚图4.2.2HMC1052的放大电路传感器电桥的输出电压,通过差分放大使信号放大约1000倍,并使输出电压偏置在1.25V。在本设计中,运算放大器选用LMV358。LMV358可以由其他具有与低电压相容、低成本、小体积与耗电适中等特点的类似的运算放大器所替代。由图4-2-2可知,(4.1)运算放大器级LMV358被电阻元件R1、R2、R3与R4环绕。这些电阻通过使用1千欧的输入电阻和1兆欧的电阻来设置1000倍的放大比(1M/1k=1000)。通过选择四至十倍于电桥元件电阻的输入电阻,这些电桥得以承受最小的负载,并使由运算放大器级产生的偏差误差减至最小。为获得最佳的噪音抑制和最小的偏差,这些电阻的允差只能有公差范围的1%。电容器C1根据反馈电阻的值和所要求的电路测量带宽来选择。在本设计中,只选择了150pF,以满足刚好超过1kHz带宽的测量要求。该1kHz带宽足够小,可以防止EMI/RFI的放大,但是又足够快,可以在1秒钟的时间内进行许多测量。图4-2-2HMC1052放大电路4.2.3HMC1052的设置/复位电路由于磁阻传感器在制造过程中选定薄膜长度的方向为轴,当玻莫合金薄膜在受到外部强磁场干扰时(大于20G),薄膜磁化极性会受到破坏,传感器特性也会改变。HMC1052使这个问题得以解决,该芯片上有两个阻值为4欧姆(典型值)置位/复位电流带,对玻莫合金薄膜施加0.5~4A、2us的脉冲电流,通过这一瞬态的强恢复磁场来恢复或保持传感器特性。置位脉冲或复位脉冲对传感器所起的作用基本一样,唯一的区别是传感器的输出改变正负号。由图4-2-3所示,单片机每10分钟产生1秒宽度的低电平时钟信号,该时钟信号控制CMOS开关管IRF7105的导通和截止,从IRFT105的3脚接的1uF电容处激励一大于0.5A的脉冲电流。在IRF7105的3脚和电源间串有200欧姆的降压电阻起降低噪声的作用。图4-2-2HMC1052设置/复位电路4.3ADC模块的设计4.3.1ATmega16内部AD简介ATmega16有一个10位的逐次逼近型ADC。ADC与一个8通道的模拟多路复用器连接,能对来自端口A的8路单端输入电压进行采样。单端电压输入以0V(GND)为基准。此外器件还支持16路差分电压输入组合。两路差分输入(ADC1、ADC0与ADC3、ADC2)有可编程增益级,在A/D转换前给差分输入电压提供0dB(1x)、20dB(10x)或46dB(200x)的放大级。七路差分模拟输入通道共享一个通用负端(ADC1),而其他任何ADC输入可做为正输入端。如果使用1x或10x增益,可得到8位分辨率。如果使用200x增益,可得到7位分辨率。ADC由AVCC引脚单独提供电源。AVCC与VCC之间的偏差不能超过±0.3V。标称值为2.56V的基准电压,以与AVCC,都位于器件之内。基准电压可以通过在AREF引脚上加一个电容进行解耦,以更好地抑制噪声。4.3.2ADC外围电路设计为减小AD转换的电源干扰,Mega16芯片有独立的AD电源供电。官方文档推荐在VCC串上一只10uH的电感(L1),然后接一只0.1uF的电容到地(C3)。ATmega16内带2.56V标准参考电压。也可以从外面输入参考电压,比如在外面使用TL431基准电压源。不过一般的应用使用内部自带的参考电压已经足够。习惯上在AREF脚接一只0.1uF的电容到地(C4)。图4-3ATmega16内部AD外围电路4.4电机与驱动模块4.4.1步进电机步进电动机是纯粹的数字控制电动机,它将电脉冲信号转变为角位移,即给一个脉冲,步进电机就转一个角度,因此非常合适单片机控制,在非超载的情况下,电机的转速、停止的位置只取决于脉冲信号的频率和脉冲数,而不受负载变化的影响,电机则转过一个步距角,同时步进电机只有周期性的无累积误差,精度高。图4-4-1是二相四线制步进电机原理图。图4-4-1二相四线制步进电机原理图步进电机有两种工作方式:整步方式和半步方式。以步进角1.8度四相混合式步进电机为例,在整步方式下,步进电机每接收一个脉冲,旋转1.8度,旋转一周,则需要200个脉冲,在半步方式下,步进电机每接收一个脉冲,旋转0.9度,旋转一周,则需要400个脉冲。控制步进电机旋转必须按一定时序对步进电机引线输入脉冲,以上述二相四线制步进电机为例,其半步工作方式和整步工作方式的控制时序如表1和表2所列。表1半步时序表表2整步时序表时序时序A+B-A-B+时序A+B-A-B+1000111001200113001020011401105010030110611007100041100810114.4.2步进电机细分驱动器TA8435TA8435是东芝公司生产的单片正弦细分二相步进电机驱动专用芯片,该芯片具有以下特点:工作电压范围宽(10-40V);输出电流可达1.5A(平均)和2.5A(峰值);具有整步、半步、1/4细分、1/8细分运行方式可供选择;带有复位和使能引脚;可选择使用单时钟输入或双时钟输入;采用脉宽调试式斩波驱动方式;具有正/反转控制功能;在图4-4-2中,第一个CK时钟周期时,解码器打开桥式驱动电路,电流从VMA流经电机的线圈后经RNFA后与地构成回路,由于线圈电感的作用,电流是逐渐增大的,所以RNFB上的电压也随之上升。当RNFB上的电压大于比较器正端的电压时,比较器使桥式驱动电路关闭,电机线圈上的电流开始衰减,RNFB上的电压也相应减小;当电压值小于比较器正向电压时,桥式驱动电路又重新导通,如此循环,电流不断的上升和下降形成锯齿波,其波形如图3中IA波形的第1段,另外由于斩波器频率很高,一般在几十KHz,其频率大小与所选用电容有关,在OSC作用下,电流锯齿波纹是非常小的,可以近似认为输出电流是直流。在第2个时钟周期开始时,输出电流控制电路输出电压Ua达到第2阶段,比较器正向电压也相应为第2阶段的电压,因此,流经步进电机线圈的电流从第1阶段也升至第二阶段2,电流波形如图IA第2部分,第3时钟周期,第4时钟周期TA8435的工作原理与第1、2是一样的,只有又升高比较器正向电压而已,输出电流波形如图IA中第3、4部分。如此最终形成阶梯电流,加在线圈B上的电流,如图4-4-2中IB,在CK一个时钟周期内,流经线圈A和线圈B的电流共同作用下,步进电机运转一个细分步。图4-4-2TA8435细分工作原理图 图4-4-3是单片机与TA8435相连控制步进电机的原理图,引脚M1和M2决定电机的转动方式:M1=0、M2=0,电机按整步方式运转;M1=1、M2=0,电机按半步方式运转;M1=0、M2=1,电机按1/4细分方式运转;M1=1、M2=1,电机按1/8步细分方式运转,CW/CWW控制电机转动方向,CK1、CK2时钟输入的最大频率不能超过5KHz,控制时钟的频率,即可控制电机转动速率。REFIN为高电平时,NFA和NFB的输出电压为0.8V,REFIN为低电平时,NFA和NFB输出电压为0.5V,这2个引脚控制步进电机输入电流,电流大小与NF端外接电阻关系式为:IO=Vref/Rnf。图4-4-3中,设REFIN=1,选用步进电机额定电流为0.4A,R1,R2选用1欧姆、2W的大功率电阻,O、C两线不接。步进电机按二相双极性使用,四相按二相使用时可以提高步进电机的输出转矩,D1-D4快恢复二极管用来泄放绕组电流。 图4-4-3步进电机与细分驱动器TA84354.5温度传感模块4.5.1温度传感器DS18B20简介DS18B20是一款基于1_WIRE总线的9位数字温度计。由于每一个DS18B20有唯一的系列号,因此多个DS18B20可以存在于同一条单线总线上。经过单线接口送入DS18B20或从DS18B20送出,因此从中央处理器到DS18B20仅需连接一条线,读、写和完成温度变换所需的电源可以由数据线本身提供,而不需要外部电源。除以上所述,DS18B20还有以下一些特点:独特的单线接口,只需1个接口引脚即可通信。不需要外部元件。可用数据线供电。不需备份电源。测量范围从-55°至+125°,增量值为0.5°。以9位数字值方式读出温度。在1秒内把温度变换为数字。用户可定义的,非易失性的温度告警设置。4.5.2DS18B20工作原理图4-5-1的方框图表示DS18B20的主要部件。DS18B20有三个主要的数据部件:1.64位激光ROM2.温度灵敏元件和3.非易失性温度告警触发器TH和TL。器件从单线的通信线取得其电源,在信号线为高电平的时间周期内,把能量贮存在内部的电容器中,在单信号线为低电平的时间期内断开此电源,直到信号线变为高电平重新接上寄生电容电源为止。作为另一种可供选择的方法,DS18B20也可用外部5V电源供电。图4-5-1DS18B20方框图与DS18B20的通信经过一个单线接口。在单线接口情况下,在ROM操作未定建立之前不能使用存贮器和控制。操作主机必须首先提供五种ROM。操作命令之一:1.ReadROM(读ROM)2.MatchROM(符合ROM),3.SearchROM(搜索ROM),4.SkipROM(跳过ROM)5.AlarmSearch(告警搜索)。这些命令对每一器件的64位激光ROM部分进行操作。如果在单线上有许多器件,那么可以挑选出一个特定的器件,并给总线上的主机指示存在多少器件与其类型。在成功地执行了ROM操作序列之后,可使用存贮器和控制操作,然后主机可以提供六种存贮器和控制操作命令之一。一个控制操作命令指示DS18B20完成温度测量。该测量的结果将放入DS18B20的高速暂存(便笺式)存贮器(Scratchpadmemory),通过发出读暂存存储器内容的存储器操作命令可以读出此结果,每一温度告警触发器TH和TL构成一个字节的EEPROM。如果不对DS18B20施加告警搜索命令,这些寄存器可用作通用用户存储器。使用存储器操作命令可以写TH和TL。对这些寄存器的读访问通过便笺存储器。所有数据均以最低有效位在前的方式被读写。图4-5-2为DS18B20与ATmega16的连接图。图4-5-2DS18B20电路4.6时钟模块4.6.1时钟接口概述本设计中扩展了时钟功能模块,能够显示日期,时间和星期,同时具有校时功能。为了简化系统软件设计,这里选用串行日历时钟芯片DS1302。与采用串行总线与单片机进行数据通信的时钟芯片相比,DS1302与单片机的连线大为减少,极大的节省了单片机的系统资源。4.6.2DS1302简介

DS1302是美国DALLAS公司推出的一种高性能、低功耗、带RAM的实时时钟电路,它可以对年、月、日、周日、时、分、秒进行计时,具有闰年补偿功能,工作电压为2.5V~5.5V。采用三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或RAM数据。DS1302内部有一个31×8的用于临时性存放数据的RAM寄存器

图4-6-2为DS1302的引脚排列,其中Vcc1为后备电源,Vcc2为主电源。在主电源关闭的情况下,也能保持时钟的连续运行。DS1302由Vcc1或Vcc2两者中的较大者供电。当Vcc2大于Vcc1+0.2V时,Vcc2给DS1302供电。当Vcc2小于Vcc1时,DS1302由Vcc1供电。X1和X2是振荡源,外接32.768kHz晶振。RST是复位/片选线,通过把RST输入驱动置高电平来启动所有的数据传送。RST输入有两种功能:首先,RST接通控制逻辑,允许地址/命令序列送入移位寄存器;其次,RST提供终止单字节或多字节数据的传送手段。当RST为高电平时,所有的数据传送被初始化,允许对DS1302进行操作。如果在传送过程中RST置为低电平,则会终止此次数据传送,I/O引脚变为高阻态。上电运行时,在Vcc≥2.5V之前,RST必须保持低电平。只有在SCLK为低电平时,才能将RST置为高电平。I/O为串行数据输入输出端(双向)。SCLK始终是输入端。图4-6-1DS1302的引脚排列4.6.3DS1302的寄存器

DS1302有12个寄存器,其中有7个寄存器与日历、时钟相关,存放的数据位为BCD码形式,其日历、时间寄存器与其控制字见表3。表3日历、时间寄存器与其控制字此外,DS1302还有年份寄存器、控制寄存器、充电寄存器、时钟突发寄存器与与RAM相关的寄存器等。时钟突发寄存器可一次性顺序读写除充电寄存器外的所有寄存器内容。DS1302与RAM相关的寄存器分为两类:一类是单个RAM单元,共31个,每个单元组态为一个8位的字节,其命令控制字为C0H~FDH,其中奇数为读操作,偶数为写操作;另一类为突发方式下的RAM寄存器,此方式下可一次性读写所有的RAM的31个字节,命令控制字为FEH(写)、FFH(读)。

DS1302与CPU的连接需要三条线,即SCLK(7)、I/O(6)、RST(5)。图4-6-1示出DS1302与ATmega16的连接图。图4-6-1DS1302最小系统4.7键盘接口电路设计在设计键盘电路时我们采用4×1的四键键盘。单片通过查询方式对键盘扫描。用软件算法消除按键瞬时的抖动。图4-7:按键电路其中,各键值代表的含义如下:S1:数值加;S2:数值减;S3:进入设置选择;S4:寻北仪/时钟切换图4-7按键电路4.8显示模块4.8.1液晶显示器简介字符型液晶显示模块由字符型液晶显示屏(LCD),控制驱动主电路HD44780与其扩展驱动电路HD44100,少量阻、容元件,结构件等装配在PCB板上而成。字符型液晶显示模块目前在国际上已经规范化,无论显示屏规格如何变化,其电特性和接口形式都是统一的。因此只要设计出一种型号的接口电路,在指令设置上稍加改动即可使用.字符型液晶显示模块的基本特点:液晶显示屏是以若干个5×8或5×11点阵块组成的显示字符群。主控制驱动电路为HD44780(HITACHI)与其他公司全兼容电路。具有字符发生器ROM可显示192种字符。具有64字节的自定义字符RAM,可自定义5×8点阵字符或5×11字符。具有80个字节的RAM。标准的接口特性,适配M6800系列MPU的操作时序。低功耗、长寿命、高可靠性。4.8.2液晶显示器使用说明1602模块的设定,读写,与光标控制都是通过指令来完成,共有11条指令,如下:指令RSRWD7D6D5D4D3指令RSRWD7D6D5D4D3D2D1D01清屏00000000002光标返回00000000013输入模式000000001*4显示控制00000001I/DS5光标/字符移位0000001DCB6功能000001S/CR/L**7置字符发生器地址00011DLNL**8置数据存储器地址001字符发生存储器地址9读忙标志和地址01BF显示数据存储器地址10写数据到指令7、8所设地址10要写的数据11从指令7、8所设地址读数据11读出的数据1602液晶模块内部的字符发生存储器(CGROM)已经存储了不同的点阵字符图形,这些字符有,阿拉伯数字、英文字母的大小写、常用的符号、和日文假名等,每一个字符都有一个固定的代码,其中数字与字母同ASCII码兼容。其内部还有自定义字符(CGRAM),可用业存储自已定义的字符。表5为CGROM和CGRAM中字符与字符图形对应关系。表51602中字符代码和字符图对应关系LCD1602接口简单,因此很容易与各类单片机结合使用,图4-8为LCD1602液晶显示电路。图4-8LCD液晶显示电路4.9电源模块为了避免电机运转过程中对主控制电路与传感器电路产生干扰而造成误动作,本设计中采用双电源供电。由于系统对电流要求不高,以与考虑到成本等诸多因素,最终选用稳压芯片LM7805为系统提供+5V的电源。电源模块的具体电路如图4-9所示。图4-9电源模块4.10硬件电路的布线与焊接该系统所涉与的各部分硬件电路,总体的特点是:(1)电路原理复杂,但所用的器件多为常用器件。(2)由于电路抗干扰要求高,因此,应合理布线,以降低焊接难度,降低出错率,减少干扰。焊接前应熟悉各芯片的引脚,焊接时参照电路图,仔细地连接引脚。按照以下原则进行焊接:(1)先焊接各芯片的电源线和地线,这样确保各芯片有正确的工作电压;(2)同类的芯片应顺序焊接,在一片焊接并检查好之后,其他的同类芯片便可以参照第一片进行焊接。这样便可大大节省时间,也可降低出错率。

5软件设计寻北仪的主控制器使用ATmega16单片机,因该单片机资源丰富,机器指令短,大大提高了软件的实用性和有效性。实现本系统,所需的单片机资源有:10位的逐次逼近型ADC(用于采集磁场信号),16位定时器/计数器(用于定时)。此外使用专用时钟芯片DS1302可以大大的简化系统软件,节约单片机资源。本系统还采用了细分驱动器TA8435,操作简单,使程序的编写得以简化。5.1主程序流程图软件的主程序流程图如图所示:有流程图可知,软件共包括两部分:数字寻北仪流程和万年历流程,两者之间的状态切换通过一个按键进行操作。系统初始化后,当单片机检测到切换键按下时,进入万年历状态,LCD显示年、月、日,时、分、秒,星期以与温度。当系统没有检测到切换键按下时,则直接进入寻北仪状态,步进电机指示磁北方向,LCD显示步进电机转过的角度。系统初始化系统初始化NYYNNY切换键是否按下?切换键是否按下?显示日历显示温度显示日历显示温度数字寻北仪程序切换键是否按下?切换键是否按下?切换键是否按下?切换键是否按下?图5-1主程序流程图5.2自动寻北子程序流程图寻北子流程图采用逼近算法。程序启动后,首先判断步进电机是否朝着磁北方向转动,若方向不对,则方向反转。然后大角度步进转动,然后判断AD是否增多,当发现AD减小时,电机反转,并改为小角度旋转,并判断AD是否增大,当AD变小时,电机停止,此时电机指向即为磁北,误差范围在-0.45°—+0.45°之间,满足任务书“角度测量精度为1°”的要求。开始开始读取AD读取AD电机转过9电机转过9°读取AD读取ADYNADYNADN+1>ADN电机反转4.5°电机反转4.5°保持转向4.5°读取AD读取AD读取AD读取ADNADN+1NADN+1>ADN电机反转0.45电机反转0.45°保持电机保持YY保持转向4.5保持转向4.5°保持电机保持NADNADN+1>=ADN电机停止读取AD读取AD保持转向0.45°保持电机保持Y电机停止读取AD读取AD保持转向0.45°保持电机保持Y图5-2自动寻北子程序流程图5.3日历程序流程图DS1302与微处理器进行数据交换时,先由微处理器向电路发送命令字节,命令字节最高位MSB(D7)必须为逻辑1,如果D7=0,则禁止写DS1302,即写保护;D6=0,指定时钟数据,D6=1,指定RAM数据;D5~D1指定输入或输出的特定寄存器;最低位LSB(D0)为逻辑0,指定写操作(输入),D0=1,指定读操作(输出)。

在DS1302的时钟日历或RAM进行数据传送时,DS1302必须首先发送命令字节。若进行单字节传送,8位命令字节传送结束之后,在下2个SCLK周期的上升沿输入数据字节,或在下8个SCLK周期的下降沿输出数据字节。

DS1302与RAM相关的寄存器分为两类:一类是单个RAM单元,共31个,每个单元组态为一个8位的字节,其命令控制字为C0H~FDH,其中奇数为读操作,偶数为写操作;再一类为突发方式下的RAM寄存器,在此方式下可一次性读、写所有的RAM的31个字节。开始开始变量初始化变量初始化复位产生1个高电平使DS1302不具备写保护复位产生1个高电平使DS1302不具备写保护写1302地址复位产生1个高电平写1302地址复位产生1个高电平延时一段时间延时一段时间写1302地址写1302地址将地址的数据读出延时一段时间将地址的数据读出延时一段时间地址增加向该地址写数据地址增加向该地址写数据数据读完了吗?地址增加数据读完了吗?地址增加N数据写完了吗?数据写完了吗?NYY显示数据显示数据图5-3日历子程序流程5.4温度测量程序流程图系统可以测定外界环境的温度,对精度要求并不是很高,故只使用温度传感器DS18B20的9位数据传输方式,这样节省转换时间,每次转换的时间只需100ms左右,由于DS18B20单线通信功能是分时完成的,它有严格的时隙概念,因此读写时序很重要。DS18B20的测温程序流程图如图5-4所示。初始化DS18B20写入CCh,初始化DS18B20写入CCh,开始温度转换写入BEh,读暂存寄存器写入BEh,读暂存寄存器写入CChSkipROM写入44h,写入44h,开始温度转换读暂存寄存器读暂存寄存器等待转换结果复位脉冲N等待转换结果复位脉冲等待转换结果Y等待转换结果发送复位脉冲N发送复位脉冲Y计算温度值等待转换结果NY计算温度值等待转换结果图5-4测温子程序流程图5.5液晶显示流程图首先,单片机检测液晶1602上忙检测的端口DB7,若检测到的电平为高电平时,则无法写指令,若为低电平,单片机可以向液晶里写指令,写数据。然后液晶开始初始化,液晶执行清屏程序。再然后检测忙端口,若检测到为忙则一直检测直到检测到不忙继续往下执行程序,写入操作指令程序,经过单片机处理在液晶上显示出来。忙检测子程序忙检测子程序写指令程序写指令程序写数据程序写数据程序液晶初始化液晶初始化清屏清屏液晶是否正忙?液晶是否正忙?NY写入操作指令写入操作指令写入数据写入数据读数据显示读数据显示图5-4液晶显示子程序流程图

6制作与调试6.1硬件电路的布线与焊接6.1.1总体特点该系统所涉与的各部分硬件电路,总体的特点是:(1)电路原理简单,所用的器件多为常用器件。(2)由于将电机驱动线路和单片机与周边电路的布置在一起可能会影响两者。因此,我采用分开制作,合理布线,以降低焊接难度,降低出错率,同时防止干扰。6.1.2电路划分为方便焊接与调试,把电路划分为三大块:(1)电源模块为一块电路板;(2)磁阻传感器模块、整形电路为一块电路板;(3)电机驱动、液晶显示和单片机控制为一块电路板;6.1.3焊接焊接前应熟悉各芯片的引脚,焊接时参照电路图,仔细地连接引脚。按照以下原则进行焊接:(1)先焊接各芯片的电源线和地线,这样确保各芯片有正确的工作电压;(2)同类的芯片应顺序焊接,在一片焊接并检查好之后,其他的同类芯片便可以参照第一片进行焊接。这样便可大大节省时间,也可降低出错率。6.2调试整机焊接完毕,首先对硬件进行检查联线有无错误,再逐步对各模块进行调试。(1)调节磁阻传感器产生的信号。调节运放的放大倍数,使放大后的信号的振幅为1V,振动中心为1.25V。(2)测试AD采样子程序。测试信号为1*cos(2π*0.1*t)+1.2V由信号发生器产生,加入显示子程序,观察显示结果正常。 (3)加入电机控制小程序。加速,减速,控制其正反转,停机均正常。(4)综合几个子程序,观察寻北仪是否指北,调整灵敏度达最佳效果。(5)加入测温子程序,观察温度显示是否正常。(6)加入日历程序,调试程序,使其工作正常。7结论在大学四年得学习生活即将过去,在这四年中,老师的辛勤教诲、同学的帮助,加上自己的刻苦努力,掌握了大部分专业知识的理论,实际动手能力也大为提高。毕业设计是大学学习生活中,对学生的理论知识和动手能力的一次大检验。这次毕业设计课题是数字寻北仪设计,这也是对我的综合理论知识的一次大考验。通过一个学期的努力,终于完成了我的毕业设计。在做毕业设计的这段时间内,我一直在不断的学习中,通过查阅各种与设计有关的资料,使我了解了很多从课本上面学不到的知识。我觉得毕业设计的过程,不仅是一个提高自己动手能力的过程,更是证明自己大学四年学习成果的过程。通过对这次的毕业设计,使我对自己专业课的学习有了个更直接更全面的了解。虽然以前短学期也做过一些电子产品,但是这次的毕业设计着实让我对磁阻传感器、ADC控制和电机控制有了更新的认识,理论和实际同步进行使我更深的了解所学知识的内容,并且能更加熟练的使用Protel软件进行电路设计和PCB的制作,并且基本能熟练使用ICCAVR这个编译环境。掌握了电子设计所常用的软件。由于整个毕业设计,电路的设计软件的编程都是我一个人全部做设计制作的,工作量比较大。所以说,这次的毕业设计是对我能力的一个重大考验,同时也给了我一次展示自我的机会。在制作的整个过程中,虽然出现了许多意想不到的问题,比如对Protel软件的一些细节操作和对硬件电路的焊接,但是经过导师的指导和自己琢磨,我终于还是解决了这些问题。在这次毕业设计的之后,给我感触最深的是,细心是制作寻北仪成功的关键。因为我发现在调试的过程中,经常会出现一些莫名其妙的错误,其实这些看似很小的错误,大部分是由于细节问题所引起的。所以说,这次的毕业设计给了我一个很大的教育,那就是不管以后做什么事,都要抱着务实的态度和严谨的作风。这样才能给自己交一份满意的答卷。

参考文献[1]李广弟,朱月秀等.单片机基础[M].北京:北京航空航天大学出版,2001.[2]沈文.AVR单片机C语言开发入门指导[M].北京:清华大学出版社,2003.[4]刘光斌.单片机系统实用抗干扰技术[M].北京:人民邮电出版社,2003.[5]胡汉才.单片机原理与其接口技术[M].北京:清华大学出版社,1996.[6]吴红星.电机驱动与控制专用集成电路与应用[M].北京:中国电力出版社,2006.[7]王鸿钰.步进电机控制技术入门[M].北京:同济大学出版社,1990.[8]魏永广.现代传感技术[M].哈尔滨:东北大学出版社,2001.[9]何希才.传感器与其应用电路[M].北京:电子工业出版社,2001.

[10]王保保.传感器简明手册与应用电路——线性输出磁场传感器分册[M].西安:西安电子科技大学,2007.

[11]谢嘉奎.电子线路[M].北京:高等教育出版社,2004.[12]龚之春.数字电路[M].成都:电子科技大学出版,2004.[13]胡平等.一种新型测向传感器—磁通门罗盘[J].海洋与湖沼,1992,23(3):318-324.[14]宋海明等.锑化铟霍尔器件在电子罗盘中的应用研究[J].电子测量技术,2008,31(3):118-121.[15]李怡达等.基于磁阻传感器与微处理器的二维磁电子罗盘的设计[J].功能材料与器件学报,2008,14(2):557-560.[16]李希胜等.车用磁电子罗盘的研制[J].传感器与仪器仪表,2006,22:308-310.[17]邓滔等.磁阻传感器在车辆航位推算系统中的应用研究[J].自控与测量,2005,4:98-100.[18]ChoSY,ParkCG.TiltCompensationalgorithmfor22axisMagneticCompass[J].ElectronicsLetters,2003,39(22):66-120.[19]WangJ,SatirapodC,RizosC.StochasticAssessmentofGPSCarrierphaseMeasurementsforPreciseStaticRelativePositioning[J].JournalofGeodesy,2002,76(2):147-152.附录图1-1主控控制电路图1-2电源电路图1-3磁阻传感器电路/*******************************************************************************/

/* 主函数程序*/

/*******************************************************************************/

#include"iom16v.h"

#include"Calendar.h"

#include"North_seeker.h"

#include"LCD1602.h"

#include"SYS_init.h"

#defineucharunsignedchar

#defineuintunsignedint

voidmain(void)

{

SYS_init();

while(1)

{

if((PINA&0x80)==0x00)

{

delay_ms(20);

if((PINA&0x80)==0x00)

{

while((PINA&0x80)==0x00);

Calendar();//日历程序

}

}

else

{

North_seeker(); //寻北仪程序

}

}

LCD_clear();

}/* 寻北仪模块*/#include"iom16v.h"#include"ADC.h"#include"LCD1602.h"#include"Step_motor.h"#include"key.h"#defineucharunsignedchar#defineuintunsignedint#defineSTEP_OFFPORTC|=(1<<PC0)#defineAmplitude940uintAD[2]={0,0};uintADmin=0;ucharmark;uintset_steps;/****************************各方向磁场对应的AD值****************************/constuintAD_data[]= 0,1,2,3,4,5,6,7,8,9, 10,11,12,13,14,15,16,17,18,19, 22,24,26,29,31,34,36,39,42,45, 48,52,55,58,62,66,69,73,77,81, 85,89,93,98,102,106,111,116,120,125, 130,135,140,145,150,155,160,166,171,177, 182,188,193,199,204,210,216,222,228,234, 240,246,252,258,264,270,276,282,289,295, 301,307,314,320,326,333,339,345,352,358, 364,371,377,384,390,396,403,409,415,422, 428,434,440,447,453,459,465,471,477,483, 489,495,501,507,513,519,525,530,536,541, 547,552,558,563,569,574,579,584,589,594, 599,604,609,613,618,623,627,631,636,640, 644,648,652,656,660,663,667,671,674,677, 681,685,680,695,700,706,713,720,725,731, 738,743,746,749,752,755,757,758,759,760, 761,762,763,764,765,766,767,768,769,770,/*****************************相邻相比AD程序******************************/voidCheck_ADC(void) AD[1]=AD[0];//AD[1]读取上次AD值 AD[0]=samp_ADC();//AD[0]读取当前AD值/******************************自动寻北程序*********************************/voidAuto_seeker(void)Check_ADC();if((AD[0]-ADmin)>15)//角度偏离5度,启动自动寻北Drc:if(AD[1]>AD[0]) N_steps(10,0,2);//步进4.5度,方向保持 Check_ADC(); else N_steps(10,1,2);//步进4.5度,方向取反 Check_ADC(); if(AD[1]<AD[0]) gotoDrc; while(AD[1]>AD[0]) N_steps(10,0,2);//步进4.5度,方向保持 Check_ADC(); A_step(1,1);//步进0.45度,方向取反 while(AD[1]>=AD[0]) A_step(0,2);//步进0.45度,方向保持 Check_ADC(); STEP_OFF; ADmin=AD[0];//读取AD最小值/******************************方位寻找程序**********************************/voidPosition_seeker(void) LCD_write_str(0,0,"Position-Seeker");LCD_write_str(0,1,"Degree:"); Disp_angle(); if((PINA&(1<<PA6))==0)//方位设置 Seek_key(); Auto_seeker();n_steps(set_steps,mark,2); STEP_OFF; while((PINA&(1<<PA6))==0x40) if((PINA&(1<<PA5))==0x00) break;/******************************方位角确定程序*****************************/voidPosition_measure(void) ucharAngle[4]; uchari; uintAd,ADi,AD_diff=1880; intdiff; uintangle; LCD_write_str(0,0,"Position-Measure");LCD_write_str(0,1,"Degree:"); Ad=read_ADC(); for(i=0;i<180;i++) ADi=ADmin+AD_data[i]; diff=Ad-ADi; if(diff<0)diff=-diff; if(AD_diff>diff) AD_diff=diff; angle=i;Angle[0]=angle/1000+'0';Angle[1]=angle%1000/100+'0';Angle[2]=angle%100/10+'0'; Angle[3]=angle%10+'0'; //LCD_write_char(7,1,Angle[0]);//显示角度值LCD_write_char(8,1,Angle[1]); LCD_write_char(9,1,Angle[2]); LCD_write_char(10,1,Angle[3]); LCD_write_char(11,1,0xdf);/********************************寻北总程序************************************/voidNorth_seeker(void) while((PINA&0x80)==0x80) LCD_write_str(2,0,"North-Seeker"); LCD_write_str(1,1,"Mode-Selection");//模式选择界面 if((PINA&(1<<PA6))==0)/******自动寻北*******/ LCD_clear(); delay_ms(10); if((PINA&(1<<PA6))==0) while((PINA&(1<<PA6))==0); LCD_write_str(3,0,"Auto-Seeker");LCD_write_str(0,1,"Angle:"); Check_ADC(); N_steps(10,0,1);//步进9度,方向保持 while((PINA&(1<<PA6))==0x40) Auto_seeker(); Disp_Angle(); ADC_converse();//显示AD值 while((PINA&(1<<PA6))==0); LCD_clear(); if((PINA&(1<<PA5))==0)/****任意方位寻找****/ LCD_clear(); delay_ms(10); if((PINA&(1<<PA5))==0) while((PINA&(1<<PA5))==0); while((PINA&(1<<PA5))==0x20) Position_seeker(); while((PINA&(1<<PA5))==0); LCD_clear(); if((PINA&(1<<PA4))==0)/******方位测量*******/ LCD_clear(); delay_ms(10); if((PINA&(1<<PA4))==0) while((PINA&(1<<PA4))==0); while((PINA&(1<<PA4))==0x10) Position_measure(); while((PINA&(1<<PA4))==0); LCD_clear(); LCD_clear();/* 日历模块*/#include"iom16v.h"#include"DS1302.h"#include"LCD1602.h"#include"DS18B20.h"#include"key.h"#defineuintunsignedint#defineucharunsignedcharvoidCalendar(void) while((PINA&0x80)==0x80) DS1302_read_time(); Disp_Time();//显示时间 Disp_Temp();//显示温度 if((PINA&(1<<PA6))==0)//校时程序 delay_ms(10); if((PINA&(1<<PA6))==0) judge_key(); while((PINA&0x80)==0x00); LCD_clear();/* 系统初始化模块*/#include"iom16v.h"#include"SYS_init.h"#include"ADC.h"#include"LCD1602.h"#include"DS1302.h"#defineuintunsignedint#defineucharunsignedcharvoidPORT_init(void)ucharjtag; PORTA=0x0E; DDRA=0x0E; PORTB=0xFF; DDRB=0xFF; jtag=MCUCSR|(1<<JTD);//PORTC初始化MCUCSR=jtag;MCUCSR=jtag; DDRC=0xFF; PORTC=0xFF; PORTD=0x7F; DDRD=0x8F;voidSYS_init(void) PORT_init(); ADC_init(); LCD_init();DS1302_init();/* A/D采样模块*/#include"iom16v.h"#include"LCD1602.h"#defineuintunsignedint#defineucharunsignedcharucharbuf[4];/**********************************读AD函数**********************************/uintread_ADC(void) uintADdata,u_ADCH,u_ADCL; ADMUX=0XC0;//内部2.56V参考电源,单端0输入 ADCSRA=(1<<ADSC|1<<ADEN); while(!(ADCSRA&(1<<(ADIF))));//等待AD转换结束 ADCSRA|=(1<<ADIF); u_ADCL=ADCL; u_ADCH=ADCH; ADdata=(u_ADCH<<8)|u_ADCL;return(ADdata);/********************************均值滤波函数*********************************/ uintsamp_ADC(void)uchari;uintAD=0;for(i=0;i<8;i++)AD+=read_ADC();AD=AD>>3;returnAD;/*AD初始化函数*/voidADC_init(void) ADCSRA=(1<<ADEN)|0X06;//AD使能,64分频/**********************************AD数值转换函数******************************/voidADC_converse(void) longtemp; uintadc; temp=(long)samp_ADC()*25

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论