南京信息工程大学 电子与信息工程学院 电子科学与技术系 周悦 20091321018
毕业论文(设计)
题 目 基于凌阳61单片机的无线语音遥控车设计
学生姓名 周悦
学 号 20091321018
院 系 电子与信息工程学院
专 业 电子科学与技术
指导教师 季鑫源
二O一 三 年 四 月 十 日
南京信息工程大学 电子与信息工程学院 电子科学与技术系 周悦 20091321018
南京信息工程大学 电子与信息工程学院 电子科学与技术系 周悦 20091321018
目 录
1前言....................................................................... 1 2语音识别技术概述
2.1简介................................................................. 2 2.2发展历程
2.2.1国外研究历史及现状.......................................... 2 2.2.2国内研究历史及现状.......................................... 3 2.3分类方式............................................................ 3 2.4识别过程............................................................ 4 2.5相关硬件............................................................ 4 3系统方案设计
3.1发送端方案设计..................................................... 5 3.2接收端方案设计..................................................... 5 3.3总体方案设计....................................................... 6 4 系统芯片和模块介绍
4.1核心芯片SPCE061A
4.1.1 概述......................................................... 7 4.1.2 相关性能.................................................... 7 4.1.3 开发方式.................................................... 8 4.2 车体控制芯片STC89C51
4.2.1 概述......................................................... 9 4.2.2 性能参数.................................................... 9 4.3 直流电机驱动模块L298N
4.3.1 概述......................................................... 10 4.3.2 逻辑功能..................................................... 10 4.3.3 模块连接图................................................... 11 4.4 NRF24L01无线传输模块
4.4.1 概述.......................................................... 12
1
南京信息工程大学 电子与信息工程学院 电子科学与技术系 周悦 20091321018
4.4.2 特性参数..................................................... 12 4.4.3 注意事项..................................................... 13
5 系统原理连接图
5.1 SPCE061A核心板原理连接图........................................ 13
5.1.1电源模块原理连接图.......................................... 15 5.1.2音频输入输出电路............................................ 16 5.1.3输入/输出(I/O)接口....................................... 17 5.1.4 PROBE与EZ—PROBE接口..................................... 17 5.1.5 USB下载端口................................................ 18 5.2 STC89C51原理连接图
5.2.1最小系统..................................................... 18 5.2.2驱动直流电机................................................ 19
6 整个系统的软件实现方案
6.1 发送端的软件流程设计............................................. 20
6.1.1语音模型训练部分............................................ 21 6.1.2语音模型识别部分............................................ 22 6.1.3无线指令传送与接受部分..................................... 23 6.2 接收端软件设计流程................................................ 24 7 程序开发与下载
7.1编程软件
7.1.1 unSP IDE 2.6.2D............................................. 25 7.1.2 Keil C51..................................................... 26 7.2 程序算法详解
7.2.1 发送端凌阳SPCE061A程序算法............................... 26 7.2.2 接收端STC89C51程序算法................................... 30
8 结论...................................................................... 34 9 致谢............................................................ 36
2
南京信息工程大学 电子与信息工程学院 电子科学与技术系 周悦 20091321018
基于凌阳61单片机的无线语音遥控车设计
周悦
南京信息工程大学电子科学与技术系,南京 210044
摘要:论文主要介绍的是通过语音识别技术和无线传输技术进行的无线语音遥控智能小车的设计过程。该设计的核心是利用SPCE061A单片机和STC89C51单片机分别实现语音识别和智能小车控制,再通过NRF24L01这一半双工的无线模块,将语音识别部分和小车控制部分联系起来,实现了SPCE061A单片机与STC89C51单片机之间的无线通信,最终实现人对小车的无线语音遥控。本文概述了语音识别的相关原理,给出了整个系统的相关硬件组成,并详细说明了利用单片机进行特定人声语音识别和无线信息传输的算法。经过反复的调试和实验,已经成功实现特定人对智能小车的无线语音遥控,并且具有一定的人机交互功能。
关键词: 语音识别算法 无线传输算法 智能小车
南京信息工程大学 电子与信息工程学院 电子科学与技术系 周悦 20091321018
南京信息工程大学 电子与信息工程学院 电子科学与技术系 周悦 20091321018
1、前 言
随着数字化时代和智能化时代的快速发展,人类对于计算机的使用可以说到达了频繁的程度,各类电子设备正以极快的速度问世并投入使用,日常生活中的电子产品也越来越多的发挥着各个方面的作用。然而,在各类电子设备和电子产品的使用过程中,人类在一定程度上要使用双手进行一些复杂繁琐的按键输入和触摸操作,那么,可不可以用其他的方式对计算机进行输入,对各类电子产品和电子设备进行操控呢?有一种方案就是通过声音来实现对计算机的控制,即语音识别。
随着单片机技术和声音音信号的处理技术的快速发展,满足各种人类需求的语音识别系统正不断成为当今时代的热门事物。应用了语音识别技术的各种产品和设备无论在工业生产中或者在日常生活中都已占有越来越大的比重。
语音的识别指的是计算机能够通过“识别”这样一种过程把原先的声音信号变成相应的文本的技术,语音的识别技术在一定程度上说是让计算机理解人们发出的声音。所谓的理解不光是说让计算机接收到我们的声音,同时还能够对我们所说的声音进行处理,也可以说是对于语音中包含的信息进行分析、对比,并作出正确的响应。
计算机系统的不断发展也带动了嵌入式技术的发展,单片微型计算机简称单片机,就是一种典型的嵌入式微控制器,这种微控制器的最大优点就是体积小、质量轻、功耗低。如果将语音识别技术应用在单片机上,就可以形成一个嵌入式的语音识别系统。虽然嵌入式的语音识别系统的运算速度比较低,存储容量也比较有限,不过仍然是一个完整的系统,具备了语音识别的各方面功能,同时它拥有和其他单片机一样的优点,便于嵌入各种电子设备和电子产品中,而且功耗较低。
此次无线语音遥控车的设计,便是将语音识别技术运用到嵌入式的单片机上,通过语音识别技术来产生控制信号,在通过无线传输技术将这样的控制信号发送出去,等到小车控制芯片通过无线模块接收到信号以后,就可以对小车进行前进、后退、左转、右转、停止等远程的语音控制。
- 1 -
南京信息工程大学 电子与信息工程学院 电子科学与技术系 周悦 20091321018
2、语音识别技术概述
2.1 简介
所谓的语音识别,也被称作为自动语音识别,它的目的是将人类语言里的词汇内容转变为计算机能够读出的输入,比如二进制的编码或者字符的序列等。这一点与说话人识别及确认是不同的,它不是尝试识别或确认发出语音的说话人,而是其中所包含词汇中的实际内容。
语音识别技术的应用包括语音的录入、语音的拨放、语音的导航、语音的控制、语音的检索等方面。可以设想,如果我们把计算机的语音识别技术与其他自然语言处理技术相结合,就能够开发出一些更加复杂的应用,比如说不同语言语音之间的转换等等。
语音识别技术所涉的一些相关领域包括了模式识别领域、发声机理和听觉机理领域、信号处理领域、人工智能领域等等方面。
2.2 发展历程
2.2.1国外研究历史及现状
在国际上,所有与语音识别有一定相关性的研究工作都可以追溯到上个世纪的中旬,而第一个可以进行成功识别数字和英文的语音识别系统便是当时A T & T实验室开发的A u d r y系统。
在上世纪六七十年代的时候,语音识别技术取得实质性进展,而且开始把语音识别技术作为一个重要的课题来进行研究。首先,为语音识别技术的发展提供了软件和硬件的可能的,是计算机技术的不断发展,而解决了语音信号的特征提取和不等长匹配等方面的问题的,是动态时间规整技术和线性预测编码技术的提出。但是这一时期的语音识别技术主要是基于模板匹配的原理,并且只能局限在特定人的很少的孤立词的较小的识别范围内。
然而,随着语音技术产品的应用领域不断扩大化,特定人的、孤立词的等等这些原先约束条件将会一步一步被放宽。但这同时也产生了一些其他的问题,比如说,模板的建立由于词汇表的不断扩大而变得更加困难;协音现象,就是在连续语音中,各个音素之间缺少明显的边界,则各个发音单位会受到上下文的强烈影响;而当进行非特定人声的识别时,在不同的时间、生理、心理状态下,哪怕是同一个人,相应的声学特征有很大的差异,更不用说是不同的人来说话发声;识别的语音中还会存在一定的噪声和其他方面的干扰。所以原来的模板匹配这一方法已经不再适用了。
上个世纪90年代初,实验室里的语音识别技术研究的产生了巨大发展:成功实现了“连续的语音输入”、“大量的词汇”、和“非特定人发声”这三个方面的突破,也是第一次做出了把这三个功能都集中起来的一个系统,而第一个高性能的并且能够实现非特定人、大词汇量的连续语音识别系统,便是卡耐基梅隆大学的S p h i n x系统。
- 2 -
南京信息工程大学 电子与信息工程学院 电子科学与技术系 周悦 20091321018
在语音识别技术的进一步深入发展中,最显著的特征是隐马尔科夫模型和ANN技术在研究领域中的成功应用。由于R a b i n e r等科学家的不懈努力,使得原本比较复杂难懂的隐马可代夫模型被工程化,从而也使得更多的研究者了解了这一模型,也就让“统计的方法”变成了语音识别技术的一个主流。
统计方法的运用将研究者的角度从微观方面转向了宏观方面,不是再去刻意的追求语音识别技术的细化,而是从整体的、平均的角度来开发出最佳的语音识别技术。在声学模型方面,以马尔科夫模型作为基础的语音序列建模方法也就是HMM,比较成功地解决了语音信号在短时间内能够稳定、长时间内会时变的这一特性,也就能够达到比较高的建模精度、灵活性。
而到了上个世纪末期,世界上多家著名的大公司都开始对语音识别系统的实用化研究进行巨大的资金投入。识别的准确率是对语音识别技术产品性能评测的一个很好的评估标准,并且这项指标在21世纪前期的实验室研究过程中得到了不断的突破、发展和提高。
美国的I B M公司(国际商业机器公司)在1997年时开发出了汉语的V i a V o i c e语音识别系统,它的平均识别率可以达到95%,并且带有32,000个词的基本词汇表,同时可以扩展到大约65,000词,还包括了一些办公的常用词条,由于该系统对新闻语音的识别具有较高的精确度,所以它是目前最好的汉语的连续语音识别系统。
2.2.2国内的研究历史及现状
从上个世纪50年代起,我国的语音识别技术的研究工作开始起步。而近几年来发展速度很快,并且相关的研究的技术也正一步一步不的走向实用化。我国有过一个863计划,它是从1987年便开始实施的,一些智能计算机专业领域的专家们对语音识别技术的研究领域进行了专门的立项。我国自主的语音识别技术已经大致上赶上世界平均水平,并且在中文汉语方面的语音识别研究上还拥有自己的与众不同的优点。比较领先的有清华大学电子工程系等等重点实验室项目,除此之外还有中国科学院的自动化所,清华大学、北京大学等大学和科研机构都拥有自己的独立实验室进行过语音识别技术各方面的研究。
目前我国能够达到95%左右的识别精度的,是清华大学的电子工程系语音技术课题设计研究组,主要研发的是非特定人、汉语、连续语音识别三方面的系统。在有5%的拒识率情况下,这已经是是国际上现阶段最好的识别结果之一了,不仅达到了实用要求,而且不光可以识别普通话这一种语言。
汉语的语音识别产品从1998年以来一直由国外公司垄断,而打破了这一历史PattekASR这一中文的语音产品,这个是中科院自动化所在2002年发布的,这也是面向不同计算平台和应用的产品。[2]
2.3分类方式
(1)孤立词的语音识别系统,连接词的语音识别系统以及连续语的音识别,这是根据发声人发音方式的要求来划分的。
- 3 -
南京信息工程大学 电子与信息工程学院 电子科学与技术系 周悦 20091321018
(2)特定发声人和非特定发声人的语音识别,这是根据系统对发声人的依靠程度来划分的。 (3)小词量、中等词量、大词量以及无限词量的语音识别,这是根据输入的词量来划分的。
虽然采用的相关技术大致相同,但是不同的语音处理系统,也会有具体细节上的不同。特征的提取、模式的匹配和模型的训练,是语音识别技术主要包括的三个方面。同时,语音识别单元的选取也是必须要涉及到的问题。
2.4识别过程
声音信号的预置处理、特征的提取和模式的匹配,是语音识别过程主要包括的几个部分。预置滤波、采样量化、预置加重等就是是预置处理的过程了。特征参数的提取是声音信号识别最关键的一个环节。以下的几点是提取出特征的参数需要具备的:(1)要具有很好的区分性;(2)要有良好的独立性;(3)要有高效、高精度的算法。
图1 语音识别过程
每个词条都会建立一个模型,就是要将特征参数进行一定的处理,这个也是在训练阶段的项目,将所有的语音模型保存为一个模板库,这里进行的是语音的训练阶段。
将后面输入的语音信号经过相同的通道得到语音特征参数,并接着生成测试用的模板,与刚刚建立起的参考模板进行匹配,将匹配的结果最相似的参考模板作为识别的结果,这个便是语音的识别阶段了。
要不断提高识别的准确率,还需要在很多的已有知识的帮助下完成。
- 4 -
南京信息工程大学 电子与信息工程学院 电子科学与技术系 周悦 20091321018
2.5 相关硬件
语音识别需要以一个处理芯片为核心,同时在外围外接输入设备,如麦克风、放大器、A/D转换器等,外接输出设备,如D/A转换器、功率放大器、扬声器等,还要外接存储设备,用来储存训练的声音模型,用于后面匹配识别,如随机存取记忆体RAM、只读记忆体ROM、各类闪存FLASH等。
图2 外围模块
MIC
滤波电路与前置放大
AD转换 DA转换
功放
扬声器
主芯片 3、系统方案设计
3.1 发送端方案设计
发送端的核心芯片选用凌阳科技所生产的SPCE061A单片机,用于实现语音识别的功能,加之MIC输入模块和扬声器输出模块,可以实现发送端的简单人机交互功能,识别后的控制信号通过NRF24L01无线模块发送出去,就可以形成一个具有语音识别功能的无线遥控器。
音频输入模块
SPCE061A 芯片
无线传输模块
语音输出模块
图3 发送端模块
- 5 -
南京信息工程大学 电子与信息工程学院 电子科学与技术系 周悦 20091321018
3.2 接收端方案设计
接收端的核心芯片选用STC89C51单片机,用于实现对简易小车的控制,通过单片机控制直流电机,实现小车的前进、后退、左转、右转、停止等。外接在单片机上的NRF24L01无线传输模块用于接收从发送端发出的无线信号,将信号送入单片机后进行命令的辨析,然后发至直流电机模块,实现整个功能。
直流电机 驱动模块
STC89C51芯片
无线传输模块
3.3 总体方案设计
图4 接收端模块
由于在发送端需要进行语音识别过程,所以使用具有语音处理功能的凌阳61板来做发送装置,而接收端只需要对智能小车进行控制,所以使用STC89C51单片机作为接收装置。方案总设计如下:
通过麦克风将声音输送到SPCE061A单片机中,调用SPCE061A单片机的函数指令系统,对声音进行分析、识别,通过扬声器进行反馈,同时将识别后产生的信号通过NRF24L01无线模块发送出去,当STC89C51上外接的NRF24L01无线模块接收到无线信号之后,通过串行口将命令字送到51中进行处理和执行,将电平信号发送给直流电机驱动L298N模块,实现对小车的控制。
图5 总体方案设计
- 6 -
南京信息工程大学 电子与信息工程学院 电子科学与技术系 周悦 20091321018
4、系统芯片和模块介绍
在无线语音遥控小车的整个设计方案中,需要用到的芯片有两个,分别是发送端芯片SPCE061A和接收端芯片STC89C51单片机;需要用到的模块共有三个,分别是两个NRF24L01无线传输模块和一个L298N直流电机驱动模块。
4.1 核心芯片SPCE061A
4.1.1概述
SPCE061A 是继μ’n S P?系列产品等之后台湾凌阳科技推出的另一个16位的微控制器。SPCE061A里只内嵌32K 字的闪存FLASH ROM,拥有较高的处理速度,大致的工作速度范围为0.3MHz~49MHz ( 在电压2.6V~3.6V 范围内时),所以它的应用域将会更加宽广。 SPCE061A芯片可以说是目前语音处理系列产品中的性价比较高的应用微处理器。首先它有着仅占很少储存空间的SRAM(2K) 和闪存ROM(32K);再者,它具有复位/ 监测的两个功能,外加两个16位的计数/定时器和32.768kHz 的实时时钟,;最后,它还具有两通道DAC方式的声音输出,8 通道A/D转换输入功能;当然,最重要的,它具有内置的麦克风输入方式。[1]
4.1.2 性能参数[3]
? 是16位的微处理器; ? 工作电压:3.0~3.6V; ? IO口工作电压: 3.0~5.5V; ? CPU时钟:0.32MHz~49.152MHz; ? 2K字工作SRAM ; ? 32K字 闪存; ? 软件音频处理; ? 晶体振荡器;
? 悬挂状态下( 时钟处于停止模式) ,耗电最大2μ A ; ? 2 个16位可编程定时器/ 计数器; ? 2 个10位DAC输出; ? 32位通用可编程IO端口; ? 14个中断源,2 个优先级; ? 具备按键唤醒的功能;
? 使用凌阳音频编码SACM_S240 2.4Kbps 方式,可容纳210 秒的语音数据;
图6 芯片实物图
- 7 -
南京信息工程大学 电子与信息工程学院 电子科学与技术系 周悦 20091321018
? 锁相环PLL 振荡器提供系统时钟信号; ? 32768Hz 实时时钟(RTC); ? 8 通道10位AD转换器 ; ? 全双工UART接收与传输口; ? 低电平复位,低电压检测; ? 看门狗使能功能; ? 有ICE接口;
? 具有防止代码被读写的保密功能;
4.1.3 开发方法
SPCE061A 的开发可以通过PROBE来实现。PROBE可以代替在单片机应用项目的开发过程中硬件在线实时仿真器和程序烧写器等常用的软件工具。PROBE可以说是一个程序烧写器(也就是所谓的编程下载器),同时它也是一个即时的在线调试器。PROBE利用的是SPCE061 A 芯片内置的在线仿真电路ICE (In- Circuit Emulator)接口,配合上凌阳公司的在线串行编程技术来进行相关的工作。
PROBE下载功能在凌阳IDE的集成开发环境软件包下即可进行相关工作,它的5线仿真针头可以直接连接到目标板SPCE061A核心板相应的管脚上,然后直接在核心板的CPU上进行调试和运行用户所编的程序。探头另一端的标准25针打印机接口,可直接连接到计算机的打印机端口和PC进行通信,同时利用计算机IDE集成开发环境软件包,就可以完成在线调试功能。[4]
图7 在线调试连线图
- 8 -
南京信息工程大学 电子与信息工程学院 电子科学与技术系 周悦 20091321018
4.2 车体控制芯片STC89C51
4.2.1 概述
STC系列单片机是美国STC公司最新推出的一种新型的51单片机。片内含有Flash程序存储器、PWM、SRAM、UART、SPI、ADC等模块。该器件的其他基础功能与51系列单片机完全兼容。
4.2.2 性能参数
(1)拥有增强型流水线/ 精简指令集结构的CPU (2)工作电压:5V 单片机的工作电压范围是3.4V-5.5V (3)工作频率:0~35 MHz,最高工作频率可达到48MHz. (4)用户的程序空间有 2K / 4K / 6K / 8K / 10K /12K 字节 (5)集成RAM(512个字节)
(6)有27或23个通用输入输出端口,有四种模式:准双向口/弱上拉,推挽/强上拉,仅为输入/高阻和开漏, 每一个I/O 口的驱动能力可达到20mA,不过55mA是整个芯片的最大值
(7)具有系统编程ISP和应用编程IAP,可以通过串口(P3.0/P3.1)直接下载用户程序而无需专用的编程器,大致几秒钟就可以下载好
(8)具有E2PROM 功能 (9)具有看门狗功能
(10)内置的MAX810 复位电路(外部复位电路在晶体20MHz 以下的时候即可以可省略掉)
(11)时钟源:外部的高精度晶振和内部的R/C 振荡器。用户可以选择究竟使用内部的R/C 振荡器,还是外部的晶振。如果系统对时钟精度的要求不高时,就可以直接用内部的时钟来办,不过一般内部R/C 振荡器的频率在常温下是5.2MHz ~6.8MHz。
(12)有2个16 位定时器/ 计数器
(13)具有2个外部中断,分别是下降沿中断和低电平中断,掉电模式可用外部中断的低电平中断方式唤醒 (14)4 路的PWM功能和可编程计数阵列PCA,能实现4个外部中断以及定时器等 (15)具有模数转换器功能。共有8通道的10位精度模数转换器 (16)具备UART功能
(17)具有主从模式的SPI 同步通信口 (18)工作温度:0~75摄氏度/ -40 ~+85摄氏度
(19)封装:PDIP-28,SOP-28,PDIP-20,SOP-20,PLCC-32,TSSOP-20
- 9 -
南京信息工程大学 电子与信息工程学院 电子科学与技术系 周悦 20091321018
4.3 直流电机驱动模块L298N
4.3.1 概述
L298N是SGS公司的产品,是一款含有2个H桥的高电压大电流双全桥式驱动器,包含了4通道逻辑驱动电路,接收的是标准的TTL逻辑电平信号。它可驱动96W以下功率的电机(46V/2A),主要用于二相、四相电机驱动。
- 10 -图10 L298N逻辑功能表
图8 L298N管脚图
图9 L298N实物图
4.3.2 逻辑功能
南京信息工程大学 电子与信息工程学院 电子科学与技术系 周悦 20091321018
4.3.3 模块连接图
L298有两路电源分别为逻辑电源和动力电源,上图中6V为逻辑电源,12V为动力电源。J4接入逻辑电源,J6接入动力电源,J1与J2分别为单片机控制电机的输入端,J3与J5分别与两个电极的相连。
ENA端口与ENB端口直接接入6V逻辑电源,也就是说两个电机时刻都工作在使能状态,而控制电机的运行状态只有通过J1与J2两个端口。
图11 L298N直流电机驱动连接图
由于使用的是线圈电机,所以在运行与停滞状态间相互转换和顺时针与逆时针状态间相互转换时会形成很大的反向电流,于是为了保护芯片的安全,就需要人为地的在电路中加入二极管进行保护。
4.4 NRF24L01无线传输模块
4.4.1 概述
NRF24L01模块是一种用于无线数据通信的传输模块,具有高集成、低功耗、微功率等优点,片上搭载了一片具有低功耗、高性能的嵌入式处理器——STM8L101,射频芯片采用的是最新一代的SX1212芯片。
- 11 -
南京信息工程大学 电子与信息工程学院 电子科学与技术系 周悦 20091321018
SX1212拥有创新和高效的循环交织纠错编码,灵敏度和抗干扰能力都有了大大的提高,模块提供了多种模式的选择方式,可以在线修改各种参数,如发射速率,发射功率,发射距离等,能够简单的进行二次开发,当然,由MCU来进行常规参数的设置也是可以的。
工作电压在2.1V到3.6V之间,切记不可超过3.6V,否则将烧毁芯片。整个模块在接收状态仅仅消耗5.6mA的电流。在1SEC周期轮询唤醒省电模式(Polling mode)下,接收仅仅消耗不到20uA,理论上一节3.6V/3.6A时的锂亚电池可工作10年以上,传输距离也很远。
(1)工作频率在410-440MHz频段内效果最佳(天线匹配),适合多节点的特殊场合; (2)无线模块空中速率最低1kbps,最高40kbps,可以软件随意设置 (3)UART(通用异步串行)接口,波特率支持最低1200,最高57600
(4)SX1212接收电流仅3mA,休眠状态仅为1.5uA,10dbm条件下,发射电流仅25mA;
(5)休眠状态仅为1.5uA,唤醒时间软件可设,最短50ms,最长5S,满足低功耗设备要求;率最小-8.5dbm,最大+12.5dbm,八档连续可软件设置选择
(7)FSK调制,灵敏度高,并采用CRC高效纠错编码,抗干扰能力强; (8)大容量数据缓冲,FIFO最大支持一次收发384字节; (9)标准DIP间距接口,最常见接口,便于嵌入式应用;
4.4.2 电气特性
参数
数值
单位 工作电压 3V – 3.6V,推荐工作电压 3.3V V 温度范围 -40 to +85
℃ 工作湿度 10%~90% %
工作频率 410-450Mhz,推荐 433Mhz 附近 MHz 发射功率 +18dBm dBm 空中传输率 1K,2K,5K,10K,2 0K,50K
kbps 发射电流 44 mA 持续接收电流 15 mA 休眠电流
1.5
uA 最高灵敏度 -122dbm @1kbps dBm 串口传输率 1200/2400/4800/9600/ 19200/38400/57600
bps 最大数据包长 384 byte 配置修改次数 300k
cycles 尺寸
32 X 21 X 1
mm
4.4.3 注意事项
- 12 -
(6)发射功 南京信息工程大学 电子与信息工程学院 电子科学与技术系 周悦 20091321018
(1) 无线模块 VCC 脚输入的电压要在1.8V到3.6V之间,不能低于1.8V,否则模块无法正常工作,更不能超过3.6V ,那样将会将模块烧毁。3.3V 左右的电压是最适合的。
(2) 除了 VCC端和GND端,其他的引脚都可以直接和普通的 51 单片机输入输出端口直接连接。当然如果使用的是5V的系统,那么可选用ASM1117-3.3 线性电压芯片来进行转换。
(3) 硬件上面,模块的 TXD 和 MCU 的 RXD 连接,RXD 和 MUC 的 TXD 连接。模块按照接口提示和 MCU 的 GND 连接起来
(4) AUX 为状态引脚,用户可以放数据发送或者接收完毕,AUX 电平会从低电平跳变为高电平,可以判断该电平状态来判断数据是否收发完成。
(5) 任何单片机都可实现对无线模块的数据收发控制,可结合自己擅长的单片机型号进行移植,默认 UART 波特率为 9600;
(6) 两次设置的频道间隔应该至少相差 1MHZ,这样才能实现2 个模块同时发射不相互干扰, 这在组网时必须注意。
5、系统原理连接图
凌阳61开发板如下图所示:
- 13 -
南京信息工程大学 电子与信息工程学院 电子科学与技术系 周悦 20091321018
SPCE061A芯片外围的基本模块有:晶振输入模块、锁相环外围电路、复位电路、指示灯等。[6]当声音输
图15 本次设计所用的61核心板
图14 凌阳61核心板功能图
5.1 SPCE061A核心板原理连接图
入后放入32K的Flash存储器中,进行相关的频谱分析,并与原先建立的模型进行比较。
- 14 -
南京信息工程大学 电子与信息工程学院 电子科学与技术系 周悦 20091321018
——————————————————————————————————————
图17 晶振输入电路
图16 凌阳61核心板原理图
图18 复位电路
图19 锁相环电路
图20 指示灯电路
5.1.1电源模块原理连接图
- 15 -
南京信息工程大学 电子与信息工程学院 电子科学与技术系 周悦 20091321018
图21电源模块连接图
61板的内核SPCE061A要求的电压为3.3V,而I/O端口的电压可以选择是3.3V或者是5V。所以,在板子上具有两种工作电压:5V和3.3V。不过要注意的是第15、36和第7引脚必须为3.3V的电压。
用户可以自由选择61板的供电方式:一种是 5V供电 用户可以直接使用电池来进行供电,而5V的直流电压可以直接通过AMS1117-3.3芯片稳压到3.3V,这样就能为整个61板供应5V与3.3V两种电平的电压。当然,用户也可以直接外接一个5V的直流稳压源来进行供电,再通过AMS1117-3.3将5V的电压稳压到3.3V。 另一种是直接用3.3V的电源进行供电,这样一来整个61板子的电压只有3.3V,而此时I/O端口的电压只有一种选择,即3.3V。
5.1.2 音频输入输出电路
非常强大的语音处理功能是61板所具备的,X1是声音的麦克风输入端,自带AGC控制,J3是语音输出的端口,以及一个2pin的插针喇叭,由DAC的输出引脚(即21和22引脚),经过SPY0030A放大(一款语音集成放大芯片,它的功能相当于LM386,不过要比LM386的音质更好),然后输出。
SPY0030A可以在2.4V到6.0V的电压内工作,700mW是它可以达到的最大输出功率。[8]
- 16 -
南京信息工程大学 电子与信息工程学院 电子科学与技术系 周悦 20091321018
5.1.3 输入/输出(I/O)接口
61板将SPCE061A的所有输入输出端口全部都引出来了,从IOA0~IOA15到IOB0~IOB15,同时,这些I/O口是可以编程的,即设成输入或者输出的模式:
在输入状态时,有悬浮输入和非悬浮输入等(非悬浮输入有上拉输入和下拉输入两种);在5V情况下,上拉电阻150 K,下拉电阻110 K;在输出状态时,有同相输出和反相输出两种。
5.1.4 EZ—PROBE接口与 PROBE接口
J4为PROB接口,该接口有5个插针,它的作用就是PC机连接起来,可以用它来进行程序的调试、程序的仿真和程序的下载。这样,就不需要再用仿真器和编程器了。
图22 音频输入输出电路
图23 输入/输出(I/O)接口电路
- 17 -
南京信息工程大学 电子与信息工程学院 电子科学与技术系 周悦 20091321018
J11是EZ_PROBE的引脚,下载线是用来下载程序的。其中一端是25插针的并口,用于连接PC机,另外一端接的是61板上的5插针EZ_PROBE引脚。
5.1.5 USB下载端口
实现USB下载程序的功能以及5V供电。PL2303是Prolific公司生产的一种高度集成的RS232-USB接口转换器,可提供一个RS232全双工异步串行通信装置与USB功能接口便利联接的解决方案。该器件内置USB功能控制器、USB收发器、振荡器和带有全部调制解调器控制信号的UART,只需外接几只电容就可实现USB信号与RS232信号的转换,能够方便嵌入到手持设备。该器件作为USB/RS232双向转换器,一方面从主机接收USB数据并将其转换为RS232信息流格式发送给外设;另一方面从RS232外设接收数据转换为USB数据格式传送回主机。
5.2 STC89C51原理连接图
5.2.1最小系统
STC89C51的最小系统如图26所示,使用外部按键复位和外部时钟,使用11.0592MHz的晶振。
图24 PROBE与EZ—PROBE接口电路
图25 USB下载端口
- 18 -
南京信息工程大学 电子与信息工程学院 电子科学与技术系 周悦 20091321018
5.2.2 直流电机驱动
图26 最小系统
L298N电机驱动模块连接图如下:
图27 电机驱动模块连接图
单片机首先进行指令的分析,分析后按照所编的程序将电平信号传送至电机驱动模块。当电平信号通过端口INPUT输入,经过L298N的处理,形成相应的正向电流与反向电流,并通过OUT端口输出至电机,实现电机的正转与反转。
- 19 -
南京信息工程大学 电子与信息工程学院 电子科学与技术系 周悦 20091321018
6、系统的软件实现方案
6.1 发送端软件设计流程
开 始 发送无线指令 初始化SPCE061A 等待小车响应 BSR_flag=1? Y 进行语音训练 否 训练成功?是 开始识别 否 成功识别? 是 图28 发送端的软件流程图 N 否 响应成功? 是 播放响应声 返 回
发送端的软件流程主要分为四个部分:初始化SPCE061A部分、训练语音模型部分、对比识别语音模型部分、指令无线传输部分和响应反馈部分。初始化SPCE061A操作将IOB7口设置为串行输入,IOB10口设置为串行输出,为向串口无线模组发送数做好准备。同时,初始化DAC模块来播放响应的指令,并准备对语音模型进行采集。
- 20 -
南京信息工程大学 电子与信息工程学院 电子科学与技术系 周悦 20091321018
6.1.1语音模型训练部分
训练开始 训练右转 训练前进 否i 成功否? 是i 训练后退 否i 成功否? 是i 训练左转 否i 成功否? 是i
图29语音模型训练流程图
成功否? 是i 训练停止 否i 成功否? 是i 播报成功提示音 否i 结束训练
当凌阳SPCE061A的训练标志位BS_Flag内容为0xffff时,就会开始对芯片进行语音模型的训练,训练操作的过程如上图所示:训练采用两次训练获取模型结果的方式,以训练前进为例:扬声器首先会提示:“1”,这时就说“前进”;然后扬声器提示:“HOO”,这时再次说“前进”,如果两次的“前进”差别不大,小车就能够成功的建立“前进”的语音模型,前进的指令也就训练成功;如果没能够成功的建立模型,扬声器会发出“A OH”的声音并再次发出“1”的声音要求重新训练语音模型。成功训练前进命令后会给出下一条待训练指令提示音“2”,参照前进命令训练方式继续训练后退的指令。依次训练小车的“前进”语音指令-“后退”语音指令-“左转”语音指令-“右转”语音指令-“停止”语音指令,全部的指令训练成功后子程序会返回,训练结束,进入识别准备阶段。
- 21 -
南京信息工程大学 电子与信息工程学院 电子科学与技术系 周悦 20091321018
6.1.2语音模型的识别部分
开 始 等待语音输入 与模型比较 否i 找到模型? 是i 指令给无线模块 结 束 图30 语音识别部分流程图
语音的识别过程可以说是整个系统的中心步骤。会对程序运行、识别的效果及实用性起决定的作用的便是识别对象的选取。为了获得最佳的识别效率,需要根据具体的应用情况选择决定。
此次的语音处理采用的是特定发音人识别的方式,这样就可以提高语音控制器的识别效果。就是让语音识别的对象(即用户)为某个特定说话人。语音的识别处理就是将人的语音转换成系统能懂的控制指令所依靠的平台,这样也就实现了根据说话人的声音进行相应的处理这样一个最终目的。
所谓语音的处理,大致可以分为语音模型的训练和语音的识别两个过程。首先,我们可将第一次输入信息所加载到系统内的存储空间称为“空的仓库”,而把那第一次输入的信息为“标准命令的模型”。所谓语音模型训练,就是将待识别的声音命令先进行一下频谱分析,提取出其中的特征参数作为“待分析命令的模型”。语音识别的过程就是将提取出特征参数的“待分析命令模型”,与已经加载到“仓库”中的语音“标准命令模型”进行比较,并取出相似度最好的模型命令序号作为识别结果,供程序进行后续处理。
此次的识别过程里,首先是将训练的“前进”、“后退”、“左转”、“右转”、“停止”等语音命令的模型存储在内存中,接着等待人的声音命令,等接受到了声音之后便立刻进行频谱的分析,然后与内存里的五个语音命令模型进行对照,若没发现相似度比较高的,便继续等待语音命令的输入;若发现相似度比较高的,便将与命令对应的指令通过串口发送至NRF24L01中进行无线发送,以便将命令送到小车控制芯片中。
- 22 -
南京信息工程大学 电子与信息工程学院 电子科学与技术系 周悦 20091321018
6.1.3无线指令传送与接受部分
开 始 发送无线指令 等待返回指令 否i 收到指令? 是i 播放响应声音 结 束
图31 无线发送与接收流程图
既然是无线遥控的小车,必然少不了无线通信,无线指的是指凌阳SPCE061A和STC89C51的通信,所以设计中用了一对半双工无线通信模组NRF24L01。
首先,需要自己定义一个无线通信协议,NRF24L01 无线模组,每次发送有效数据最少1字节,最多32字节,发送前模组自动为数据增加数据头和交验尾。因为不需考虑数据的保密性,所以就采用简单的一字节命令,这样也能提高通信的可靠性。
首先将模块设置为,频率 433.92MHz,空中速率 10Kbps,发射功率 12.5mW,串口速率 9600bps,无效验。
发送出去的串口数据和对应指令如下面的表格所示:
表1 串口数据对应指令表
数据 0x01 0x02 0x03 0x04 0x05 命令意义 前进命令 后退命令 左转命令 右转命令 停止命令
- 23 -
南京信息工程大学 电子与信息工程学院 电子科学与技术系 周悦 20091321018
6.2 接收端软件设计流程
当车体主控制器STC89C51检测到从903无线模块接收到的数据时,先返回确认数据,告知发送端自己收到了命令,然后在真正进行动作响应。
在接收到语音指令后,共有五种动作可以响应,则指令和小车的动作的对应下表所示:
表2 STC89C51数据处理表
开 始 等待无线接收 接收数据? 读取数据,返回确认数据 驱动小车 返 回 图33 STC89C51处理流程图
收到的数据 0x01 0x02 0x03 0x04 0x05 I/O口指令小车动作 前进 后退 左转 右转 停止 IN1=0;IN2=1;IN3=0;IN4=1; IN1=1;IN2=0;IN3=1;IN4=0; IN1=1;IN2=1;IN3=0;IN4=1; IN1=0;IN2=1;IN3=1;IN4=1; IN1=1;IN2=1;IN3=1;IN4=1;
- 24 -
南京信息工程大学 电子与信息工程学院 电子科学与技术系 周悦 20091321018
7、程序开发与下载
7.1编程软件
由于此次系统的主要硬件芯片是凌阳SPCE061a单片机和STC89C51单片机两种,所以相关的编程软件有unSP IDE软件和keil软件两种。
7.1.1 unSP IDE 2.6.2D
μ'nSP? IDE 是由凌阳提供的一个的程序开发环境,具有程序的编辑、编译、链接、调试和仿真为一体的特点,而友好的交互界面、快捷键和快速访问等工具,也使得程序设计变得更加方便高效。此外,它拥有不需连接仿真硬件即可实现软件仿真功能的特点,这样就可以更加方便的进行程序调试。[7]
主界面包括三个主要窗口工作区窗口(Workspace window) 编辑窗口(Edit window) 和输出窗口(Output window) 只需在各窗口内单击鼠标左键即可把该窗口激活此外在主界面上还提供工具栏等一些方便用户操作的工具。
图34 unSP IDE 2.6.2D主窗口
在程序编译与链接前设置好项目的相关信息,主要是芯片、下载线、调试器的选择。点击工具栏上的[Select Body]按钮,打开Select Body对话框,可以设置成USB_PROBE模式,点击[OK],即可用USB来下载程序。
- 25 -
南京信息工程大学 电子与信息工程学院 电子科学与技术系 周悦 20091321018
7.1.2 Keil C51
keilC51软件是一款C语言软件开发系统,由美国Keil Software公司出品,兼容51系列的单片机。C语言在可读性、可维护性等方面比汇编语言有着更明显的优势,所以易于学习,便于使用。此软件拥有一套完整的开发方案,包括C编译器、连接器、库管理和仿真调试器等,而这些部分是被集成在一起的。
KeiluVision2大大的提高了工作效率和项目开发周期,他还能嵌入汇编,您可以在关键的位置嵌入,使程序达到接近于汇编的工作效率。KEILC51的C编译器既给51系列单片机的软件编程提供了C语言的开发环境,也留下了汇编语言高效,便捷的特点。
C51在uVision2的大环境中已经完全集成了,这靠的是C51编译器的不断提高,编译器,汇编器,项目管理器,调试器等等都是这个集成开发环境的部分。uVision2为51系列的单片机提供了相对比较灵活的开发环境。
图35 USB-Probe选择窗口
7.2 程序算法详解
7.2.1 发送端SPCE061A的程序算法
//========================================================================//
#include \
//包含语音识别库的头文件
#define P_Watchdog_Clear
(unsigned int*)0x7012
//已经在Sound.c中定义 //已经在Sound.c中定义
void Delay(unsigned int Timers); void Play_Sound(unsigned int Index); void ReTrainBS(void);
int main(void) {
int res; Uart_Init(); ReTrainBS(); Play_Sound(12);
//调用训练程序,已经在Sound.c中定义
//开始识别的提示音
- 26 -
南京信息工程大学 电子与信息工程学院 电子科学与技术系 周悦 20091321018
BSR_InitRecognizer(BSR_MIC); //对辨识器进行初始化
while(1) { res = BSR_GetResult(); switch(res)
{ case 0x100:
TX_Data(\ Play_Sound(7);
*P_Watchdog_Clear = 0x0001;
break;
case 0x101:
TX_Data(\
Play_Sound(7);
*P_Watchdog_Clear = 0x0001;
break;
case 0x102: TX_Data(\
Play_Sound(7);
*P_Watchdog_Clear = 0x0001;
break;
case 0x103: TX_Data(\ Play_Sound(7);
*P_Watchdog_Clear = 0x0001; break;
case 0x104:
TX_Data(\ Play_Sound(9);
*P_Watchdog_Clear = 0x0001; break;
default:
//
break;
}
*P_Watchdog_Clear = 0x0001;
}
- 27 -
//输入的语音序列
//根据识别的结果进行分支跳转
//命令一 ID(前进)
//播放:lalalalala
//命令二 ID(后退)
//播放:lalalalala
//命令三 ID(左转)
//播放:lalalalala
//命令四 ID(右转) ///播放:lalalalala
//命令五 ID(停止)
//播放:打呼噜声
不在以上五个命令内的
//清看门狗
南京信息工程大学 电子与信息工程学院 电子科学与技术系 周悦 20091321018
}
void Delay(unsigned int Timers) { }
以上是SPCE061A相关算法中main.c文件里的程序,主要包括确定语音识别的头文件,定义看门狗的内存单元,声明播放函数、训练函数、延时函数以及最关键的main函数等。
在main函数中,首先便调用Uart_Init();函数对Uart串口进行初始化,Uart_Init();函数已在wireless.c中定义,程序如下:
void Uart_Init() {
*P_IOB_Dir &= ~0x0480; *P_IOB_Dir |= 0x0400; *P_UART_Command1=0x00; *P_UART_BaudScalarHigh=0x05; *P_UART_BaudScalarLow=0x00; *P_UART_Command1=0x00; }
此段程序用于SPCE061A的UART串口通讯初始化,UART 的模块附带有全双工标准接口,用于完成SPCE061A与外设之间的串行通讯。借助UART IRQ 中断功能,就可以完成UART 接口对数据的收发。其中对UART_Command1寄存器写入0x20和0x00,用于对UART的内部复位,对UART_Command2寄存器写入0xc0,用于设置UART端口允许发送和接收,UART_BaudScalarHigh 和UART_BaudScalarLow两个指令赋值来控制着数据传输波特率的设置。
UART 传输率的计算方法是: 传输率= ( 12.288MHz) / Scale 。[13]
其中: Scale 是7024H 、 7025H 两个单元中组成的整数(要转换成十进制) 下表列示出了当Fosc = 24.576MHz 时常用的一些波特率值:[13]
//延时函数
unsigned int i; while(Timers!=0) { }
for(i=0;i<0xffff;i++)
*P_Watchdog_Clear = 0x0001; Timers--;
//将IOB7 设为输入 //将IOB10设为输出
*P_UART_Command1=0x20; //设置Uart内部复位
//将波特率设置为9600bps //设置为奇校验
*P_UART_Command2=0xc0; //允许发送、允许接收
- 28 -
南京信息工程大学 电子与信息工程学院 电子科学与技术系 周悦 20091321018
表3 波特率设置表
波特率(bps) 高字节($7025H) 1500 (最小值) 2400 4800 9600 19200 38400 51200 57600 102400 1FH 14H 0AH 05H 02H 01H 01H* 00H 00H 00H 00H 低字节($7024H) FFH 00H 00H 00H 80H 40H 00H* F0H D5H 78H 6BH Scale (十进制) 8192 5120 2560 1280 640 320 256 240 213 120 107 实际波特率(bps) 1500 2400 4800 9600 19200 38400 48000 51200 57690 102400 114841 48000 (默认值) 115200 (最大值) 程序中的 *P_UART_BaudScalarHigh=0x05;和 *P_UART_BaudScalarLow=0x00;两个指令便是将波特率设置为9600bps。
UART数据帧的格式如下:
存器内读出方向控制向量。
P_IOB_Attrib(读/写)($7008H) B端口的属性向量单元,用于向属性向量寄存器写入或从该寄存器内读出属性向量。
接着调用训练程序,训练程序ReTrainBS();已在sound.c文件中定义,程序如下: void ReTrain (void) {
BSR_DeleteSDGroup(0);
while(TrainCommand(COMMAND_ONE_ID,1)!=0); while(TrainCommand(COMMAND_TWO_ID,2)!=0); while(TrainCommand(COMMAND_THREE_ID,3)!=0); while(TrainCommand(COMMAND_FORE_ID,4)!=0);
图36 UART数据帧格式示意图
P_IOB_Dir(读/写)($7007H) 是B端口的方向向量单元,用于向方向控制向量寄存器写入或从该寄
- 29 -
南京信息工程大学 电子与信息工程学院 电子科学与技术系 周悦 20091321018
while(TrainCommand(COMMAND_FIVE_ID,5)!=0); }
此段程序用于训练“前进”、“后退”、“左转”、“右转”、“停止”五个口令,调用的是BSR_Train训练函数,BSR_DeleteSDGroup的功能是对存储器RAM进行初始化,以便开始进行模型的写入。其中Command ID是指令的序号,范围是从0x100到0x105,而且对于每个训练的语句都是单一的。对于单个指令来说,若训练成功,返回的值为0;如果没有语音输入则返回-1;如果此次模型要更多的语音数据来建立的话,则返回-2;如果当前周围环境噪音比较大,那么返回-3;如果语音数据库已满,返回-4;如果两次输入的语音不一样,则返回-5;如果序号超出了范围,就返回-6。同时还要注意: 1 识别器必须正确的初始化,这是在调用训练子程序之前就要确保的。2 要保证两次训练结果接近,不要有太大差异,这是在训练次数设定为2的时候。3 为了减少环境噪音对辨识的命令的影响,推荐进行两次训练,这样也能增强识别的可靠性。4 由于每条命令的时间限制是1.3秒,所以只有前1.3秒的语音是有效的,推荐等待2秒再开始训练。
再然后通过Play_Sound(12)这一函数来播放一个声音,此声音代表着当所有的五个命令都训练成功后,进入等待语音输入的状态,此时就可以对着麦克风说出语音命令了。BSR_InitRecognizer(BSR_MIC);语句是对辨识器初始化,定义语音输入来源,设置通过MIC进行语音输入。
在while (1)中,程序是不断循环执行的。其中res = BSR_GetResult();获取语音识别结果,用于开始语音辨识的进程,如果没有语音命令被识别出来时,返回0;如果识别器停止了,或者未初始化,或者识别未激活,则返回-1;当识别不合格时返回-2;当识别出来时返回命令的序号。
当res中的结果符合前面训练时建立的五个语音命令模型中的某一个时,便通过TX_Data(“1”、“2”、“3”、“4”、“5”);等函数,将指令通过串口送给NRF24L01无线模组进行无线传输,其中TX_Data函数在工程中另一个C语言文件wireless.c文件中定义,程序如下:
void Send_Data(unsigned char uiData) {
*P_UART_Data=uiData; *P_Watchdog_Clear = 0x0001; }
void TX_Data(unsigned char *Data) {
while(*Data != '\\0') Send_Data(*(Data++)); }
这个程序将Data地址中的值一位一位的送入变量uiData中,然后交由P_UART_Data进行发送,这也就是体现了无线通信的方式是串行通信。
当无线传输成功后,小车进行动作,然后通过扬声器播放声音“lalalalala”,若是“停止”命令,则播放“打呼噜”的声音,表示车已经停下来了。
*P_Watchdog_Clear = 0x0001;函数用于清看门狗,看门狗是指一种专门用于监测单片机程序运行状态的芯片,俗称\看门狗\。
7.2.2 接收端STC89C51程序算法
由于STC89C51只用于控制小车进行简单的动作,所以接收端的算法相对简短。总程序如下: #include
unsigned int ReData,SenData;
- 30 -
南京信息工程大学 电子与信息工程学院 电子科学与技术系 周悦 20091321018
#define uchar unsigned char #define uint unsigned int uchar x3,x4; sbit IN1=P1^0; sbit IN2=P1^1; sbit ENA=P1^6;//右轮 sbit IN3=P1^2; sbit IN4=P1^3; sbit ENB=P1^7;//左轮
void main (void) {
SCON = 0x50; //REN=1允许串行接受状态,串口工作模式1 } }
void ser_int (void) interrupt 4 using 1 {
if(RI == 1) //RI接受中断标志 {
RI = 0;
//清除RI接受中断标志
TMOD|= 0x20; //定时器工作方式2
PCON= 0x00;
TH1 = 0xFD; //baud reload value 9600、数据位8、停止位1。效验位无 (11.0592) TR1 = 1; ES = 1; //开串口中断 EA = 1; // 开总中断
TL1 = 0xFD;
while(1) if (Flag==1) {
SBUF=SenData; //SUBF接受/发送缓冲器 while(TI==0); Flag=0; }
{
TI=0;
- 31 -
南京信息工程大学 电子与信息工程学院 电子科学与技术系 周悦 20091321018
ReData = SBUF; //SUBF接受/发送缓冲器 SenData=ReData; if(ReData==0x31) {
ENA=1; //前进 ENB=1; IN1=0;
IN2=1; IN3=0; IN4=1;
}
if(ReData==0x32) { ENA=1; //后退 ENB=1; IN1=1;
IN2=0; IN3=1; IN4=0;
}
if(ReData==0x33) { ENA=1; //左转 ENB=1; IN1=1;
IN2=1; IN3=0; IN4=1;
}
if(ReData==0x34) { ENA=1; //右转 ENB=1; IN1=0;
IN2=1;
IN3=1;
- 32 -
南京信息工程大学 电子与信息工程学院 电子科学与技术系 周悦 20091321018
}
{
IN4=1; }
if(ReData==0x35) ENA=1; //停 ENB=1; IN1=1; IN2=1; IN3=1; IN4=1; Flag=1;
}
程序中包括了IO端口设定,main函数和中断函数等内容。Main函数中,首先便是单片机的初始化语句,包括串口和中断等,程序如下:
SCON = 0x50;
TMOD|= 0x20;
PCON= 0x00; TH1 = 0xFD;
TR1 = 1; ES = 1; / EA = 1; /
TL1 = 0xFD;
其中,SCON = 0x50;将串行口设置为允许串行接受状态,串口工作模式1。TMOD|= 0x20; 是将定时器工作方式2。TH1 = 0xFD;和TL1 = 0xFD;语句设置波特率为 9600bps,数据位8,停止位1,效验位无(晶振为11.0592MHz)ES = 1;和EA = 1;两个语句分别设置为开串口中断和开总中断。
接着是while(1)函数,开始等待指令,当有数据从无线模块接收到时,便通过中断来处理,中断是优先级最高的,所以每个命令传输过来时,无论现在所处状态如何,都能根据命令进行动作。
当每个动作执行完成后,有一个 Flag=1;语句,与下面的语句相配合:
if (Flag==1) {
SBUF=SenData; //SUBF接受/发送缓冲器 while(TI==0); Flag=0; }
TI=0;
void ser_int (void) interrupt 4 using 1
- 33 -
南京信息工程大学 电子与信息工程学院 电子科学与技术系 周悦 20091321018
{
if(RI == 1) { }
}
这两段函数实现的是一个反馈的过程,其中RI是接受中断标志位,ReData = SBUF;语句用于从SUBF缓冲器中读出接收到的数据,SenData=ReData;语句用来将收到的数据再给回NRF24L01无线模组,返回发送端,如果返回的数据与发送的数据相同,那么就能确认在发送过程中没有出现数据的丢失,这时发送端会播放声音,表示无线通信成功,这也实现了一定的人机互动功能。
RI = 0;
//清除RI接受中断标志
ReData = SBUF; SenData=ReData;
8、测试过程
首先将61核心板通过USB连接线接入USB端口,给61核心板供电,并打开61核心板的开关;这时会听到提示音“1”,进入训练模式,对着麦克风说“前进”,扬声器提示“YEAH!”,再次对着麦克风说“前进”,扬声器提示“2”,表示“前进”的训练已经成功(若两次发音相差太大,则扬声器提示“啊哦?”);接着对麦克风说“后退”,“左转”,“右转”,“停”各两遍,全部指令训练完毕后会播放提示音“叮铃铃”,表示进入识别状态;下一步打开小车的电源,对着麦克风说“前进”,扬声器播放提示音“啦啦啦啦啦”小车向前方行驶,若不对麦克风发送新指令,则小车一直保持前行状态;对着麦克风说“后退”,扬声器播放提示音“啦啦啦啦啦”,小车变更前行状态为倒车状态,若不对麦克风发送新指令,则小车一直保持倒车状态;“左转”、“右转”口令同上;对麦克风说“停”时,扬声器播放“咻”的声音,小车停止行驶,若不对麦克风发送新指令,则小车一直保持在停止状态。至此,测试成功,小车实现了任务书上的指定任务,此次毕业设计圆满完成。
9、结论
历时三个月,我的毕业设计已经完成,毕业论文的工作也已接近尾声。在设计的过程中,我学到了很多知识,无论是硬件的组装和测试,还是软件算法的编程和调试,都提高了我的本专业技能,也锻炼了我独立思考的能力,磨练了了我的耐心和毅力。
经过一个多月的组装、编程、调试,无线语音遥控智能车已经制作完成,基本实现了预期目标,可以通过特定人的语音对小车的“前进、后退、左转、右转、停止”等进行无线遥控。由于时间紧迫和我个人能力有限,只是实现了最基础的控制,以后有机会我会把电机的调速系统加到整个设计中,加上壁障系统,加强人机互动的功能。
在此次设计中,前期也遇到了一些小的困难,比如最一开始的时候语音识别只能进行一次,小车的动作只能实现左转,后期无线通讯数据不正确等。于是我查阅了大量的资料,不断地修改算法代码,与编程手册里的例程进行比较,最终成功实现了语音识别。而小车的控制让我觉得很是惭愧,由于用的是51系列的单片机,所以我直接通过IO口进行高低电平的设置,但是由于我的粗心,把L298N模块的线接错了端口,导致直
- 34 -
南京信息工程大学 电子与信息工程学院 电子科学与技术系 周悦 20091321018
流电机驱动模块的一个控制端始终没有电平信号的输入,于是导致了右轮始终停止,修改好后,小车正常行驶了。
接下来就是要用无线通信将语音识别端和小车端连接起来,但是却没法实现通信,经过不断测试,发现是NRF24L01芯片烧毁了,于是更换了NRF24L01无线模块。但是发送接收的数据不正确,于是我选择使用分段调试的方法,第一步,让语音识别发送端向PC端发送特定的无线数据,并进行监控,得到数值,再通过PC端向小车端发送特定的数值来控制动作,最后将数值和动作对应起来,真正实现了由语音识别的发送端向小车端发送无线数据,确保了通信成功,并且数据无错误,也就实现了整个系统的构想,做成了此次的无线遥控智能车。
虽然这次的设计只针对一个智能小车的简单控制,但对于语音控制技术的发展前景来说具有十分重要的现实意义,在未来的发展方向中,语音控制的理念可以简化人机界面。这种想法是也是便携式电子产品的可移植构想,如家用电器,汽车等平时生活中的一些电子设备。
本设计为无线语音遥控智能车,使用的是凌阳SPCE061A16位单片机和STC89C51单片机联合实现。设计的软件编程,使用的是C语言编程,大大简化了编程的复杂程度,使程序更加人性化,也给程序的修改、维护和二次开发带来了极大的方便。
下面是几张成品图:
图37 发送端实物图
上图是凌阳61板和NRF24L01无线模块,两者组合在一起作为遥控的发送端。
图38 接收端实物图
- 35 -
南京信息工程大学 电子与信息工程学院 电子科学与技术系 周悦 20091321018
上图是自己组装的简易小车,用STC89C51单片机和NRF24L01无线模块组合而成作为遥控的接收端。 本次设计具有的一些特点:
(1)识别速度快。此次设计只是实现了对于单人孤立词的实时识别,当用户说完待识别的命令后,系统很快便可输出识别的结果。
(2)识别率理想。由于是训练两次,所以即使在周围噪音比较大的情况下,已然能识别成功,抗干扰能力还是比较强的。
(3)性价比较高。核心部件价格低廉,使用灵活,功能强大且范围广泛。
(4)可移植性好。可用于其他设备的语音智能控制,比如在移动电话、自动语音应答机等各种便携式设备方面的应用,应用前景还是比较好的。
然而,本文设计的语音识别系统只是一个基本的应用研究,是只适用于特定的人,孤立的词的语音识别,虽然目前不够完美,不过如果能再完善一下,使系统不再需要训练模型,那么就可以实现非特定说话者的语音识别了。由于时间条件和我个人水平及精力等因素的限制,我的此次设计也有不尽如人意的地方,就初步来看,该系统可以从以下几个出发点来改善:
(1)更换芯片,使得速度更快,效率更高,实时性更好; (2)优化算法,使得结构简洁明了,功能实现准确;
在本次设计过程中,前前后后也出现过不少的小问题。在硬件方面,小车的直流电机驱动模块和电机之间的连接线出现了虚焊,导致有一个轮子没有反应,一开始无线模块与单片机的IO口连接时没有加限流电阻,虽然IO口的电压为5V,但是由于瞬间电流过大,导致无线模块被烧毁,让我吸取了很大的教训。在软件方面,无线传输部分由于中断没有设置好,所以一直没有办法实现数据的传输,后来通过PC端口与凌阳SPCE061A单片机端口传输、PC端口与STC89C51单片机端口传输两个单独实验进行通讯,耗时几天,修改好了代码,最终成功实现了凌阳SPCE061A单片机和STC89C51单片机的无线数据通信。
10、致谢
毕业季快到了,四年的读书生活在这个季节即将划上一个句号,这篇论文也在我的认真书写和整理下,历时将近两个月的时间,也终于完成了。不过在论文的写作过程中,我也遇到了不少的困难和障碍,但在我的导师季鑫源老师的亲切关怀和悉心指导下,在热心同学的帮助下还是完成了。
回首四年的求学之路,我在老师们的悉心教导下,在父母的大力支持下,走得辛苦却也收获满囊。在这里,我首先要感谢我的母校——南京信息工程大学,感谢电子与信息工程学院。是你们为我创造了探索知识的环境,让我们在知识的海洋中徜徉。同时,这里也留下了我许多美好的回忆。祝愿学院的将来更加美好!
本次毕业设计能够顺利地完成,我要感谢我的指导老师季鑫源老师。季老师在常繁忙的工作中,依然细悉心指导我完成了本次毕业设计,我要向不断季老师学习,学习渊博的学术知识和严谨的治学态度。感谢季老师给予我这个毕业设计题目的机会,让我能够对四年来学习的知识进行检验,进一步提升自己的实践水平和处理问题能力。
我还要感谢我的爸爸妈妈,是你们在我的成长过程中给予了我最大的支持,你们努力工作,为了我能在学校好好学习,我也才有此机会如愿的圆满的,走完自己的大学四年,同时考上了研究生,取得了进一步发展的机会,你们的养育之恩,定当涌泉相报!
- 36 -
南京信息工程大学 电子与信息工程学院 电子科学与技术系 周悦 20091321018
最后,再一次感谢所有在本次毕业设计中曾经帮助过我的导师、同学,还有一直不断支持我的爸爸妈妈,谢谢!
参考文献 :
[1] 李晶皎.嵌入式语音技术及凌阳16位单片机应用[J].北京航空航天大学出版社,2003:1-10,88-109 [2] 何湘智.语音识别技术的研究与发展[M].计算机与现代化,2002(3):3-6
[3] 刘加. 汉语大词汇量连续语音识别系统研究进展[J]. 电子学报. 2000, 28 (1) : 85-91 [4] 王和顺,黄惟公,邓成中.基于SPCE061A的语音识别系统的研究[J].计算机工程与设 计,2004,25(12):2222-2224
[5] 罗亚非.凌阳 16位单片机应用基础[M].北京:北京航空航天大学出版社,2003
[6] 刘海成,秦进平.MCU-DSP型单片机原理与应用基于凌阳16位单片机[M],第一版,北京航空航天大
学出版社,2006
[7]戴蓓倩,郁正庆,戴任飞,等. 基于话者分类和HMM的话者自适应语音识别[J]. 中国科 学技术大学学报,1996, 26 (2) : 147-153
[8] 张齐,杜群贵.单片机应用系统设计技术——基于C语言编程[M],第二版,电子工业出版社,2004.8 [9] 徐煜明,韩雁.单片机原理及接口技术[M],第一版,电子工业出版社,2005 [10] 杨西明,朱骐.单片机编程与应用入门[M],第一版,机械工业出版社,2004.9 [11] Michael A. Miller.Data and Network Communications[M],第一版,科学出版社,2002
[12] J.B.Allen,“How Do Humans Process and Recognize Speech”[J],IEEE Transactions on Speech
and Audio Processing,Vol.2,No.4,1994
[13] D.K.Burton,J.E.Shore,“Isolated Word Recognition Word Recognition Using Multisection Vector Quantization Codebooks”[J],IEEE Trans on ASSP,Vol.33,No.3,1985
[14] SUNPLUS,SPCE061A Programming Guide V1.2,www.unsp.com.cn,05.05.2003:2-6
[15] SUNPLUS,SPCE061A Sound Controller Data Sheet V0.8,www.unsp.com.cn,11.10.2004:12-17
- 37 -
南京信息工程大学 电子与信息工程学院 电子科学与技术系 周悦 20091321018
Wireless voice controlled vehicle based on MCU-SPCE061A
Zhouyue
Nanjing university of information system and technology , Nanjing 210044
ABSTRACT
This paper mainly introduces the design process of a wireless voice controlled intelligent vehicle made by speech recognition technology and wireless transmission technology. The core processor of the design is the 16 bit MCU-DSP processor chip SPCE061A - Taiwan Sunplus Technology introduced .This chip is very suitable for speech processing.If this chip is externally connected with a NRF24L01C half-duplex wireless module, it can be a remote transmission device with the voice function.And the receiving device is a simple toy car,whose processor is a 8 bit single chip microcomputer STC89C51.The receiving device of wireless signal is still using the half-duplex wireless modules NRF24L01.So that we can make the car controlled by wireless voice remote control .This paper describes the principle of speech recognition, gives the whole hardware system component,includes the use of SPCE061A chip and NRF24L01C wireless module,and introduces the related process of speech recognition and wireless transmission from the aspect of software.After repeated testing and experiment, the voice remote control has been successfully implemented.And stable control has been obtained.The voice recognition effect is better ,too.
Key word: speech recognition technology wireless transmission technology
- 38 -
南京信息工程大学 电子与信息工程学院 电子科学与技术系 周悦 20091321018
- 39 -