ISD4004语音录课程设计.docx
- 文档编号:6732554
- 上传时间:2023-01-09
- 格式:DOCX
- 页数:18
- 大小:179.80KB
ISD4004语音录课程设计.docx
《ISD4004语音录课程设计.docx》由会员分享,可在线阅读,更多相关《ISD4004语音录课程设计.docx(18页珍藏版)》请在冰豆网上搜索。
ISD4004语音录课程设计
单片机原理及接口技术课程设计(论文)
摘要
语音不仅是人与人之间进行信息交流最直接、最方便和最有效的工具,而且也是人与机器之间进行通信的重要工具。
1874年电话的发展可以认为是现代处理的开端。
电话的理论基础是尽可能不失真地传送语音波形。
这种“波形原则”几乎统治了其后整整一百年。
1939年产生了一种概念全新的语音处理技术,这就是著名的通道声码器技术。
声码器的理论基础是认为语音是由人的声带振动产生的生源(载波)受到运动的声道的控制(调制)而产生的,因而将载波和调制两部分分开来进行传送便可极大地压缩频带。
这一概念已经包含着其后出现的语音参数模型的基本思想。
40年代后期,研制成功了能够把语音信号的时变谱用语音表示出来的仪器——语音仪,为语音信号分析提供了一个有力的工具。
对于语音信号,数字处理比模拟处理具有更多的优点。
这是因为:
第一,数字技术能够完成许多很复杂的信号处理工作;第二,通过语音进行交换的信息本质上具有离散的性质,因为语音可以看成是因素的组合,这就特别适合于数字处理;第三,数字系统具有高可靠性、价廉、紧凑、快速等特点,很容易完成实时处理任务;第四,数字语音适合于在强干扰通信中传输,易于和数据一起在通信网中传输,也易于进行加密传输。
因此数字语音信号处理是主要研究方向。
单片机的应用无处不在,利用单片机控制语音的录放也多不胜举。
用单片机控制语音芯片,再把单片机和语音芯片嵌入到通信设备,智能仪器,治安报警及儿童玩具中,就可做成语音播放的机器,应用范围广泛。
用单片机控制语音芯片设计语音录放系统,该系统功能多,录放音音质好,外围电路简单。
关键词:
STC89C52;录音放音;ISD4004
目录
第1章绪论1
第2章课程设计的方案2
2.1概述2
2.2系统组成总体结构2
第3章硬件设计4
3.189C2051单片机性能和引脚介绍4
3.2语音信号功率放大电路5
3.3ISD4004语音芯片介绍6
3.3.1芯片性能简述和引脚图6
3.3.2ISD4004芯片主要引脚描述7
3.3.3SPI协议8
第4章软件设计10
4.1总体方案10
4.2程序流程图10
4.2.1系统程序流程10
4.2.2子程序流程11
4.3模块说明11
4.3.1ISD4004驱动程序11
4.3.21602液晶底层驱动13
第5章制作与调试15
5.1硬件电路的布线与焊接15
5.1.1总体特点15
5.1.2Altiumdesigner软件画PCB15
5.1.3焊接15
5.2调试15
5.2.1硬件调试16
5.2.2软件调试16
第6章课程设计总结17
参考文献18
附录19
第1章绪论
本设计主要用来实现语音录放功能。
语音录放系统主要包括单片机控制模块、语音采集模块、语音处理模块、信号放大模块,其中单片机控制模块是整个系统设计的关键。
在语音的录放过程中,单片机通过SPI通信方式与语音模块进行通讯,来实现语音的录音与播放。
由于每段录音都对应着不同的地址,因此在播放录音时,需要发送需要播放的地址即可播放。
语音录放系统的信号处理过程主要包括语音的采集、信号的放大和语音的滤波。
语音经过驻极体传感器,即麦克风,把声波信号转换成电信号。
传感器采集的电信号进过放大电路,放大一定倍数,经滤波、耦合之后送至语音模块。
语音模块对连续变化的语音信号进行采样,抽取其中的语音信号电平,直接存储在语音芯片ISD4004中,因此使得语音自然真实。
当语音播放时,需要在语音芯片的输出段加一个带通滤波器,以滤除音频带宽以外的信号,从而减少杂音的干扰。
STC89C52单片机的程序,使用keil编译程序进行设计和调试完成,其主要功能是控制语音模块,以及1602液晶显示模块。
第2章
课程设计的方案
概述
本次设计主要是综合应用所学知识,设计语音录放系统,并在实践的基本技能方面进行一次系统的训练。
能够较全面地巩固和应用“单片机”课程中所学的基本理论和基本方法,并初步掌握小型单片机系统设计的基本方法。
应用场合:
语音的录放系统的应用十分广泛,可以应用于通讯设备、智能仪表、治安报亭、语音报站、语音讲解、语音记录、语音复读、智能玩具等领域。
系统功能介绍:
语音录放系统的工作原理是单片机通过SPI通信模式,来控制语音芯片ISD4004的录音与播放。
此系统一般包括单片机控制模块、语音的采集模块,语音的放大模块、语音处理模块、滤波模块、功率放大模块和显示模块。
信号传递至语音芯片,语音芯片对连续的电信号进行采样,本系统采用直接存储的方式,ISD4004语音芯片是美国ISD公司制造的一种新款的语音芯片,芯片采用多电平直接模拟量存储技术,每个采样值直接存储在片内闪存flash中,因此能够非常真实、自然地再现语音、音乐、音调和效果音,避免了一般固体录音电路因量化和压缩造成的量化噪音和“金属音”。
系统组成总体结构
语音录放系统主要是通过单片机来控制语音芯片ISD4004来实现语音的录放的功能。
在录音模式下,语音信号,即声波信号,通过麦克风,将其转换成电信号。
但此时的电信号很微弱,需要经放大电路,放大语音信号。
由于电路中可能存在高频分量,信号经过带通滤波器,以滤除语音频带以外的噪声。
最后,ISD4004采样得到的语音信号相对“干净”。
在语音播放的模式下,单片机向ISD4004发送播放的地址和语音播放指令后,便可以播放相应段的语音。
为了使播放的语音依然“干净”,本系统依然设置了一个滤波电路。
由于ISD4004不能驱动一块喇叭,需要在滤波电路添加一个功率放大电路,在本系统中,采用的是LM386语音驱动电路。
如图2.1所示,系统的总体结构框图。
图2.1系统的总体结构框图
第3章硬件设计
89C2051单片机性能和引脚介绍
AT89C2051是美国ATMEL公司生产的低电压,高性能CMOS8位单片机片内含2Kbytes的可反复可擦写的只读程序储存器(PEROM)和128bytes的随机存储数据储存器(RAM),器件采用ATMEL公司的高密度,非易失性储存技术生产,兼容标准MCS-51指令系统,片内置通用8位中央处理器和flash存储单元。
STC89C52是由深圳宏晶科技公司生产的与工业标准的MCS-51指令集和输出管脚相兼容的单片机。
STC89C52单片机管脚如图3.1所示,其主要功能特性表3.1所示。
图3.1单片机管脚
表3.1STC89C52单片机主要功能
STC89C52单片机主要特性
兼容MCS51指令系统
8K可反复擦写FlashROM
32个双向I/O口
256*8bit内部RAM
3个16位可编程定时/计数器中断
时钟频率0-24MHZ
2个串行中断
可编程UART串行通道
2个外部中断
6个中断源
2个读写中断口线
3级加密位
低功耗空闲和掉电模式
软件设置睡眠和唤醒模式
STC89C52引脚具体介绍如下:
①主电源引脚(2根)
VCC(Pin40):
电源输入,接+5V电源
GND(Pin20):
接地线
②外接晶振引脚(2根)
XTAL1(Pin19):
片内振荡电路的输入端
XTAL2(Pin20):
片内振荡电路的输出端
③控制引脚(4根)
RST/VPP(Pin9):
复位引脚,引脚上出现2个机器周期的高电平将使单片机复位。
ALE/PROG(Pin30):
地址锁存允许信号
PSEN(Pin29):
外部存储器读选通信号
EA/VPP(Pin31):
程序存储器的内外部选通,接低电平从外部程序存储器读指令,如果接高电平则从内部程序存储器读指令。
④可编程输入/输出引脚(32根)
STC89C52单片机有4组8位的可编程I/O口,分别位P0、P1、P2、P3口,每个口有8位(8根引脚),共32根。
P0口(Pin39~Pin32):
8位双向I/O口线,名称为P0.0~P0.7
P1口(Pin1~Pin8):
8位准双向I/O口线,名称为P1.0~P1.7
P2口(Pin21~Pin28):
8位准双向I/O口线,名称为P2.0~P2.7
P3口(Pin10~Pin17):
8位准双向I/O口线,名称为P3.0~P3.7
语音信号功率放大电路
LM386是一种音频集成功放,具有自身功耗低、电压增益可调整、电源电压范围大、外接元件少和总谐波失真小等优点,广泛应用于录音机和收音机之中。
它是美国国家半导体公司生产的音频功率放大器,主要应用于低电压消费类产品。
为使外围元件最少,电压增益内置为20。
输入端以地位参考,同时输出端被自动偏置到电源电压的一半,在6V电源电压下,它的静态功耗仅为24mW,使得LM386特别适用于电池供电的场合。
LM386的封装形式有塑封8引线双列直插式和贴片式。
其双列直插式封装如图3.2所示。
图3.2LM386直插封装
语音芯片ISD4004输出的电压只有毫伏级,难以驱动扬声器发声。
本系统采用采用LM386功率放大器,以提高扬声器的驱动能力。
有时喇叭放音会出现失真现象,这是可能是运放的增益过高所致,需要在1脚和8脚之间加一个10uF电容或串联一个10K电位器调整一下。
ISD4004语音芯片介绍
芯片性能简述和引脚图
ISD系列语音芯片是美国ISD公司推出的产品。
该系列芯片采用多电平直接模拟存储(ChipCorder)专利技术,声音不需要A/D转换和压缩,每个采样直接存储在片内的闪烁存储器中,避免了A/D转换的误差;能够真实、自然地还原语音、音乐及效果声;避免了一般固体录音电路量化和压缩造成的量化噪声和金属声[7]。
ISD4000系列采用CMOS技术,内含晶体振荡器、防混叠滤波器、平滑滤波器、自动静噪、音频功率放大器及高密度多电平闪烁存储阵列等,只需要很少的外围器件即可构成一个完整的语音录放系统。
它的操作命令通过串行通信接口(SPI)或Microwire送入;采样频率可为4.0Hz、5.3Hz、6.4Hz、8.0Hz,频率越低,录放时间越长,但音质会有所下降;片内信息存于闪烁存储器中,可在断电情况下保存100年(典型值),反复录音10万次;器件工作电压3V,工作电流25~30mA,音质好,适用于移动电话及其他便携式电子产品[8]。
本设计使用的芯片型号为ISD4004-08,单片录放时间为8分钟。
其芯片的引脚图如图3.3所示。
图3.3ISD4004语音芯片引脚图
ISD4004芯片主要引脚描述
(1)电源:
(VCCA,VCCD)为使噪声最小,芯片的模拟和数字电路使用不同的电源总线,并且分别引到外封装的不同管脚上,模拟和数字电源端最好分别走线,尽可能在靠近供电端处相连,而去耦电容应尽量靠近器件。
(2)地线:
(VSSA,VSSD)芯片内部的模拟和数字电路也使用不同的地线。
(3)同相模拟输入(ANAIN+)这是录音信号的同相输入端。
输入放大器可用单端或差分驱动。
单端输入时,信号由耦合电容输入,最大幅度为峰峰值32mV,耦合电容和本端的3KΩ电阻输入阻抗决定了芯片频带的低端截止频率。
差分驱动时,信号最大幅度为峰峰值16mV,为ISD33000系列相同。
(4)反相模拟输入(ANAIN-)差分驱动时,这是录音信号的反相输入端。
信号通过耦合电容输入,最大幅度为峰峰值16mV音频输出(AUDOUT)提供音频输出,可驱动5KΩ的负载。
(5)片选(SS)此端为低,即向该ISD4004芯片发送指令,两条指令之间为高电平。
(6)串行输入(MOSI),此端为串行输入端,主控制器应在串行时钟上升沿之前半个周期将数据放到本端,供ISD输入。
(7)串行输出(MISO)ISD的串行输出端。
ISD未选中时,本端呈高阻态。
(8)串行时钟(SCLK)ISD的时钟输入端,由主控制器产生,用于同步MOSI和MISO的数据传输。
数据在SCLK上升沿锁存到ISD,在下降沿移出ISD。
(9)中断(/INT)本端为漏极开路输出。
ISD在任何操作(包括快进)中检测到EOM或OVF时,本端变低并保持。
中断状态在下一个SPI周期开始时清除。
中断状态也可用RINT指令读取。
OVF标志----指示ISD的录、放操作已到达存储器的末尾。
EOM标志----只在放音中检测到内部的EOM标志时,此状态位才置1。
(10)行地址时钟(RAC)漏极开路输出。
每个RAC周期表示ISD存储器的操作进行了一行(ISD4004系列中的存贮器共2400行)。
该信号175ms保持高电平,低电平为25ms。
快进模式下,RAC的218.75μs是高电平,31.25μs为低电平。
(11)外部时钟(XCLK)本端内部有下拉元件。
芯片内部的采样时钟在出厂前已调校,误差在+1%内。
商业级芯片在整个温度和电压范围内,频率变化在+2.25%内。
工业级芯片在整个温度和电压范围内,频率变化在-6/+4%内,此时建议使用稳压电源。
若要求更高精度,可从本端输入外部时钟(如前表所列)。
由于内部的防混淆及平滑滤波器已设定,故上述推荐的时钟频率不应改变。
输入时钟的占空比无关紧要,因内部首先进行了分频。
在不外接地时钟时,此端必须接地。
(12)自动静噪(AMCAP)当录音信号电平下降到内部设定的某一阈值以下时,自动静噪功能使信号衰弱,这样有助于养活无信号(静音)时的噪声。
通常本端对地接1uF的电容,构成内部信号电平峰值检测电路的一部分。
检出的峰值电平与内部设定的阈值作比较,决定自动静噪功能的翻转点。
大信号时,自动静噪电路不衰减,静音时衰减6dB。
1uF的电容也影响自动静噪电路对信号幅度的响应速度。
本端接VCCA则禁止自动静噪。
SPI协议
ISD4004工作于SPI串行接口。
SPI协议是一个同步串行数据传输协议,协议假定微控制器的SPI移位寄存器在SCLK的下降沿动作。
对ISD4004而言,在时钟上升沿锁存MOSI引脚数据,而下降沿将数据送至MISO引脚,其时序图如图3.4所示。
协议具体内容如下:
(1)所有串行数据传输开始于SS下降沿;
(2)SS在传输期间必须保持为低电平,在两条指令之间保持为高电平;
(3)数据在时钟上升沿移入,在下降沿移出;
(4)SS变低,输入指令和地址之后,ISD才会开始录放动作;
(5)指令格式是10位地址码加6位控制码;
(6)ISD的任何操作(含快进)如果遇到EOM或OVF则产生一个中断,该中断状态在下一个SPI周期开始时被清除;
(7)使用读指令会使中断状态为移出ISD的MISO引脚时,控制及地址数据也同步从MOSI移入;
(8)所有操作在运行位(RUN)置1时开始,置0时结束;
(9)所有指令都在SS上升沿开始执行。
图3.4ISD4004-08SPI通信工作时序图
第4章软件设计
总体方案
该设计的软件部分包括语音程序,1602液晶显示和按键控制三部分程序。
语音程序主要包括驱动程序,1602液晶显示部分包括显示驱动程序,按键控制部分包括菜单的选择,可以选择录音模式和放音模式。
软件设计采用的是KeiluVision4编程。
KeilC51是51系列兼容单片机C语言软件开发系统,与汇编相比,C语言在功能上、结构上、可读性、可维护性上有明显的优势,因而易学易懂。
KeilC51生成的目标代码效率非常之高,多数语句生成的汇编代码很紧凑,容易理解,在开发大型软件时更能体现高级语言的优势。
因此本设计采用C51编程语言。
程序流程图
系统程序流程
如图4.1所示,系统的流程图。
图4.1系统的流程图
单片机上电后,系统默认进入录音模式。
录音完成后,可以选择相应段的语音,按下播放按键就可以播放语音。
当按下复位选择按键时,系统就会切换成录音模式。
子程序流程
在录音模式下,当按下录音键时,录音提示灯点亮,松开按键,录音模式结束,提示灯熄灭。
放音模式下,直接按下放音键,无需长按。
如图4.2所示,录放放音子程序。
图4.2录放音子程序流程图
模块说明
ISD4004驱动程序
(1)SPI串行发送函数
/********以下是SPI串行发送函数********/
voidisd_send(ucharisdx)
{
ucharisx_counter;
SS=0;//ss=0,打开spi通信端
SCLK=0;
for(isx_counter=0;isx_counter<8;isx_counter++)//先发低位再发高位,依次发送。
{
if((isdx&0x01)==1)
MOSI=1;
else
MOSI=0;
isdx=isdx>>1;//8位数据右移一位
SCLK=1;
DelayUs
(2);
SCLK=0;
DelayUs
(2);
}
}单片机通过MOSI接口,通过串行的方式来发送八位数据,数据在是时钟的上升沿移入,下降沿移出。
在判断数据0或1的采用相与的方式,如果相与条件符合,则MOSI输出1,,否则输出0。
(2)向ISD4004语音芯片发送上电和掉电指令
/********以下是发送上电指令********/
voidisd_powerup()
{
DelayUs(10);
SS=0;
isd_send(0x20);
SS=1;
DelayMs(50);
}
/********以下是发送掉电指令函数********/
voidisd_stopwrdn()
{
DelayUs(10);
isd_send(0x10);
SS=1;
DelayMs(50);
}
阅读ISD4004芯片手册知,向语音芯片发送8位的指令,就能控制其上电与掉电,这应用在录放音的时序控制中。
(3)录放音函数
/********以下是发送录放音指令函数********/
voidisd_play()//发送play指令
{
isd_send(0xf0);
SS=1;
}
voidisd_setplay(ucharadl,ucharadh)
{
DelayMs
(1);
isd_send(adl);//发送放音起始地址低位
DelayUs
(2);
isd_send(adh);//发送放音起始地址高位
DelayUs
(2);
isd_send(0xe0);//发送setplay指令字节
SS=1;
}
D4002不同的是,ISD4004内部地址是16位的,分为高位和地位两部分,在发送地址时,要先发送地位地址,然后再发送高位地址。
1602液晶底层驱动
1)LCD判忙程序
/********以下是LCD忙碌检查函数********/
unsignedcharReadStatusLCD(void)
{
LCD_Data=0xFF;
LCD_RS=0;
LCD_RW=1;
LCD_E=0;
LCD_E=0;
LCD_E=1;
while(LCD_Data&Busy);//检测忙信号
return(LCD_Data);
}
当模块在接受指令前,单片机必须先确认模块内部是否处于忙绿状态,即读取时LCD_Data需为0,方可接受新的指令;如果在送出一个指令前不检查LCD_Data标志位,或者延迟时间不够长,会导致接收出错。
(2)写指令、写数据程序
/********以下是写指令寄存器IR函数********/
voidWriteCommandLCD(unsignedcharWCLCD,BuysC)
{
if(BuysC)ReadStatusLCD();//根据需要检测忙
LCD_Data=WCLCD;
LCD_RS=0;
LCD_RW=0;
LCD_E=0;
LCD_E=0;//若晶振速度太高可以在这后加小的延时
LCD_E=1;//延时
}
/********以下是写寄存器DR函数********/
voidWriteDataLCD(ucharWDLCD)
{
ReadStatusLCD();//检测忙
LCD_Data=WDLCD;
LCD_RS=1;
LCD_RW=0;
LCD_E=0;//若晶振速度太高可以在这后加小的延时
LCD_E=0;//延时
LCD_E=1;
}
阅读LCD1602芯片手册知,通过向1602控制端LCD_RS、LCD_RW和LCD_EN写不同的状态,就可以选择此时液晶是工作在写指令模式下,还工作在写数据的模式下。
第5章制作与调试
硬件电路的布线与焊接
总体特点
该系统所涉及的各部分硬件电路,总体的特点是:
(1)大部分的电容电阻采用贴片封装,节约板材,减小成本;
(2)为了检错方便电路采用分模块制作,即单片机控制模块与语音模块;
(3)在电路布局时,尽量合理安排空间,这样可以减少跳线,从而美化硬件电路;
(4)为了减小单片机控制模块的面积大小,以及考虑到二次利用,本系统中的串口采用独立制作;
因此,应合理布线,以降低焊接难度,降低出错率,同时防止干扰。
Altiumdesigner软件画PCB
在本设计中,画PCB要注意的一些地方。
首先,在原理图转换成PCB之后,要不要急于连线,要把元器件的分装摆放好,以减少跳线的麻烦。
其次,元器件摆放好之后,接下去就是布线,布线时尽量不用自动布线,不要怕麻烦,要自己手动布线。
在遵循一定的规则下,手动布线更加合理美观。
最后,线宽的设计比较重要,电源线和地线要尽量的宽点。
焊接
焊接前应熟悉各芯片的引脚,焊接时参照电路图,仔细地连接引脚。
按照以下原则进行焊接:
(1)先焊接各芯片的电源线和地线,这样确保各芯片有正确的工作电压;
(2)同类的芯片应顺序焊接,在一片焊接并检查好之后,其他的同类芯片便可以参照第一片进行焊接。
这样便可大大节省时间,也可降低出错率。
调试
调试是一个重要环节,其包括硬件调试和软件调试。
硬件调试
(1)制作完电路之后,先不要马上上电,要用万用表测量每一块电路,确保每一根走线是连通的。
最后要确保电源的正负极性的是否连接在一起,这很重要,因为短接的可能造成电流过大,烧毁电路,需要硬件重新制版,这也是禁止发生的。
(2)单片机的输出端口,如果有接限流电阻,这个端口尽量不要作为其他控制端口。
这是因为电流流过电阻,会有一部分的电压落在电阻上,这样本来应该输出高电平,结果输出低电平,不能很好的控制其他器件。
(3)硬件的制作尽量分模块来做,这样检查更加容易方便。
在本设计中分为单片机控制模块、语音模块、滤波模块、还有下载程序的模块。
首先,把单片机模块和下载器模块调通,使得下载器能够下载程序,单片机最小系统可以运行。
其次,在测试语音模块时候,在录音模式下,使用示波器来检测ISD4004语音的输入端是否有语音波形。
在放音模式下,同样使用示波器,检测语音芯片输出端是否有语音波形。
软件调试
下面是一些在编写的软件的过程中遇到的问题和解决方案:
(1)数值转换中的问题
disp_buf1[0]=count/10+0x30;//取十位
count=count%10;
disp_buf1[1]=count+0x30;//取个位
如果语句按照以上方式编写,会发现十位不能显示这是因为count
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- ISD4004 语音 课程设计
![提示](https://static.bdocx.com/images/bang_tan.gif)