自控1202张宁科1217014057-毕业论文 - 图文

更新时间:2024-07-01 12:37:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

陕西理工学院毕业设计

题 目语音控制小车(软件设计) 学生姓名张宁科 学号 1217014057 所在学院 电气工程学院 专业班级 自动化1202班

指导教师 张立众 __ ____ 完成地点 博思楼A916实验室

2016年06月17日

陕西理工学院毕业设计

陕西理工学院本科毕业设计任务书

院(系)电气工程学院 专业班级自动化(自控1202)学生姓名张宁科 一、毕业设计题目 语音控制小车(软件设计)

二、毕业设计工作自2016 年1月9日 起至2016年 6 月17 日止 三、毕业设计进行地点:博思楼A916实验室 四、毕业设计应完成内容及相关要求:

利用单片机作为控制芯片,通过语音芯片对单片机发送指令,实现小车运动状态的控制,完成小车前进、倒退、左转及右转等运动运动状态。该课题使用现有的车模,设计包括控制模块、电源模块、电机驱动模块、舵机控制模块及语音识别模块等功能模块。

(1)熟悉单片机的使用方法及C语言编程。 (2)了解语音芯片的语音识别和使用方法。 (3)掌握电机驱动及电机运动控制的方法。 (4)完成软件设计并撰写毕业论文。 五、毕业设计应收集资料及参考文献:

[1]李建忠.单片机原理及应用[M].西安:西安电子科技大学出版社,2002,2 135-186. [2]薄春卫.基于HT66F50单片机的声控小车的设计[J].硅谷.2012.06.

[3]洪家平.LD3320的嵌入式语音识别系统的应用[J].单片机与嵌入式系统应用.2012.02. [4]黄仿元,施文洁,郭华华.带有无线传输功能的容栅测量系统[J].伺服控制.2012.07. [5]无线发射/接受IC芯片选编[M],北京航空、航天大学出版社 78-112. [6]蔡自兴.机器人学[M].北京:清华大学出版社,2000.

[7]桑楠.嵌入式系统原理与应用开发技术[M].北京:北京航空航天大学出版社,2002. [8]王威.HCS12微控制器原理及应用[M].北京:北京航空航天大学出版社,2010. [9]倪崇嘉,刘文举,徐波.汉语大词汇量连续语音识别系统研究进展[J].中文信息学报.2009.01.

[10]田媛.语音控制播放系统的研究与设计[J].包头职业技术学院学报.2013. [11]杜晓立.基于Symbian系统多道γ谱仪软件的开发[J].成都理工大学.2010. [12]付蔚等.智能家居语音控制系统的设计[J].自动化仪表.2014. 六、毕业设计的进度安排:

2016年1月9日--3月15日: 查资料,调研,确定方案,并按时在系统中提交开题报告。 2016年3月21日--4月30日:对系统硬件电路进行模块化设计,采用编程语言进行软件编程,完成硬件电路的软件仿真;在系统中提交外文翻译;完成中期检查报告。

2016年5月1日5月20日:进行系统硬件电路的搭建、调试和测试,完成毕业设计验收。

陕西理工学院毕业设计

2016年5月21日--5月31日:完成毕业设计任务,并在系统中提交最终论文。 2016年6月1日--6月15日: 毕业设计答辩。

指导教师签名张立众 专业负责人签名冉启武 学院领导签名李昂 批准日期2016-01-25

陕西理工学院毕业设计

语音控制小车(软件设计)

张宁科

(陕西理工学院 电气工程学院 自动化专业 1202班,陕西 汉中 723000)

指导教师:张立众

【摘要】设计以玩具小车作为研究对象,以凌阳公司的SPCE061A单片机作为微控制器,把μ'nSP IDE作为集

成开发环境,以C语言作为设计控制小车的主要编程语言,通过下载线(EZ_PROBE)或在线调试器(PROBE)实现61板的开发,利用简单的输入输出操作实现小车的前行、倒车、左拐、右拐功能,并且可以利用语音识别芯片实现对智能小车的语音控制。

【关键词】 SPCE061A;μ'nSP IDE;语音识别;智能小车

陕西理工学院毕业设计

Voice control the car(The software design)

Zhang Ning Ke

(Automation Specialty of Shaanxi Institute of electrical and electronic engineering, Hanzhoung 723000, Shaanxi 1201)

Tutor: Zhang lizhong

ABSTRACT:Based on the toy car as the research object, by sunplus SPCE061A as the microcontroller, the mu 'nSP

IDE as an integrated development environment, with a C language as the main programming language for the design of the control car, download line (EZ_PROBE) or online debugger (PROBE) to achieve 61 board development, using the simple input/output operations to achieve the car forward, reverse, turn left, turn right, and using speech recognition chip for smart car voice control.

KEYWORDS: SPCE061A; μ'nSP IDE;speech recognition; intelligent car

陕西理工学院毕业设计

目录

1 绪论 ................................................................................................ 1

1.1课题的研究背景及意义 ............................... 1 1.2语音识别技术的历史 ................................. 1 1.2.1国内研究历史 ................................... 1 1.2.2国外研究历史 ................................... 1 1.3设计概要 .......................................... 2 1.4系统开发环境IDE ................................... 2

2 总体系统方案设计 ........................................................................ 3

2.1智能车语音识别模块研究 ............................. 3 2.2 方案论证 .......................................... 3 2.2.1 单片机选择 .................................... 3 2.2.2语音识别方案 ................................... 4 2.2.3 智能车车模选择 ................................ 4 2.3系统总体方案....................................... 5

3 系统硬件设计 ................................................................................ 6

3.1主控制器模块....................................... 6 3.2 音频电路 .......................................... 6 3.3 电机驱动电路 ...................................... 7 3.4按键,LED和复位电路 ............................... 7 3.5 ICE 接口电路 ...................................... 8 3.6 EZ_PROBE方式...................................... 8

4系统软件设计 ............................................................................... 10

4.1系统的总体程序流程 ................................ 10 4.2汇编语言程序设计 .................................. 11

陕西理工学院毕业设计

4.2.1汇编语言的程序结构 ............................ 11 4.2.2子程序的嵌套 .................................. 13 4.3 C语言程序设计 .................................... 14 4.3.1程序调用协议 .................................. 14 4.3.2语音识别程序设计 .............................. 15 4.3.3语音录入子程序 ................................ 15 4.3.4 语音控制小车子程序 ........................... 16 4.3.5中断子程序 .................................... 17 4.4程序中需要说明的几个问题 .......................... 18

5 系统调试 ...................................................................................... 20

5.1 软件调试环境 ..................................... 20 5.2硬体开发工具...................................... 21 5.3程序调试 ......................................... 22 5.3.1μ'nSP IDE的项目组织结构 ...................... 22 5.3.2汇编语言程序调试 .............................. 23 5.3.3 C语言程序调试 ................................ 24 5.3.4中断控制寄存器 ................................ 25 5.4智能车调试 ....................................... 29 5.5 重新训练 ......................................... 32

6总 结 ............................................................................................. 33 致谢 .................................................................................................. 34 参考文献 .......................................................................................... 35 附 录 ................................................................................................ 36

陕西理工学院毕业设计

1 绪论

1.1课题的研究背景及意义

声控产品使用率伴随着科技的发展而提高,给人类的生活带来了巨大的变化,声控系统的应用也不再遥不可及,家用电器的操作,不再需要以遥控器的繁多按键为控制接口,取而代之的是我们用平常说话的模式来驱使家电动作,诸如多种智能电器,人们再也不必为种类繁多、操作复杂的遥控器而烦恼,人们可以很轻松的操作各种各样的电器产品,达到更符合人性化的操作接口设计[1]。随着语音技术的不断发展,人们不光可以用语音来控制家电,还可以用语音控制各种公共设施。语音控制产品也越来越受人们的欢迎,成为了21世纪发展的一大前景。

1.2语音识别技术的历史 1.2.1国内研究历史

我国语音识别研究工作起步于五十年代,但近年来发展很快。研究水平也从实验室逐步走向实用。从1987年开始执行国家863计划后,国家863智能计算机专家组为语音识别技术研究专门立项,每两年滚动一次。我国语音识别技术的研究水平已经基本上与国外同步,在汉语语音识别技术上还有自己的特点与优势,并达到国际先进水平。中科院自动化所、声学所、清华大学、北京大学、哈尔滨工业大学、上海交通大学、中国科技大学、北京邮电大学、华中科技大学等科研机构都有实验室进行过语音识别方面的研究,其中具有代表性的研究单位为清华大学电子工程系与中科院自动化研究所模式识别国家重点实验室。

清华大学电子工程系语音技术与专用芯片设计课题组,研发的非特定人汉语数码串连续语音识别系统的识别精度,达到94.8%(不定长数字串)和96.8%(定长数字串)。在有5%的拒识率情况下,系统识别率可以达到96.9%(不定长数字串)和98.7%(定长数字串),这是目前国际最好的识别结果之一,其性能已经接近实用水平。研发的5000词邮包校核非特定人连续语音识别系统的识别率达到98.73%,前三选识别率达99.96%;并且可以识别普通话与四川话两种语言,达到实用要求。中科院自动化所及其所属模式科技(Pattek)公司2002年发布了他们共同推出的面向不同计算平台和应用的“天语”中文语音系列产品PattekASR,结束了中文语音识别产品自1998年以来一直由国外公司垄断的历史。 1.2.2国外研究历史

语音识别的研究工作可以追溯到20世纪50年代AT&T贝尔实验室的Audry系统,它是第一个可以识别十个英文数字的语音识别系统。

但真正取得实质性进展,并将其作为一个重要的课题开展研究则是在60年代末70年代初。这首先是因为计算机技术的发展为语音识别的实现提供了硬件和软件的可能,更重要的是语音信号线性预测编码(LPC)技术和动态时间规整(DTW)技术的提出,有效的解决了语音信号的特征提取和不等长匹配问题。这一时期的语音识别主要基于模板匹配原理,研究的领域局限在特定人,小词汇表的孤立词识别,实现了基于线性预测倒谱和DTW技术的特定人孤立词语音识别系统;同时提出了矢量量化(VQ)和隐马尔可夫模型(HMM)理论。

随着应用领域的扩大,小词汇表、特定人、孤立词等这些对语音识别的约束条件需要放宽,与此同时也带来了许多新的问题:第一,词汇表的扩大使得模板的选取和建立发生困难;第二,连续语音中,各个音素、音节以及词之间没有明显的边界,各个发音单位存在受上下文强烈影响的协同发音(Co-articulation)现象;第三,非特定人识别时,不同的人说相同的话相应的声学特征有很大的差异,即使相同的人在不同的时间、生理、心理状态下,说同样内容的话也会有很大的差异;第四,识别的语音中有背景噪声或其他干扰。因此原有的模板匹配方法已不再适用。

实验室语音识别研究的巨大突破产生于20世纪80年代末:人们终于在实验室突破了大词汇量、连续语音和非特定人这三大障碍,第一次把这三个特性都集成在一个系统中,比较典型的是卡耐基梅隆大学(CarnegieMellonUniversity)的Sphinx系统,它是第一个高性能的非特定人、大词汇量连续语音识别系统。

这一时期,语音识别研究进一步走向深入,其显著特征是HMM模型和人工神经元网络

第 1 页 共 51 页

陕西理工学院毕业设计

(ANN)在语音识别中的成功应用。HMM模型的广泛应用应归功于AT&TBell实验室Rabiner等科学家的努力,他们把原本艰涩的HMM纯数学模型工程化,从而为更多研究者了解和认识,从而使统计方法成为了语音识别技术的主流。

统计方法将研究者的视线从微观转向宏观,不再刻意追求语音特征的细化,而是更多地从整体平均(统计)的角度来建立最佳的语音识别系统。在声学模型方面,以Markov链为基础的语音序列建模方法HMM(隐式Markov链)比较有效地解决了语音信号短时稳定、长时时变的特性,并且能根据一些基本建模单元构造成连续语音的句子模型,达到了比较高的建模精度和建模灵活性。在语言层面上,通过统计真实大规模语料的词之间同现概率即N元统计模型来区分识别带来的模糊音和同音词。另外,人工神经网络方法、基于文法规则的语言处理机制等也在语音识别中得到了应用。

20世纪90年代前期,许多著名的大公司如IBM、苹果、AT&T和NTT都对语音识别系统的实用化研究投以巨资。语音识别技术有一个很好的评估机制,那就是识别的准确率,而这项指标在20世纪90年代中后期实验室研究中得到了不断的提高。比较有代表性的系统有:IBM公司推出的ViaVoice和DragonSystem公司的NaturallySpeaking,Nuance公司的NuanceVoicePlatform语音平台,Microsoft的Whisper,Sun的VoiceTone等。 1.3设计概要

语音技术的第三分支是语音识别。语音辨识其实就是语音合成的逆过程,他的基本任务就是将语音信息以文字的形式显现出来,它的难度要比语音合成高出很多,成为了语音技术中最具挑战性的分支。

设计主要应用语音识别技术,来完成语音控制智能车的目的,将语音识别技术应用在实际的智能车设计当中,为以后进一步学习应用语音技术打下基础,同时也可以为他人设计语音产品提供参考。

设计要求通过相关语音信息对小车进行操作控制,使之可以通过语音控制实现前进、倒车、左拐、右拐的功能。本次设计用到的单片机是由凌阳科技推出的一款名为SPCE061A 的微控制器,它是16位μ'nSP 结构。这种高级芯片可以实现乘法运算、内积运算等复杂的运算,因为它带有硬件乘法器。这种芯片不只是运算功能特别强大,而且运行的速度也是超级快的,单周期最高可达49兆Hz。该微控制器内嵌了32K字的闪存程序存储器和2K的静态随机存取存储器。并且这种系统级芯片具有数模转换和模数转换的功能,它的麦克风模数转换通道带有自动增益的作用,特别容易就可以把语音信息输送至芯片里面,只要在两路 10 位的电流输出型数模转换器外接一个扩音机,就播放声音。借助于 SPCE061A 的语音特色,开发出了这款语音控制小车。智能小车不光具有前行、倒车、左拐、右拐、停止等功能;同时配合 SPCE061A 的语音特色,实现语音控制功能。 1.4系统开发环境IDE

μ'nSP IDE是由凌阳公司推出的一个集成开发环境,它集程序的编辑、编译、链接、调试和仿真等功能为一体。具有良好的互动窗口、菜单栏、快捷键和迅速访问指令列表等,这样可以让程序设计的工作更加便捷高效。在集成开发环境IDE中,可以非常方便将编写好的程序,通过语音控制板配套的下载线下载到语音控制板上进行在线调试,具体的操作步骤如下:语音控制板的开发是通过下载线(EZ_PROBE)实现的。用它可以替代在单片机应用项目的开发过程中常用的两件工具——硬件在线实时仿真器和程序烧写器。他们都利用了SPCE061A芯片内置的在线仿真电路ICE(In- Circuit Emulator)和在线串行编程技术。EZ_PROBE工作于IDE集成开发环境软件包下,他们对应的5芯的仿真头分别连接到语音控制板的缓冲电路输入管脚和SPCE061A芯片相应管脚上,实现在目标电路板上的CPU(SPCE061A)调试、运行用户编制的程序;另一头是标准25针打印机接口,直接连接到计算机打印口与上位机通讯(如图1.5),在计算机IDE集成开发环境软件包下,完成在线调试功能。

[2]

第 2 页 共 51 页

陕西理工学院毕业设计

2 总体系统方案设计

设计是基于凌阳单片机SPCE061A的语音控制智能车的设计,主要包括:主控制器模块、语音识别模块、无线通讯等模块,各个模块的选择都经过了仔细的论证,最后我们的设计方案选用最佳方案进行研究设计。 2.1智能车语音识别模块研究 本世纪初,语音辨识技术在实现计算机的同声传译功能以及多环境背景下的语音识别技术的研究成果比较突出。如今,语音识别系统产品在市场上琳琅满目,如凌阳科技集团的智能语音控制机器人,语音识别信息运行速度大大被提高,可以快速对语音进行应答。采用了先进的非特定人语音识别技术,对口音和噪声不敏感。更加入了独有的噪声检测技术,当环境噪声很大时,能给用户相应的提示。在语音交流的过程中,抗噪音能力得到了很大的提高。随

[3]

着语音识别与机器人的进一步结合,未来高智能的人机交流将不是梦想。因此,无线遥控小车在这方面的领域中,特别是近些年,发展迅速,并利用这种思想,从小车发展到大车。 语音识别芯片又称语音识别IC,语音识别芯片和普通的语音芯片有很大的区别,语音识别技术能够识别人们发出的各种声音,并且可以根据识别到的语音指令做出相应的动作。一个完整的典型语音辨识系统作用过程如图2.1所示。

语音识别 识别结果 模式识别 特征提取 模型库 图2.1 典型语音识别系统

2.2 方案论证 2.2.1 单片机选择 方案一:80C51单片以80C51为控制核心,利用声控传感器和专门的语音处理芯片也比较多,像ISD系列、PM50系列等,并采用桥式驱动电路来实现对小车的前进转向进行控制,并能够做出应答的功能。80C51 是一款八位单片机,应用范围广,价格便宜是其最大优点。由于80C51单片机的闪存(FLASH)只有8K,且无法内置DAC电路,必须通过外围电路实现。但语音是一门新兴的技术,不止包括语音的录制和播放,语音的压缩,编码和解码,和语音的识别,这些都要进行大量的计算,80C51来实现较为困难。

方案二:采用凌阳SPCE061A十六位单片机,对小车的整个行驶过程进行实时监控,完成所有功能需要24个I/O口,由于凌阳SPCE061A单片机提供32个I/O口,一片即可实现所有功能,这为设计过程提供了极大方便。其主要设计思想是利用单片机的IOB8-IOB11控制电机选择小车的正、反向来控制小车的前进后退和转向;凌阳SPCE061A十六位单片机提供了丰富的时基信源和时基中断,给设计者以大量的选择空间,并给设计者提供精确的时基计数,其加减速通过大功率电阻消耗功率来实现。这种方案可以使程序简单,易于控制。 方案三:此方案也采用凌阳SPCE061A十六位单片机,与第二种方案不同之处在于利用单片机的IOB8、IOB9产生控制调速的脉宽和控制小车的正、反行驶,用凌阳SPCE061A十六位单片机的TimeA和TimeB很容易实现脉宽调制,这大大加强了用脉宽调制控制加减速的可选性,但对继电器要求高,不是大众化设计。 综上所述:方案一应用范围广价格便宜但难以实现语音控制;方案二应用范围一般价格略高但能很好实现语音控制;方案三能实现语言控制但对继电器要求较高不是大众化设计。采用方案二,能实现控制且可以使整个设计具备系统简洁,结构清晰,外围设备少等优点,故采用方案二。

第 3 页 共 51 页

陕西理工学院毕业设计

2.2.2语音识别方案

方案一:特定人语音识别方案

特定人语音识别芯片是指只针对特定人的语音识别芯片,只能识别指定人的语音指令,其他人的语音不识别。但是这种语音识别芯片在使用时必须先把使用者的语音指令录入语音芯片,作为语音识别的参考,当使用者发出语音指令时,芯片会将检测到的语音指令与之前录入的语音指令做对比,只有相似度达到一定值之后才能成功识别语音。所以特定人的语音识别芯片在使用时必须要进行语音“训练”,只有在不断地“训练”和调试之后,语音识别芯片才能够对特定人的语音指令达到比较理想的识别状态[2]。 方案二:非特定语音识别方案

非特定语音识别芯片是指不针对个别特定人的语音指令识别的芯片,而是对任何人的语音指令都能识别。非特定语音识别技术不分年龄、性别,只要发送指令的人的语言相同即可。SPCE361A是一款专为语音识别开发的的专用芯片,在芯片内部,固化有高效的非特定人语音识别搜索引擎模块和完整的非特定人语音识别特征库,以及专为语音识别而作的硬件优化和加速设计[3]。而不是简单地提供一款DSP来运行外部语音识别的软件算法。 设计为基于单片机的语音控制智能车设计,根据设计的要求,智能车的语音识别不仅仅局限于个别人的语音识别,而是针对大多数人群的语音识别。同时由于非特定语音识别分广泛应用,所以综合考虑,最终选用非特定语音芯片SPCE061A作为语音识别芯片。 2.2.3 智能车车模选择

智能车的运动状态主要包括车模的前进、左转、右转、停车、快速、慢速、后退,要完成以上的几个运动状态必须选用合适的车模才能实现,一次,车模的选择是非常重要的。

方案一:三轮简易车模

根据语音控制智能车设计的任务书以及对智能语音控制的理解,智能车车模的选择是至关重要的,考虑到智能车必须要完成前进、后退、左转、右转,以及加速、减速等问题,车模必须要有转向轮和灵活的机械运动,才能完成对智能车的控制。同时考虑到车模的成本,所以最终采用三个轮的简易车模,如图2.2所示。

图2.2 简易车模

车模采用两轮差速控制智能车的转向,同时加有一个自由转向支撑轮维持小车的平衡,只要将车模的两个电机加到电机驱动的输出端就可以将两轮的差速PWM送入到电机,从而到达小车的各个运动状态。

方案二:“飞思卡尔”智能汽车竞赛C车模 “飞思卡尔杯”智能汽车竞赛的C车模采用伺服舵机控制车模的转向,同时后轮有两个电机,可以利用电机的差速来实现车模在高速运行时的大角度转向。车模的设计针对车模运动时的重心,平衡点的影响,设计符合实际智能车的机械特性。能够完美的完成多种智能车的设计,而且车模轮胎的防滑能力特别强,使得车模的速度可以提高很多。但是车模的价格较贵,电机的转动功率较大,需要有大功率的电池进行供电。飞思卡尔智能车C车模如图2.3所示。

第 4 页 共 51 页

陕西理工学院毕业设计

图2.3飞思卡尔智能车C车模

综上考虑,两种车模都能够完成设计的功能,如果不考虑费用的因素,无疑选用飞思卡尔的智能汽车竞赛C车模是非常合适的。但是由于费用的缘故,虽然此车模能够达到很高的速度以及稳定性,但是,设计的本身并没有过高的速度要求,所以最终选用三轮简易车模进行设计。

2.3系统总体方案

选用凌阳公司的这款单片机设计语音对小车的控制,是因为此芯片里面带着语音信息辨识和语音信息输出的作用,所以只需外接基本的麦克风和声音放大器就可以了。系统组成主要包括以下两部分:SPCE061A精简开发板、语音小车控制电路板。利用语音和中断定时相结合控制智能小车的运动状态,小车通过对我们声音的辨识实现动作,小车运动之后,小车的运动状态随时可被我们用语音信息指令改变。定时器在每次小车运动触发的同时被启动,若小车因为某些特殊原因导致不可以正常地接收语音信息指令,那么定时时间到的时候,小车会被中断服务程序指令停下来。这个设计方案的结构如图2.4所示。

SPCE061A MIC输入模块 电机驱动模块 语音输入模块

图2.4 基于SPCE061A的语音控制小车实现方案

第 5 页 共 51 页

陕西理工学院毕业设计

3 系统硬件设计

系统的硬件做成主要分为两个部分:一是智能车的硬件部分设计,包括:主控制电路、按键输入电路、蜂鸣器和LED声光提示电路、显示屏状态显示电路、光电开光避障电路、L298N电机驱动电路;二是手持终端硬件设计,包括按键输入电路、语音识别模块电路。 3.1主控制器模块

主控制器模块采用凌阳公司的16位单片机SPCE061A最小系统,单片机最小系统由组成单片机系统必需的元件组成,主要由电源、复位、语音模块、振荡电路以及扩展部分等部分组成。利用单片机最小系统可以实现系统结构的简单化,使编程、下载更加方便。

SPCE061A主要包括输入/输出端口、定时器/计数器、数/模转换、模/数转换、串行设备输入输出、通用异步串行接口、低电压监测和复位等部分,并且内置在线仿真电路ICE接口,较高的处理速度使其能够快速的处理复杂的数字信号。61 板将SPCE061A 的32 个I/O 口IOA0~IOA15,IOB0~IOB15 全部引出,对应的引脚为:A 口,41~48、53、54~60;B 口,5~1、81~76、68~64。而且该I/O 口是可编程的,即可以设置为输入或输出。设置为输入时,

[4]

分为悬浮输入或非悬浮输入。非悬浮输入又可以设置为上拉输入或是下拉输入。在5V 情况下,上拉电阻为150K,下拉电阻为110K;设置为输出时,可以选择同向输出或者反相输出。

SPCE061A最小系统中,包括SPCE061A芯片及其外围的基本模块,其中外围的基本模块有:晶振输入模块(OSC)、锁相环外围电路(PLL)、复位电路(RESET)、指示灯(LED)等,如图3.1所示。

图3.1 SPCE061A最小系统

3.2 音频电路

音频电路由音频输出和音频输入两部分组成。如图3.2所示是音频输出电路图DAC与单片机的DAC相连。SPCE061A内置2路10位精度的DAC,只需要外接功放电路即可完成语音的播放。图中的SPY0030是凌阳的一款音频放大芯片,可以工作在2.4-6V范围内,最大输出功率可达700mW。

第 6 页 共 51 页

陕西理工学院毕业设计

图3.2 音频输出电路

SPCE061A芯片中已经集成了音频输入专用ADC以及AGC放大电路,因此芯片外部的电路比较简单,如图3.3所示是61板的音频输入电路模块。

图3.3 音频输入模块

3.3电机驱动电路

L298N是ST公司生产的一种高电压、大电流电机驱动芯片。该芯片特点是:工作电压高,输出电流大,瞬间峰值电流可达3A,持续工作电流2A;耳钉功率25W。它可驱动一台两相步进电机或四相步进电机,也可以驱动两台直流电机,即内含二个H桥高电压大电流全桥式驱动器。图3.4中IN1、IN2、IN3、IN4分别对应OUT1、OUT2、OUT3、OUT4,即输入高低电平对应,ENA、ENB为使能端,高电平有效,即在低电平情况下,无论输入为何信号,输出都为低电平。如图3.4所示。

图3.4 电机驱动电路图

3.4按键,LED和复位电路

电路主要是对电源和睡眠指示作用以及复位重新训练小车等作用。三个按键分别与IOA0、I0A1和IOA2相连,LED分别与VDD和sleep管脚相连,复位电路与单片机reset管脚相连。

第 7 页 共 51 页

陕西理工学院毕业设计

按键,LED和复位电路图如图3.5,图3.6,图3.7所示。

RESETKEYR18VDD 4.7KRES BKEY1IOA0

S1S4KEY2IOA1 S2C37KEY3IOA2 104GNDS3

V5 LEDD1VDDLEDD2SLEEPLEDR12330R131KGND 图3.5 按键电路 图3.6 LED电路 图3.7 复位电路

3.5 ICE 接口电路

SPCE061A芯片内部集成了ICE(在线仿真)接口,PC机通过PROBE(在线调试器)或EZ_PROBE(简易下载线)与61板相连,就可以方便地完成程序的下载、调试等。61板为PROBE和EZ_PROBE各自提供了一组接口,可通过S5跳线来选择使用的接口类型。ICE接口部分电路如图3.8所示。

图3.8 ICE接口电路

3.6EZ_PROBE方式

SPCE061A的开发是通过在线调试器PROBE实现的。它既是一个编程器(即程序烧写器),又是一个实时在线调试器。用它可以替代在单片机应用项目的开发过程中常用的软件工具——硬件在线实时仿真器和程序烧写器。它利用了SPCE061A内置在线仿真电路ICE(In- Circuit Emulator)接口和凌阳公司的在线串行编程技术。PROBE工作于凌阳IDE集成开发环境软件包下,其5芯的仿真头直接连接到目标电路板上SPCE061A相应管脚,直接在目标电路板上的CPU——SPCE061A调试、运行用户编制的程序。PROBE的另一头是标准25针打印机接口,直接连接到计算机打印口与上位机通讯,在计算机IDE集成开发环境软件包下,完成在线调试功能。这种开发方式适合产品研发使用。计算机、PROBE、用户目标板三者之间的连接如图3.9,实物链接如图3.10所示。

第 8 页 共 51 页

陕西理工学院毕业设计

用户目5V电源外围接口在线调试器 PROBE (当I/O口外接5V器件时用) VDD(15) XICE(16) ICECLK(17) ICESDA(18) VSS(19) (1)VDD (2)XIC (3)ICECLK (4)ICESDA (5)VSS 25针计算机标准并行接口 3.3V电源 32678Hz晶振 SPCE061A PC 图3.9 用户目标板、PROBE、计算机三者之间的连接图

图3.10 PROBE方式实物连接图

第 9 页 共 51 页

陕西理工学院毕业设计

4系统软件设计

4.1系统的总体程序流程

在μ'nSP?单片机的汇编程序设计中,用户可以不用考虑程序代码在实际物理存储器中的存储地址,而是通过伪指令(如“.CODE”、“.TEXT”、“.RAM”等)来通知编译器把程序代码定位在什么类型的存储空间即可.至于具体的存储地址则由编译器管理。

μ'nSP?单片机的汇编指令针对C语言进行了优化,所以其汇编的指令格式很多地方直接类似于 C 语言。另外其开发仿真环境 IDE 也直接提供了C语言的开发环境,C函数和汇编函数可以方便地进行相互调用,详细方法在本章节中将详细介绍。显然,在 HLL 平台上要比在汇编级上编程具有诸多优势:代码清晰易读、易维护,易形成模块化,便于重复使用从而增加代码的开发效率。

HLL 中又因 C 语言的可移植性最佳而成为首选。因此,支持C语言几乎是所有微控制器设计的一项基本要求。μ'nSP?指令结构的设计就着重考虑了对C语言的支持。

语音辨别小车的主程序分为四大部分:初始化、训练、识别、重训操作。 初始化:把IOB8~IOB11端口 作为输出端来控制驱动电机。必要时也得有相应的输入端设置和脉冲宽度调制端口设置。

训练:训练部分其实就是建立语音信息模型,以便小车对语音信息进行辨识。

识别:在此过程当中,若识别内容是小车的名字,那么小车会停止并处于待命状态,然后等待接收动作命令。若辨识结果是动作信息指令,小车就会播放语音告知接下来要执行的动作并执行该动作。

重训操作:如果要进行重新训练,按KEY3键进行初始化,然后按照训练部分的步骤进行重新训练。

系统的总体流程如图4.1所示。

图4.1系统总体流程图

第 10 页 共 51 页

陕西理工学院毕业设计

4.2汇编语言程序设计 4.2.1汇编语言的程序结构

程序最基本的结构形式有顺序、循环、分支、子程序四种结构。顺序结构在这里不作讨论,在此章节中将从分支、循环、子程序出发,向读者介绍嵌套递归与中断程序的设计方法。

分支结构可分为双分支结构和多分支结构两种如图 4.2所示。在程序体中,根据不同的条件执行不同的动作,在某一确定的条件下,只能执行多个分支中的一个分支。

图4.2 分支结构的两种形式

汇编语言中没有专用的循环指令,但是可以使用条件转移指令通过条件判断来控制循环是继续还是结束。

在一些实际应用系统中,往往同一组操作要重复许多次,这种强制CPU多次重复执行一串指令的基本程序结构称为循环程序结构。循环程序可以有两种结构形式,一种是WHILE_DO结构形式;另一种是DO_UNTIL结构形式,如图4.3所示。

DO_UNTIL结构 WHILE_DO结构

N 初始化 初始化 循环体 Y Y 循环控制条件 循环控制条件

Y

循环体 N 退出循环 退出循环 图4.3循环结构的两种方式

WHILE_DO结构把对循环控制条件的判断放在循环的入口,先判断条件,满足条件就执行循环体,否则退出循环。DO_UNTIL 结构则先执行循环体然后再判断条件,满足则继续执行循环操作,一旦不满足条件则退出循环。这两种结构可以根据具体情况选择使用。一般来说,如果有循环次数等于0的可能则应选择WHILE_DO结构。不论哪一种结构形式,循环程序一般由三个主要部分组成。 (1)初始化部分:为循环程序做准备,如规定循环次数、给各个变量和地址指针预置初值。

(2)循环体:每次都要执行的程序段,是循环程序的实体,也是循环程序的主体。

第 11 页 共 51 页

陕西理工学院毕业设计

(3)循环控制部分:这部分的作用是修改循环变量和控制变量,并判断循环是否结束,直到符合结束条件时,跳出循环为止。 下面是这两种循环结构的举例。 (1)数据搬运

把内存中地址为0x0000~0x0006中的数据,移到地址为0x0010~0x0016中。

流程图如图4.4所示。

N Y

开始 r2=[C_Move_To_Position] bp=Label r1=7(数据个数) 复制数据 源地址和目的地址各加1 r1=r1-1 r1=0?

Y

结束 图4.4程序流程图

(2)延时程序

向B口送0xffff数据,点亮LED灯,延时1秒后,再向B口送0x0000数据,熄灭LED灯。

延时子程序的流程图如图4.5所示。

第 12 页 共 51 页

陕西理工学院毕业设计

Y

开始 r1=400 r2=936 r2=r2-1 N r2=0? Y r1=r1-1 r2=0? Y 返回 图4.5 时间延时子程序流程图

N 下面分析一下如何进行时间延时,延时时间主要与两个因素有关:其一是循环体(内循环)中指令执行的时间;其二是外循环变量(时间常数)的设置。上例选用系统默认的 FOSC,CPUCLK,CPUCLK=FOSC/8=24M/8=3M(Hz),所以一个CPU周期为1/3M(s)。执行一条r1=400 指令的时间为4个CPU周期,执行一条nop指令的时间为2个CPU周期,执行 r2-=1 指令的时间为 2 个 CPU 周期,执行 jnz Loop2 指令的时间为 2 或 4 个 CPU 周期(当条件满足时为5个CPU周期,条件不满足时3个CPU周期)。所以上例子中的时间延时子程序的时间为 (4+4+6*1248+2+4-2)*200+4-2=1500002个 CPU 周期,约为 0.5 秒,有点不精确。故在进行精确的时间延时,一般不采用这种方法,而是采用中断来延时,因为 SPCE061A单片机有丰富的定时中断源,如:2Hz ,4Hz,128Hz 等。当然在一般的延时程序也可以采用指令延时,它也挺方便的,在上例的延时程序中只要改变 r1 的值就可以很方便地改变延时时间,比如:r1=4,那么它的延时时间为 10ms。 4.2.2子程序的嵌套

子程序嵌套就是指子程序调用子程序。其中嵌套的层数称为嵌套深度。图4.6表示了三重嵌套的过程。子程序嵌套要注意以下几个方面。

(1)寄存器的保护和恢复,以避免各层子程序之间发生因寄存器冲突而出错的情况。 (2)程序中如果使用了堆栈来传递参数,应对堆栈小心操作,避免堆栈使用不当造成子程序不能正确返回的出错情况。

(3)子程序的嵌套层数不是无限的。堆栈是在数据存储区内开辟的空间,而由于SPCE061A单片机的数据存储的空间为2kWORD。

第 13 页 共 51 页

陕西理工学院毕业设计

SUB1 SUB2 SUB3

主 程 序

CALL SUB1 CALL SUB2 CALL SUB3

继续执行 主程序

RETF RETFF

图4.6 三重程序嵌套过程

4.3 C语言程序设计

是否具有对高级语言HLL(High Level Language)的支持已成为衡量微控制器性能的标准之一。显然,在HLL平台上要比在汇编级上的编程具有诸多优势:代码清晰易读、易维护,易形成模块化,便于重复使用从而增加代码的开发效率。

HLL中又因C语言的可移植性最佳而成为首选。因此,支持C语言几乎是所有微控制器设计的一项基本要求。μ'nSP指令结构的设计就着重考虑了对C语音的支持,GCC是一种针对μ’nSP操作平台的ANSI-C编译器。

在μ’nSP的指令系统算逻辑作符与ANSI-C算符大同小异,见表4.7。

表4.7μ'nSP指令的算逻辑操作符

数据类型 Char Short Int Long int Unsigned char Unsigned short Unsigned int Unsigned long int

Float Double

数据长度(位数)

16 16 16 32 32 16 16 32 32 64

值域 -32768~32767 -32767~32767 -32767~32767 -2147483648~2147483647

0~65535 0~65535 0~65535 0~4294967295

以IEEE格式表示的32位浮点

以IEEE格式表示的32位浮点

4.3.1程序调用协议

由于C编译器产生的所有标号都以下划线(-)为前缀,而C程序在调用汇编程序名也以下划线为前缀。模块代码间的调用是遵循μ'nSP体系的调用协议。调用协议是指这样一套法则:它使不同的子程序代码之间形成一种握手通讯接口,并完成由一个子程序到另一个子程序的参数传递与控制,以及定义出子程序调用与子程序返回值的常规规则,μ'nSP体系

[7]

的调用协议的内容如下。

参数传递

参数以相反的顺序(从右到左)被压入栈中。必要时所有的参数都被转换成其在函数原型中

第 14 页 共 51 页

陕西理工学院毕业设计

被声明过的数据类型。但如果函数在调用发生在其声明之前,则传递在调用函数里的参数是不会被进行任何数据类型转换的。 堆栈维护及排列

函数调用者应切记在程序返回时将调用程序压入栈中的参数弹出。 返回值

16位的返回值存放在寄存器R1中。32位的返回值存入寄存器对R1、R2中;其中低字在R1中,高字在R2中。若要返回结构则需要在R1中存放一个指向结构的指针。

寄存器数据暂存方式

编译器会产生prolog/epilog过程动作来暂存或者恢复PC、SR及BP寄存器。汇编器则通过“CALL”指令可将PC和SR自动压入栈中,而通过“RETF”或“RETI”指令将其自动弹出栈来。

指针

编译器所认可的指针是16位的。函数的指针实际上并非指向函数的入口地址,而是一个段地址向量_function_entry,在该向量里由两个连续的WORD的数据单元存放的值才是函数的入口地址。

4.3.2语音识别程序设计

语音识别主要分为“录入语音”和“识别语音”两个阶段。录入语音阶段,单片机对采集到的语音样本进行分析处理,从中提取出语音特征信息,建立一个特征模型;在识别阶段,单片机对采集到的语音样本也进行类似的分析处理,提取出语音的特征信息,然后将这个特征信息模型与已有的特征模型进行对比,如果二者达到了一定的匹配度,则输入的语音被识

[15]

别。训练过程流程图如图4.8所示,语音识别的具体流程如图4.9所示。

开始 初始化RAM 采集语音信 执行训练,获取训练结果 识别出语音指令

N 获取识别初始化识别器 开始

N 训练成功 Y 执行对应动作 Y 返回 返回 图4.8 训练过程流程图 图4.9 语音识别流程图

4.3.3语音录入子程序

当程序检测到训练标志位BS_Flag内容为0xffff,就会要求操作者对它进行录入信息

第 15 页 共 51 页

陕西理工学院毕业设计

操作,录入信息采用两次录入获取结果的方式,以录入名字为例:小车首先会提示:给我取个名字吧,这时你可以告诉它一个名字(比如Jack );然后它会提示:请再说一遍,这时再次告诉它名字(Jack),如果两次的声音差别不大,小车就能够成功的建立模型,名称录入成功;如果没能够成功的建立模型,小车会告知失败的原因并要求重新录入信息。成功录入名称后会给出下一条待录入指令提示音:前进,参照名称录入方式录入前进指令。依次录入小车的名称—前进指令—倒车指令—左转指令—右转指令,全部录入成功,子程序返回,

[16]

语音录入结束。语音录入小车总流程如图4.10所示。

图4.10 语音录入小车总流程

4.3.4语音控制小车子程序

动作子程序包括:前进、后退、左拐、右拐子序。

前进:由小车的结构原理和驱动电路分析知:只要IOB8 为高电平,IOB9,IOB10,IOB11 全部为低电平即可实现小车的前进。前进子程序包括语音提示、置端口数据、启动定时器操作。

倒车:由小车的结构原理分析和驱动电路分析知:只要IOB9 为高电平,IOB8,IOB10,IOB11 全部为低电平即可实现小车的倒退。倒退子程序包括语音提示、置端口数据、启动定时器操作。

左转:由小车的结构原理分析和驱动电路分析知,小车左转需要两个条件:前轮左偏,后轮前进。这时对应的 I/O 状态为:IOB8、IOB10 为高电平,IOB9、IOB11 为低电平。左转子程序包括语音提示、置端口数据、启动定时器操作。

右转:由小车的结构原理分析和驱动电路分析知,小车右转需要两个条件:前轮右偏;后轮前进。这时对应的 I/O 状态为:IOB8、IOB11 为高电平,IOB9、IOB10 为低电平。右

第 16 页 共 51 页

陕西理工学院毕业设计

转子程序包括语音提示、置端口数据、启动定时器操作。

注:在转弯之前首先让前轮朝目标方向的反方向偏转,然后再让前轮朝目标方向偏转,这样前轮的摆动范围更大,惯性更大,摆幅也最大,能更好实现转弯[17]。

语音控制小车总流程图如图4.11所示。

开始

初始化

输入语音指令 Y

小车前进 是否为前进指令 N Y

小车后退 是否为后退指令 N Y

小车左拐 是否为左拐指令

N Y

是否为右拐指令 小车右拐

N

返回

图4.11语音控制小车总流程图

4.3.5中断子程序

中断是为处理器对外界异步事件具有处理能力而设置的,中断技术的引入把计算机的发展和应用大大地推进一步。因此中断功能的强弱已成为衡量一台计算机性能的重要指标。

SPCE061A 系列单片机中断系统,是凌阳 16 位单片机中中断功能较强的一种,它可以提供 14 个中断源,具有两个中断优先级,可实现两级中断嵌套功能。用户可以用关中断指令(或复位)屏蔽所有的中断请求,也可以用开中断指令使 CPU 接受中断申请。每一个中断源可以用软件独立控制为开或关中断状态;但中断级别不可用软件设置。

SPCE061A 的中断类型:

SPCE061A 的结构给出了三种类型的中断:软件中断和事件中断。 软件中断

软件中断是由软件指令 break 产生的中断。软件中断的向量地址为 FFF5H 2)异常中断异常中断表示为非常重要的事件,一旦发生, CPU 必须立即进行处理。目前,SPCE061A

第 17 页 共 51 页

陕西理工学院毕业设计

定义的异常中断只有?复位?一种。通常,SPCE061A 系统复位可以由以下三种情况引起:上电、看门狗计数器溢出以及系统电源低于电压低限。不论什么情况引起复位,都会使复位引脚的电位变低,进而使程序指针 PC 指向由一个复位向量(FFF7H)所指的系统复位程序入口地址。

事件中断

事件中断(可简称“中断”,以下提到的“中断”均为事件中断)一般产生于片内设部件或由外设中断输入引脚引入的某个事件。这种中断的开通/禁止,由相应独立使能和相应的 IRQ 或 FIQ 总使能控制。

SPCE061A 的事件中断可采用两种方式:快速中断请求即 FIQ 中断和中断请求即 IRQ 中断。这两种中断都有相应的总使能。

中断向量和中断源:

共有 9 个中断向量即 FIQ、IRQ0~IRQ6 及 UART IRQ。这 9 个中断向量共可安置 14 个中断源供用户使用,其中有 3 个中断源可安置在 FIQ 或 IRQ0~IRQ2 中,另有 10 个中断源则可安置在 IRQ3~IRQ6 中。还有一个专门用于通用异步串行口 UART 的中断源,须安置在 UART IRQ 向量中。

虽然已经有了前进、后退以及停车 (通过直接呼叫小车的名字使其停车)等语音控制指令,但是考虑环境的干扰因素,小车运行时的噪音影响和有效距离的限制,小车运行后可能接收不到语音指令而一直运行。为了防止出现这种情况,加入了时间控制,在启动小车运行的同时启动定时器,定时器时间到停止小车的运行,该定时器借助于 2Hz 时基中断完成。可以在程序中修改uiTimeset 参数来控制运行时间,当uiTimeset=2 时,运行时间为 1s,以此类推。图4.12为该程序的流程图。

开始

定时计数器加1

Y

N 定时到4.5s

N 停车待命

中断返回 图4.12 2HZ中断子函数

4.4程序中需要说明的几个问题

在程序中有几个地方不易理解,需要特别说明一下: 有没有被训练过是怎么知道的? 在这里利用了一个特殊的Flash单元,语音模型存储区首单元(该示例程序中为0xe000单元)。当Flash在初始化以后,或者在擦除后为0xffff,在成功训练并存储后为0x0055

第 18 页 共 51 页

陕西理工学院毕业设计

(该值由辨识器自动生成)。这样就可以根据这个单元的值来判断是否经过训练。

什么已经训练过的系统在重新运行时还要进行模型装载? 在首次训练完成之后,辨识器中保存着训练的模型,但是系统一旦复位辨识器中的模型就会丢失,所以在重新运行时必须把存储在Flash中的语音模型装载到辨识器(RAM)中去。

转弯时为什么前轮要先做一个反方向的摆动? 这是为了克服车体的限制,由于前轮电机的驱动能力有限,有时会出现前轮偏转不到位的情况,所以在转弯前首先让前轮朝反方向摆动,然后再朝目标方向摆动。这样前轮的摆动范围更大,惯性更大,摆幅也最大,能更好实现转弯。

第 19 页 共 51 页

陕西理工学院毕业设计

5 系统调试

5.1 软件调试环境

μ’nSP? 集成开发环境,它集程序的编辑、编译、链接、调试以及仿真等功能为一体。具有友好的交互界面、下拉菜单、快捷键和快速访问命令列表等,使人们的编程、调试工作更加方便且高效。此外,它的软件仿真功能可以在不连接仿真板的情况下模拟硬件的各项功能来调试程序。

IDE 的调试界面如图5.1所示。本章将介绍 μ’nSP?开发环境的菜单、窗口界面以及项

[15]

目的操作等,使有兴趣者对开发环境有一个总体了解,并能够动手实践。

图5.1调试环境界面

凌阳十六位单片机集开发环境采用项目方式进行文件管理。项目(Project)是指为用户调程建立起来的一个开发环境,提供用户程序及资源文档的编辑和管理,并提供各项环境要素的设置途径,最后将通过对用户程序及库的编制(包括编译、汇编以及链接等)提供出一个良好的调试环境,输出窗口调试信息界面如图5.2所示。

图5.2 输出窗口调试信息界面

凌阳十六位单片机集开发环境的工具栏其中含有μ’nSP? IDE提供了3种工具栏,包括标准、编辑和调试。每种工具栏都有固定和浮动两种形式。把鼠标移到固定形式工具栏中没有图标的地方,按住左按钮,向下拖动鼠标,即可把工具栏变为浮动的;而双击浮动工具栏的标题条,则可变为固定工具栏。

固定形式的标准工具栏位于菜单栏的下面,它以图标的形式提供了部分常用菜单命令的功能。只要用鼠标单击代表某个命令的图标按钮,就能直接执行相应的菜单命令。工具

[4]

条中有38个图标,代表38种操作,如图5.3所示。

第 20 页 共 51 页

陕西理工学院毕业设计

图5.3 工具栏

新建项目的方法。

(1)用鼠标左键单击File下拉菜单New 弹出New对话框,如图5.4所示。

(2) 在该窗口中选中Project标签并在File的文本框中键入项目的名称,在Location 下的文本框中输入项目的存取路径或利用该文本框右端的浏览按钮制定项目的存储位置。

(3) 用鼠标左键单击New对话框里的OK按钮,则项目建立完成。

图 5.4新建项目界面

5.2硬体开发工具

u'nSP?部分产品均内置有在线仿真接口,即 ICE(In-Chip-Emulator)接口。该接口方式适用于内部ROM存储空间为闪存的(FLASH)。该种产品硬体开发工具较为简单。只需要一个在线调试器(PROBE)既可以完成。PROBE既是一个编程器(即程序烧写器),又是一个实时在线调试器。用它可以替代在单片机应用项目的开发过程中常用的软件工具——硬件在线实时仿真器和程序烧写器。

PROBE 工作于凌阳集成开发环境软件包下,其5芯的仿真头直接连接到目标电路板上单片机相应管脚,来调试、运行用户编制的程序。PROBE 的另一头是标准 25 针打印机接口,直接连接到计算机打印口与上位机通讯,在计算机 IDE 集成开发环境软件包下,完成在线调试功能。图5.5是计算机、PROBE、用户目标板三者之间的连接示意图。

第 21 页 共 51 页

陕西理工学院毕业设计

图5.5计算机、PROBE、用户目标板三者之间的连接示意图

5.3程序调试

5.3.1μ'nSP IDE的项目组织结构

新建项目包括三类文件:源文件(Source files)、头文件(Head files)和用来存放文档或项目说明的文件(External Dependencies)其组织结构。这种项目管理的方式,会把与项目相关的代码模块组织为一个有机的整体,便于开发人员对其代码以及相关文件文档的管

[6]

理。在表5.6中,详细描述了一个新建项目后自动产生的各种文件。

从编写调试代码的角度来看,需要反复提出的有如下一些重要的设置。 路径的设置:菜单tools>>option?>>Directiories。

链接库函数的加载:菜单Project>>Setting?>>Link,可以加载应用函数库。 虽然在头文件夹下面加入了所需的头文件,但是在汇编文件和C文件中仍需用伪指令把它包含到自己的文件中。μ'nSP 集成开发系统提供了SPCE061A的寄存器定义的汇编头文件以及C语言的头文件。当我们对单片机设置时,要把这些头文件添加到项目文件中。

表5.6 μ'nSP IDE新建项目的结果

自动生成文件

名称

项目文件 资源文件 资源表 资源表头文件 MAKE文件

文件名或文件扩展名 .scs .rc Resource.asm Resource.inc Makefile

包含信息 当前项目中源文件的信息 当前项目中资源文件的信息

当前项目中重新编辑文件信息

File视窗建立元组

用于存放源文件,

Source FIles

Head Files

External Depencies

经编译生成扩展名为.obj的目标文件 用于存放头文件,通常是一些要包含在源文件中的接口 用来存放文档记录或项目说明等文件

Resource视窗建立Resource元组

用来存放项目的资源文件

μ'nSP?单片机的汇编指令针对 C 语言进行了优化,所以其汇编的指令格式很多地方直接类似于 C 语言。另外其开发仿真环境 IDE 也直接提供了 C 语言的开发环境,C函数和汇编函数可以方便地进行相互调用,详细方法在本章节中将详细介绍。

是否具有对高级语言 HLL(High Level Language)的支持已成为衡量微控制器性能的标准之一。显然,在 HLL 平台上要比在汇编级上编程具有诸多优势:代码清晰易读、易维护,易形成模块化,便于重复使用从而增加代码的开发效率。

HLL 中又因 C 语言的可移植性最佳而成为首选。因此,支持C语言几乎是所有微控制器设计的一项基本要求。'nSP?指令结构的设计就着重考虑了对C语言的支持,GCC 是一种针对’nSP? 操作平台的 ANSI-C 编译器。

第 22 页 共 51 页

陕西理工学院毕业设计

5.3.2汇编语言程序调试

C的编译器GCC 把C语言代码编译为汇编代码。汇编编译器 Xasm16对汇编代码进行编译成为目标文件。链接器将目标文件、库函数模块、资源文件连接为整体形成一个可在芯片上运行的可执行文件。μ'nSP?的汇编指令只有单字和双字两种,其结构紧凑,且最大限度地考虑了对高级语言中C语言的支持。另外,在需要寻址的各类指令中的每一个指令都可通过与6种寻址方式的组合而形成一个指令子集,目的是为增强指令应用的灵活性和实用性。

而算逻运算类指令中的16位×16位的乘法运算指令(Mul)和内积运算指令(Muls),又提供了对数字信号处理应用的支持。此外,复合式的「移位算逻操作」指令允许操作数在经过ALU的算逻操作前可先由移位器进行各种移位处理,然后再经ALU的算逻运算操作。灵活、高效是μ'nSP?指令系统的显著特点。

数制、数据类型与参数

μ'nSP?的汇编器将十进制作为缺省数制。十六进制数可用符号“0x”或“$”作为前缀,或用符号“H”

作为后缀。对于其它数制的后缀可见表 5.7中所列。

表5.7 μ’nSP?的数制及其后缀规定

数制 二进制 八进制 十进制 十六进制 ASCII字符串

μ'nSP?汇编指令中所用的基本数据类型为字型,在此基础之上发展的一些数据类型与字型一起列在表 5.8中。

表 5.8 μ’nSP?汇编指令中的数据类型 数据类型 字长度(位数) 无符号数值域 有符号数值域 字型(DW) 双字型(DD) 单精度浮点型(FLOAT) 双精度浮点型(DOUBLE) 64 无 16 32 32 0~65535 0~4294967295 无 -32768~+32767 -2147483648~+2147483647 以 IEEE 格式表示的 32 位浮点数 以 IEEE 格式表示的 64 位浮点数 后缀 B O D或不写

H

用双引号或单引号括起

汇编指令中的参数可以是常数或表达式。常数参数基本有数值型和字符串型两种。数值

型参数将按当前数值的数制进行处理(缺省为 10 进制)。如果用户强调参数用某一种数制,则必须给数值加必要的前缀或后缀来表示清楚。

地址表达式与标号

修饰符 SEG 与 OFFSET 常常应用在计算表的地址。例如有如下一张 1 到 10 的平方表,在编译链接过程中,链接器将自动在将以上 10 个数据放在程序存储区内,并且Square_Table 就代表了此 10 个连续数据的起始 22 位的起始地址。那么 “ SEG Square_Table”就代表了 22 位地址的高 6 位,而“OFFSET Square_Table”则代表了22 位地址的低 16 位。

SPCE061A 只有 32kword 的程序存储空间,所以其高 6 位的地址一定为 0。如果上面的 1 到 10 的平方表应用在 SPCE061A 中,那么常量 Square_Table 与常量 OFFSET Square_Table 的值是相等的。

我们想通过标号要得到一段程序代码或表的实际的物理地址时,往往需要 SEG 和 OFFSET 这样的修饰符。

μ'nSP?汇编语言程序中所有标号的定义都是字母大小写区分的。全局标号原则上可以

第 23 页 共 51 页

陕西理工学院毕业设计

由任意数量的字母和数字字符组成,但只有前 32 位是有效的。它可以写在文件中的任何一列上,但必须以字母字符或下划线(_)开头,且标号名后须以冒号(:)来结束。在下面的程序例子中 LABEL1,LABEL2 和 LABEL3 都是全局标号。

局部标号只有在局部区域内定义才有效。正是这种约束才使得局部标号的定义可以安全地重复使用在整个程序各处而不致产生混乱错误。

局部标号应当注意以下几点:

局部标号也像全局标号那样最多可有 32 个字母或数字字符,且必须以字母字符或问号(?)开头。μ'nSP?的汇编器通常规定用问号(?)作为局部标号的前缀或后缀。除此之外,局部标号最好也遵循全局标号的使用规则。

在不同的局部区域里所定义的局部标号都有不同的含义,且标号?a 是不同于标号 a?的。切忌将诸如“+、-、*、/”这类运算符用在局部标号中,伪指令 VAR,SECTION 或 ENDS 是不可以用在局部标号结尾处的。

程序注释与符号规定

程序注释行必须用双斜线(//)或分号(;)起始,它可与程序指令在同一行,或跟在指令后,亦可在指令的前一行或后一行。

μ’nSP?的汇编器规定伪指令不必区分字母的大小写,亦即书写伪指令时既可全用大写,也可全用小写,甚至可以大小写混用。但所有定义的标号包括宏名、结构名、结构变量名、段名及程序名则一律区分其字母的大小写。 5.3.3 C语言程序调试

是否具有对高级语言HLL(High Level Language)的支持已成为衡量微控制器性能的标准之一。显然,在HLL平台上要比在汇编级上的编程具有诸多优势:代码清晰易读、易维护,易形成模块化,便于重复使用从而增加代码的开发效率。

HLL中又因C语言的可移植性最佳而成为首选。因此,支持C语言几乎是所有微控制器设计的一项基本要求。μ'nSP指令结构的设计就着重考虑了对C语音的支持,GCC是一种针对μ’nSP操作平台的ANSI-C编译器。

在μ’nSP的指令系统算逻辑作符与ANSI-C算符大同小异,见表5.9。

表5.9 μ’nSP指令的算逻辑操作符

数据类型 Char Short Int Long int Unsigned char Unsigned short Unsigned int Unsigned long int

Float Double

数据长度(位数)

16 16 16 32 32 16 16 32 32 64

值域 -32768~32767 -32767~32767 -32767~32767 -2147483648~2147483647

0~65535 0~65535 0~65535 0~4294967295

以IEEE格式表示的32位浮点

以IEEE格式表示的32位浮点

由于C编译器产生的所有标号都以下划线(-)为前缀,而C程序在调用汇编程序名也以下划线为前缀。模块代码间的调用是遵循μ’nSP体系的调用协议。调用协议是指这样一套法则:它使不同的子程序代码之间形成一种握手通讯接口,并完成由一个子程序到另一个子程序的参数传递与控制,以及定义出子程序调用与子程序返回值的常规规则,μ’nSP体

[7]

系的调用协议的内容如下。

参数传递

参数以相反的顺序(从右到左)被压入栈中。必要时所有的参数都被转换成其在函数原型中

第 24 页 共 51 页

陕西理工学院毕业设计

被声明过的数据类型。但如果函数在调用发生在其声明之前,则传递在调用函数里的参数是不会被进行任何数据类型转换的。 堆栈维护及排列

函数调用者应切记在程序返回时将调用程序压入栈中的参数弹出。 返回值

16位的返回值存放在寄存器R1中。32位的返回值存入寄存器对R1、R2中;其中低字在R1中,高字在R2中。若要返回结构则需要在R1中存放一个指向结构的指针。

寄存器数据暂存方式

编译器会产生prolog/epilog过程动作来暂存或者恢复PC、SR及BP寄存器。汇编器则通过“CALL”指令可将PC和SR自动压入栈中,而通过“RETF”或“RETI”指令将其自动弹出栈来。

指针

编译器所认可的指针是16位的。函数的指针实际上并非指向函数的入口地址,而是一个段地址向量_function_entry,在该向量里由两个连续的WORD的数据单元存放的值才是函数的入口地址。

中断

中断是指计算机在执行某一程序的过程中,由于计算机系统内、外的某种原因,而必须终止原程序的执行,转去执行相应的处理程序,待处理结束之后,再回来继续执行被终止的原程序过程。中断技术能实现 CPU 与外部设备的并行工作,提高 CPU 的利用率以及数据的输入/输出效率;中断技术也能对计算机运行过程中突然发生的故障做到及时发现并进行自动处理如:硬件故障、运算错误及程序故障等;中断技术还能使我们通过键盘向计算机发出请求,随时对运行中的计算机进行干预,而不用先停机,然后再重新开机等等。

中断源

中断源是指在计算机系统中向 CPU 发出中断请求的来源,中断源可以人为设定也可以是为响应突发性随机事件而设置。如定时器中断,它的中断源即是定时器。

中断优先级

由于在实际的系统中,往往有多个中断源,且中断申请是随机的,有时可能会有多个中断源同时提出中断申请,但 CPU 一次只能响应一个中断源发出的中断请求,这时 CPU 应响应那个中断请求?这就需要用软件或硬件按中断源工作性质的轻重缓急,给它们安排一个优先顺序,即所谓的优先级排队。中断优先级越高,则响应优先权就越高。当 CPU 正执行中断服务程序时,又有中断优先级更高的中断申请产生,如果 CPU 能够暂停对原来的中断处理程序,转而去处理优先级更高的中断请求,处理完毕后,再回到原低级中断处理程序,这一过程称为中断嵌套。具有这种功能的中断系统称为多级中断系统;没有中断嵌套功能的则称为单级中断系统。 5.3.4中断控制寄存器

SPCE061A 对中断源的开放和屏蔽,以及每个中断源是否被允许中断,都受中断允许寄存器 P_INT_Ctrl 和 P_INT_Clear 及 P_INT_Ctrl_New 控制和一些中断控制指令。

中断控制单元 P_INT_Ctrl(读/写)(7010H) P_INT_Ctrl 控制单元具有可读和可写的属性,其读写时的意义是不同的。当写中断控制单元中的某位为“1”时,即允许该位所代表的中断被开放,并关闭屏蔽中断触发器,此时当有该中断申请时,CPU 会响应。否则如果该位被置 0 则禁止该位所代表的中断。即使有中断申请,CPU 也不会响应。

当读取中断控制单元时,其主要作为中断标志,因为其每一位均代表一个中断,当 CPU 响应某中断时,便将该中断标志置“1”,即将 P_INT_Ctrl 中的某位置“1”,可以通过读取该寄存器来确定 CPU 响应的中断。

清除中断标志控制单元 P_INT_Clear(写)(7011H)清除中断标志控制单元主要用于清除中断控制标志位,当 CPU 响应中断后,会将中断标志置位为“1”,当进入中断服务程序后,要将其控制标志清零,否则 CPU 总是执行该中断。

第 25 页 共 51 页

陕西理工学院毕业设计

因为 P_INT_Clear 寄存器的每一位均对应一个中断,所以如果想清除某个中断状态标志,只要将该寄存器中对应的中断位置 1 即可清除该中断状态标志位。该寄存器只有写的属性,读该寄存器是无任何意义的。

SPCE061A 的结构给出了两种类型的中断:软件中断和事件中断。 (1)软件中断

软件中断是由软件指令 break 产生的中断。软件中断的向量地址为 FFF5H 2)异常中断异常中断表示为非常重要的事件,一旦发生, CPU 必须立即进行处理。目前,SPCE061A 定义的异常中断只有?复位?一种。通常,SPCE061A 系统复位可以由以下三种情况引起:上电、看门狗计数器溢出以及系统电源低于电压低限。不论什么情况引起复位,都会使复位引脚的电位变低,进而使程序指针 PC 指向由一个复位向量(FFF7H)所指的系统复位程序入口地址。

(2)事件中断

事件中断(可简称“中断”,以下提到的“中断”均为事件中断)一般产生于片内设部件或由外设中断输入引脚引入的某个事件。这种中断的开通/禁止,由相应独立使能和相应的 IRQ 或 FIQ 总使能控制。

SPCE061A 的事件中断可采用两种方式:快速中断请求即 FIQ 中断和中断请求即 IRQ 中断。这两种中断都有相应的总使能。

中断向量和中断源

共有 9 个中断向量即 FIQ、IRQ0~IRQ6 及 UART IRQ。这 9 个中断向量共可安置 14 个中断源供用户使用,其中有 3 个中断源可安置在 FIQ 或 IRQ0~IRQ2 中,另有 10 个中断源则可安置在 IRQ3~IRQ6 中。还有一个专门用于通用异步串行口 UART 的中断源,须安置在 UART IRQ 向量中。

中断控制指令 FIQ ON

功能:用来开通 FIQ 中断(FIQ 的总中断允许开),其控制指令不能代替 P_INT_Ctrl,也就是说即使在程序中,写了该代码但是没有在 P_INT_Ctrl 寄存器中 FIQ 处置位 1, CPU 无法响应该中断。FIQ ON 与 FIQ OFF 配对使用的。 FIQ OFF

功能:这个指令用来屏蔽 FIQ 中断。该指令可以屏蔽P_INT_Ctrl控制寄存器打开的 FIQ 中断;

IRQ ON(IRQ 的总中断允许开)功能:

这个指令用来开放 IRQ 中断,该控制指令不能代替P_INT_Ctrl,与FIQ ON 相同。必须通过P_INT_Ctrl来开通中断,其与IRQ OFF是对应使用的。 IRQ OFF

功能:这个指令是用来屏蔽 IRQ 中断。与 FIQ OFF 相同,可以屏蔽 P_INT_Ctrl 开放的中断,并通过 IRQ ON 来打开。 INT

功能:这个指令用来设置允许/禁止 FIQ 和 IRQ 中断。该控制指令与前面的指令相同,只有先通过 P_INT_Ctrl 寄存器来打开中断通道。INT 控制指令还可以以细分为:

INT FIQ 功能:允许 FIQ 中断,关闭IRQ中断。 INT IRQ 功能:允许 IRQ 中断,关闭FIQ中断。

INT FIQ,IRQ 功能:允许 FIQ 中断,允许IRQ中断。 INT OFF 功能:关闭 FIQ 中断,关闭IRQ中断。 在做程序调试之前,首先在计算机中安装凌阳IDE2.0软件,其次将EZ_PROBE下载线一边的五针接头与61板上J11接口(即标有“EZ_PROBE”的插座)连接好,下载线的另一边25针插座与PC后面的并行接口(即打印机接口)相接。用短路跳线把J11接口边上S5跳线端子的2和3端子短接。将电池盒与61板连接好并打开电池盒上的开关。启动IDE2.0软件,

第 26 页 共 51 页

陕西理工学院毕业设计

选择[File]→[NEW] 创建工程,把所调试的程序加载到PROJET,程序加载界面如图5.10所示。

图5.10程序加载界面

语音识别主要分为“录入语音”和“识别语音”两个阶段。录入语音阶段,单片机对采集到的语音样本进行分析处理,从中提取出语音特征信息,建立一个特征模型;在识别阶段,单片机对采集到的语音样本也进行类似的分析处理,提取出语音的特征信息,然后将这个特征信息模型与已有的特征模型进行对比,如果二者达到了一定的匹配度,则输入的语音被识别。在程序编译与链接前设置好项目的相关信息,主要是芯片、下载线、调试器的选择。点击工具栏上的[Select Body]按钮,打开Select Body对话框,按照图5.11所示的选择设置,点击[OK]。

图5.11 Select Body设置图

当程序检测到训练标志位BS_Flag内容为0xffff,就会要求操作者对它进行录入信息操作,录入信息采用两次录入获取结果的方式,以录入名字为例:小车首先会提示:给我取个名字吧,这时你可以告诉它一个名字(比如Jack );然后它会提示:请再说一遍,这时再次告诉它名字(Jack),如果两次的声音差别不大,小车就能够成功的建立模型,名称录入成功;如果没能够成功的建立模型,小车会告知失败的原因并要求重新录入信息。成功录入名称后会给出下一条待录入指令提示音:前进,参照名称录入方式录入前进指令。依次录入小车的名称—前进指令—倒车指令—左转指令—右转指令,全部录入成功,子程序返回,语音录入结束。然后选择[Build]→[Rbuild All]进行源文件的编译与链接,若编译链接中有错误和警告,则会显示在如图5.12所示Output窗口中。

第 27 页 共 51 页

陕西理工学院毕业设计

图5.12 编译链接后OUTPUT窗口显示

最初对芯片的程序编写时,在μ’nSP?软件中编译没有错误之后,当将程序下载到单片机中进行硬件调试时,却发现,当发出“前进”的命令时,语音识别到的信号是“停车”,开始的时候以为是识别的精度误差的原因,但是无论如何发出“前进”的命令,SPCE061A检测到的语音指令始终是“停车”的指令。最后在芯片手册的看到语音识别关键词的顺序要与程序中自己宏定义的标志一致,否则会出现识别混乱的情况。

虽然语音识别混乱的情况已经得到改善,但是,语音识别精度的问题始终是一个不能忽略的问题,在很大程度上,语音识别的精度影响着整个语音识别智能车控制系统的稳定程度。因此,提高SPCE061A的语音识别精度是至关重要的。

修改之前的语音指令如下。

#define DATE_A 10 //数组二维数值 #define DATE_B 20 //数组二维数值 uint8 code sRecog[DATE_A][DATE_B]={ “qianjin”,//前进指令 “houtui”,//后退指令

“zuo”,//左拐指令 “you”,//右拐指令 “tingzhi”,//停止指令 }

修改之后的语音指令如下。

#define DATE_A 25//数组二维数值 #define DATE_B 20 //数组二维数值 uint8 code sRecog[DATE_A][DATE_B]={ “qianjin”,//前进指令 “houtui”,//后退指令

“zuoguai”,//左拐指令 “youguai”,//右拐指令 “tingzhi”,//停止指令

/*下面的关键词为屏蔽的干扰关键词*/

“qian”, “hou”, “zuo”, “you”, “ting”, “zhuan”,

第 28 页 共 51 页

陕西理工学院毕业设计

“che”, “dao”, }

通过不断的硬件实验,可以很明显的看出修改之后语音指令关键词的识别精度要比修改之前的识别精度高得多。在之后的调试中会不断地进行补充干扰关键词,避免人们在说话的时候,无意间触发语音指令,使得智能车做出错误的行动。

在进行硬件调试的时候,为了能够很明显的观察到硬件调试的结果,所以在软件中设置了一个发光二极管的测试灯,当软件中执行了相关的语句时,发光二极管在软件中会执行取反操作,在软件中也就是对应了二极管的亮灭,这样可以很明显的来检测某一程序语句是否执行等调试步骤。当LD3320检测到语音指令时,发光二极管会相应的执行取反操作。

发光二极管测试程序如下。 void User_handle(uint8 dat) {

switch(dat){

Case CODE_QJ;//识别到“前进”指令 LED=~LED;//发光二极管亮/灭一次

REN=0; ES=0;

UARTSendByte(2); REN=1; ES=1; break; } }

在软件、硬件都准备好之后,并且完成了程序的编写、编译后,就可以进行在线的调试了。先点[Use ICE]工具按钮,使IDE处在线仿真状态下,再选择菜单项[Build]→[Start Debug]→[Download]开始下载程序到61板中。或者直接点工具按钮[Download]也可以。下载进程对话框如图5.13所示。

图5.13 下载进程对话框

5.4智能车调试

智能车车模部分可以分为:微控制器部分、电机驱动部分、OLED显示部分、按键输入部分、蜂鸣器LED部分、无线串口部分。由于智能车部分的模块较多,所以不可以同时调试,必须单独测试各个模块软件部分,只有所有单独的模块调试没有问题之后再将统一的软件程序烧写到控制器进行总体调试。

语音模块的调试首先是在了解熟悉语音识别模块的基础上,在语音模块的底层驱动的基础之上,自行设计自己的语音识别代码,编写语音识别的流程框图,根据流程图编写软件程序,最终在软件调试没有错误时,再将程序下载到语音模块中去,进行硬件调试。具体的调试步骤如下:了解语音识别芯片的识别步骤,软件编写流程;进行语音识别的软件编写,语音识别用初始化、写入识别列表、开始识别、中断信号处理;软件编译没有错误时进行硬件调试。

语音辨别小车的主程序分为四大部分:初始化、训练、识别、重训操作。

第 29 页 共 51 页

陕西理工学院毕业设计

(1)初始化:把IOB8~IOB11端口 作为输出端来控制驱动电机。必要时也得有相应的输入端设置和脉冲宽度调制端口设置。

(2)训练:训练部分其实就是建立语音信息模型,以便小车对语音信息进行辨识。 (3)识别:在此过程当中,若识别内容是小车的名字,那么小车会停止并处于待命状态,然后等待接收动作命令。若辨识结果是动作信息指令,小车就会播放语音告知接下来要执行的动作并执行该动作。

(4)重训操作:如果要进行重新训练,按KEY3键进行初始化,然后按照训练部分的步骤进行重新训练。

成功下载程序后,去掉下载线并复位系统(如用EZ-Probe还应将Probe选择跳线S5拔去),小车会提示对它进行训练。训练采用应答式训练,每条指令的训练为两次,每一条命令的训练都是一样的。测试方法:将小车放到空旷平地,打开小车电源观看小车运行状况及路线,连接好的实物图如图5.14所示。

图5.14连接好的实物图

测试方法:将小车放到空旷平地,打开小车电源,对小车发出相应的语音指令,观察小车的运动状态及反馈的语音信息。

(1)小车启动前静止位置如图5.15所示。

图5.15 静止状态的小车

(2)当发出前进语音指令时,小车开始前进,前进状态如图5.16所示。

第 30 页 共 51 页

陕西理工学院毕业设计

图5.16 前进状态的小车

(3)当发出倒车语音指令时,小车开始倒车,倒车状态如图5.17所示。

图5.17 倒车状态的小车

(4)当发出左拐语音指令时,小车开始左拐,左拐状态如图5.18所示。

图5.18 左拐状态的小车

(5)当发出右拐语音指令时,小车开始右拐,右拐状态如图5.19所示。

第 31 页 共 51 页

陕西理工学院毕业设计

图5.19右拐状态的小车

5.5 重新训练

在实际的使用过程当中,可能会对训练的结果不满意,或者其他人也想对它进行训练、控制。这样就要求小车可以被重新训练。为此,我们把61板的KEY3键定义为重新训练按钮,系统运行之后就会不断的扫描61板的KEY3键。如果检测到KEY3键按下,那么程序首先会把训练标志位(0xe000)单元擦除,并会进入一个死循环等待复位的到来。复位到来之后,程序检测到训练标志单元内容为0xffff,认为小车没有经过训练,就会要求对它进行练。

第 32 页 共 51 页

陕西理工学院毕业设计

6总 结

当今社会,科技飞速的发展,语音识别产品在人机认交互应用中己经占到越来越大的比例,它正逐步成为信息技术中人机接口的关键技术。语音识别技术与语音合成技术的结合,使人们能够甩掉键盘,通过语音命令进行操作。语音技术的应用已经成为一个具有竞争性的新兴高技术产业。

设计按照基于凌阳SPCE061A单片机的语音控制小车方案的设计要求,完成了其硬件和软件的设计,并组装出了实物。本设计中,语音处理技术是系统设计的基础和关键所在,重点阐述了语音识别的算法、特征参数的提取方法等。硬件电路设计,以SPCE061A单片机为核心进行了语音输入、功放输出及小车控制电路的设计。软件设计主要是依据语音处理技术理论,使用凌阳公司提供的语音识别算法,采用汇编语言和C语言编写程序,利用SPCE061A单片机的语音压缩技术,调用SPCE061A单片机提供的语音播放API函数实现语音应答。本系统通过语音命令控制实现小车的前进、后退、左转、右转等功能。本系统是一个高度集成的语音识别片上系统。

毕业设计很好的完成了毕业设计任务书中的任务要求,通过对语音识别技术的学习,掌握了非特定人语音识别技术的原理以及编程方法,对嵌入式硬件设计、以及软件编程有了更加深刻的锻炼。本设计能够很好地实现语音指令的识别,并根据语音指令实现智能车的两轮差速转向、前进、后退、加速、减速等动作;当智能车接收到语音指令时,蜂鸣器以及发光二极管会发出声光提示;当智能车前方检测到有障碍物时,会自行执行相应的后退转向来避开障碍物;同时智能车上的显示屏能够实时显示车的运动状态以及识别到的语音指令,实现了良好的人机交互界面。

由于时间的原因,设计还存在一些不足,例如在吵闹的环境中时,语音识别会出现识别错误的情况;当遇到细小的障碍物时,由于光电开关的局限性,智能车不易识别等。因此还需要进行不断地改进,可以将光电开关换成超声波,进行障碍物的检测,可以提高检测的准确度。

第 33 页 共 51 页

本文来源:https://www.bwwdw.com/article/02c.html

Top