HCS12系列单片机未包含数/模转换的模块。要给其扩展语音功能,通常的做法是增加一块数/模转换芯片。虽然这样做可以得到非常好的音质(取决于数/模转换芯片的性能),但由于要多使用一块数/模转换芯片,在对音质要求不太高的应用中,会给设计增加额外的成本,同时也使电路设计相对复杂。
本文介绍利用PWM还原声音的解决方案,可以很好地解决这个矛盾。例如安全报警应用中,系统通常已经包含了一块微控制器(用来处理人机交互以及系统的控制等),当发出警报时,可以是“BB”或“当当”的蜂鸣声;当然,更好的做法是发出清晰的语音。
用PWM产生声音的基本原理,是使用存储在Flash中的音频采样数据或通过某种算法产生的声音数据,来控制PWM每个波形的占空比;接下来通过一低通滤波器滤波,就可将声音从PWM的脉冲波里分离出来,驱动扬声器发出声音。
1 从WAV文件中提取声音采样数据
一般来说,可以从WAV文件中提取声音数据,标准的WAV格式的声音文件含有声音的采样数据和文件头。文件头描述了后面声音数据的一些信息,如通道数、采样频率、采样位数以及数据的长度等。
通道数,是指声音的采样路数,如单声道、立体声等。采样频率,是指每秒钟对声音的采样次数,采样频率越高,还原出来的声音越接近原始声音,如表l所列。要精确还原出某种频率的波形,其最小采样率应为该波形的2倍。
采样位数,指的是每次采样的采样精度。采样位数越高,还原出来的声音的量化噪声越小,波形也越接近原波形。WAV文件的文件头定义:
提取声音数据时,请注意采样频率、采样位数、存储容量与存储时间的关系,如表2所列。通常,11.025 kHz的采样频率和8位的采样位数可获得清晰的语音以及较好的音乐声,并且占有较少的存储空间。
通过了解和分析WAV文件的格式,可以将文件中的声音采样数据读取出来,并转换为C语言格式的数组结构,以便和其他程序一并编译和下载到芯片中去。例如:
2 产生PWM波形
要还原声音,最低要求是HCSl2系列微控制器具备一个PWM模块,芯片选择的另一个细节是要有足够的Flash存储容量,来存储声音的采样数据。MC9S12DP256具有一个16位的PWM模块.可产生16位解析精度的PWM波形,这意味着nr以使用16位的采样数据来产生PWM。MC9S12DP256还具备256 KB的Flash,能够存储23 78 s八位11.025 kHz的采样数据。
产生PWM波形的步骤:
①设置定时器.产生定时中断:如采样率为ll.025 kHz.则设置定时器的定时中断频率为11.025 kHz。
②初始化PWM模块,产生11.025kHz的PWM波形。
③等待定时器中断,在中断处理程序中取采样数据,并设置PWM占空比寄存器,判断声音是否播放完成。若完成,则关定时器巾断,并停止PWM输出。
3 低通滤波
PWM输出后须通过低通滤波器滤波,才能还原成人耳能识别的声音。低通滤波器的类型和参数取决于声音的采样频率和价格预算。最简单的要数RC滤波器。这种滤波器的优点是仪需要两个元件,另一种是有源滤波器,滤波效果好,但相对复杂。
滤波器截止频率的选择,对于音频输出是非常重要的,推荐设置在采样频率的一半。若要获得更佳的滤波器截止频率,就要进一步对采样数据进行分析,找出最大具有有效声音数据的频率。当然,在一般应用中并没有要求这么严格,甚至在某些场合中,即使用参数不非常明确的元件也能获得很好的声音输出,这时RC滤波器将是最好的选择。
推荐使用图1所示的滤波器,其截止频率为5.5 kHz(11.025 kHz/2)。这个设计中,使用了2个运算放大器,足够驱动一小型扬声器。
图2也给出一种简单直接的接法:仅使用一22μF的电容用于低通滤波,驱动一5 kHz、8Ω的小扬声器。
利用MC9S12DP256微控制器的PWM功能可为单片机的应用增加语音功能。对声音采样数据的存储方式是用直接的、原始的采样数据。在具体的实际应用中,为存储更长时间的声音数据,还可对声音数据进行压缩,具体算法请参考相关资料。
关键字:PWM HCS12单片机 语音功能
引用地址:
利用PWM给HCS12单片机应用实现语音功能
推荐阅读最新更新时间:2024-03-16 12:45
多功能语音电子电话号码薄的研制
摘 要: 结合实际研制开发工作介绍了多功能语音电子电话号码簿的性能与特点,给出了该系统的软、硬件设计方案和系统组成,讨论了MCU与DSP、DSP与CODEC的接口技术以及整个系统的供电技术。
关键词: 语音识别 语音提示 语音回放 语音拨号 DSP CODEC
国内现有的电子电话号码簿皆采用键盘拼音输入方式进行查询,且无拨号功能,使用不便,不易被消费者接受。1998年底在西方发达国家刚刚问世的语音电子电话号码簿为英语语音提示,对使用汉语的中国人极为不便,且功能单一,价格昂贵,不适宜中国的消费者使用。我们研制的功能强、性能优、价格低廉、识别率高的适合中国国情的
[应用]
PWM DC/DC半桥转换器
Buck式PWM DC/DC全桥转换器如图所示。四个开关管S1~S4组成全桥PWM逆变器,高频PWM脉冲轮流控制开关的导通与关断,在一个开关周期内 上半周期S1、S4导通,S2、S3关断;下半周期S2、S3导通S1、S4关断。将直流输入电压Ui转换成高频交流方波电压,实现DC/AC转换。交流方波 电压的频率由PWM频率决定。高频方波电压经过高频变压器升降后,再经过全波整流器和LC低通滤波器电路,得到直流输出电压叽,实现AC/DC 转换。这里需要指出的是PWM DC/DC半桥转换器和全桥转换器,都存在高频变压器直流偏磁现象。为了防止直流偏磁现象,最简单的办法是在变 压器初级绕组中串接一个隔直(B1ock)电容。电容承受直流电压分
[电源管理]
AVR单片机pwm程序+仿真_数显
#include iom16v.h #define uchar unsigned char #define uint unsigned int uchar Table ={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x79}; uchar Data1 ={10,0,5,0}; uchar Data2 ={3,9,1,0}; uchar Key1,Key2; void DelayMs(uchar i) { uchar j; for(;i!=0;i--) { for(j=150;j!=0;j--); } } v
[单片机]
PWM控制亮度的流水灯c51程序
#include Reg52.h //--重定义函数变量--// #define uchar unsigned char #define uint unsigned int #define ulong unsigned long /* 定义常量 */ #define FOSC 12000000L //主时钟 #define T50us (65536-FOSC/12/1000000*50) //12T 模式下,50us 时间的计算方法 #define T10ms (65536-FOSC/12/1000*10) //12T 模式下,10ms 时间的计算方法 //--定义全局变量--// uc
[单片机]
STM32CUBEIDE(11)----输出PWM及修改PWM频率与占空比
概述 本章STM32CUBEMX配置STM32F103输出PWM,并在示波器中查看效果。 需要样片的可以加Qun申请:615061293。 生成例程 使用STM32CUBEMX生成例程,这里使用NUCLEO-F103RB开发板 查看原理图,PA8设置为PWM输出管脚。 生成独立的文件。 工作过程 查看下面工作原理图可以得知,时钟可以由内部Internal clock产生或者外部ETR。 同时可以设置复位,使能,向上/向下,计数。 查看下列文档可以得知,定时器主要有TIMx_CNT、TIMx_PSC、TIMx_ARR、TIMx_RCR控制。 同时预分频器(TIMx_PSC)范围位1-65535。 查看TIMx
[单片机]
【STM8L】STM8L之timer2产生PWM
一、简介 本文介绍STM8L系列如何使用timer2产生38K频率的PWM。 其中,本文使用的是timer2的第1通道(PB0)。 二、实验平台 编译软件:IAR for STM8 1.42.2 硬件平台:stm8l101f3p6开发板 仿真器:ST-LINK 库函数版本:STM8L_STMTouch_Lib_V1.1.0 三、版权声明 四、实验步骤 1、工程中添加自己写的定时器2的驱动 1)写一个驱动GUA_Timer2_PWM.c (存放在工程的USER文件夹中) //********************************************************
[单片机]
PWM控制电路基本原理与FPGA
在直流伺服控制系统中,通过专用集成芯片或中小规模的数字集成电路构成的传统PWM控制电路往往存在电路设计复杂,体积大,抗干扰能力差以及设计困难、设计周期长等缺点因此PWM控制电路的模块化、集成化已成为发展趋势.它不仅可以使系统体积减小、重量减轻且功耗降低,同时可使系统的可靠性大大提高.随着电子技术的发展,特别是专用集成电路(ASIC)设计技术的日趋完善,数字化的电子自动化设计(EDA)工具给电子设计带来了巨大变革,尤其是硬件描述语言的出现,解决了传统电路原理图设计系统工程的诸多不便.针对以上情况,本文给出一种基于复杂可编程逻辑器件(CPLD)的PWM控制电路设计和它的仿真波形. 1 PWM控制电路基本原理 为了实现直流伺
[嵌入式]
基于SOPC技术的医用呼吸机主控系统
呼吸机是可以代替人的呼吸功能或辅助人的呼吸功能的仪器。它适用于呼吸衰竭、甚至停止呼吸的病人做人工呼吸之用。它能帮助病人纠正缺氧和排出二氧化碳,是挽救某些危重病人生命的重要工具。 现有的呼吸机产品,其主控系统大多基于单片机来实现,对于功能强一些的产品就需要使用高端单片机,这样使得系统的成本比较高,而且外围的接口模块较多,结构复杂。使用SOPC(可编程片上系统)技术设计主控系统,可充分利用IP核的强大功能,精简外设数量,与此同时只占用了很小部分的资源,大大提高了系统的性价比。 本文利用SOPC技术设计了持续气道正压通气呼吸机的主控系统,使用了Altera公司的Nios II软核处理器以及一些通用的IP核,笔者基于Avalo
[医疗电子]