《电子技术应用》
您所在的位置:首页 > 通信与网络 > 设计应用 > 基于AT89S52 和K9F6408U0A 的语音数字系统设计
基于AT89S52 和K9F6408U0A 的语音数字系统设计
维库
摘要: 在研究传统语音录放电路的基础上,提出了一种基于AT89S52的音频信号采集、存储与处理系统。该系统以单片机AT89S52为控制器,采用键盘和LCD作为人机界面,ADC0809采集音频信号,扩展8MB闪速存储器K9
Abstract:
Key words :

  摘要: 在研究传统语音录放电路的基础上,提出了一种基于AT89S52 的音频信号采集、存储与处理系统。该系统以单片机AT89S52 为控制器, 采用键盘和LCD 作为人机界面,ADC0809 采集音频信号, 扩展8 MB 闪速存储器K9F6408U0A作为数字化音频信号的存储器,通过软件滤波滤除噪音;采用PWM 产生声音的原理,使存储在Flash 中的音频数据控制PWM 每个波形的占空比,通过低通滤波器将声音从PWM 的脉冲中分离,并驱动扬声器。实验表明:8 kHz 采样频率和8 位采样位数可获得清晰的语音以及较好的音乐声,语音存储时间达15 min。

数据采集技术涉及领域广,采集信号的动态范围宽,处理数据量大,对系统实时性能要求高。以数字信号的形式对信号进行处理,具有处理速度快、灵活、精确、抗干扰能力强、体积小及可靠性高等优点,满足了对信号快速、精确、实时处理及控制的要求。本设计利用了数字电路的这些优点,对传统的模拟录音电路进行了改进,以较低的成本使性能得到了提高。

1 方案论证

本设计以数字化信号的形式对音频信号进行处理,有以下3 种方案可供选择:

1)直接利用语音芯片进行语音录放。Winbond 公司的ISD系列语音芯片采用了Chip-Corded 专利技术, 声音无需A/D转换和压缩就可直接存储,不存在A/D 转换误差,在一个记录位(BIT)可存储多达250 级声音信号,相当于通常A/D 技术记录容量的8 倍。片内集成了晶体振荡器、麦克风前置放大器、自动增益控制、抗混叠滤波器、平滑滤波器、声音功率放大器等,只需很少的外围器件,就可构成一个完整的声音录放系统。

2)利用DSP 对采样信号进行处理。DSP 是专门为快速实现各种信号处理算法而设计的、具有特殊结构的微处理器,其处理速度远远超过一般的CPU。

3)利用AT89S52 作为系统主控芯片,利用ADC0809 对音频信号进行采集和A/D 转换,将转换得到的数字化音频信号存储到扩展的数据存储器中,利用软件对信号进行数字滤波,最后通过单片机输出PWM 信号来完成放音。

从经济和技术等因素考虑对上述3 种方案进行比较:直接利用语音芯片可以减少很多外围电路, 电路设计方便,但语音芯片使用不够灵活。DSP 具有强大的数字信号处理功能,使用灵活,但该芯片价格较高,不适于一般的应用。方案3)中器件均为常用芯片,易于获取,且价位不高。因此,方案3)为最佳设计方案。

2 硬件设计

图1 为系统硬件结构图。音频信号通过拾音器将声音信号转换为可以处理的电信号,前置放大电路用来对拾音器的输出进行放大, 与A/D 转换电路匹配,A/D 转换电路实现对模拟信号的编码。微处理器是系统的核心,它用来对数字化音频信号进行处理和存储,协调系统各个部分的工作,输出PWM 波来驱动输出电路。

系统硬件结构框图
系统硬件结构框图
图1 系统硬件结构框图。

2.1 单片机

单片机是系统的控制中心, 它主要实现以下的功能:控制LCD 显示语音信号的相关信息, 控制按键识别和功能选择; 控制音频数据的采集并存储在Flash ROM, 放音时读取Flash ROM 中数据,用软件方法产生PWM 脉冲信号,实现语音的存储和回放。

2.2 声音信号拾取、放大电路

声音信号拾取电路就是将声音信号转换为电信号的装置。本设计选用麦克风,它是一种声敏电阻,其阻值随外界声音信号的变化而变化,将其串联在电路中,电阻的变化形成电压的变化,经过电容通交隔直,就得到了表征声音信号特征的电信号。

然而由于声音信号拾取电路输出电压的幅值很小,为20~25 mV,若将该信号直接与A/D 转换电路相连,由于A/D转换器最小分辨电压也为毫伏数量级, 会产生很大的误差,为了保证系统的精度,在和A/D 转换电路相连之前,需串联一个放大电路, 考虑到声音信号拾取电路的输出信号很小,放大电路的失真度和噪声对系统的精度影响最大,故将其设计为抗共模干扰强的并联负反馈放大电路, 由于音频信号的频宽较大,故选用宽频带,低输出阻抗的双运放NE5532。

2.3 A/D 转换电路

A/D 转换电路由A/D 转换器ADC0809 与系统处理器AT89S52 组成, 主要实现对放大后的声音信号进行采样。

ADC0809 与AT89S52 的电路连接如图2 所示。

ADC0809 与AT89S52 的连接电路
ADC0809 与AT89S52 的连接电路
图2 ADC0809 与AT89S52 的连接电路

从图2 中可以看到,把ADC0809 的ALE 信号与START信号接在一起,这样可使得在信号的前沿写入(锁存)通道地址,紧接着在其后沿就启动转换。启动A/D 转换只需要一条P2.7=0 指令。在此之前,要将P2.7 清零并将最低3 位与所选的通道对应的地址送入数据指针DPTR 中。ADC0809 的转换结束信号EOC 取反后与AT89S52 的INT1 相连,采用中断方式读取A/D 转换结果,并启动下一次A/D 转换。也可定时启动A/D 转换,并读取上次转换结果。

2.4 声音编码存储电路

在采样时每一采样点都会产生1 字节的数字编码信号,由于采样的频率为8 kHz, 若录音15 min, 则所需的存储空间为7.031 25 MB,故系统选用8 MB 的Flash 存储器K9F6408U0A,由于该存储器的地址线和数据线可复用[3],这样可节省I/O 接口。K9F6408U0A 的最大优点在于其命令、数据和地址均可通过8 条I/O 接口线与主控制器进行通信, 大大简化了系统的连线, 增强了系统的稳定性。除8 条I/O 接口线外,K9F6408U0A 还包括以下控制线,1)CLE: 命令锁存使能端,高电平有效。在WE 信号的上升沿,命令信号可通过I/O 口锁入命令寄存器;2)ALE:地址锁存使能端,高电平有效。在WE信号的上升沿, 地址信号可通过I/O 口锁入地址寄存器;3)CE:片选线,低电平有效。在页编程或块擦除操作期间或器件处于忙状态时,CE 高电平将被忽略,4)WE: 写使能口,命令、地址和数据在WE 信号的上升沿被锁定;5)RE: 读使能口,在该口的下降沿将数据送到I/O 口线上,并使内部列地址寄存器加1;6)WP:写保护口,低电平有效,当其为低时,编程和擦除操作禁止;7)R/B:操作状态指示信号。为低时,表示正在编程、擦除或读操作,操作结束后变高。利用上述控制线,从而方便实现系统主控制器对K9F6408U0A 的控制。AT89S52单片机与K9F6408U0A 存储接口电路如图3 所示。

AT89S52 与K9F6408U0A 存储接口电路
AT89S52 与K9F6408U0A 存储接口电路
图3 AT89S52 与K9F6408U0A 存储接口电路。

2.5 PWM 输出电路

本设计采用单片机输出PWM 信号驱动音频放大电路,PWM 输出电路如图4 所示。PWM 是一种利用微处理器的数字输出控制模拟电路的有效技术,对一系列脉冲的宽度进行调制,等效获得所需波形,并且由于没有使用D/A 转换器,系统成本减少很多。PWM 的优点是从处理器到被控系统信号都是数字形式的,无需进行D/A 转换。让信号保持为数字形式可将噪声影响降到最小。此外PWM 信号很容易通过MCU 的软件进行控制,即使电路稍微有些系统误差,易于通过软件进行校正。

图4 中, 利用单片机的P1.7 引脚输出一定宽度的PWM信号,通过三极管整形后,作用在惯性环节上,得到的输出信号PWMOUT 将作用在音频功放电路上,还原为声音。

PWM 输出电路
PWM 输出电路
图4 PWM 输出电路。

2.6 音频功率放大电路

为了使系统有足够大的输出,驱动扬声器发声,便于调节音量, 在PWM 输出电路后使用了音频信号功率放大器LM386 构建功率放大电路,如图5 所示。

音频功放电路
音频功放电路
图5 音频功放电路。

LM386 型音频功率放大器主要应用于低电压消费类产品。为使外围元件最少,电压增益内置为20。但在其引脚1 和8 之间外接电阻和电容, 便可将电压增益调为任意值, 直至200。输入端以地位参考,同时输出端被自动偏置到电源电压的一半, 在6 V 电源电压下, 其静态功耗仅为24 mW, 使得LM386 特别适用于电池供电的场合。PWMOUT 为PWM 输出电路的输出,扬声器为8 Ω,0.5 W。经过调试发现将电源+5 V用10 μF 和0.1 μF 的电容滤波后,会减小很多噪声,效果较好。

3 系统软件设计

系统具有录音、放音、暂停、清除存储内容等功能,各种功能由按键来选择,系统首先扫描各个按键的状态,如果有按键按下,就转往相应的处理程序,系统程序流程如图6 所示。

系统流程图
系统流程图
图6 系统流程图。

3.1 系统初始化程序

系统初始化程序主要对单片机中断、定时器、LCD 初始化、键盘、PWM、K9F6408U0A 存储接口,以及ADC0809 地址、程序中要用到的各个变量进行设置。

3.2 按键扫描程序

由于录音和暂停是由和外部中断引脚相连的2 个按键来设置,一旦按键按下就进入录音或放音程序,所以按键扫描程序用于扫描放音键和清除键是否按下。

3.3 录音程序

与外部中断0 相连的按键按下,则进入录音程序。

录音过程实质上是启动ADC0809 对模拟音频信号进行采样, 并将A/D 转换结果存储到外围数据存储器中的过程,故其主要包含对ADC0809 进行读取, 对外围数据存储器进行写入两个部分。

提取声音数据时,要注意采样频率、采样位数、存储容量与存储时间的关系,通常8 kHz 的采样频率和8 位的采样位数可获得清晰的语音以及较好的音乐声,并且占有较少的存储空间。

以8 kHz 的采样频率启动ADC0809,并读取上次采样结果,写到外扩Flash 存储器的代码片段如下:




3.4 放音程序

若P1.0 按下,则执行放音程序。放音过程实质上是读取外围数据存储器中的数据,将其转化为一定宽度的PWM 波,进行输出的过程。读取K9F6408U0A 的子函数如下:

// 函数名称: READBYTE


产生PWM 波形的步骤:1)设置定时器,产生定时中断,若采样率为11.025 kHz, 则设置定时器的定时中断频率为11.025 kHz;2)初始化PWM 模块,产生11.025 kHz 的PWM波形;3)等待定时器中断,在中断处理程序中取采样数据,并设置PWM 占空比寄存器,判断声音是否播放完成。若完成,则关定时器中断,并停止PWM 输出。

3.5 暂停程序

在录音过程中,如果需要暂时停止录音可以按下暂停键进入暂停状态, 再次按下暂停键可以返回暂停以前的状态。

程序中设置了一个变量来指示现在是应该暂停还是恢复。

3.6 存储器内容清除程序

当存储器内容已满,而又需要录音时,可以按下清除按键,清除一定容量的内容,供用户再次使用。

擦除:以块为单位进行擦除。代码片段如下。






4 调试注意事项

系统进行调试时,应注意以下方面:

1)由于在PCM(Pulse Code Modulation)编码及DPCM 编码模式下都要采用8 kHz 的采样率,所以,每次压缩中断服务程序必须在不超过125 μs 的时间内完成,因此,压缩录音处理程序的代码必须进行最大可能的优化,以减少程序执行时间,以免采样和数据处理或信息显示发生冲突,也可避免在中断采样时造成采样点的丢失。

2)在选择ADC0809 的时钟时,经典选择是640 kHz 左右,最初选择将单片机的ALE 端4 分频后作为ADC0809 的时钟信号,但发现影响了LCD 的输出显示。将ALE 改为2 分频后(用1 M 触发)作为ADC0809 的时钟信号,问题得到解决。

3)使用MAX813L 复位芯片替代RC 复位电路,使电路可靠复位,结合软件监控实现看门狗功能。

4)当采样频率为8 kHz,字长为8 位时,存储语言时长超过15 min,回放语音质量良好。

5 结束语

利用K9F6408U0A 8 MB NAND Flash 存储器和单片机PWM 功能可为单片机的应用增加语音功能。对声音采样数据的存储方式是用直接的、原始的采样数据。在具体的实际应用中,可选用内嵌A/D 转换器的STC12C5A08AD,可省去外扩ADC0809,使电路更简洁。创新之处在于不使用专用的语音芯片,实现使单片机应用系统语音的存储与回放。

此内容为AET网站原创,未经授权禁止转载。