***大学毕业设计(论文)
实现计算频率,所以,本次设计需要做好以下工作:
1) 学习Mega16原理等资料[4] 2) 学习1602LCD原理等资料 3) 设计测量电容,电感的振荡电路 4) 设计1602LCD动态显示电路 5) 设计测量频率程序,设置程序
6) 用Protel 99SE软件绘制电原理图和印刷电路版图 7) 在计算机上进行模拟测试,记录测试数据和结果 8) 撰写项目论文
1.4 设计思路
主控制器采用Mega16单片机,这种单片机具有足够的空余硬件资源,以便可以实现其他的扩充功能。利用LM311振荡电路测量频率、单片机处理数据、1602LCD显示数据结果。可以实现电容(1pF—440uF)、电感(1nHy—100mHy)的测量精度。
1.4.1 硬件设计思路
硬件设计是整个系统的基础,要考虑的方方面面很多,除了实现此设计基本功能以外,主要考虑如下几个因素:
1) 系统稳定度
2) 器件的通用性或易选购性 3) 软件编程的易实现性 4) 系统其它功能及性能指标
因此硬件设计至关重要。主要设计包括以下三部分:
单片机主控模块:采用Mega16单片机作为整个硬件系统的核心[5],它既是协调整机工作的控制器,又是数据处理器。关于主控芯片的体系结构在第二章会有详细的介绍。
LC测试模块:LM311是普通的电压比较器,它和L1、C1组成振荡器[6]。由测量原理可以看出电路对L1、C1的精度无严格的要求,但是标准电容C2要尽可能的准确。电路组装好以后,首先要保证振荡器工作正常,可以用示波器看一下,正常后再调试程序,以免走弯路。标准电容器的接入和断开是由单片机控制继电器完成的。2×2开关S1用来切换电容/电感测试模式,其中的一个空闲触点接到单片机的PB2端口用来指示当前的测试模式是电感还是电容,这里该触点接地是测试电感。
显示模块:通过LCD驱动程序对Mega16处理的结果进行稳定显示,在测试期间显示能够保持稳定状态,当离开测试能够迅速归零。
1.4.2 软件设计思路
程序比较简单,主要包括测频率和计算两部分。测频率我这里是用定时器T0定时
4
***大学毕业设计(论文)
250毫秒,振荡器输出接至计数器T1端口,在T0溢出中断中记录计数值,将四次溢出中断的计数值加在一起就是振荡频率。主程序按以下顺序工作:
1) 测量由L1C1组成的振荡器的频率F1
2) 控制继电器将标准电容与C1并联,测出由L1和C1+C2组成的振荡器的频率F2 3) 计算L1和C1的值 4) 断开C2,检测PB2
PB2=1测电容,并联Cx测量F2,由公式Cx?(F12?F22?1)?C1求出Cx PB2=0测电感,串联Lx测量F2,由公式Lx?(F12?F22?1)?L1求出Lx
5
***大学毕业设计(论文)
2 Mega16微型控制器介绍
本章就Mega16单片机作了简单介绍。其中,简要介绍Mega16的系统结构、存储器地址分配、CPU内部寄存器、寄存器详述、I/O接口引脚。
2.1 Mega16的系统结构
Mega16单片机系统结构大致可分为MCU核心与MCU外设两部分。 (1)MCU核心
该部分包括MCU的3中存储器(FLASH、SRAM、EEPRONM);模拟比较器和数模转换器;程序存储器的页面模式控制;具有中断识别、读/写控制、工作模式等控制功能的系统综合模块(SIM);可用于系统扩展的分时复用总线端口,其中A口、B口可作为外扩展存储器或接口电路的分时复用地址/数据总线,D口的部分可作为控制总线。
(2)MCU外设
Mega16外设部分包括:A/D转换器[7],两线串行接口TWI,串行接口SPI等接口。
2.2 存储器地址分配
本节讲述Mega16的存储器。AVR结构具有两个主要的存储器空间:数据存储器空间和程序存储器空间。此外,Mega16还有EEPROM存储器以保存数据。这三个存储器空间都为线性的平面结构。
Mega16具有16K字节的在线编程Flash,用于程序指令代码。因为所有的AVR指令为16位或32位,故而Flash组织成8K*16位的形式。用户程序的安全性要根据Flash程序存储器的两个区:引导(Boot)程序区和应用程序区,分开来考虑。Flash存储器至少可以擦写10,000次。Mega16的程序计数器(PC)为13位,因此可以寻址8K字的程序存储器空间。常数可以保存于整个程序存储器地址空间。
2.3 CPU内部寄存器
本节从总体上讨论AVR内核的结构。CPU的主要任务是保证程序的正确执行。因此它必须能够访问存储器、执行运算。控制外设以及处理中断。
6
***大学毕业设计(论文)
图2.1 AVR内核的结构
为了获得最高的性能以及并行性,AVR采用了Harvard结构,具有独立的数据和程序总线。程序存储器里的指令通过一级流水线运行。CPU在执行一条指令的同时读取下一条指令(在本文称为预取)。这个概念实现了指令的单时钟周期运行。程序存储器是可以在线编程的Flash。
快速访问寄存器文件包括32个8位通用工作寄存器,访问时间为一个时钟周期。从而实现了单时钟周期的ALU操作。在典型的ALU操作中,两个位于寄存器文件中的操作数同时被访问,然后执行运算,结果再被送回到寄存器文件。整个过程仅需一个时钟周期。
寄存器文件里有6个寄存器可以用作3个16位的间接寻址寄存器指针以寻址数据空间,实现高效的地址运算。其中一个指针还可以作为程序存储器查询表的地址指针。
7
***大学毕业设计(论文)
这些附加的功能寄存器即为16位的X、Y、Z寄存器。
ALU支持寄存器之间以及寄存器和常数之间的算术和逻辑运算[8]。ALU也可以执行单寄存器操作。运算完成之后状态寄存器的内容得到更新以及反映操作结果。
程序流程通过有无条件的跳转指令和调用指令来控制,从而直接寻址整个地址空间。大多数指令长度位16位,亦即每个程序存储器地址都包含一条16位或32位的指令。程序存储器空间分为两个区:引导程序区(Boot区)和应用程序区。这两个区都有专门的锁定位以实现读和读/写保护。用于写应用程序区的SPM指令必须位于引导程序区。
在中断和调用子程序时返回地址的程序计数器(PC)保存于堆栈之中。堆栈位于通用数据SRAM,因此其深度仅受限于SRAM的大小。在复位例程里用户首先要初始化堆栈指针SP。这个指针位于I/O空间,可以进行读写访问。数据SRAM可以通过5种不同的寻址模式进行访问。AVR存储器空间为线性的平面结构。AVR有一个灵活的中断模块。控制寄存器位于I/O空间。状态寄存器里有全局中断使能位。每个终端在终端向量表里都有独立的中断向量。各个中断的优先级与其在中断向量表里的位置有关,中断向量地址越低,优先级越高。I/O存储器空间高喊64个可以直接寻址的地址,作为CPU外设的控制寄存器、SPI,以及其他I/O功能。映射到数据空间即为寄存器文件之后的地址0x20-0x5F。
AVR、ALU与32个通用工作寄存器直接相连。寄存器与寄存器之间、寄存器与立即数之间的ALU运算只需要一个时钟周期。ALU操作分为3类:算数、逻辑和位操作。此外还提供了支持无/有符号数和分数乘法的乘法器。
AVR中断寄存器SREG定义如下:
图2.2 AVR中段寄存器STEG
Bit7-I:全局中断使能 I置位时使能全局中断。单独的中断使能有其他独立的控制寄存器控制。如果I清零,则不论单独中断标志置位与否,都不会产生中断。任意一个中断发生之后I清零,而执行RETI指令后I恢复置位以使能中断。I也可以通过SEI和CLI指令来置位和清零。
Bit6-T:位拷贝存储 位拷贝指令BLD和BST利用T作为目的或源地址。BST把寄存器的某一位拷贝到T,而BLD把T拷贝到寄存器的某一位。
Bit5-H:半进位标志 半进位标志H表示算数操作发生了半进位。此标志对于BCD运算非常有用。
8