基于ISD4004的语音录放系统设计_第1页
基于ISD4004的语音录放系统设计_第2页
基于ISD4004的语音录放系统设计_第3页
基于ISD4004的语音录放系统设计_第4页
基于ISD4004的语音录放系统设计_第5页
已阅读5页,还剩100页未读 继续免费阅读

下载本文档

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

文档简介

本科毕业设计(2012届)题目语音录放系统的设计学院专业班级学号学生姓名指导教师完成日期摘要本论文主要实现语音录放系统的设计。语音录放系统主要包括单片机控制模块、语音采集模块、语音处理模块、信号放大模块,其中单片机控制模块是整个系统设计的关键。在语音的录放过程中,单片机通过SPI通信方式与语音模块进行通讯,来实现语音的录音与播放。由于每段录音都对应着不同的地址,因此在播放录音时,需要发送需要播放的地址即可播放。语音录放系统的信号处理过程主要包括语音的采集、信号的放大和语音的滤波。语音经过驻极体传感器,即麦克风,把声波信号转换成电信号。传感器采集的电信号进过放大电路,放大一定倍数,经滤波、耦合之后送至语音模块。语音模块对连续变化的语音信号进行采样,抽取其中的语音信号电平,直接存储在语音芯片ISD4004中,因此使得语音自然真实。当语音播放时,需要在语音芯片的输出段加一个带通滤波器,以滤除音频带宽以外的信号,从而减少杂音的干扰。STC89C52单片机的程序,使用keil编译程序进行设计和调试完成,其主要功能是控制语音模块,以及液晶显示模块。关键词:微控制器;录音放音;ISD4004;ABSTRACTThemainaimofthispaperistorealizethefunctionofvoicerecordingandplaybacksystem.Thekeytotheoverallsystemdesignofthevoicerecordingsystemwhichincludesasingle-chipcontrolmodule,voiceacquisitionmodule,voiceprocessingmodule,signalamplificationmodule,isMCUcontrolmodule.Inthevoiceplaybackprocess,themicrocontrollercommunicatesthroughSPIcommunicationvoicemodule,thusrealizingvoicerecordingandplayback.Eachrecordingcorrespondstoadifferentaddress,sothemicrocontrollerjustneedtosendtheaddressoftherecordingtobeplayedforplayback.Thesignalprocessingofthevoicerecordingsystemincludesspeechacquisition,signalamplificationandvoicefilter.Acousticsignalisconvertedintoelectricalsignalsthroughelectretssensor,whichisalsocalledmicrophone.Thesensorsignalswillbeamplifiedafterflowthroughtheamplifyingcircuit.Finallyitwillbesendtovoicemoduleafterfiltering,coupling.Continuousacousticsignalissampledbythevoicemodule,whichtakesoneofthevoicesignallevel,directlystoresitinthevoicechipISD4004,andmakesspeechnaturalandtrue.Whentherecordingisplayedweneedaband-passfilterinthevoicechipoutputsection,tofilteroutthesignaloutsidetheaudiobandwidththerebyreducingnoise.ThecodesoftheMicrocontrollerSTC89C52isdesignedandtestedbyusingkeilcompiler,whosemainfunctionistocontrolthevoicemoduleandLCDmodule.Keywords:Microprocessor;VoiceRecordingandplaying;ISD4004目录1引言 引言 从20世纪30年代初到50年代初,有声电影主要应用光学录音方法。虽然在有声电影初期曾使用过唱片配音的方法,光学录音是以感光材料为媒介记录声音的方法。但用这种方法录制的影片为数不多,时间很短。光学录音进入电影领域后,在世界范围内掀起了从无声电影转入有声电影的高潮,推动了电影事业的大发展。40年代末50年代初磁性录音也进入了电影领域,但大量拷贝仍以光学录音为主;80年代磁性录音和光学录音两种方法并用。 随着经济快速发展,人民生活水平的不断提高,现在的人已近离不开音乐,而且对听觉要求越来越高。计算机技术和数字电子的发展,现在的语音系统有了重大的飞跃,由以前的体积较大单放机、复读机发展到了音质较好、体积小、容量大的MP3、MP4、手机,可以说语音技术已经相当成熟了。 传统的磁带语音录放系统因其体积大,使用不便,在电子与信息处理的使用中受到很多限制。体积小巧,功耗低的数字化语音存储与回放系统将完全代替它。自80年代以来,美、日等国的数字语音技术的研究工作进入了应用阶段,相继研制的大规模集成电路语音芯片已近供应市场,并不断推出新的产品。数字语音技术的应用领域十分广泛,首先是数字通信系统。当通过数字通信系统传送语音信号时,语音数字化技术就是必不可少了。发送端实际上即为语音编码,接受端为语音合成。在我们的日常生活中,数字化语音存储于回放技术得到了广泛的应用,诸如公交车报站器,采访笔,MP3播放器,手机等,使得产品的功能强大,淘汰了磁带录音的传统方式,方便了人们的生活,推动了社会进步。2概述2.1语音录放系统概述 语音录放系统的工作原理是单片机通过SPI通信模式,来控制语音芯片ISD4004的录音与播放。此系统一般包括单片机控制模块、语音的采集模块,语音的放大模块、语音处理模块、滤波模块、功率放大模块和显示模块。如图2-1所示,驻极式传感器把自然界的连续的声波信号转化成连续变化的电信号,由于转换的电信号比较弱,故须经过放大电路,放大信号。信号传递至语音芯片,语音芯片对连续的电信号进行采样,没有经过A/D转换,直接存储在内部的flash中[3]。连续的声波信号连续的声波信号连续的电信号连续的电信号滤波处理滤波处理电信号放大电信号放大图2-1语音信号处理过程语音的存储可以采用数字式的,也可以采用模拟式。采用数字式的,需要把连续采样的语音信号转换成数字信号,即A/D转换,但在此过程需要遵循奈奎斯特采样定律。还有一种就是把采用的模拟信号直接存储在带有flash的存储器中,本系统采用直接存储的方式,ISD4004语音芯片是美国ISD公司制造的一种新款的语音芯片,芯片采用多电平直接模拟量存储技术,每个采样值直接存储在片内闪存flash中,因此能够非常真实、自然地再现语音、音乐、音调和效果音,避免了一般固体录音电路因量化和压缩造成的量化噪音和“金属音”[4]。 语音的录放系统的应用十分广泛,可以应用于通讯设备、智能仪表、治安报亭、语音报站、语音讲解、语音记录、语音复读、智能玩具等领域。本课题的研究,是其他语音录放方面课题研究的基础,因此具有很好实践意义。2.2本设计方案的论证2.2.1系统的单片机选择论证一方面在本系统中,单片机与ISD4004是采用SPI的通信模式,即高速同步串行口,是一种标准的四线同步双向串行总线。占用端口资源少,单片机只需模拟SPI通信协议即可控制语音芯片的录放功能,因此占用单片机内部资源少。另一方面,在大学期间学习51单片机是学习其他单片机的基础,因此深入地把51单片机十分有必要。2.2.2系统的液晶选择 为了实现更多的功能,本系统加入其他外围的硬件设备,需要以菜单的形式选择功能。系统扩展有两个可选择的液晶显示LCD1602和LCD12864,最终采用LCD1602液晶显示器,原因是其体积小,功耗低,具有背光功能,采用通用接口芯片,兼容性高。2.2.3系统的滤波电路的选择 考虑到实用性,带负载能力要比较强,要满足输入阻抗应足够高,输出阻抗应够小;要满足阻带衰减频率-40db/10倍频程,有两种考虑方案:一种是用一阶滤波器进行级联,另一种直接采用二阶滤波器。本系统中采用第二种。考虑到电路的稳定性及增益AV=10,应采用有源滤波器。集成有源滤波器有如下优点:1、在制作截止频率或中心频率较低的滤波器时,可以做到体积小、重量轻、成本低;2、由于采用集成电路,所以受环境条件(如机械振动、温度、湿度、化学因素等)的影响小;3、受电磁干扰的影响小;4、由于采用集成电路,可避免各滤波节之间的负载效应而使滤波器的设计和计算大简。2.3研发方向和技术关键 研发方向:本系统主要设计一个语音录放系统,实现播放录音中任意段语音。在实际生活中,本系统可以应用在汽车倒车系统、家庭安防系统、公交车报站以及医院的病房室等应用之中。 技术关键:理解ISD4004语音芯片操作功能的时序图,内部地址构架,以及与单片机之间的SPI通信模式。 2.4主要技术指标用51单片机和语音芯片ISD4004来实现一个语音录放系统。实现录音,存储和放音操作,能录放50以上中文字,并能录放随意组合。放音时能够清晰、稳定。 3硬件设计3.1硬件的总体设计语音录放系统主要是通过单片机来控制语音芯片ISD4004来实现语音的录放的功能。在录音模式下,语音信号,即声波信号,通过麦克风,将其转换成电信号。但此时的电信号很微弱,需要经放大电路,放大语音信号。由于电路中可能存在高频分量,信号经过带通滤波器,以滤除语音频带以外的噪声。最后,ISD4004采样得到的语音信号相对“干净”。在语音播放的模式下,单片机向ISD4004发送播放的地址和语音播放指令后,便可以播放相应段的语音。为了使播放的语音依然“干净”,本系统依然设置了一个滤波电路。[2]由于ISD4004不能驱动一块喇叭,需要在滤波电路添加一个功率放大电路,在本系统中,采用的是LM386语音驱动电路[9]。如图3-1所示,系统的总体结构框图。图3-1系统的总体结构框图麦克风麦克风滤波电路放大电路ISD4004语音电路喇叭PC机单片机滤波电路放大电路1602液晶DS18B20温度传感器3.2驻极体传声器效应晶体管的栅极上,栅极与源极之间接有一个二极管,如图3-2所示。当驻极体膜片本身带有电荷,表面电荷地电量为Q,板极间地电容量为C,则在极头上产生地电压U=Q/C,当受到振动或受到气流地摩擦时,由于振动使两极板间的距离改变,即电容C改变,而电量Q不变,就会引起电压的变化,电压变化的大小,反映了外界声压的强弱,这种电压变化频率反映了外界声音的频率,这就是驻极体传声器地工作原理。图3-2驻极体工作动态原理图3.3信号放大电路由于驻极体转换的电信号只有毫伏级的,应该需要将其放大。本系统采用基本共射极放大电路。如图3-3所示,输入与输出回路各接了一个电容,称为耦合电容,起连接作用,C1连接输入的语音信号与放大电路,C4连接放大电路与负载,如该电路称为阻容耦合共射极放大电路。图3-3阻容耦合共射极放大电路该电路可以等效为直流与交流通路:由于电容有隔直流的作用,即对直流相当于开路,因此,MIC产生的信号源及负载对电路的直流状态(即Q点)不产生影响。由此可以画出放大电路的直流通路与交流通路,分别如图3-4与3-5所示。对一定频率范围内的交流信号而言,C1和C4呈现的容抗很小,可以近似认为短路。另外,电源VCC内阻很小,对交流信号也可视为短路[5]。由电压增益的定义得式(3-1):(3-1)由上公式计算得出,前级放大电路的放大倍数是4.6倍,麦克风电信号的幅值约为5mV,放大后的信号幅值约为23mV。图3-4直流通路图3-5交流通路3.4语音信号功率放大电路LM386是一种音频集成功放,具有自身功耗低、电压增益可调整、电源电压范围大、外接元件少和总谐波失真小等优点,广泛应用于录音机和收音机之中。它是美国国家半导体公司生产的音频功率放大器,主要应用于低电压消费类产品。为使外围元件最少,电压增益内置为20。输入端以地位参考,同时输出端被自动偏置到电源电压的一半,在6V电源电压下,它的静态功耗仅为24mW,使得LM386特别适用于电池供电的场合。LM386的封装形式有塑封8引线双列直插式和贴片式。其双列直插式封装如图3-6所示。 图3-6LM386直插封装语音芯片ISD4004输出的电压只有毫伏级,难以驱动扬声器发声。本系统采用采用LM386功率放大器,以提高扬声器的驱动能力。有时喇叭放音会出现失真现象,这是可能是运放的增益过高所致,需要在1脚和8脚之间加一个10uF电容或串联一个10K电位器调整一下。本系统的功率放大电路图如图3-7所示。图中P2为10K的电位器,总的功率增益为34dB。图3-7语音输出级功率放大电路3.5ISD4004语音芯片介绍3.5.1芯片性能简述和引脚图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-8所示。图3-8ISD4004语音芯片引脚图3.5.2ISD4004芯片主要引脚描述(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则禁止自动静噪。[4]3.5.3SPI协议ISD4004工作于SPI串行接口。SPI协议是一个同步串行数据传输协议,协议假定微控制器的SPI移位寄存器在SCLK的下降沿动作。对ISD4004而言,在时钟上升沿锁存MOSI引脚数据,而下降沿将数据送至MISO引脚,其时序图如图3-9所示。协议具体内容如下:(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-9ISD4004-08SPI通信工作时序图对于ISD4004而言,器件延时TPUD(8kHz采样时,约为25ms)后才能开始操作;因此,用户发完上电指令后,必须等待TPUD.才能发出一条操作指令。下面是典型的操作。其语音的录放示意如图3-10所示。

(1)发POWERUP命令;(2)等待TPUD(上电延时);发地址值为00的SFTPLAY命令;(3)发PLAY命令;

(4)器件会从00地址开始放音,当出现EOM时,立即中断,停止放音;(5)如果从00处录音,则按以下时序;(6)发POWERUP命令;(7)等待TPUD(上电延时);(8)发POWERUP命令;

(9)等待2倍TPUD;(10)发地址值为00的SETREC命令;

(11)发REC命令;

(12)器件便从00地址开始录音,一直到出现OVF(存储器末尾)时,录音停止。图3-10语音录放时序图3.6滤波电路的设计与方案论证 滤波电路是一种能使用频率信号通过而同时抑制无用频率信号的电子装置。工程上常用它来做信号处理、数据传送和抑制干扰等。实际常用是模拟滤波器,这种滤波电路主要采用无源元件R、L和C组成,20世纪60年代以来,集成运放获得了迅速发展,由它和R、C组成的有源滤波电路,具有不用电感、体积小、重量轻等优点。此外,由于集成运放的开环增益和输入阻抗均很高,输出阻抗又低,构成有源滤波电路后还具有一定的电压放大和缓冲作用。但是,集成运放的带宽有限,所以目前有源滤波电路的工作频率难以做得很高,以及难以对功率信号进行滤波,这是它的不足之处[5]。 设计思路:一方面由于本设计是语音信号,信号的频率范围一般为300-3400HZ,带宽的范围一定,适合采用有源滤波电路。另一方面,考虑到实用性,带负载能力要比较强,满足输入阻抗足够高,输出阻抗应足够小,且满足阻带衰减频率-40db/10倍程。最后采用集成电路,可以避免各滤波之间的负载效应而使滤波器的设计和计算大大简化。综上三点原因,本设计系统中的滤波电路采用二阶有源滤波器。 滤波器分成四种滤波器,分别是:低通滤波器、带通滤波器、带阻滤波器、高通滤波器,它们的频域示意图如图3-11所示。在本系统中,将采用带通滤波器,图3-11四种滤波器的示意图 在设计带通滤波器时,可以采用有源高通滤波电路和一个有源低通滤波电路串联而成,其原理图如图3-12所示。图3-12带通滤波器的组成二阶有源带通滤波电路的传递函数[5]为式(3-2):(3-2)其中AVF为同相比例放大电路的电压增益。 通过查表计算得,设计低通滤波器的截止频率为3000Hz,高通滤波器的截止频率为600Hz。带通滤波器的原理图如图3-13所示。图3-13带通滤波器原理图3.7基于matlab软件对滤波前后语音的分析 语音录放系统如果不加滤波电路,会发现播放的录音中杂音很多,即语音的中其他成分很多。通过查资料发现产生的原因有以下几点: (1)麦克风的语音转换特性存在问题,即将声波信号转换成电信的过程中,产生了高频声波的电信号。(2)功率放大电路在大信号下工作,所以不可避免会产生非线性失真,这种非线性失真使得语音中杂波成分增加。为了对语音进行前后分析对比,在本系统中,使用自己笔记本电脑自带录音机对播放的语音录音。然后运用matlab软件对语音读取和FFT变换,对滤波前后的语音的时域与频域分析比较,这样可以比较直观的观察语音滤波前后变化。如图3-14,滤波前后的语音的波形图及频谱图,由下图可以看出,语音的中一些高频成分被滤除。图3-14语音滤波前后的波形及频谱图3.8单片机与液晶显示模块3.8.1STC89C51单片机STC89C52是由深圳宏晶科技公司生产的与工业标准的MCS-51指令集和输出管脚相兼容的单片机。STC89C51单片机管脚如图3-13所示,其主要功能特性表3-1所示。图3-13单片机管脚表3-1STC89C52单片机主要功能STC89C52单片机主要特性兼容MCS51指令系统8K可反复擦写FlashROM32个双向I/O口256*8bit内部RAM3个16位可编程定时/计数器中断时钟频率0-24MHZ2个串行中断可编程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.7P1口(Pin1~Pin8):8位准双向I/O口线,名称为P1.0~P1.7P2口(Pin21~Pin28):8位准双向I/O口线,名称为P2.0~P2.7P3口(Pin10~Pin17):8位准双向I/O口线,名称为P3.0~P液晶显示模块介绍 1602液晶也叫1602字符型液晶,它是一种专门用来显示字母、数字、符号等的点阵型液晶模块。LCD具有体积小,质量轻,功耗低,信息显示丰富等优点,应用十分广泛。字符型LCD是由如干个5*7或5*11等点阵字符位组成。每一个点阵字符位都可以显示一个字符。点阵字符位之间有一个空点距的间隔起到了字符间距和行距的作用。 图3-14所示是16字*2行的LCD引脚图,其接口引脚有16只,引脚功能如表3-2所列。图3-141602液晶引脚图表3-2字符型LCD显示模块接口电路引脚图符号功能引脚号符号功能1VSS电源地6E使能信号2VDD电源正极7~14DB0~DB7数据0~73VL液晶显示偏压信号15BLA背光源正极4RS数据/命令选择16BLK背光源负极5R/W读/写选择 在表3-2中,VSS为电源地,VDD接5V正电源。VL为液晶显示器对比度调整端,接正电源时对比度最弱,接地时对比度最高,对比度过高时会产生“鬼影”。使用时,一般在该引脚与地之间接一固定电阻或电位器。RS为寄存器选择,高电平时选择数据寄存器,低电平时选择指令寄存器。R/W为读/写信号线,高电平时进行读操作,地电平时进行写操作。E段位使能端,当E段由高电平变成低电平时,液晶模块执行命令。DB0~DB7为8位双向数据线。BLA、BLK用于带背光的模块,不带背光的模块这两个引脚悬空不接。3.9通信方式3.9.1单片机与PC机之间的通信单片机与计算机的通信电路有串行通信和并行通信两种。并行通信的主要特点:一是同时并行传送的二进制数就是数据宽度;二是在计算机与外设间采用应答式的联络信号来协调双方的数据操作。传送的数据位为1-128位,一般为8位,但是并行通信传输距离近,传送方式单一,每次传送一个字或一个字节。串行通信是指一个数据的所有位按一定的顺序和方式,一位一位地通过串行输入/输出口进行传送,由于串行通信是数据的逐位顺序传送,在进行串行通信时,只需一根传输线,传送的数据位多且通信距离长。串行通信与并行通信相比,具有传输距离远,接口电路与软件编程简单等优点,所以本设计中采用串行通信。单片机与计算机的通信采用简化三线的串行通信方式,即把单片机的发送端TXD直接和计算机的接收端RXD相连,单片机的接收端RXD直接和计算机的发送端TXD连接,但是单片机的+5VTTL信号电平与PC机的±10V信号电平不相容,所以必须进行电平转换[6],本设计中采用MAXIM公司生产的MAX232芯片。MAX232芯片内部有一个电源电压变压器,可以把输入的+5V电源电压变换为RS-232输出电平所需的±10V电压。所以,采用此芯片接口电路的串行通信系统只需要单一的+5V电源就可以了。此外,为了数据传输和指令下载方便,我们采用的是USB转串口线。MAX232电路也非常方便,只需要外接4个0.1μF电容即可产生所需的电压,输出标准的RS232接口信号,而且RS232芯片价格不贵。单片机与计算机的通信接口电路如图3-15所示:图3-15串口电路图3.9.2单片机与ISD4004之间的通信 单片机ISD4004之间的通信采用串行外设接口(serialperipheralinterface,SPI)总线系统是一种同步串行外设接口,它可以使MCU与各种外围设备以串行方式通信以交换信息。SPI总线系统可直接与各个厂家生产的多种标准外围器件直接接口,该接口一般使用4条线:串行时钟线(SCK)、主机输入/从机输出数据线MISO、主机输出/从机输入数据线MOSI和低电平有效的从机选择SS。由于SPI系统总线一共只需三四位数据线和控制,即可实现与具有SPI总线接口功能的各种I/0器进行接口,因此,采用SPI总线接口可以简化电路设计,节省很多常规电路中的接口器件和I/O口线,提高设计的可靠性。由于51单片机不带SPI串行总线接口,可以使用软件来模拟SPI的操作,可以用P1口的P1.0~P1.3口模拟包括串行时钟、数据输入和数据输出。对于不同的串行接口外围芯片,它们的时钟时序是不同的。对于在SCK的上升沿输入(接收)数据和下降沿输出(发送)数据的器件,一般应将其串行时钟输出口P1.1的初始状态设置为1,而在允许接口后再置P1.1为0。这样,MCU在输出1位SCK时钟的同时,将使接口芯片串行左移,从而输出1位数据至单片机的P1.3口,此后再置P1.1为1,使单片机从P1.0口,此后再置P1.1为1,是单片机从P1.0口输出1位数据(先为高位)至串行接口芯片。至此,模拟1位数据输入输出便完成。此后再置P1.1为0,模拟下一位数据的输入输出,以此循环8次,即可完成一次通过SPI总线传输8位数据的操作。对于在SCK的下降沿输入数据和上升沿输出数据的器件,则应该串行时钟输出的初始状态为0,即在接口芯片允许时,先置P1.1,为1,以便外围接口芯片输出1位数据,之后再置时钟为0,使外围接口芯片接收1位数据,从而完成1位数据的传送[1]。如图3-16所示,51单片机与ISD4004接口电路。图3-16单片机与ISD4004接口电路示意图4软件设计4.1总体方案 该系统的软件部分包括语音程序,1602液晶显示和按键控制三部分程序。语音程序主要包括驱动程序,1602液晶显示部分包括显示驱动程序,按键控制部分包括菜单的选择,可以选择录音模式和放音模式。软件设计采用的是Keiluvision2,C51编程。KeilC51是51系列兼容单片机C语言软件开发系统,与汇编相比,C语言在功能上、结构上、可读性、可维护性上有明显的优势,因而易学易懂。KeilC51生成的目标代码效率非常之高,多数语句生成的汇编代码很紧凑,容易理解,在开发大型软件时更能体现高级语言的优势。因此本系统采用C51编程语言。4.2程序流图单片机上电后,系统默认进入放音模式。在放音模式下,可以选择相应段的语音,按下播放按键就可以播放语音。当按下菜单选择按键时,系统就会切换成录音模式。在录音模式下,可以通过按键来选择,任意断的语音进行录音。再次按下菜单选择的按键时,就会切换成放音模式。如图4-1所示,系统的流程图,图4-2所示,录放放音子程序。开始开始开机界面录音模式温度显示是否播报温度初始化各参数否是语音播报温度进入电子时钟模式是否播报时间语音播报时间是否图4-1系统的软件流程图启动录音子程序启动录音子程序发送起始地址低八位发送ISD4004发送起始地址高八位发送ISD4004发送录音指令启动定时器T0计时发送停止指令结束启动放音子程序发送起始地址低八位发送ISD4004发送起始地址高八位发送ISD4004发送放音指令等待外部中断发送停止指令结束图4-2录放音子程序4.3模块说明4.3.1ISD4004驱动程序(1)SPI串行发送函数/********以下是SPI串行发送函数********/voidspi_send(ucharisdx){ ucharisd_count; SS=0; //当ss=0时,选中IS4004芯片,打开SPI通信端 SCLK=0; for(isd_count=0;isd_count<8;isd_count++)//先发低位再发高位,依次发送 { if((isdx&0x01)==1) MOSI=1;//主机输出,从机输入 else MOSI=0; isdx=isdx>>1;//8位数据右移一位 SCLK=1; delay(2); SCLK=0; delay(2); }} 单片机通过MOSI接口,通过串行的方式来发送八位数据,数据在是时钟的上升沿移入,下降沿移出。在判断数据0或1的采用相与的方式,如果相与条件符合,则MOSI输出1,,否则输出0。(2)向ISD4004语音芯片发送上电和掉电指令/********以下是发送上电指令********/voidisd_powerup(void){ delay(10); SS=0; spi_send(0x20); SS=1; Delay_ms(50);}/********以下是发送掉电指令函数********/voidisd_poweroff(void){delay(10);spi_send(0x10);SS=1;Delay_ms(50);}阅读ISD4004芯片手册知,向语音芯片发送8位的指令,就能控制其上电与掉电,这应用在录放音的时序控制中。(3)录放音函数/********以下是发送setplay(放音起始地址)指令函数********/voidisd_setplay(ucharadl,ucharadh){ Delay_ms(1); spi_send(adl);//发送放音起始地址低位 delay(2); spi_send(adh);//发送放音起始地址高位 delay(2); spi_send(0xe0);//发送setplay指令字节 SS=1;}/********以下是发送setrec(录音起始地址)指令函数********/voidisd_setrec(ucharadl,ucharadh){ Delay_ms(1); spi_send(adl);//发送放音起始地址低位 delay(2); spi_send(adh);//发送放音起始地址高位 delay(2); spi_send(0xa0);//发送setplay指令字节 SS=1;}与ISD4002不同的是,ISD4004内部地址是16位的,分为高位和地位两部分,在发送地址时,要先发送地位地址,然后再发送高位地址。4.3.21602液晶底层驱动(1)LCD判忙程序/********以下是LCD忙碌检查函数********/bitlcd_busy(){bitresult;LCD_RS=0;LCD_RW=1;LCD_EN=1;_nop_();_nop_();_nop_();_nop_();result=(bit)(P2&0x80);LCD_EN=0;returnresult;}当模块在接受指令前,单片机必须先确认模块内部是否处于忙绿状态,即读取lcd_busy()标志时result需为0,方可接受新的指令;如果在送出一个指令前不检查result标志位,或者延迟时间不够长,会导致接收出错。(2)写指令、写数据程序/********以下是写指令寄存器IR函数********/voidlcd_wcmd(ucharcmd){while(lcd_busy());LCD_RS=0;LCD_RW=0;LCD_EN=0;_nop_();_nop_();P2=cmd;_nop_();_nop_();_nop_();_nop_();LCD_EN=1;_nop_();_nop_();_nop_();_nop_();LCD_EN=0;}/********以下是写寄存器DR函数********/voidlcd_wdat(uchardat){while(lcd_busy());LCD_RS=1;LCD_RW=0;LCD_EN=0;P2=dat;_nop_();_nop_();_nop_();_nop_();LCD_EN=1;_nop_();_nop_();_nop_();_nop_();LCD_EN=0;} 阅读LCD1602芯片手册知,通过向1602控制端LCD_RS、LCD_RW和LCD_EN写不同的状态,就可以选择此时液晶是工作在写指令模式下,还工作在写数据的模式下。4.3.3菜单选择程序/*****菜单处理函数*****/voidKey_process(){ if(K1==0) {Delay_ms(10); //若K1键按下,延时10ms,防抖动 if(K1==0) {while(!K1); //等待K1键释放keystate++; //指向下一地址if(keystate>3)keystate=0; //模式1显示开机主菜单、模式2显示录音模式、模式3显示温度与播报模式、模式4显示时钟与播报模式。 }}}4.3.4录音函数voidRecorder(){EA=0; //录音时关中断if(K2==0) //等待K2键按下 {Delay_ms(10); //若K2键按下,延时10ms,防抖动 if(K2==0) { while(!K2); //等待K2键释放 count++; //指向下一地址 if(count>8)count=1; //若录完第8站,则返回到第1站 } } if(K3==0) { Delay_ms(10); if(K3==0) { while(!K3); //等待K3键释放 count--; //指向下一地址if(count==0)count=8; //若录完第1站,则返回到第8站 } } if(K4==0){Delay_ms(10);if(K4==0) {while(!K4); //等待K1键释放isd_powerup(); //ISD上电 isd_poweroff(); //掉电 isd_powerup(); //上电Delay_ms(500); //延迟500ms录音 isd_setrec(addl_tab[count-1],addh_tab[count-1]);//设置ISD低位和高位地址表 Delay_ms(100); isd_rec(); //发送rec指令 LED_flash(); //LED闪烁 LED=1;//关闭LED灯 count++; //指向下一地址 isd_stop(); //发送停止命令 if(count>8)count=1; //若录完第8站,则返回到第1站}} EA=1; //录音完毕打开中断 } 本设计中,可以录72段语音。在录音模式下,通过按K2和K3按键就可以选择性的录音。如图4-3所示,系统处于录音模式下,正在录第一段语音。图4-3系统处于录音模式下4.3.5放音函数/********以下是放音函数********/voidPlayer(){ ucharovflog; if(K2==0) { Delay_ms(10); //若K2键按下,延时10ms,防抖动 if(K2==0) {while(!K2); //等待K2键释放 count++; //指向下一地址if(count>8)count=1; //若播放完第10站,则返回到第1站 } } if(K3==0) {Delay_ms(10); //若K3键按下,延时10ms,防抖动 if(K3==0) { while(!K3); //等待K3键释放 count--; //指向上一地址 if(count<=0)count=8; //若已播放完第一站,则将其回到最后一站(第8站) } } if(K4==0)/********语音播放按键*********/ { Delay_ms(10); if(K4==0) { while(!K4); isd_powerup(); //ISD上电 isd_poweroff(); //掉电 isd_powerup(); //上电Delay_ms(200); //延迟500ms录音 isd_setplay(addl_tab[count-1],addh_tab[count-1]);//设置ISD低位和高位地址表 isd_play(); //发送放音指令 LED=0; //开LED灯 delay(20); while(ISD_INT==1)//若放音完毕则中断信号ISD_INT=0,若放音未完毕,等//待中断信号{ if(K1==0){Delay_ms(10); if(K1==0){ isd_stop(); //发送停止命 break; } }} LED=1; //关LED灯 isd_stop(); //发送停止命令 if(ovflog=check_ovf())isd_poweroff();//检查芯片是否溢出,如溢出则停止放音,芯片复位 } }} 在放音模式下,K2、K3按键选择某一段放音,而K1按键则是立刻终止正在播放的语音。如图4-4所示,系统正处于播放模式下。图4-4所示系统处于放音模式下4.3.6播放方式选择voidbofangxuanze(){ if(K2==0) { Delay_ms(10); if(K2==0) { while(!K2) ; moshi_num++; if(moshi_num>4)moshi_num=1; } } if(K3==0) { Delay_ms(10); if(K3==0) { while(!K3); moshi_num--; if(moshi_num<1)moshi_num=4; } }} 在播放方式的选择模式下,可以数字1代表顺序播放,数字2代表逆序播放,数字3代表奇数播放,数字4代表偶数播放。如图4-5所示,系统处于播放方式选择下。图4-5系统处于播放方式选择的模式5制作与调试5.1硬件电路的布线与焊接5.1.1总体特点该系统所涉及的各部分硬件电路,总体的特点是:(1)大部分的电容电阻采用贴片封装,节约板材,减小成本;(2)为了检错方便电路采用分模块制作,即单片机控制模块与语音模块;(3)在电路布局时,尽量合理安排空间,这样可以减少跳线,从而美化硬件电路;(4)为了减小单片机控制模块的面积大小,以及考虑到二次利用,本系统中的串口采用独立制作;因此,应合理布线,以降低焊接难度,降低出错率,同时防止干扰。5.1.2Altiumdesigner软件画PCB 在本设计中,画PCB要注意的一些地方。首先,在原理图转换成PCB之后,要不要急于连线,要把元器件的分装摆放好,以减少跳线的麻烦。其次,元器件摆放好之后,接下去就是布线,布线时尽量不用自动布线,不要怕麻烦,要自己手动布线。在遵循一定的规则下,手动布线更加合理美观。最后,线宽的设计比较重要,电源线和地线要尽量的宽点。 5.1.3焊接焊接前应熟悉各芯片的引脚,焊接时参照电路图,仔细地连接引脚。按照以下原则进行焊接:(1)先焊接各芯片的电源线和地线,这样确保各芯片有正确的工作电压;(2)同类的芯片应顺序焊接,在一片焊接并检查好之后,其他的同类芯片便可以参照第一片进行焊接。这样便可大大节省时间,也可降低出错率。5.2调试 调试是一个重要环节,其包括硬件调试和软件调试。5.2.1硬件调试 在硬件调试方面总结一下心得体会:(1)制作完电路之后,先不要马上上电,要用万用表测量每一块电路,确保每一根走线是联通的。最后要确保电源的正负极性的是否连接在一起,这很重要,因为短接的可能造成电流过大,烧毁电路,需要硬件重新制版,这也是禁止发生的。(2)单片机的输出端口,如果有接限流电阻,这个端口尽量不要作为其他控制端口。这是因为电流流过电阻,会有一部分的电压落在电阻上,这样本来应该输出高电平,结果输出低电平,不能很好的控制其他器件。(3)硬件的制作尽量分模块来做,这样检查更加容易方便。在本设计中分为单片机控制模块、语音模块、滤波模块、还有下载程序的模块。首先,把单片机模块和下载器模块调通,使得下载器能够下载程序,单片机最小系统可以运行。其次,在测试语音模块时候,在录音模式下,使用示波器来检测ISD4004语音的输入端是否有语音波形。在放音模式下,同样使用示波器,检测语音芯片输出端是否有语音波形。5.2.2软件调试 下面是一些在编写的软件的过程中遇到的问题和解决方案:按键问题if(K1==0) {Delay_ms(10); //若K2键按下,延时10ms,防抖动 if(K1==0) {……} }在上面的程序中有一个问题,当按键按下去之后会发现液晶显示数字不停地跳动。这是因为缺少这样一个语句,while(!K1);就是等待按键释放。数值转换中的问题disp_buf1[0]=count/10+0x30; //取十位count=count%10;disp_buf1[1]=count+0x30; //取个位 如果语句按照以上方式编写,会发现十位不能显示这是因为count是全局变量,单独对count求余,就会改变count值,解决方法如下:disp_buf1[0]=count/10+0x30; //取十位disp_buf1[1]=count%10+0x30; //取个位液晶显示的问题开始的时候,液晶显示函数没有放在程序的合适的位置,导致显示不完全或者显示有重叠的现象。解决的方案,启用一个定时器,让显示的函数放在定时器的中断里,实时地显示,这样就不会出现以上的问题。发送录音指令要遵循ISD4004的时序每次的录放音,需要先发送录放音指令,然后再发送地址,只有严格遵循时序图,才能使ISD4004正常工作。5.3系统的各个工作状态下实物照片图1、系统上电后开机界面如图5-1所示图5-1上电后开机界面2、按键K1选择下一个状态,如图5-2所示,系统处于录音模式下,此时正在第一段语音录音,K2、K3分别是选择增加和减少Number值,来选择第几段语音录音。图5-2系统处于录音模式下3、如图5-3所示,系统处于温度显示的模式下。在此模式下,按下K4按键,就能播报当前温度。图5-3系统处于温度显示模式下4、如图5-4所示,系统处于电子时钟的模式下。在此模式下,按下K4键,就可以语音播报当前时间。图5-4系统处于电子时钟的模式下6.结论本毕业设计方案达到了任务书上的要求,实现了单片机控制控制ISD4004的语音功能,而且具有模式选择功能。系统的主要特点如下:(1)PC通过USB转串口来下载程序;(2)单片机通过模拟SPI通信方式与ISD4004之间进行通信;(3)单片机与1602液晶屏之间采用间接控制方式,首先给出1602液晶屏的驱动程序(写数据、写指令、读数据),实现数据的实时更新等;(4)系统中设置的四个按键,分别实现菜单选择、数值加和数值减功能,这样增加了系统的灵活性,符合实际情况。本设计实现了毕业设计达到的技术指标,具有录放功能,最长可以录音8分钟。设计中采用分段录音的方式,可录制52段语音,并在此基础上,实现了语音播放温度和语音时钟的功能。进一步地,在日常生活中,可以应用在家庭语音报警系统以及语音医疗[10]之中。由于时间,水平和经验有限,在滤波方面和液晶显示等方面仍有不足之处,有改进的余地,如带通滤波器带宽可以做的更加准确,通频带更加稳定。从收集相关资料,方案的确定,硬件的制作,软件的编写,到最后的调试,在这个过程中遇到很多大大小小的问题。比如说,在腐蚀板子的时候,如果腐蚀时间过长,板子上的黑线反而被腐蚀掉,这样一来,整块板子又要重新制作。

致谢自己随便写点。

参考文献[1]高慧芳等.单片机原理及应用技术[M].北京:科学出版社,2010.[2]宋戈,,黄鹤松,员玉良,蒋海峰.51单片机应用开发范例大全[M],北京:人民邮电出版社,2010:P193-P205

[3]郑锋等.51单片机应用系统典型模块开发大全[M].北京:中国铁道部出版社2010.[4]刘建清.轻松玩51单片机C语言[M].北京:北京航空航天大学,2011:P378-P385[5]康华光.模拟电子技术基础[M].北京:高等教育出版社,2005:P119-P132[6]印黄燕.ARM系列单片机与PC机之间的串行通信[J].常州信息职业技术学院学报,2008,7(6):30-32

[7]刘超美,李红萍,贾秀明.基于单片机的语音录放系统设计[J].甘肃联合大学学报:自然科学版,2008,22(3):67-69

[8]韩改宁,李永锋.基于AT89C52单片机的语音录放系统实现[J].成阳师范学院,2009,17(9):116-117

[9]许春冬,刘亦晴,刘钧彬,杨万青.一种嵌入式数字语音录放系统的设计[J].电子元器件应用,2010,12(12):41-43[10]杨易华吴效明岑人经.基于ISD4004的红外遥控医院语音播报系统的设计[J].研究论著,2009,30(10):16-19[11]WangZhenhai.ApplicationforRealizingVoiceRecordingUsingMCU[R].Shangdong:LinyiUniversity,2011.[12]JieZeng,MengZhang,GuilinLi,ShaohuaChen,andNanXiao.DevelopmentofMultilanguageSelectedAutomaticVoicePlayingSystemBasedonRFIDTechnology[R]Dalian:DalianJiaotongUniversity,2010.附录1.系统单片机原理图2.系统语音与串口模块3.51单片机系统PCB图4.语音模块与串口PCB图5.源程序1)主程序/******主程序主要包括4个模式,首先进入是开机界面,即模式0;模式1是录音模式;模式2是显示和播报温度模式;模式3是显示时钟和播报模式。2012年5月23日答辩*******************************************/#include<reg52.h> //51单片机头文件#include<intrins.h> //汇编函数指令#include"ISD4004_drive.h" //语音芯片驱动#include"LCD_drive.h" //液晶驱动#include"DS18B20_drive.h" //DS18B20驱动#defineucharunsignedchar#defineuintunsignedintsbitK1=P3^4; //K1键,模式选择按键sbitK2=P3^5; //K2键,按下K2键,录音或放音按键 ,count值加sbitK3=P3^6; //K3键,按下K3键,录音或放音按键 ,count减少sbitK4=P3^7; //K4键,播放键uintkeystate; //模式的状态ucharovflog; //溢出声明bittemp_flag; //判断DS18B20是否正常标志位,正常时为1,不正常时为0uchartemp_comp; //用来存放测量温度的整数部分uchardisp_buf[8]={0}; //显示缓冲uchartemp_data[2]={0x00,0x00}; //用来存放温度数据的高位和低位ucharhour=23,min=59,sec=45; //定义小时、分钟和秒变量ucharcount_10ms; //定义10ms计数器ucharcodeline1_data[]="DS18B20OK"; //DS18B20正常时第1行显示的信息ucharcodeline2_data[]="TEMP:"; //DS18B20正常时第2行显示的信息ucharcodemenu1_error[]="DS18B20ERR"; //DS18B20出错时第1行显示的信息ucharcodemenu2_error[]="TEMP:"; //DS18B20出错时第2行显示的信息ucharcodeline3_data[]={"RecordingVoice"}; //定义第1行显示的字符ucharcodeline4_data[]={"Num:"};ucharcodeline5_data[]={"WelcomeZangChuq"};ucharcodeline6_data[]={"GraduateDesign"};sbitBEEP=P1^0; //定义蜂鸣器bitK1_FLAG=0; //定义按键标志位,当按下K1键时,该位置1,K1键未按下时,该位为0。ucharcodeline1_data_time[]={"LCDClcok"}; //定义第1行显示的字符ucharcodeline2_data_time[]={"****"}; //定义第2行显示的字符uchardisp_buf_time[6]={0x00,0x00,0x00,0x00,0x00,0x00}; //定义显示缓冲单元uchardisp_buf1[2]={0x00,0x00}; //定义显示缓冲单元,并赋值ucharcodeaddh_tab[73]={00,00,01,01,01,01,01,01,01,01,01,01,01,01,01,01,01, 02,02,02,02,02,02,02,02,02,02,02,02,02,02,02, 03,03,03,03,03,03,03,03,03,03,03,03,03,03,03, 04,04,04,04,04,04,04,04,04,04,04,04,04,04,04, 05,05,05,05,05,05,05,05,05,05,05 };//ISD4004高位地址表ucharcodeaddl_tab[73]={00,22,00,07,14,21,28,35,42,49,56,63,70,77,84,91,98, 00,07,14,21,28,35,42,49,56,63,70,77,84,91,98, 00,07,14,21,28,35,42,49,56,63,70,77,84,91,98, 00,07,14,21,28,35,42,49,56,63,70,77,84,91,98, 00,07,14,21,28,35,42,49,56,63,70 };//ISD4004低位地址表ucharcount=1; //站计数器,初始为第1站

温馨提示

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

评论

0/150

提交评论