基于AVR单片机录音笔的设计与制作毕业设计论.docx

上传人:b****2 文档编号:24457417 上传时间:2023-05-27 格式:DOCX 页数:32 大小:412.46KB
下载 相关 举报
基于AVR单片机录音笔的设计与制作毕业设计论.docx_第1页
第1页 / 共32页
基于AVR单片机录音笔的设计与制作毕业设计论.docx_第2页
第2页 / 共32页
基于AVR单片机录音笔的设计与制作毕业设计论.docx_第3页
第3页 / 共32页
基于AVR单片机录音笔的设计与制作毕业设计论.docx_第4页
第4页 / 共32页
基于AVR单片机录音笔的设计与制作毕业设计论.docx_第5页
第5页 / 共32页
点击查看更多>>
下载资源
资源描述

基于AVR单片机录音笔的设计与制作毕业设计论.docx

《基于AVR单片机录音笔的设计与制作毕业设计论.docx》由会员分享,可在线阅读,更多相关《基于AVR单片机录音笔的设计与制作毕业设计论.docx(32页珍藏版)》请在冰豆网上搜索。

基于AVR单片机录音笔的设计与制作毕业设计论.docx

基于AVR单片机录音笔的设计与制作毕业设计论

毕业设计

 

系别:

电子工程系

专业:

计算机控制

班级:

0802班

姓名:

设计课题:

基于AVR单片机录音笔的设计与制作

指导老师:

 

前言

AVR单片机是一款功能十分强大,集成度非常高的数字处理系统。

它集成了ADC与PWM的模块,而且还有硬件滤波器!

它基本上能够处理生活中实时性不太强的模拟信号与数字信号,并实现通信!

该课题设计基于ATmega16单片机,介绍和分析了录音笔的基本原理,并做出了较为简单的录音笔模型展示其原理!

主要运用了ATmega16单片机内部集成的ADC转换模块以及PWM功能,将从外部接收的模拟信号转化为数字信号,并存储在AT45DB041B存储芯片中,再将从AT45DB041B存储芯片中读取的数字信号转化为模拟信号,送到外部的喇叭中进行播放。

主要功能有录音,存储,删除,放音等!

 

 

 

1课题分析

1.1录音笔简介

数码录音笔,也称为数码录音棒或数码录音机,数字录音器的一种,为了便于操作和提升录音质量造型并非以单纯的笔型为主,携带方便,同时拥有多种功能,如激光笔功能、FM调频、MP3播放等。

与传统录音机相比,数码录音笔是通过数字存储的方式来记录音频的。

数码录音笔通过对模拟信号的采样、编码将模拟信号通过数模转换器转换为数字信号,并进行一定的压缩后进行存储。

而数字信号即使经过多次复制,声音信息也不会受到损失,保持原样不变。

1.2设计构想

设计三个按钮,分别实现录音、删除、放音的功能,当按下不同的按钮时,可以实现不同的功能。

首先要实现声音信号的采集,就需要一种声敏传感器,可以采用MIC,再加上一些滤波电路,从而实现声音信号的采集。

但是我们都知道,计算机处理的是数字信号,而采集的声音信号是模拟信号,因此,需要实现从模拟信号到数字信号的转化,可以利用专门的ADC转换芯片或者是其他的某种方法,将模拟信号转化为数字信号。

接下来就是转化后的声音信号的存储,需要某种存储芯片,将信号存储在芯片中,以至于掉电之后,声音信号

不丢失。

最后就是声音的还原,将信号从存储芯片中读取出来,但是此时的信号是数字信号,需要进行DAC转换,可以利用专门的DAC转换芯片或者是其他的某种方法来实现,将转化后的模拟信号,送到外部的喇叭播放。

删除则直接将存储芯片中的数据删除就行了,当然这中间还有许多的细节问题需要考虑,例如声音的功率放大、去除杂波等等。

2方案选择

2.1运用专门的语音芯片

采用单片机控制一个语音芯片,再接一个FLASH存储器的结构。

单片机可以控制录放时间,选取特定时间段的播放以及单多声道的录放,容易通过改变外接存储FLASH改变录放时间。

此方法较为简单,但是这种语音芯片的价格较为昂贵,还有AVR单片机的功能十分强大、资源也比较丰富,如果把它仅仅作为一种控制开关使用,太过于浪费了。

2.2运用avr自带的ADC以及PWM模块

AVR系列的单片机内部,已经集成了ADC和PWM模块,利用这两个模块,可以实现数模转换和模数转换。

只要从软件上加以控制,就可以实现声音的录放功能。

此方法很好的利用了单片机的内部资源,不但可以节约大量的费用而且还可以让我们更进一步的了解AVR系列单片机的内部结构,因此在本课题中采用了这种方法。

3芯片简介

3.1ATmega16芯片简介[1]

ATmega16的封装如图3-1所示。

图3-1ATmega16的引脚图

ATmega16的引脚说明:

VCC数字电路的电源

GND地

端口A(PA7..PA0)端口A做为A/D转换器的模拟输入端。

端口A为8位双向I/O口,具有可编程的内部上拉电阻。

其输出缓冲器具有对称的驱动特性,可以输出和吸收大电流。

作为输入使用时,若内部上拉电阻使能,端口被外部电路拉低时将输出电流。

在复位过程中,即使系统时钟还未起振,端口A处于高阻状态。

端口B(PB7..PB0)端口B为8位双向I/O口,具有可编程的内部上拉电阻。

其输出缓冲器具有对称的驱动特性,可以输出和吸收大电流。

作为输入使用时,若内部上拉电阻使能,端口被外部电路拉低时将输出电流。

在复位过程中,即使系统时钟还未起振,端口B处于高阻状态。

端口B也可以用做其他不同的特殊功能。

端口C(PC7..PC0)端口C为8位双向I/O口,具有可编程的内部上拉电阻。

其输出缓冲器具有对称的驱动特性,可以输出和吸收大电流。

作为输入使用时,若内部上拉电阻使能,端口被外部电路拉低时将输出电流。

在复位过程中,即使系统时钟还未起振,端口C处于高阻状态。

如果JTAG接口使能,即使复位出现引脚PC5(TDI)、PC3(TMS)与PC2(TCK)的上拉电阻被激活。

端口D(PD7..PD0)端口D为8位双向I/O口,具有可编程的内部上拉电阻。

其输出缓冲器具有对称的驱动特性,可以输出和吸收大电流。

作为输入使用时,若内部上拉电阻使能,则端口被外部电路拉低时将输出电流。

在复位过程中,即使系统时钟还未起振,端口D处于高阻状态。

端口D也可以用做其他不同的特殊功能。

RESET复位输入引脚。

持续时间超过最小门限时间的低电平将引起系统复位。

持续时间小于门限间的脉冲不能保证可靠复位。

XTAL1反向振荡放大器与片内时钟操作电路的输入端。

XTAL2反向振荡放大器的输出端。

AVCCAVCC是端口A与A/D转换器的电源。

不使用ADC时,该引脚应直接与VCC连接。

使用ADC时应通过一个低通滤波器与VCC连接。

AREFA/D的模拟基准输入引脚。

ATmega16的功能说明:

AVR内核具有丰富的指令集和32个通用工作寄存器。

所有的寄存器都直接与算逻单元(ALU)相连接,使得一条指令可以在一个时钟周期内同时访问两个独立的寄存器。

这种结构大大提高了代码效率,并且具有比普通的CISC微控制器最高至10倍的数据吞吐率。

ATmega16有如下特点:

16K字节的系统内可编程Flash(具有同时读写的能力,即RWW),512字节EEPROM,1K字节SRAM,32个通用I/O口线,32个通用工作寄存器,用于边界扫描的JTAG接口,支持片内调试与编程,三个具有比较模式的灵活的定时器/计数器(T/C),片内/外中断,可编程串行USART,有起始条件检测器的通用串行接口,8路10位具有可选差分输入级可编程增益(TQFP封装)的ADC,具有片内振荡器的可编程看门狗定时器,一个SPI串行端口,以及六个可以通过软件进行选择的省电模式。

工作于空闲模式时CPU停止工作,而USART、两线接口、A/D转换器、SRAM、T/C、SPI端口以及中断系统继续工作;掉电模式时晶体振荡器停止振荡,所有功能除了中断和硬件复位之外都停止工作;在省电模式下,异步定时器继续运行,允许用户保持一个时间基准,而其余功能模块处于休眠状态;ADC噪声抑制模式时终止CPU和除了异步定时器与ADC以外所有I/O模块的工作,以降低ADC转换时的开关噪声;Standby模式下只有晶体或谐振振荡器运行,其余功能模块处于休眠状态,使得器件只消耗极少的电流,同时具有快速启动能力;扩展Standby模式下则允许振荡器和异步定时器继续工作本芯片是以Atmel高密度非易失性存储器技术生产的。

片内ISPFlash允许程序存储器通过ISP串行接口,或者通用编程器进行编程,也可以通过运行于AVR内核之中的引导程序进行编程。

引导程序可以使用任意接口将应用程序下载到应用Flash存储区(ApplicationFlashMemory)。

在更新应用Flash存储区时引导Flash区(BootFlashMemory)的程序继续运行,实现了RWW操作。

通过将8位RISCCPU与系统内可编程的Flash集成在一个片内,ATmega16成为一个功能强大的单片机,为许多嵌入式控制应用提供了灵活而成本的解决方案。

ATmega16具有一整套的编程与系统开发工具,包括:

C语言编译器、宏汇编、程序调试器/软件仿真器、仿真器及评估板。

3.2AT45DB041B芯片简介

AT45DB041B的封装如图3-2所示。

图3-2AT45DB041B的引脚图

AT45DB041B的引脚说明:

连续输入(SI):

SI脚仅作为输入脚且用于将数据写入至器件中。

所有的数据输入包括操作码,地址序列都用此引脚。

连续输出(SO):

SO脚仅作为输出脚且用于将器件内的数据移出。

连续时钟(SCK):

SCK仅作为输入脚且用于控制流进和流出器件的数据。

数据总是随着SCK脚上的上升沿进入而随着SCK脚上的下降沿流出。

片选(CS):

当CS脚为低电平时选通数字闪存。

当器件没有被选通时,数据无法被SI脚所接收,而SO脚将会保持为高阻态。

要进行某个操作,CS脚上必须有一个由高到低电平的跃变,要结束某个操作,CS脚上必须有一个由低到高电平的跃变。

写保护:

如果WP脚置为低电平,主存中的前256页就无法被重写。

要重写前256页的唯一方法就是将该引脚拉为高电平,然后用前面所提到的编写命令。

WP脚是内部拉高的;因此若非需要,WP脚上不需连接其他引脚。

然而,我们建议尽量通过外部拉高WP引脚。

复位:

复位脚(RESET)上的低电平将终止正在运行中的操作并将内部状态置为空闲状态。

只要RESET脚上一直为低电平,那么器件就一直处于复位状态。

一旦RESET脚上返回至高电平,器件就可以正常运行了。

本器件内部整合了电源开启重接电路,所以在开启电源期间在RESET脚上并无何限制。

RESET脚也是内部拉高的;因此若非需要,RESET脚上不需连接其他引脚。

然而,我建议尽量通过外部拉高RESET引脚。

准备/忙:

当器件进行某个内部自同步操作而处于忙状态时,该漏极输出引脚将被拉低。

该引脚通常处于高电平状态(通过1个1千欧外部上拉电阻),而在编写,较和页至缓存的传送操作器件,将会被拉低。

状态表示着闪存阵列和其中一个缓存不能被访问;但对于另一个缓存的读写操作仍可进行。

AT45DB041B的功能说明:

单电源2.5V-3.6V或2.7V-3.6V供电,兼容串行外设接口最高20MHZ时钟频率页编写操作—单周期程序重调(擦除和编写)—2048页(264字节/页)主内存,支持页和块擦除操作,双264字节SRAM数据缓存—在非易失性存储器中进行程序重调时可接收数据,能过连续地读取整个存储阵列,低功耗—有效读取工作电流仅为4毫安—CMOS待机电流仅为2微安,数据保护功能100%与AT45DB041及AT45DB041A兼容,5V输入容限电压:

SI,SCK,CS,RESET和WP引脚,商用及工业用温度范围描述AT45DB041B仅需2.5V或2.7V供电,采用串行接口闪存,能够广泛的适用于各种数字语音,图像,编码以及数据存储应用。

其4,325,376位的内存是由2048个页构成,每页为264个字节。

除了主存以外,AT45DB041B还有两个容量为264字节的SRAM数据缓存。

当在主内存的某页上进行程序重调或者连续读写数据流时,数据缓存都可以接收数据。

EEPROM仿真(位或字节可变更)能够容易地处理独立的三步读-修改-写操作。

不同于传统的以多路地址线和并行接口随机访问的闪存芯片,本数字闪存是利用SPI串行接口来顺序存取其数据。

该数字闪存支持SPI模式0和模式3。

其简单的串行接口使得外围硬件设计变得容易,增强了系统的可靠性,最大化减小了开关噪声,降低了封装尺寸和有效引脚数量。

该器件能够最优化的运用于以高密度,少引脚数量,低电压和低功耗为基本要求的各类商业和工业场合。

该器件的有效工作电流为4毫安,能运行达到20MHZ的时钟频率。

AT45DB041B不需要高输入电压就可以进行简单在系统编写。

在进行编写和读操作时,本器件需要单独的电源供电,电压为2.5V至3.6V或者2.7V至3.6V。

片选引脚CS和一个由连续输入SI,连续输出SO和连续时钟SCK组成的三线访问接口使得AT45DB041B正常工作。

所有的编写周期都是自同步的,因而在编写之前都无需分开的擦除周期。

当器件从Atmel公司出厂后,存储阵列中最高页可能没有被擦除净。

也就是说,最后一个页中的内容可能并非是FFH。

AT45DB041B的读命令如表3-1所示。

 

表3-1AT45DB041B的读命令

命令

SCK模式

操作码

连续阵列读取

未激活时钟极低或高

68H

SPI模式0或3

E8H

主存页读取

未激活时钟极低或高

52H

SPI模式0或3

D2H

缓存1读取

未激活时钟极低或高

54H

SPI模式0或3

D4H

缓存2读取

未激活时钟极低或高

56H

SPI模式0或3

D6H

状态寄存器读取

未激活时钟极低或高

57H

SPI模式0或3

D7H

AT45DB041B的编写与擦除命令如表3-2所示。

表3-2AT45DB041B的编写与擦除命令

命令

SCK模式

操作码

缓存1写

任意

84H

缓存2写

任意

87

带内置擦除的缓存1到主存页编写

任意

83

带内置擦除的缓存2到主存页编写

任意

86

带内置擦除的缓存1到主存页编写

任意

88

带内置擦除的缓存1到主存页编写

任意

89

页擦除

任意

81

块擦除

任意

50

通过缓存1的主存页编写

任意

82

通过缓存1的主存页编写

任意

85

AT45DB041B的附加命令如表3-3所示。

表3-3AT45DB041B的附加命令

命令

SCK模式

操作码

主存页至缓存1的传送

任意

53H

主存页至缓存2的传送

任意

55H

主存页至缓存1的比较

任意

60H

主存页至缓存2的比较

任意

61H

通过缓存1的自动页重写

任意

58H

通过缓存2的自动页重写

任意

59H

AT45DB041B的写操作时序如图3-3所示。

图3-3AT45DB041B的写操作时序

AT45DB041B的读操作时序如图3-4所示。

图3-4AT45DB041B的读操作时序

4总体设计

4.1系统设计方框图

系统总体设计如图4-1所示。

方框图的相关说明:

以AVR单片机为核心,外接声音的输入电路、声音的输出电路、按钮的输入电路和声音的存储电路,其中声音的输入电路用于从外界接收声音信号,并且送到AVR单片机中进行处理,声音的输出电路用于接收AVR单片机输出的声音信号,并且送到speaker中进行播放,声音的存储电路用于声音信号的存放与取出,按钮的输入电路用于实现不同的功能,包括录音、放音、删除等。

通过硬件电路和软件程序的有机结合,从而实现了录音笔的相关功能。

图4-1系统设计方框图

4.2硬件设计

4.2.1硬件设计思想

用麦克风采集音频信号,经过一次功放,然后用电容进行一次滤波,电容的大小采用4.7nf,滤波后进行AD转换,转换后的信号存在AT45DB041B中,然后用单片机调出信号,经过三次放大,将信号传到扬声器播放。

电路图上,ATmega16以上的电路图(见附录A)就是用来采集信号的,放大信号用的是LM324集成功放芯片。

ATmega16以右的电路图(见附录A)用来放音,经过三次信号放大,再放大信号的同时进行过滤。

4.2.2声音输入模块[2]

声音输入模块原理图如图4-2所示。

图4-2声音输入模块原理图

模块的功能说明:

MIC与ATmega16之间的电路模块,用来采集语音信号,并进行一定的处理,为ATmega16进行ADC转换做好准备。

通过MIC接收外部的语音信号,通过功率放大器LM324进行功率放大,并通过4.7nf的电容接地进行滤波,这样可以保证声音信号完整和正确地送到Atmega16的PD7引脚。

4.2.3声音存储模块[3]

声音存储模块原理图如图4-3所示。

图4-3声音存储模块原理图

模块的功能说明:

ATmega16及紧密相连的这一部分电路模块,是该系统的核心部分,ADC转换和DAC转换,都是在该部分进行的,并通过该部分控制整个系统,相应的滤波,外部晶振和按键也属于该部分。

ATmega16芯片与AT45DB041B相连,实现对信号的读写操作,从而实现了信号的储存与取出,擦除等。

电路中有三个按键和三个指示灯,当不同的按键按下时,会执行不同的程序,并且会点亮相应的指示灯。

当从引脚PD7接收到外部语音信号后,经过处理,存储在芯片AT45DB041B中,需要放音时,从芯片AT45DB041B中读取信号,经过处理,送到引脚PA0。

4.2.4声音输出模块

声音输出模块原理图如图4-4所示。

图4-4声音输出模块原理图

模块的功能说明:

耳机与ATmega16之间的电路模块,用来将存储在ATmega16的数字信号通过模拟语音信号还原出来,之前还进行了一系列的功放,用于信号的放大与相关处理。

接收到芯片引脚PA0输出的信号后,经过三个功率放大器LM324进行功率放大,并且有接地电容进行滤波,这样可以保证声音信号完整和不失真地送到speaker中进行播放。

4.3软件设计

4.3.1软件设计思想[4]

首先是设备初始化,但是初始化程序中,用于ADC转换的定时器等并没有进行初始化,只是将PA0设置为输入模式,不上拉使能(作为AD转换的输入通道),用于SPI通信[1]的各个引脚的模式进行了设置。

初始化完成之后,就进入主程序中进行键盘扫描,速度极其的快,无键盘按下时甚至只用不到1微秒的时间。

一旦检测到哪个键按下就进入相应的程序中去。

录音程序的设计思想:

检测到录音键按下后进入录音程序,然后ADC初始化同时开始一次AD转换,延时一小会儿,等待AD转换结束。

接着SPI、定时器初始化,从此就靠定时器来主导整个录音程序的运行了。

定时器有中断,其中有要求TCNT0设置这个基本的操做,还有一个就是ADSC置位要求进行下一次转换。

至于AD转化的值则在AD中断中写入一个已经建好循环队列中。

定时器定时80微秒,一次AD转换是在定时一开始就进行,需要时间52微秒,也就是说定时器溢出时AD中断一定结束了,下一次中断之前数据一定已经进入了队列中,如此循环。

而在这期间有大量的时间向Dataflash中写数据。

Dataflash有2048页,每一页有264字节,在每一页写满之前,程序不会再检测按键,一直到一页写满了,才检测按键,如果仍旧是按下则继续录音,否则退出。

退出后如果存储空间未满则存储位置的参数会保留,下次录音可以接着向下写。

如果满了,则录音工作指示灯永远都不会亮了,除非重启。

但是在退出录音程序时,ADC、SPI、定时器会全部关闭,再进入程序时再初始化开启。

放音程序的设计思想:

与录音程序相同,进入程序之后才开启所需要的功能。

不同的是先开录音工作指示灯,SPI,然后向Dataflash要一次数据,再开TIMER2的快速PWM功能。

一次PWM时间是16微秒,每五次更新一次,通过调节占空比来实现DA转换的功能。

同样的每五次中断期间都有足够的时间向Dataflash要数据。

放音程序最大的特点是那些控制参数虽然是全局变量,但是它们在进入程序的第一时间就被初始化了,在就要退出程序的最后时刻再次被初始化。

这样就使得整个程序可以进行循环放音,但是每次都是从头开始,放开按键时停止,再按下时又从头开始。

由于放开按键的同时按下按键的可能性很小,所以放音键按下的状态会在主程序按键检测循环中被检测到,并进入放音程序。

擦除程序设计思想:

擦除程序就简单多了。

首先,如前面提到的,它有延时去抖的时间。

其次,由于查找资料时找到的资料并没有芯片的块擦除命令,所以决定先往芯片的buffer1中写满0,然后顺次往每一个主页存储空间中进行先擦除再写的操作(即BUFFERTOMAINMEMORYWITHBUILT-INERASE),这样消耗的时间会长很多,大约为70秒钟。

4.3.2程序流程图

系统主程序如图4-5所示。

图4-5程序流程图

4.3.3主函数方框图

主函数方框图如图4-6所示。

方框图的相关说明[5]:

这里主要说明了放音函数具体的操作过程,当按下放音按键时,进入放音函数playback(),进行相关变量和器件的的初始化操作,当放音按键放开时,返回到主函数进行按键的扫描,否则,进入声音的播放程序。

从buffer中读取数据并且根据数据改变OCR变量,利用timer的PWM功能,实现数字信号的模拟输出,即声音信号的还原。

图4-6主函数方框图

4.4系统的调试与总结

按照电路原理图,连接好电路。

在ICCavr编译器中,输入程序,并且进行编译,生成test.hex文件,通过编程器下载到AVR单片机中,上电运行[6]。

按下录音按键,对着MIC讲话,讲完以后放开按键。

按下放音按键,仔细听speaker中的声音。

放出的声音失真,对定时器的定时时间做一下微调,然后再进行测试。

按下删除按键,无法再进行播放,达到了删除已存储信息的目的。

通过对系统的微小调节,基本上可以实现录音、放音和删除等功能。

5总结

本课题使用的是AVRmage16高速单片机[6],利用其内部的ADC模块和PWM功能,实现了声音的录放功能,揭开了录音笔的神秘面纱。

当然这与现实生活中运用的录音笔相比,还有很多的不足之处。

此设计充分利用的单片机内部的资源,通过硬件和软件的紧密结合,基本上实现了声音的录放功能。

在声音的处理上,硬件设计和软件设计,也许考虑的不够周全,可能造成声音的失真。

随着科技的不断发展,芯片的集成度越来越高,可以用最简单的外围电路,来实现非常复杂的功能。

所以,在我们在系统设计时,应该充分利用芯片内部的资源,认真分析它们的使用方法,这样在进行设计时可以达到事半功倍的效果。

 

7附录

附录A:

系统的总体设计原理图如图7-1所示

图7-1系统的总体设计原理图

附录B:

系统设计源程序清单

//Target:

M16

//Crystal:

16.000Mhz

#include

#include

#defineBUFFER1_READ0x54

#defineBUFFER2_READ0x56

#defineMAIN_TO_BUFFER10x53

#defineMAIN_TO_BUFFER20x55

#defineBUFFER1_WRITE0x84

#defineBUFFER2_WRITE0x87

#defineBUFFER1_TO_MAIN_WITH0x83

#defineBUFFER2_TO_MAIN_WITH0x86

#defineBUFFER1_TO_MAIN_WITHOUT0x88

#defineBUFFER2_TO_MAIN_WITHOUT0x89

#defineMAIN_PROGRAM_BUFFER10x82

#defineMAIN_PROGRAM_BUFFER20x85

//给SPI定义的PORTB的引脚

#defineDF_CS3

#defineDDR_MOSI5

#defineDDR_MISO6

#defineDDR_SCK7

//给工作状态指示灯LED的引脚

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 法律文书 > 调解书

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1