1、基于AVR单片机的数字红外温度计课程设计报告硬件课程设计总结报告题目:指导老师:学 院: 专 业: 姓 名: 学 号: 课设评价:课设成绩:摘要本次硬件课程设计要求利用8位AVR单片机开发板Atmel ATxmega128A1作为核心控制器件,采用红外温度检测元件测量温度。将温度传感器输出的模拟电压值传递到开发板,通过AtmelATxmega128A1上的ADC模块将电压值量化,并根据实际测量的温度电压曲线,通过多直线拟合的方法,模拟出传感器的温度曲线。通过软件实现的方法将温度值还原出来。使用LCD显示温度,从而实现显示测量温度的功能。测温范围20+70。在硬件部分,将放大模块和LCD显示模块
2、焊接到PCB板上;在软件部分利用AVR STUDIO 5开发环境进行LCD显示及AD模块编写。软硬件调试成功后进行整合调试,以达到要求的目标。关键字:温度传感器、AtmelATxmega128A1开发板、LCD显示AbstractThe hardware course design requires the use of8 bit single-chip AVR development board Atmel ATxmega128A1as the core control device and using infrared temperature detecting element for m
3、easuring temperature. The temperature sensor output analog voltage value and pass it to the development board, through the Atmel ATxmega128A1ADC module the voltage value quantification, and according to the actual measurement of the temperature voltage curve, through multiple linear fitting method,
4、simulated sensor temperature curve. Through the software method toreturn the temperature value.Using LCD to display the temperature, thereby realizing display measurement temperature function.The temperature measurement range of 20 +70 .In the hardware part, the amplifying module and LCD display mod
5、ule welded to the PCB plate; in the part of the software by using AVR STUDIO 5development environment for LCD display and AD module to write. After the software and hardware debugging successfully, to debug them together and then will meet the requirements of the target.Key Words:Temperature sensor,
6、Atmel ATxmega128A1 development board,LCD display目录1. 项目概述 41.1关于AVR开发板的简介 41.2 AVR STUDIO 5 42项目设计目标描述 52.1课程设计题目 52.2课程设计基本要求 52.3 课程设计发挥部分 52.4课程设计需求简析 63.团队组成及任务分工 64. 系统总体设计 65.系统硬件设计与实现 75.1红外温度传感器的选择与硬件驱动电路(信息获取电路) 75.2电压放大模块 95.3液晶显示驱动电路模块 116.系统软件设计与实现 126.1 LCD1602模块 126.1.1数制转换函数datachange
7、 136.1.2写控制命令函数write_com 146.1.3写数据命令函数write_dat 156.1.4 1602LCD液晶显示器初始化函数lcd_init() 166.1.5在确定位置处写一个字符displayonechar() 176.1.6 从某位开始写一串字符串displaylistchar() 186.1.7 整数至字符型变换显示函数uint_uchar_show() 186.1.8 1602LCD液晶显示测试模块LCD_test() 196.2 AD转换模块 196.2.1 转化选择模块ADC_CalibrationValues_Load() 206.2.2 取标准值函数A
8、DC_Offset_Get_Signed() 206.2.3取结果函数ADC_ResultCh_GetLowByte() 216.2.4 数值编码与显示函数getandshow() 216.3软件模块拼接 227. 系统的测试与结果分析 237.1主要测试仪器仪表 237.2调试电路的方法和技巧 237.3调试故障,产生原因及故障排除 248.心得体会与项目总结 259.致谢 2610.参考文献 261. 项目概述1.1关于AVR开发板的简介AVR单片机是1997年由ATMEL公司研发出的增强型内置Flash的RISC(Reduced Instruction Set CPU) 精简指令集高速8
9、位单片机。AVR的单片机可以广泛应用于计算机外部设备、工业实时控制、仪器仪表、通讯设备、家用电器等各个领域。 1997年,由Atmel公司挪威设计中心的A先生和V先生,利用Atmel公司的Flash新技术,共同研发出RISC精简指令集高速8位单片机,简称AVR。AVR具有哈佛结构,具备1MIPS / MHz的高速运行处理能力;超功能精简指令集(RISC),具有32个通用工作寄存器,克服了如8051 MCU采用单一ACC进行处理造成的瓶颈现象;快速的存取寄存器组、单周期指令系统,大大优化了目标代码的大小、执行效率,部分型号FLASH非常大,特别适用于使用高级语言进行开发;作输出时与PIC的HI/
10、LOW相同,可输出40mA(单一输出),作输入时可设置为三态高阻抗输入或带上拉电阻输入,具备10mA-20mA灌电流的能力;片内集成多种频率的RC振荡器、上电自动复位、看门狗、启动延时等功能,外围电路更加简单,系统更加稳定可靠;大部分AVR片上资源丰富:带E2PROM,PWM,RTC,SPI,USART,TWI,ISP,AD,Analog Comparator,WDT等;大部分AVR除了有ISP功能外,还有IAP功能,方便升级或销毁应用程序。AVR单片机系列齐全,可适用于各种不同场合的要求。1.2 AVR STUDIO 5本次实验采用AVR STUDIO 5作为软件开发工具,AVR STUDI
11、O 5是为AVR嵌入式单片机制作的一个集成开发环境。AVR STUDIO 5给予我们一个无缝的、易使用的环境来书写、建立、调试C、C+和汇编代码。AVR STUDIO 5支持所有的AVR微控制器(包括8位和32位)。我们可以利用AVR STUDIO 5,结合之前的C语言基础知识,通过所给的例程学习编写适合用于Atmel ATxmega128A1单片机的程序。AVR Studio 5.0集成了AVR Software Framework,这是一个带有400多个完整应用程序范例的8位AVR XMEGA和32位AVR UC3 MCU源代码库,并拥有一整套用于片上外设和外接器件的驱动程序、有线和无线通
12、信协议堆栈、音频解码、图形生成、以及定点和浮点算法库。使用该软件框架中的代码,设计人员可以省去多达50%的底层源代码编写工作,从而加快新应用产品的开发。软件工程师需要完整直观的开发工具来启动复杂的嵌入式微控制器设计。Atmel AVR Studio 5备有全面充分的代码样例,可让软件工程师快速启动新的设计项目,从而简化设计过程。此外,新项目向导带有软件框架和调试器,使得这个开发平台更为完整,非常直观和易于使用。Atmel AVR Studio 5可用三个词来描述:直观、易用和高效。AVR Studio 5 和AVR Software Framework,结合Atmel调试器和开发工具套件,构成
13、了能够帮助设计人员将其理念快速带入市场的真正的完整开发平台。这些平台使用方便,并量身定制以满足Atmel客户之AVR MCU设计人员的需求。AVR Studio5能够简化源代码的编辑和调试,具备辅助代码编写功能的编辑器、用于快速创建新项目的向导工具, AVR Software Framework源代码库、GNU C/C+编译器、功能强大的模拟器,以及适用于Atmel所有AVR编程器及在线调试器的前端可视化工具。AVR Studio 5支持所有8位和32位AVR MCU。此外,Atmel的AVR Studio 5还可集成第三方的嵌入开发工具插件。2项目设计目标描述2.1课程设计题目本项目要求设计
14、并实现一个红外温度检测计,利用8位AVR单片机开发板Atmel ATxmega128A1作为核心控制器件,采用红外温度检测元件测量温度,使用LCD显示温度,从而实现红外温度测量功能。测温范围20+702.2课程设计基本要求熟悉单片机的设计开发环境AVR STUDIO 5,在此基础上掌握相应的控制软件设计;学习8位AVR单片机开发板Atmel ATxmega128A1的使用,并熟悉各个模块的功能;焊接并调试其他扩展的PCB板的各个模块。完成一台由红外温度传感器组成的红外温度检测计,由液晶LCD显示当前温度。温度显示精度为1。2.3 课程设计发挥部分具备报警,报警门限通过键盘设置;具备报警,通过蜂
15、鸣器完成;温度单位摄氏()华氏(F)可以自动转换;能通过SD卡或者计算机存储温度数据2.4课程设计需求简析本实验的主要部分为Atmel ATxmega128A1单片机,需要以此板为中心设计外围电路并综合软件来实现红外温度检测的功能。经过小组讨论以及老师的指导,我们确定了最初的设计思路。红外温度传感器输出毫伏级的电压,需要经过放大到伏级(几伏左右)后接入实验板。放大部分采用模拟电路放大器,放大倍数为200+,为了保证放大质量采用两级放大电路。放大后的直流电压输入到AVR单片机,通过软件编程实现ADC,得到此电压的数字信号。通过软件的显示模块输出转换后的实际温度到液晶显示屏上。总体来说分为软件和硬
16、件两部分,硬件部分需设计模拟放大电路和液晶显示屏外围接口并焊接到PCB版上。软件部分为ADC转换后驱动液晶显示器显示所需显示的温度。我们打算软硬件分工,同时进行设计,软硬件综合测试且要求分别测试成功后,再进行软硬件的整合,修改其中出现的错误,以达到预期的结果。3.团队组成及任务分工本小组由组长xx,小组成员xxx,xxx组成,为了使设计实现过程更快的进行,将本次课程设计实验分成了三个阶段:1,基础知识整理获取阶段,2,方案获取与模块是现阶段,3,组装与调试阶段。在基础知识整理与获取阶段,每位小组成员通过大量阅读有关书籍及相关文档深入了解系统所需硬件电路及AVR单片机工作控制机理。在方案获取与模
17、块是现阶段,为了提高实现过程的并行性,根据每位组员特长与兴趣,讨论分析得出系统模块划分结果,由xx负责AVR单片机软件编程平台的搭建及软件编程,xxx负责硬件电路设计,元器件购买,xxx实现硬件电路的焊接电路。在组合调试阶段,综合软硬件调试,运行程序,通过测量硬件电路各端点处电平时序等特性分析系统运行的状况,出现错误的原因及假设,验证假设方法及消除错误方案等。4. 系统总体设计本实验用到的8位AVR单片机开发板Atmel ATxmega128A1工作在32Mhz上,两个八通道,12-bit, 2 Msps模拟数字转换器,提供多达10个八端口IO端口,功能强大,其中PA,PC,PD,PF,可供外
18、电路使用,具有功耗小性能强等众多有点,通过小组讨论得到了如下的实验实现模块方框图,其中蓝方框表示硬件电路实现的功能,黑色方框由芯片配合软件实现。并可将其按上下分成两个模块AD转换模块与LCD显示模块。可以通过逐个模块功能实现最后拼接实现目标:5.系统硬件设计与实现5.1红外温度传感器的选择与硬件驱动电路(信息获取电路)目前市场上红外温度传感器的种类很多,其中主流的包括MLX90615ESG系列,MELEXIS MLX90614ESF-ACF系列,OPT-538系列,TS118系列等。出于系统成本,功耗高低,与AVR单片机IO端口接收电平匹配程度及输出线性度,输出稳定性等因素考虑,决定选择使用O
19、PT-538系列中的OPT-538U,这是一款非接触式的红外温度传感器,otp-538u是一个热电堆传感器,具116种热电偶元素,传感器芯片经由微细加工,可快速反应环境里的温度改变,导致输出端电压响应,OPT-538U非接触式的红外温度传感器的温度电压输出特性曲线如下图所示,通过观察其特性曲线可以观察到:在025C时输出为负电压范围是-0.80C,在25100C时,输出正电压范围是03.8mv,线性度较好,粗略测量时可以拟和为一条直线,精细测量时,可以用若干个分段函数来实现曲线的模拟。其实际温度-电压特性曲线如下:非接触式红外温度传感器OPT-538U有四个端口,其中13为输出端口,24为输入
20、端口,为了让非接触式红外温度传感器OPT-538U正常工作,输出正确的电压,需要研究其电学特性。下表为非接触式红外温度传感器OPT-538U阻抗随温度变化特性:根据上表不难得出非接触式红外温度传感器OPT-538U驱动电路如下图所示,驱动电路也叫信号获取电路,不仅需要非接触式红外温度传感器OPT-538U,还需要阻抗分别为1K,10K的电阻,还需要47uf的电容。其中10K电阻用来分压,保持电压稳定,1K电阻分流防止输入非接触式红外温度传感器OPT-538U的电流过大,47uf电容的作用是消除噪声信等交流信号对非接触式红外温度传感器OPT-538U工作状态的影响。传感器驱动电路如下:5.2电压
21、放大模块由于非接触式红外温度传感器OPT-538U即使在100C时输出电压也只有3.8mv,对于AVR单片机IO端口而言其电平太低,无法进行有效的识别,由于变化区间太小更难实现进行准确的编码。为此我们需要在非接触式红外温度传感器OPT-538U的输出输入到AVR单片机的输入端口之前进行放大,由于单片机内部可以提供一个1V的标准电压可被选择控制,所以可以用其作为满量程的标准电压,这样的话可以将100C是对应输出的3.8mv电压放大到1V以内,1000/3.8=263,可以选择通过两级放大电路,每级放大16被,总放大倍数为16*16=256能够使编码点评对应的电压放达到最都理想的状态。由于为了实现
22、新片一体化,上图所示为选择单极性正向放大的358放大芯片,其中一个358芯片正好有两个放大模块对应两级放大。根据以上分析可以将放大模块与5.1中的信号收集模块结合起来产生去下图所示发达输入电路:图中每一级放大倍数为(15+1)/1=16倍满足分析的数值,两极之间的47uf电容是用来将电路中的交变噪声信号滤除,增强系统的抗噪性,使系统工作时更加健康稳定。根据AVR单片机AD转换功能的输入端只能在PA0PA7这8个端口之中一个输入进来,所以本次课程设计实验中选择PA0作为输入,也就是ACD0。具体如何进行使能选择将有软件实现。5.3液晶显示驱动电路模块目前市场上虽然LCD液晶显示器的种类有好多,但
23、是最为主流使用量最大的就是1602LCD液晶显示器,其中16表示一行可以显示16个字符,02表示共有两行。如下图所示,选择该液晶显示器的原因很多也很简单,应用广泛,能够参考的资料很多,可移植性好,与单片机电平特性匹配可以直接学则好接口连接。LCD液晶显示器有16个外部接口,其中比较特别的端口有:4端口为RS为数据/命令选择段,当该位为高电平(“1”)时,AVR单片机对LCD1602液晶显示器读写数据,当该位为低电平时(“0”)时,AVR单片机对LCD1602液晶显示器读写控制。5端口为R/W为读/写选择段,该位为高(“1”)时AVR单片机从LCD1602液晶显示器读取数据或指令,当该位为低(“
24、0”)时,AVR单片机向LCD1602液晶显示器写数据或者指令。5端口为E为使能段,该位为高(“1”)时AVR单片机对LCD1602液晶显示器进行各种操作,当该位为低(“0”)时,AVR单片机对LCD1602液晶显示器进行各种操作。7-14端口为LCD液晶显示器的数据输入输出端。15端口为背光正极,16端口为背光负极。由于此次使用的AVR ATxmega128A1开发板只有PA0-PA7,PC0-PC7,PD0-PD7,PF0-PF7,端口较为丰富,为了不让程序因端口复用而变得难以实现及错误分析检测,本实验中选择各端口只用一种功能:PA用于AD转换时模拟输入,PD4,PD5,PD3用于LCD1
25、602的三个控制端口RS,R/W,E。PC0-PC7用于与LCD1602液晶显示器的数据端口D0-D7进行数据转换。根据以上分析得到本实验中LCD1602液晶的工作驱动电路如下图所示:6.系统软件设计与实现6.1 LCD1602模块 AVR单片机对LCD1602液晶显示器既能进行读操作又能进行写操作,但是对于本次是硬件课程设计实验而言,读操作没有任何意义,主要是使用液晶显示器来显示数据,也就是写操作。下图所示为操作的时序图,根据先前只是和现在所看到的时序图不难看出写操作分为两种:写控制和写数据。这是1602LCD液晶显示器最基本也是最重要的函数,如果出现错误后面复杂操作就很难进行。在本次试验中
26、我为写控制和写数据分别定义了两个子函数write_com和write_dat。时序图如下:对于这种硬件编程,根据时序图进行编写是很重要的,检查错误时也可以通过示波器检查个时序的先后变化关系。下图所示为时序图中各时间间隔的的取值范围要求,对于工作频率较低的单片机来说,一条指令所用的时间就可以达到所需的延时要求,可以忽略一些延时问题,对于工作频率较高的单片机,其工作速度较快,不再能忽略延时问题了,可以设计一个延时函数,根据该延时函数的输入延时长度变化,每条指令执行后运行延时函数延迟足够长的时间以保证时序图正确,进而确保液晶能够准确工作:6.1.1数制转换函数datachange此数制转换子函数在原
27、本的设计中是不存在的,之所以编写并使用它是因为在焊电路板的时候,为了焊接电路简便,电路板更美观。并没有将AVR单片机的数据端口(本硬件课程实验中PC0-PC7)与1602LCD液晶显示器的数据段DO-D7对应,如下图所示: 为了防止由于按照上图接法给对1602LCD液晶显示器写操作带来的各种影响:写入的数据因为个数为对应关系出错而出现乱码,写入的控制数据因为此对应关系是AVR单片机对1602LCD液晶显示器的控制出错,使其不受控制。我们需要把将要从AVR单片机端口输出的数据进行转换,使其符合上图所示对应关系,这样在后面进行写数据和写控制前将数值转换即可。本实验中设计的数值转换程序如下unsig
28、nedchardatachange(unsignedchardata) unsignedchardatanew,data0,data1,data2,data3,data4,data5,data6,data7; data0=data&0x01; data1=data&0x02; data2=data&0x04; data3=data&0x08; data4=data&0x10; data5=data&0x20; data6=data&0x40; data7=data&0x80; datanew=data0*128+data1*16+data2*2+data3/4+data4/16+data5/8
29、+data6/4+data7/2;returndatanew; 此函数首先是将原本想要输出的数据的每一位分别取出,然后对每一位按照变化关系进行移动,最后再重新拼接到一起。此函数理解起来并不难。只是在确认对应关系时有些繁琐,要细心分析,否则会出错。6.1.2写控制命令函数write_com观察时序图可以看到要想写一条指令,首先先确保使能端E为低电平-将RS拉直低电平-将R/W置为低-此时讲控制数据写入-将E抬高-演示一段时间-将E拉低。写控制操作就完成了,下面为本次硬件课程实验中的写控制命令子函数:voidwrite_com(unsigned char com) PORTD_DIR|=0x38;
30、 nop(); PORTD_OUT&=0xF7; nop(); PORTD_OUT&=0xEF; nop(); PORTD_OUT&=0xDF; delay_us(1000); PORTC_DIR=0xFF; PORTC_OUT=datachange(com); nop(); PORTD_OUT|=0x08; nop(); nop(); delay_us(5000); PORTD_OUT&=0xF7; delay_us(5000); 要说明的是对于每个IO端口,AVR单片机都设有三个寄存器PORTN_DIR PORT_IN PORTN_OUT。其中PORTN_DIR用来定义数据方向,高电平表示
31、该IO端口输出,低电平表示该IO端口为输入,所以第一句是用来定义PD4,PD5,PD3三个端口被定义为输出,正好对应我们硬件电路中设计的RS,R/W,E,其余的并未更改,第二句将E(PD3)拉低,nop();是一个之前定义过的一个延迟非常短的时间。delay_us()为一个有输入的函数,随着输入数据变化延时时间变化接着是将R/W置为低,此时讲控制数据写入,然后将E抬高延迟一段时间将E拉低。写控制操作就完成了,不难看出此函数完全遵守时序图最终结果也证明此函数是正确的。6.1.3写数据命令函数write_dat观察时序图可以看到要想写一条指令,首先先确保使能端E为低电平-将RS升高到电平-将R/W置为低-此时讲控制数据写入-将E抬高-延迟一段时间-将E拉低。写数据操作就完成了,下面为本次硬件课程实验中的写控制命令子函数voidwrite_dat(unsigned char dat) PORTD_DIR|=0x38; PORTD_OUT&=0xF7; nop(); delay_us(5000); PORTD_OUT|=0X10; nop(); delay_us(5000); PORTD_OUT&=0xDF; nop(); delay_us(5000); PORTC_DIR=0xFF; PORTC_OUT=datachange(dat); delay_us(100); PORTD
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1