基于AVR单片机的数字红外温度计课程设计报告_第1页
基于AVR单片机的数字红外温度计课程设计报告_第2页
基于AVR单片机的数字红外温度计课程设计报告_第3页
基于AVR单片机的数字红外温度计课程设计报告_第4页
基于AVR单片机的数字红外温度计课程设计报告_第5页
已阅读5页,还剩22页未读 继续免费阅读

付费下载

下载本文档

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

文档简介

1硬件课程设计总结报告题目指导老师学院专业姓名学号课设评价课设成绩2摘要本次硬件课程设计要求利用8位AVR单片机开发板ATMELATXMEGA128A1作为核心控制器件,采用红外温度检测元件测量温度。将温度传感器输出的模拟电压值传递到开发板,通过ATMELATXMEGA128A1上的ADC模块将电压值量化,并根据实际测量的温度电压曲线,通过多直线拟合的方法,模拟出传感器的温度曲线。通过软件实现的方法将温度值还原出来。使用LCD显示温度,从而实现显示测量温度的功能。测温范围2070。在硬件部分,将放大模块和LCD显示模块焊接到PCB板上;在软件部分利用AVRSTUDIO5开发环境进行LCD显示及AD模块编写。软硬件调试成功后进行整合调试,以达到要求的目标。关键字温度传感器、ATMELATXMEGA128A1开发板、LCD显示ABSTRACTTHEHARDWARECOURSEDESIGNREQUIRESTHEUSEOF8BITSINGLECHIPAVRDEVELOPMENTBOARDATMELATXMEGA128A1ASTHECORECONTROLDEVICEANDUSINGINFRAREDTEMPERATUREDETECTINGELEMENTFORMEASURINGTEMPERATURETHETEMPERATURESENSOROUTPUTANALOGVOLTAGEVALUEANDPASSITTOTHEDEVELOPMENTBOARD,THROUGHTHEATMELATXMEGA128A1ADCMODULETHEVOLTAGEVALUEQUANTIFICATION,ANDACCORDINGTOTHEACTUALMEASUREMENTOFTHETEMPERATUREVOLTAGECURVE,THROUGHMULTIPLELINEARFITTINGMETHOD,SIMULATEDSENSORTEMPERATURECURVETHROUGHTHESOFTWAREMETHODTORETURNTHETEMPERATUREVALUEUSINGLCDTODISPLAYTHETEMPERATURE,THEREBYREALIZINGDISPLAYMEASUREMENTTEMPERATUREFUNCTIONTHETEMPERATUREMEASUREMENTRANGEOF2070INTHEHARDWAREPART,THEAMPLIFYINGMODULEANDLCDDISPLAYMODULEWELDEDTOTHEPCBPLATEINTHEPARTOFTHESOFTWAREBYUSINGAVRSTUDIO5DEVELOPMENTENVIRONMENTFORLCDDISPLAYANDADMODULETOWRITEAFTERTHESOFTWAREANDHARDWAREDEBUGGINGSUCCESSFULLY,TODEBUGTHEMTOGETHERANDTHENWILLMEETTHEREQUIREMENTSOFTHETARGETKEYWORDSTEMPERATURESENSOR,ATMELATXMEGA128A1DEVELOPMENTBOARD,LCDDISPLAY3目录1项目概述411关于AVR开发板的简介412AVRSTUDIO542项目设计目标描述521课程设计题目522课程设计基本要求523课程设计发挥部分524课程设计需求简析63团队组成及任务分工64系统总体设计65系统硬件设计与实现751红外温度传感器的选择与硬件驱动电路(信息获取电路)752电压放大模块953液晶显示驱动电路模块116系统软件设计与实现1261LCD1602模块12611数制转换函数DATACHANGE13612写控制命令函数WRITE_COM14613写数据命令函数WRITE_DAT156141602LCD液晶显示器初始化函数LCD_INIT()16615在确定位置处写一个字符DISPLAYONECHAR()17616从某位开始写一串字符串DISPLAYLISTCHAR()18617整数至字符型变换显示函数UINT_UCHAR_SHOW186181602LCD液晶显示测试模块LCD_TEST1962AD转换模块19621转化选择模块ADC_CALIBRATIONVALUES_LOAD20622取标准值函数ADC_OFFSET_GET_SIGNED20623取结果函数ADC_RESULTCH_GETLOWBYTE()21624数值编码与显示函数GETANDSHOW()2163软件模块拼接227系统的测试与结果分析2371主要测试仪器仪表2372调试电路的方法和技巧2373调试故障,产生原因及故障排除248心得体会与项目总结259致谢2610参考文献2641项目概述11关于AVR开发板的简介AVR单片机是1997年由ATMEL公司研发出的增强型内置FLASH的RISCREDUCEDINSTRUCTIONSETCPU精简指令集高速8位单片机。AVR的单片机可以广泛应用于计算机外部设备、工业实时控制、仪器仪表、通讯设备、家用电器等各个领域。1997年,由ATMEL公司挪威设计中心的A先生和V先生,利用ATMEL公司的FLASH新技术,共同研发出RISC精简指令集高速8位单片机,简称AVR。AVR具有哈佛结构,具备1MIPS/MHZ的高速运行处理能力;超功能精简指令集(RISC),具有32个通用工作寄存器,克服了如8051MCU采用单一ACC进行处理造成的瓶颈现象;快速的存取寄存器组、单周期指令系统,大大优化了目标代码的大小、执行效率,部分型号FLASH非常大,特别适用于使用高级语言进行开发;作输出时与PIC的HI/LOW相同,可输出40MA(单一输出),作输入时可设置为三态高阻抗输入或带上拉电阻输入,具备10MA20MA灌电流的能力;片内集成多种频率的RC振荡器、上电自动复位、看门狗、启动延时等功能,外围电路更加简单,系统更加稳定可靠;大部分AVR片上资源丰富带E2PROM,PWM,RTC,SPI,USART,TWI,ISP,AD,ANALOGCOMPARATOR,WDT等;大部分AVR除了有ISP功能外,还有IAP功能,方便升级或销毁应用程序。AVR单片机系列齐全,可适用于各种不同场合的要求。12AVRSTUDIO5本次实验采用AVRSTUDIO5作为软件开发工具,AVRSTUDIO5是为AVR嵌入式单片机制作的一个集成开发环境。AVRSTUDIO5给予我们一个无缝的、易使用的环境来书写、建立、调试C、C和汇编代码。AVRSTUDIO5支持所有的AVR微控制器(包括8位和32位)。我们可以利用AVRSTUDIO5,结合之前的C语言基础知识,通过所给的例程学习编写适合用于ATMELATXMEGA128A1单片机的程序。AVRSTUDIO50集成了AVRSOFTWAREFRAMEWORK,这是一个带有400多个完整应用程序范例的8位AVRXMEGA和32位AVRUC3MCU源代码库,并拥有一整套用于片上外设和外接器件的驱动程序、有线和无线通信协议堆栈、音频解码、图形生成、以及定点和浮点算法库。使用该软件框架中的代码,设计人员可以省去多达50的底层源代码编写工作,从而加快新应用产品的开发。软件工程师需要完整直观的开发工具来启动复杂的嵌入式微控制器设计。ATMELAVRSTUDIO5备有全面充分的代码样例,可让软件工程师快速启动新的设计项目,从而简化设计过程。此外,新项目向导带有软件框架和调试器,使得这个开发平台更为完整,非常直观和易于使用。ATMELAVRSTUDIO5可用三个词来描述直观、易用和高效。AVRSTUDIO5和AVRSOFTWAREFRAMEWORK,结合ATMEL调试器和开发工具套件,构成了能够5帮助设计人员将其理念快速带入市场的真正的完整开发平台。这些平台使用方便,并量身定制以满足ATMEL客户之AVRMCU设计人员的需求。AVRSTUDIO5能够简化源代码的编辑和调试,具备辅助代码编写功能的编辑器、用于快速创建新项目的向导工具,AVRSOFTWAREFRAMEWORK源代码库、GNUC/C编译器、功能强大的模拟器,以及适用于ATMEL所有AVR编程器及在线调试器的前端可视化工具。AVRSTUDIO5支持所有8位和32位AVRMCU。此外,ATMEL的AVRSTUDIO5还可集成第三方的嵌入开发工具插件。2项目设计目标描述21课程设计题目本项目要求设计并实现一个红外温度检测计,利用8位AVR单片机开发板ATMELATXMEGA128A1作为核心控制器件,采用红外温度检测元件测量温度,使用LCD显示温度,从而实现红外温度测量功能。测温范围207022课程设计基本要求熟悉单片机的设计开发环境AVRSTUDIO5,在此基础上掌握相应的控制软件设计;学习8位AVR单片机开发板ATMELATXMEGA128A1的使用,并熟悉各个模块的功能;焊接并调试其他扩展的PCB板的各个模块。完成一台由红外温度传感器组成的红外温度检测计,由液晶LCD显示当前温度。温度显示精度为1。23课程设计发挥部分具备报警,报警门限通过键盘设置;具备报警,通过蜂鸣器完成;温度单位摄氏()华氏(F)可以自动转换;能通过SD卡或者计算机存储温度数据624课程设计需求简析本实验的主要部分为ATMELATXMEGA128A1单片机,需要以此板为中心设计外围电路并综合软件来实现红外温度检测的功能。经过小组讨论以及老师的指导,我们确定了最初的设计思路。红外温度传感器输出毫伏级的电压,需要经过放大到伏级(几伏左右)后接入实验板。放大部分采用模拟电路放大器,放大倍数为200,为了保证放大质量采用两级放大电路。放大后的直流电压输入到AVR单片机,通过软件编程实现ADC,得到此电压的数字信号。通过软件的显示模块输出转换后的实际温度到液晶显示屏上。总体来说分为软件和硬件两部分,硬件部分需设计模拟放大电路和液晶显示屏外围接口并焊接到PCB版上。软件部分为ADC转换后驱动液晶显示器显示所需显示的温度。我们打算软硬件分工,同时进行设计,软硬件综合测试且要求分别测试成功后,再进行软硬件的整合,修改其中出现的错误,以达到预期的结果。3团队组成及任务分工本小组由组长XX,小组成员XXX,XXX组成,为了使设计实现过程更快的进行,将本次课程设计实验分成了三个阶段1,基础知识整理获取阶段,2,方案获取与模块是现阶段,3,组装与调试阶段。在基础知识整理与获取阶段,每位小组成员通过大量阅读有关书籍及相关文档深入了解系统所需硬件电路及AVR单片机工作控制机理。在方案获取与模块是现阶段,为了提高实现过程的并行性,根据每位组员特长与兴趣,讨论分析得出系统模块划分结果,由XX负责AVR单片机软件编程平台的搭建及软件编程,XXX负责硬件电路设计,元器件购买,XXX实现硬件电路的焊接电路。在组合调试阶段,综合软硬件调试,运行程序,通过测量硬件电路各端点处电平时序等特性分析系统运行的状况,出现错误的原因及假设,验证假设方法及消除错误方案等。4系统总体设计本实验用到的8位AVR单片机开发板ATMELATXMEGA128A1工作在32MHZ上,两个八通道,12BIT,2MSPS模拟数字转换器,提供多达10个八端口IO端口,功能强大,其中PA,PC,PD,PF,可供外电路使用,具有功耗小性能强等众多有点,通过小组讨论得到了如下的实验实现模块方框图,其中蓝方框表示硬件电路实现的功能,黑色方框由芯片配合软件实现。并可将其按上下分成两个模块AD转换模块与LCD显示模块。可以通过逐个模块功能实现最后拼接实现目标75系统硬件设计与实现51红外温度传感器的选择与硬件驱动电路(信息获取电路)目前市场上红外温度传感器的种类很多,其中主流的包括MLX90615ESG系列,MELEXISMLX90614ESFACF系列,OPT538系列,TS118系列等。出于系统成本,功耗高低,与AVR单片机IO端口接收电平匹配程度及输出线性度,输出稳定性等因素考虑,决定选择使用OPT538系列中的OPT538U,这是一款非接触式的红外温度传感器,OTP538U是一个热电堆传感器,具116种热电偶元素,传感器芯片经由微细加工,可快速反应环境里的温度改变,导致输出端电压响应,OPT538U非接触式的红外温度传感器的温度电压输出特性曲线如下图所示,通过观察其特性曲线可以观察到在025C时输出为负电压范围是080C,在25100C时,输出正电压范围是038MV,线性度较好,粗略测量时可以拟和为一条直线,精细测量时,可以用若干个分段函数来实现曲线的模拟。其实际温度电压特性曲线如下8非接触式红外温度传感器OPT538U有四个端口,其中13为输出端口,24为输入端口,为了让非接触式红外温度传感器OPT538U正常工作,输出正确的电压,需要研究其电学特性。下表为非接触式红外温度传感器OPT538U阻抗随温度变化特性根据上表不难得出非接触式红外温度传感器OPT538U驱动电路如下图所示,驱动电路也叫信号获取电路,不仅需要非接触式红外温度传感器OPT538U,还需要阻抗分别为1K,10K的电阻,还需要47UF的电容。其中10K电阻用来分压,保持电压稳定,1K电阻分流防止输入非接触式红外温度传感器OPT538U的电流过大,47UF电容的作用是消除噪声信等交流信号对非接触式红外温度传感器OPT538U工作状态的影响。传感器驱动电路如下952电压放大模块由于非接触式红外温度传感器OPT538U即使在100C时输出电压也只有38MV,对于AVR单片机IO端口而言其电平太低,无法进行有效的识别,由于变化区间太小更难实现进行准确的编码。为此我们需要在非接触式红外温度传感器OPT538U的输出输入到AVR单片机的输入端口之前进行放大,由于单片机内部可以提供一个1V的标准电压可被选择控制,所以可以用其作为满量程的标准电压,这样的话可以将100C是对应输出的38MV电压放大到1V以内,1000/38263,可以选择通过两级放大电路,每级放大16被,总放大倍数为1616256能够使编码点评对应的电压放达到最都理想的状态。10由于为了实现新片一体化,上图所示为选择单极性正向放大的358放大芯片,其中一个358芯片正好有两个放大模块对应两级放大。根据以上分析可以将放大模块与51中的信号收集模块结合起来产生去下图所示发达输入电路图中每一级放大倍数为(151)/116倍满足分析的数值,两极之间的47UF电容是用来将电路中的交变噪声信号滤除,增强系统的抗噪性,使系统工作时更加健康稳定。根据AVR单片机AD转换功能的输入端只能在PA0PA7这8个端口之中一个输入进来,所以本次课程设计实验中选择PA0作为输入,也就是ACD0。具体如何进行使能选择将有软件实现。1153液晶显示驱动电路模块目前市场上虽然LCD液晶显示器的种类有好多,但是最为主流使用量最大的就是1602LCD液晶显示器,其中16表示一行可以显示16个字符,02表示共有两行。如下图所示,选择该液晶显示器的原因很多也很简单,应用广泛,能够参考的资料很多,可移植性好,与单片机电平特性匹配可以直接学则好接口连接。LCD液晶显示器有16个外部接口,其中比较特别的端口有4端口为RS为数据/命令选择段,当该位为高电平(“1”)时,AVR单片机对LCD1602液晶显示器读写数据,当该位为低电平时(“0”)时,AVR单片机对LCD1602液晶显示器读写控制。5端口为R/W为读/写选择段,该位为高(“1”)时AVR单片机从LCD1602液晶显示器读取数据或指令,当该位为低(“0”)时,AVR单片机向LCD1602液晶显示器写数据或者指令。5端口为E为使能段,该位为高(“1”)时AVR单片机对LCD1602液晶显示器进行各种操作,当该位为低(“0”)时,AVR单片机对LCD1602液晶显示器进行各种操作。714端口为LCD液晶显示器的数据输入输出端。15端口为背光正极,16端口为背光负极。由于此次使用的AVRATXMEGA128A1开发板只有PA0PA7,PC0PC7,PD0PD7,PF0PF7,端口较为丰富,为了不让程序因端口复用而变得难以实现及错误分析检测,本实验中选择各端口只用一种功能PA用于AD转换时模拟输入,PD4,PD5,PD3用于LCD1602的三个控制端口RS,R/W,E。PC0PC7用于与12LCD1602液晶显示器的数据端口D0D7进行数据转换。根据以上分析得到本实验中LCD1602液晶的工作驱动电路如下图所示6系统软件设计与实现61LCD1602模块AVR单片机对LCD1602液晶显示器既能进行读操作又能进行写操作,但是对于本次是硬件课程设计实验而言,读操作没有任何意义,主要是使用液晶显示器来显示数据,也就是写操作。下图所示为操作的时序图,根据先前只是和现在所看到的时序图不难看出写操作分为两种写控制和写数据。这是1602LCD液晶显示器最基本也是最重要的函数,如果出现错误后面复杂操作就很难进行。在本次试验中我为写控制和写数据分别定义了两个子函数WRITE_COM和WRITE_DAT。时序图如下13对于这种硬件编程,根据时序图进行编写是很重要的,检查错误时也可以通过示波器检查个时序的先后变化关系。下图所示为时序图中各时间间隔的的取值范围要求,对于工作频率较低的单片机来说,一条指令所用的时间就可以达到所需的延时要求,可以忽略一些延时问题,对于工作频率较高的单片机,其工作速度较快,不再能忽略延时问题了,可以设计一个延时函数,根据该延时函数的输入延时长度变化,每条指令执行后运行延时函数延迟足够长的时间以保证时序图正确,进而确保液晶能够准确工作611数制转换函数DATACHANGE此数制转换子函数在原本的设计中是不存在的,之所以编写并使用它是因为在焊电路板的时候,为了焊接电路简便,电路板更美观。并没有将AVR单片机的数据端口(本硬件课程实验中PC0PC7)与1602LCD液晶显示器的数据段DOD7对应,如下图所示14为了防止由于按照上图接法给对1602LCD液晶显示器写操作带来的各种影响写入的数据因为个数为对应关系出错而出现乱码,写入的控制数据因为此对应关系是AVR单片机对1602LCD液晶显示器的控制出错,使其不受控制。我们需要把将要从AVR单片机端口输出的数据进行转换,使其符合上图所示对应关系,这样在后面进行写数据和写控制前将数值转换即可。本实验中设计的数值转换程序如下UNSIGNEDCHARDATACHANGEUNSIGNEDCHARDATAUNSIGNEDCHARDATANEW,DATA0,DATA1,DATA2,DATA3,DATA4,DATA5,DATA6,DATA7DATA0DATADATA1DATADATA2DATADATA3DATADATA4DATADATA5DATADATA6DATADATA7DATADATANEWDATA0128DATA116DATA22DATA3/4DATA4/16DATA5/8DATA6/4DATA7/2RETURNDATANEW此函数首先是将原本想要输出的数据的每一位分别取出,然后对每一位按照变化关系进行移动,最后再重新拼接到一起。此函数理解起来并不难。只是在确认对应关系时有些繁琐,要细心分析,否则会出错。15612写控制命令函数WRITE_COM观察时序图可以看到要想写一条指令,首先先确保使能端E为低电平将RS拉直低电平将R/W置为低此时讲控制数据写入将E抬高演示一段时间将E拉低。写控制操作就完成了,下面为本次硬件课程实验中的写控制命令子函数VOIDWRITE_COMUNSIGNEDCHARCOMPORTD_DIR|0X38NOPPORTD_OUTNOPPORTD_OUTNOPPORTD_OUTDELAY_US1000PORTC_DIR0XFFPORTC_OUTDATACHANGECOMNOPPORTD_OUT|0X08NOPNOPDELAY_US5000PORTD_OUTDELAY_US5000要说明的是对于每个IO端口,AVR单片机都设有三个寄存器PORTN_DIRPORT_INPORTN_OUT。其中PORTN_DIR用来定义数据方向,高电平表示该IO端口输出,低电平表示该IO端口为输入,所以第一句是用来定义PD4,PD5,PD3三个端口被定义为输出,正好对应我们硬件电路中设计的RS,R/W,E,其余的并未更改,第二句将EPD3拉低,NOP();是一个之前定义过的一个延迟非常短的时间。DELAY_US为一个有输入的函数,随着输入数据变化延时时间变化接着是将R/W置为低,此时讲控制数据写入,然后将E抬高延迟一段时间将E拉低。写控制操作就完成了,不难看出此函数完全遵守时序图最终结果也证明此函数是正确的。613写数据命令函数WRITE_DAT观察时序图可以看到要想写一条指令,首先先确保使能端E为低电平将RS升高到电平将R/W置为低此时讲控制数据写入将E抬高延迟一段时间将E拉低。写数据操作就完成了,下面为本次硬件课程实验中的写控制命令子函数VOIDWRITE_DATUNSIGNEDCHARDAT16PORTD_DIR|0X38PORTD_OUTNOPDELAY_US5000PORTD_OUT|0X10NOPDELAY_US5000PORTD_OUTNOPDELAY_US5000PORTC_DIR0XFFPORTC_OUTDATACHANGEDATDELAY_US100PORTD_OUT|0X08NOPNOPDELAY_US5000PORTD_OUTDELAY_US5000由于基本语法全相同,此处不再做过多解释了。6141602LCD液晶显示器初始化函数LCD_INIT()1602LCD液晶显示器初始化顾名思义就是在液晶显示器工作前,将液晶显示器设置在一个可控的正确的一致的状态,确保函数1602LCD液晶显示器能够正确稳定的运行,不会给系统分析控制带来额外的开销。下图位1602液晶显示器用户使用说明书中提供的初始化流程,我们根据它的顺序编写即可。17值得注意的是上图中“()”有“检测BF位状态”或者“不检测BF位状态”,这主要是考虑到对1602液晶显示器的读操作,对于本次试验中我们只对其进行写操作,所以可暂时忽略BF位的影响,本实验中的LCD初始化函数如下。VOIDLCD_INITVOIDPORTC_DIR0XFFPORTD_DIRPORTC_OUT0X00PORTD_OUTWRITE_COM0X38DELAY_US5000WRITE_COM0X38DELAY_US5000WRITE_COM0X38DELAY_US5000WRITE_COM0X38DELAY_US1000WRITE_COM0X01DELAY_US1000WRITE_COM0X0618DELAY_US1000WRITE_COM0X0CDELAY_US1000WRITE_COM0X80此函数完全按照用户手册中的标准编写,确保了初始化的正确,是后续程序能够正确运行的基础和根本。615在确定位置处写一个字符DISPLAYONECHAR()编写此函数的目的是能够简便的在1602液晶显示器的任意一个位置写一个字符。需要综合运用之前所编写的WRITE_COM和WRITE_DAT。1602LCD液晶显示器的屏幕可以提供162个字符显示位置,但是它提供的寄存器却不只这些,如下图所示,其多余出来的寄存器是用来存储数据用来移动显示时使用VOIDDISPLAYONECHARUNSIGNEDCHARX,UNSIGNEDCHARY,UNSIGNEDCHARDDATEYXIFYX|0X40X|0X80WRITE_COMXWRITE_DATDDATE根据函数不难看出,当Y为奇数时,数据位置处于下面一排,当Y为偶数时,数据位置处于上面一排。横向位置从0开始一直到F,随输入变化。WRITE_COM用来设置所写数据位置,WRITE_DAT用来确定所写数据。616从某位开始写一串字符串DISPLAYLISTCHAR()在实际应用中存在这样一种情况,我们需要显示一句话或者一组词来作为人19机交互界面,这样的话如果用上面提到的DISPLAYONECHAR函数一次一次的改地址一次一次的改数据会显得非常的麻烦,所以定义了这样的一个函数一次写一串字符串。本次硬件实验中我们编写的函数如下VOIDDISPLAYLISTCHARUNSIGNEDCHARX,UNSIGNEDCHARY,UNSIGNEDCHARDDATA,UNSIGNEDCHARIUNSIGNEDCHARLISTLENGTHLISTLENGTH0YXWHILELISTLENGTH0IDATA3IDATAUINT10DATAUINTDATAUINT/10FORI3I0IDISPLAYONECHARX,Y,DATA3I0X30X第一个FOR循环将整型数分解成三个字符型数并存到字符型数组中,第二个20FOR循环将该字符型数组中的字符一次显示出来。6181602LCD液晶显示测试模块LCD_TEST之所以编写此模块是用于测试1602LCD液晶显示模块功能是否能够正常工作和错误时检查错误出现在哪些端口的测试软件模块,本硬件试验中编写如下VOIDLCD_TESTWRITE_DAT0XFFMDELAY100IOPORT_SET_PIN_HIGHLCD_RSMDELAY100IOPORT_SET_PIN_LOWLCD_RSMDELAY100IOPORT_SET_PIN_HIGHLCD_RWMDELAY100WRITE_DAT0X00MDELAY100IOPORT_SET_PIN_LOWLCD_RWMDELAY100IOPORT_SET_PIN_HIGHLCD_EMDELAY100IOPORT_SET_PIN_LOWLCD_EMDELAY100观察程序不难看出,液晶也许会显示乱码,但是这不是我们要观察的,我们通过示波器的两个通道,假设以RS为基准,观察其他控制端包括数据端口上电平变化,找出与预想不同的端口,进而进一步解决错误问题。此函数在最终成品中不会被使用,测试正确,产品成功后可以注释掉。62AD转换模块AVRATXMEGA128A1是一款功能强大,性能稳定的8位芯片,内部有2个12位的逐次逼近型ADC。ADC与一个8通道的模拟多路复用器连接,能对来自端口A的8路单端输入电压进行采样。单端电压输入以0VGND为基准。有可编程增益级,在A/D转换前给差分输入电压提供0DB1X、20DB10X或46DB200X的放大级。如果使用1X或10X增益,可得到8位分辨率。本实验选择8位有符号型以其内部1V为标注满量程电压,进行AD转换。621转化选择模块ADC_CALIBRATIONVALUES_LOAD21由于芯片上的ADCA可以直接留给输入模拟信号端口使用,故可编写驱动器工作的函数,具体如下VOIDADC_CALIBRATIONVALUES_LOADADC_TADCIFADCCALHSP_READCALIBRATIONBYTEPROD_SIGNATURES_STARTADCACAL1_OFFSETELSEADCCALLSP_READCALIBRATIONBYTEPROD_SIGNATURES_STARTADCBCAL0_OFFSETADCCALHSP_READCALIBRATIONBYTEPROD_SIGNATURES_STARTADCBCAL1_OFFSET此函数不难理解,在函数输入端选择ADCA还是ADCB,然后将所对应的数据放入相应的寄存器中进行工作。本次硬件课程设计实验中标准值存放在ADCA中。622取标准值函数ADC_OFFSET_GET_SIGNED此函数的功能是在选择为有符号模式时得到ADC的结果,在使用此函数值钱需要保证ADC功能已经设置好并且转换已经使能了。这个函数只能返回12BIT转换的低8位,因为INT8_T最多只能输出8位,所以本实验选择使用8BIT转换,目的就是为了提高准确性。INT8_TADC_OFFSET_GET_SIGNEDADC_TADC,ADC_CH_TCH,BOOLOVERSAMPLINGIFOVERSAMPLINGINT16_TOFFSET0FORINTI0IINTFLAGSADC_CH_CHIF_BMRETURNADC_CHRESL虽然使用起来的价值意义很高,但是函数结构相对简单,此处就不多赘述了。624数值编码与显示函数GETANDSHOW()在ADC_RESULTCH_GETLOWBYTE()函数得到归一化后的8BIT结果后,AD转换的功能已经基本得到了解决,但是我们不能忽略另一位问题归一化后的数字量与我们要显示表达的数字量是不同的,此函数GETANDSHOW()就是将归一化后的数字量转化成对于我们而言有意义的书资料并在1602LCD液晶显示器上显示出来。本硬件课设中该子函数代码如下VOIDGETANDSHOWINT8_TRESFLOATVININTTEM,TEM1VINFLOATRES/1271000VIN27/350VIN80027/35028TEMINTVINIFTEM30DISPLAYLISTCHAR0,0,“DANGER“,0X0FTEM1INTTEM1832UINT_UCHAR_SHOW0X07,0X01,TEMDISPLAYONECHAR0X08,0X01,CDISPLAYONECHAR0X09,0X01,DISPLAYONECHAR0X0A,0X01,UINT_UCHAR_SHOW0X0D,0X01,TEM1DISPLAYONECHAR0X0E,0X01,FPORTE_OUT0X00DELAY_US1000PORTE_OUT0XFFDELAY_US1000ELSE23DISPLAYLISTCHAR0,0,“THETEMP“,8DISPLAYLISTCHAR8,0,“ERATURE“,7TEM1INTTEM1832UINT_UCHAR_SHOW0X07,0X01,TEMDISPLAYONECHAR0X08,0X01,CDISPLAYONECHAR0X09,0X01,DISPLAYONECHAR0X0A,0X01,UINT_UCHAR_SHOW0X0D,0X01,TEM1DISPLAYONECHAR0X0E,0X01,FRETURN在编写本函数前我们需要测试下我们的输入模拟信号随温度变化的实际曲线。对于该曲线我们可以通过分段函数进行拟合,在测试中,个人认为由于焊接电路板存在问题,所以输出去西安并没有像我们想象的那样输出曲线,根据曲线编号新的拟合函数后即可。观察函数不难发现我们设置了报警门限和警报响应模式,大温度超过30度时,LED等闪亮,LCD液晶显示器第一排显示“DANGER”,实现并不难,只要综合应用也想显示模块的DISPLAYONECHAR(),DIAPLAYLISTCHAR(),UINT_UCHAR_SHOW并经过合理的排版既能实现。其中同时显示了华氏温度和摄氏温度,TEM1INTTEM1832实现了由摄氏温度向华氏温度的转换。63软件模块拼接分别调试两模块检测不误,都能独立的正确的工作后。可以讲两个模块拼接起来以便实现最终功能,这里学要的注意的是在1602液晶显示模块,我们编辑了检测函数实现在输出错误时可以通过观察时序排除错误。对于AD模块,再没使用液晶模块单独测试时,可以将输出的八位数据在8位LED灯处输出检测,此处就不多余赘述。本实验中,以AD转换模块作为主体函数,将1602液晶显示模块函数作为拓展函数,将其各子函数编写进1602H的头文件里。并在AD转换模块中,将该头文件添加进来便可。7系统的测试与结果分析71主要测试仪器仪表示波器、万用表、PC机2472调试电路的方法和技巧当硬件设计从布线到焊接安装完成之后,就开始进入硬件调试阶段,调试大体分为以下几步。1硬件静态的调试1)排除逻辑故障这类故障往往由于设计和加工制板过程中工艺性错误所造成的。主要包括错线、开路、短路。排除的方法是首先将焊制完成的电路板认真对照原理图,看两者是否一致。应特别注意电源系统检查,以防止电源短路和极性错误,并重点检查信号线之间是否存在短路。充分利用万用表的短路测试功能,可以缩短排错时间。2排除元器件失效造成这类错误的原因有两个一个是元器件买来时就已坏了;另一个是由于安装错误,造成器件烧坏。可以采取检查元器件与设计要求的型号、规格和安装是否一致。在保证安装无误后,用替换方法排除错误。3测试焊接电路工作状放大模块工作输入电平为0369MV,由于AVR单片机内部我们选择了电平为1V的满量程标准电压,为了保证不超过量程而又能使能够得到尽可能大的输入电压,我们选择用放大倍数为1616256倍,焊接电路板后,由于很难提供MV级输入电压,我们测了在1V左右的输入电压,放大倍数位247倍,基本满足要求。4测试传感器与放大器接通后工作状态将传感器驱动电路(信号获取电路)与上一测量验证的放大电路连接起来,测量输出随温度变化,第一次测量时发现输出的电平是温度的负函数曲线,这与我们理论的预期值是相反地,经过仔细研究,发现传感器输出端口13反向焊到电路中了,解决问题后电路正常工作了。2联机仿真调试联机仿真必须借助仿真开发装置、示波器、万用表等工具。对于1602液晶显示器因为没有输出,我们无法通过静态的电路测量来检测电路是否正常工作,唯一能够实现的方法是联机仿真调试,通过程序对1602液晶显示器的各个控制端口,数据端口进行赋值,通过万用表或者示波器测量其端口电平的变化。如果未能得到理想的测量值,排除测试程序错误原因,则是焊接的传输线路出现了短路或短路的情况。若测得理想测量值,由于只要1602液晶显示器的各控制端数据端电平时序正确便能正确工作。所以可以认定电路无错误。73调试故障,产生原因及故障排除1LCD实现模块过程中,在硬件没有成功焊完之前,本组选择了通过插面包板来实现硬件电路的模拟并测试软件,软件编号后三天并未出现理想结果,液晶显示器没有任何字符显示,于是编写了液晶测试模块函数LCD_TEST,运行函数后通过使用万用表逐位检测各控制端口和数据端口,返现有四个端口无法控制,不能随着输入的电平变化而变化,此时有两种可能1测试软件存在问题;2,传输线存在例如断路,接触不良等问题。首先为了排除软件问题,我们25进行了单步调试,观察各寄存器的有用位电平变换,发现与预想的的完全符合,也就说明AVR单片机的输出端口的电平是正确的,那么问题就出在电路的传输线线上,更换了不能控制端口处的传输线,再次测各端口电平,与理想吻合,此时进行写数据和写控制操作,输出理想,故障排除完成。21602液晶显示模块电路焊好后,将LCD显示模块的代码烧写进芯片后发现程序既不能正确的进行写数据操作又不能争取的进行写控制操作,由于此程序已在之前所插的电路板中得到证明是正确的,分析认为原因出在电路焊接上,仔细观察电路板,发现电路板上数据线的接入与AVR单片机的输出是不对应的,经过与焊接电路板队员核实,原来为了电路板的焊接电路整洁美观,它更改了接口排序,问题发现后解决方案有两种,硬件实现重新焊接电路,是电路能够与AVR单片机的输出端口匹配;软件实现编写一个码制转换函数,是AVR单片机输出端口相输出的数据经过转换函数转化后在输出符合硬件电路接线方式的码制。考虑到从新焊接电路需要很长的时间,且重复焊接对于传输线包括电路板的性能存在影响,相反,对于已知原理的数值变换软件实现起来并不是很大,只要写一个相应的子函数,在每次输出之前进行一下输出数据的码制转换即可。于是选择了软件实现。编写完成后,为了验证函数的功能的正确性,我使用该码制转换函数驱动开发板上的8个LED灯亮灭来检测码制转换后的对应关系,逐位检测后发现对应关系正确,将该子函数应用到LCD液晶显示模块后液晶能够正常工作。故障排除完成。3AD模块中传感器输出的电压明显高于理想的输出值,原因有两种电路由于焊接问题而存在分压电路,使输出电压被抬高;第二是由于传感器正常工作时输出电压非常小,只有04MV级别,对于噪声信号而言,也很小。由于第一个原因很难通过观察发现,所以先假设第二条原因成立,解决方法是在电路中加入大电容,因为温度变换不会很突然,可以近似的认为是输出直流,噪声信号可以认为是交流电,所以大电容可以将AD模块中的噪声滤除,经检测发现输出电压大幅下降,并且与理论输出值基本吻合,说明故障基本排除。4连模块分别调试成功拼接后发现无法输出有效数据,经过分析人为原因可能有两种一硬件电路出现问题,二是虽然拼接前AD转换模块和LCD液晶显示模块都以证明正确无误,但是量函数所用头函数不同,转换语法后,可能会导致部分出错。由于硬件电路在LCD模块检测时已经证明是正确的了,在没有严重的物理伤害情况下可以认为硬件电路是正确的,所以问题很有可能出现在软件,观察示波器输出的使能端RS信号电平发现刚被提升为高便被拉了下来,是一个冲击,然而对于写数组操作,RS信号在数据写入,E保持使能过程中都应该保持高电平,经过分析发现提升使能端口的下一语句正好将其下拉,通过修改函数的表达避免了此事故的发生。电路调回正常后,功能基本完成。8心得体会与项目总结实验的过程总是艰辛的、充满挫折的,但是通过多方的努力,结果还是令人满意的。这次硬件课程设计实验是大学以来我们第一次进行一个软硬件结合的,达到一定实验要求,做出实验成品的课程设计。通过我的了解,其他一些课程设计的题目是被其他人做过很多次,有许多参考资料代码的,做起来也比26较简单,甚至不到一个星期就能全部完成。而我们这次的课程设计是利用全新的开发板ATMELATXMEGA128A1,我们对此的了解少之又少,这对我们是一个极大的困难与挑战。而且本次实验不但需要对开发板进行编程使用,还需要外部硬件电路的配合使用,这又需要我们配合软件设计合理的硬件电路,并进行焊接。在一开始着手进行本题目的时候,由于缺乏经验,我们有些无所适从,并不知道如何下手。看起来简单的功能,市面上都能够轻松买到的,我们却不知道如何设计。在查阅资料,和老师的帮助下,我们才有了总体的设计思路,找到了问题的切入点。因为我们是在ATMELATXMEGA128A1开发板为核心的基础上完成目标功能的,所以在设计上也应该以此为核心设计。所以我们必须设计硬件的模拟电压放大电路,使温度传感器的电压信号能够被开发板所使用。为了

温馨提示

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

评论

0/150

提交评论