基于单片机技术的语音控制小车设计
基于单片机技术的语音控制小车设计(1)

基于单片机技术的语音控制小车设计【摘要】本文主要介绍了Keil C51简介、汇编语言的发展、智能小车的软件实现,以及小车的机械结构和使用说明以及工作原理。
基于单片机技术的语言控制小车的程序。
关键词:语音控制、汇编语言Abstract: This text primarily introduced the keil c51 the brief introductioned, edit collected materials language that small car of development, intelligence that software realizes, and small car of the machine construction explain with usage and work principle.According to procedure for small car of control of language of technique machine of single slice.It is detailed to introduced......Key words:Speech control, edit collected materials the language、uVision2、Keil C51目录1 绪论 (1)1.1问题的引入 (1)1.1.1声控产品前景及发展趋势 (1)1.1.2研究的目的及意义 (1)2 声控小车软件的设计方案 (3)2.1任务分析 (3)2.1.1设计要求 (3)2.1.2设计思路及软件流程图 (3)图2-1 (3)3 KEIL C51简介及汇编语言的发展 (4)3.1K EIL C51简介 (4)3.1.1 8051开发工具 (4)3.1.2 uVision2集成开发环境 (4)3.1.3 uVision2编辑器和调试器 (5)3.2汇编语言的发展 (6)3.2.1汇编语言的发展史 (6)3.2.2 汇编语言的优点 (6)3.2.3 汇编语言的应用 (6)4 小车使用说明 (8)4.1小车的工作原理 (8)4.1.1 车体的介绍及工作原理 (8)4.2语音的训练 (9)4.2.1 S1—S4功能键如下 (9)4.2.2 基本控制电路 (10)5 声控小车的软件实现 (11)5.1功能分析 (11)5.1.1主控电路 (11)5.2程序设计 (12)结束语 (18)谢辞 (19)文献 (20)1 绪论本文主要介绍“基于单片机技术的语音控制小车”。
基于单片机语音控制小车的设计

安装传感器,如红外传感器、超声波传感器等,以检 测障碍物和路径。
语音识别模块
选用适合的语音识别模块,以实现小车的语音控制功 能的电池,如锂电池或镍氢电池,以满足小车的供电需求。
充电器
设计或选用适合电池的充电器,以确保电池的正常充电和使用。
电源管理电路
设计或选用适合的电源管理电路,以实现稳定的电压输出和电流控 制。
基于单片机语音控制小车的设计
• 引言 • 单片机介绍 • 语音识别技术 • 小车硬件设计 • 小车软件设计 • 测试与验证 • 结论与展望
01
引言
设计背景
语音控制技术的发展
实际应用需求
随着人工智能和语音识别技术的快速 发展,语音控制已经成为智能家居、 智能机器人等领域的重要应用。
在某些特定场景下,如家庭、办公室 等,需要一种能够通过语音控制的小 车来实现便捷的移动和操作。
01
特征提取
通过对语音信号进行预处理和特 征提取,提取出语音中的关键信 息,如音调、音高、音长等。
模式匹配
02
03
训练模型
将提取出的语音特征与预先训练 好的模型进行匹配,找出最相似 的模型,从而识别出语音内容。
通过大量的语音数据训练出高效 的模型,以提高语音识别的准确 率。
小车的控制逻辑设计
输入接口
03
除了基本的移动功能,还可以通过扩展接口实现其他功能,如
携带物品、巡逻监控等。
02
单片机介绍
单片机的定义
• 单片机是一种集成电路芯片,它包含了计算机的基本组成 单元,如中央处理器、存储器、输入输出接口等。它具有 体积小、功耗低、可靠性高等优点,广泛应用于各种嵌入 式系统中。
单片机的种类和特点
基于单片机技术的语音控制小车设计--(

基于单片机技术的语音控制小车设计--(附:湘潭市技师学院毕业论文(设计)题目关于单片机控制语音小车的系统设计专业机电一体化班级:姓名指导教师2012 年 2 月27 日关于单片机控制语音小车的系统设计目录1、引言2、语音控制小车设计要求2.1 功能要求2.2 参数说明3. SPCE061A特性简介4、系统总体方案介绍5、系统硬件设计5.1 车体介绍5.2 小车的行走原理5.3 控制板原理图6、系统软件设计6.1 系统的主程序设计6.2主控制源程序:6.3 语音识别的原理简介7、总结8、结束语基于单片机技术的语音控制小车设计1、引言语音处理技术是一门新兴的技术,它不仅包括语音的录制和播放,还涉及语音的压缩编码和解码,语音的识别等各种处理技术。
以往做这方面的设计,一般有两个途径:一种方案是单片机扩展设计,另一种就是借助于专门的语音处理芯片。
普通的单片机往往不能实现这么复杂的过程和算法,即使勉强实现也要加很多的外围器件。
专门的语音处理芯片也比较多,如ISD 系列、PM50 系列等,但是专门的语音处理芯片功能比较单一,想在语音之外的其他方面应用基本是不可能的。
SPCE061A 是一款 16 位μ'nSP结构的微控制器。
该芯片带有硬件乘法器,能够实现乘法运算、内积运算等复杂的运算。
它不仅运算能力强,而且处理速度快,单周期最高可以达到 49MHz。
SPCE061A 内嵌 32K 字的 FLASH 程序存储器以及 2K 的SRAM。
同时该 SOC 芯片具有 ADC 和 DAC 功能,其 MIC_ADC 通道带有AGC自动增益环节,能够很轻松的将语音信号采集到芯片内部,两路 10 位的电流输出型DAC,只要外接一个功放就可以完成声音的播放。
以上介绍的这些硬件资源使得该SPCE061A 能够单芯片实现语音处理功能。
借助于 SPCE061A 的语音特色,“基于单片机技术的语音控制小车设计”实现了对小车前进、后退、左转、右转、停车等语音控制功能.2、语音控制小车设计要求2.1 功能要求:1.可以通过简单的 I/O 操作实现小车的前进、后退、左转、右转功能;2.配合 SPCE061A 的语音特色,利用系统的语音播放和语音识别资源,实现语音控制的功能;3.可以在行走过程中声控改变小车运动状态;4.在超出语音控制范围时能够自动停车。
基于单片机的语音控制小车系统设计与实现

基于单片机的语音控制小车系统设计与实现摘要
随着微控制器技术的发展,单片机在实现物联网的各种应用方面取得
了较大的进步。
本文基于单片机技术的发展,设计并实现了一种基于语音
控制小车的系统。
该系统帮助用户控制小车的行驶状态和运行方向,实现
用户所需要的控制功能。
系统设计使用ESP8266模块实现WIFI连接,
MPU6050模块实现空间姿态监测,并采用DC直流电机控制小车,并采用
语言识别技术识别用户语音,进而实现控制。
本文介绍了系统的功能要求,硬件组件和软件结构,以及整个系统的实现流程。
在硬件电路方面,本文
介绍了最终系统的电路原理图及其各个模块之间的电路连接。
在软件结构
方面,本文介绍了整个系统的软件架构,包括硬件驱动层的实现和应用层
的实现,以及语音识别模块的设计与实现。
最终,本文实现了一个基于单
片机的语音控制小车系统,这种系统可以满足用户的实际需求,可以有效
提高小车的可控性。
关键词:单片机;小车;语音控制;ESP8266;MPU6050
1 Introduction
随着物联网技术的发展,单片机在实现各种应用方面取得了长足的进步。
基于凌阳单片机的语音控制小车---毕业设计 - 副本

基于凌阳单片机的语音控制小车摘要声音控制功能是凌阳单片机的一个特色,通过这个功能更能够实现普通单片机无法实现的一些任务,本设计是通过凌阳单片机的语音处理功能实现语音控制小车的前进和方向,并让小车作出相应的回答,设计系统主要包括三大部分,其中两部分为硬件部分:凌阳单片机的小系统,包括I/O端口、DAC转换、ADC转换等等;另一部分是控制板部分,用于控制电机的旋转方向;第三部分为软件部分。
关键词:语音控制小车;声控;小车;SPCE061ABased on Ling Y ang monolithic integrated circuit's voice control carAbstractThe phonic control function is a Ling Y ang monolithic integrated circuit's characteristic, suffices some duties which through this function realizes the ordinary monolithic integrated circuit to be unable to realize, this design is realizes the voice control car's advance and the direction through the Ling Y ang monolithic integrated circuit's pronunciation processing function, and lets the car make the corresponding reply, the design system mainly includes three major parts, two parts for hardware part: The Ling Y ang monolithic integrated circuit's small system, including the I/O port, DAC transforms, ADC transformation and so on; Another part is the control panel part, uses in controlling electrical machinery's hand of rotation; The third part is the software part.Key word: V oice control car;V oice control;Car;SPC061A目录1 引言 (1)2方案论证 (2)2.1方案论证 (2)3语音控制小车设计要求 (3)3.1功能要求 (3)3.2备注 (3)3.2.1 参数说明 (3)3.2.2 注意事项 (3)3.3扩展功能 (3)4 凌阳芯片的介绍 (4)4.1SPCE061A芯片的特点及其功能 (4)4.2SPCE061A芯片内核结构 (5)5硬件系统设计 (6)5.1系统的总体方案 (6)5.1.1 16位微处理器芯片的外围结构 (6)5.261板的各部分硬件模块 (7)5.2.1 麦克录音输入及AGC电路 (7)5.2.2 数摸转换电路 (7)5.2.3 按键,LED和复位电路 (8)5.2.4 电源电路 (8)5.2.5 下载线接口电路和在线调制电路 (9)5.2.6 16位微处理器的连接电路 (9)5.3车体介绍 (10)5.4小车的行走原理 (10)5.5控制电路原理板 (11)5.6控制电路原理 (12)5.6.1 后轮电机驱动电路原理 (12)5.6.2 前轮电机驱动电路原理 (13)6 系统软件设计 (14)6.1系统主程序设计流程图 (14)6.2语音识别 (15)7硬件制作及系统调试 (17)7.1硬件制作 (17)7.2调试和下载程序 (17)7.3调试小车 (17)7.4初试小车 (17)7.5重新调试 (18)结束语 (19)致谢 (20)参考文献 (21)附录附录1 电路原理图(61板)附录2 电路原理图(控制板)附录3 元件清单附录4 PCB图附录5 小车图片附录6 主控制源程序基于凌阳单片机的语音控制小车1 引言语音控制技术是一门新兴技术,可以通过语音直接控制电子产品,摆脱了遥控器的束缚。
基于STC单片机的智能语音控制小车

基于 STC 单片机的智能语音控制小车一、实验目的1.随着科技的进步和社会的发展, 汽车技术的发展越来越智能化。
本次接口实验 设计就是基于简单智能化的基础上, 采用LD3320 语音单元和 STC 单片机和L298N 机电驱动, 开辟出基于语音无线控制与智能避障的小车, 实现非特定人声语音控 制小车, 以及小车超声波自动避障行驶的功能, 同时液晶显示出超声波前方障碍 物的距离。
2.掌握用 Altium Designer10 软件绘制原理图和 PCB 电路,以及电路板的制作 过程(包括转印、腐蚀,焊接,下载与调试),熟练 Keil uVision4 环境以及单 片机 C 代码的编写、 调试和 hex 文件的生成并下载到单片机芯片内, 掌握软硬联 调技巧与方法。
3.掌握 基于 LD3320 的语音单元的编程、语音处理及与单片机间的通信。
二、系统总体方案本次设计的小车采用 STC89C52 单片机作为主控芯片, 通过 LD3320 语音单元 接单片机控制小车行驶状态(包括前进、后退、左转、右转及停车);小车行驶 过程中遇到障碍物, 如果没有接收到语音信号而超声波检测模块检测周围障碍物 小于安全距离 40cm ,小车自动转向, 距离通过 LCD1602 液晶显示出来; 采用 L298 作为机电驱动芯片驱动小车行驶。
系统总体框图如图 2.1:图 2.1 系统总体框图LCD1602 液晶显示STC89C52 单片机7805 稳压电路18650 锂电池电源HC-SR04 超声波模块L298N 机电驱动直流减 速机电降压模块扬声器LD3320 语音单元三、硬件设计3.1 主控系统本次设计采用 STC89C52 单片机作为控制芯片, STC89C52RC 是 STC 公司生产的一种低功耗、高性能 CMOS8 位微控制器,具有 8K 字节系统可编程 Flash 存储器。
单片机系统电路图 2:图 3.1 单片机最小系统原理图复位电路:手动复位,按下复位按钮,复位脚得到 VCC 的高电平,单片机复位,按钮松开后,单片机开始工作。
基于单片机的声音循迹智能小车控制系统设计

图 4 电机 驱 动 电路
图 6 声 源接 收 电路
图 1声音导 引系统示意 图 1 设 汁思想 . 2 系统的主要设 汁思想是计算 两个 接收点的 时 间差值 A ,T的大小 来决策 对小 车启停 快 TA 慢的控制。 小车距离 O X线 的垂直距离 △ 与接 L 收时间差 A T成一定对应关 系 , A 用 T代替 △ 。 L 把小车启和停之间 的总距离 L 为 2 , 车 分 段 小 全速 运行阶段和小车慢速运行 阶段 , 车接 收 小 到控制信号经过分段 P 算法 控制 电机转速 , I 两 段分别对应两个 P 参数 。当小车距 O 1 X线垂 直 距离 △ I 大于设定值时选用第一段 P 参数控制 I 小车运行。 小车距 O X线垂直距 离小于设定 值时 , 选用第二 段 P 参数控 制小 车运行 。其 闭 I 环控 制结构框 图如 图 2 示 。 所
合 科技 创新 和 实用推 广。
关键 词 : 源检 测 ; 能车 ; 思卡 尔; 制算 法 声 智 飞 控
智能车是近年来发展起来 的一门新兴的综 合技术 , 在军事 、 研和工业领域 中有着 广阔的 科 应用前景[近年来 由于对智 能车研究水平 的不 1 1 , 断提高 , 不仅大大提高 了劳动效率 , 减轻 了人们 的劳动强度 , 而且也减少了能源和材料的消耗 。 1 计思想 和整体设 计 设 1 . 1系统要求 声音 导引系统有一个 可移动声源 s ,三个 声 音接收器 A B和 c 、 ,声音接收器能利用可移 动声源和接收器之间的不 同距离 ,产生一个 可 移动声源 离 0 线( Oy 的误差信 号 , x 或 '线) 并用 无线方式将 此误差信 号传输 至可移 动声 源 , 引 导其运动 。 可移动声源运动的起始点必须在 O x 线 右侧 , 声源到达 O X线后停止 运行 并等待 5一 s 1s 0。然后利用 接收器 A和 c使 可移 动声源运 , 动到w点, 声音导引系统如 图 l 所示 。
声控小车

学士学位毕业设计(论文)基于单片机的声控小车学生姓名:XXX指导老师:X X所在学院:信息技术学院专业:电气工程及其自动化中国·大庆2015 年 5 月摘要本文主要设计一种用语音进行控制的单片机小车。
声控小车以拥有可编程音频处理的凌阳SPCE061A单片机作为整个系统的控制核心,不需要添加额外的语音芯片就能实现语音控制功能;声控小车采用H桥电路控制小车电机转动,根据语音识别技术,采用C语言进行编程,实现小车的前进、停止左转和右转,以及语音播报功能。
关键词:SPCE061A 声控小车语音识别H桥电路ABSTRACTThis paper states the design of a voice control car based on single chip microcomputer. In hardware design of the car, we use SPCE061A as the control center in the system, which have programmable audio processing and can realize voice control function without additional voice chip. V oice control car use H- bridge circuit to control the car motor rotation, according to the speech recognition technology, using C language programming, realize the car forward, stop, turn left, turn right and voice broadcast.Keywords: SPCE061A V oice control car Speech recognition technology H- bridge circuit目录摘要 (I)ABSTRACT ........................................................................................ I I 前言 (IV)1绪论.............................................................................................. - 1 -1.1国内外研究发展和现状 ........................................................ - 1 - 1.2研究主要内容......................................................................... - 2 -1.3研究的目的和意义................................................................. - 3 -2 小车的设计方案......................................................................... - 4 -2.1设计方案的选择..................................................................... - 4 -2.2整体设计方案......................................................................... - 4 -3 系统的硬件设计......................................................................... - 7 -3.1 MCU核心控制模块设计 ...................................................... - 7 - 3.2语音识别模块的设计........................................................... - 10 - 3.3 电机及其驱动电路模块设计 ............................................. - 13 -3.4电源模块............................................................................... - 15 -4 系统的软件设计....................................................................... - 17 -4.1语音模块程序设计............................................................... - 18 - 4.2电机控制模块程序设计 ...................................................... - 19 - 4.3主程序设计........................................................................... - 20 - 结论............................................................................................... - 22 -参考文献....................................................................................... - 23 -致谢............................................................................................... - 25 -附录一声控小车硬件原理图 .................................................... - 26 -附录二声控小车程序................................................................. - 27 -前言随着人们生活水平的提高,电子产品的快速发展,普通电子产品的消费已经满足人们需求。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1、引言语音处理技术是一门新兴的技术,它不仅包括语音的录制和播放,还涉及语音的压缩编码和解码,语音的识别等各种处理技术。
以往做这方面的设计,一般有两个途径:一种方案是单片机扩展设计,另一种就是借助于专门的语音处理芯片。
普通的单片机往往不能实现这么复杂的过程和算法,即使勉强实现也要加很多的外围器件。
专门的语音处理芯片也比较多,如ISD 系列、PM50 系列等,但是专门的语音处理芯片功能比较单一,想在语音之外的其他方面应用基本是不可能的。
SPCE061A 是一款 16 位μ'nSP结构的微控制器。
该芯片带有硬件乘法器,能够实现乘法运算、内积运算等复杂的运算。
它不仅运算能力强,而且处理速度快,单周期最高可以达到 49MHz。
SPCE061A 内嵌 32K 字的 FLASH 程序存储器以及 2K 的SRAM。
同时该 SOC 芯片具有 ADC 和DAC 功能,其 MIC_ADC 通道带有AGC自动增益环节,能够很轻松的将语音信号采集到芯片内部,两路 10 位的电流输出型DAC,只要外接一个功放就可以完成声音的播放。
以上介绍的这些硬件资源使得该SPCE061A 能够单芯片实现语音处理功能。
借助于 SPCE061A 的语音特色,“基于单片机技术的语音控制小车设计”实现了对小车前进、后退、左转、右转、停车等语音控制功能.2、语音控制小车设计要求2.1 功能要求:1.可以通过简单的 I/O 操作实现小车的前进、后退、左转、右转功能;2.配合 SPCE061A 的语音特色,利用系统的语音播放和语音识别资源,实现语音控制的功能;3.可以在行走过程中声控改变小车运动状态;4.在超出语音控制范围时能够自动停车。
2.2 参数说明车体:双电机两轮驱动供电:电池(四节 AA:1.2V×4 或 1.5V×4)工作电压:DC 4V~6V工作电流:运动时约 200mA3.SPCE061A特性简介SPCE061A是一款性价比很高的十六位单片机,使用它可以非常方便灵活的实现语音的录放,该芯片拥有8路10位精度的 ADC,其中一路为音频转换通道,并且内置有自动增益电路。
这为实现语音录入提供了方便的硬件条件。
两路10位精度的DAC,只需要外接功放(SPY0030A)即可完成语音的播放。
该单片机具有一套易学易用的指令系统和集成开发环境,在此环境中,它支持标准 C 语言编程,也支持 C 语言与汇编语言的互相调用。
另外还提供了语音录放的库函数,只要了解库函数的使用,就可以很容易的完成语音的录放、识别等功能,这些都为软件开发提供了方便的条件。
SPCE061A特性:16位μ’nSP微处理器;工作电压:内核工作电压VDD为 3.0V~3.6V(CPU),I/O口工作电压VDDH为VDD~5.5V(I/O);CPU时钟:0.32MHz~49.152MHz;内置2K 字 SRAM;内置32K 闪存 ROM;可编程音频处理;晶体振荡器;系统处于备用状态下(时钟处于停止状态),耗电小于 2μA@3.6V;2 个 16 位可编程定时器/计数器(可自动预置初始计数值);2 个 10 位 DAC(数-模转换)输出通道;32 位通用可编程输入/输出端口;14 个中断源可来自定时器 A / B,时基,2 个外部时钟源输入,键唤醒;具备触键唤醒的功能;使用音频编码 SACM_S240 方式(2.4K 位/秒),能容纳 210 秒的语音数据;锁相环 PLL 振荡器提供系统时钟信号;32768Hz 实时时钟;7 通道 10 位电压模-数转换器(ADC)和单通道声音模-数转换器;声音模-数转换器输入通道内置麦克风放大器和自动增益控制(AGC)功能;具备串行设备接口;低电压复位(LVR)功和低电压监测(LVD)功能;内置在线仿真板(IC E,In-C ircuitEm ulator)接口。
4、系统总体方案介绍小车的运动控制采用语音控制和中断定时控制相结合,通过语音触发小车动作,小车动作之后,随时可以通过语音指令改变小车的运动状态。
在每一次动作触发的同时启动定时器,如果小车由于某些原因不能正常的接收语音指令,则只要定时时间一到,中断服务程序就会发出指令让小车停下来。
SPCE061A控制板程序下载电缆控制程序下载线喇叭电池盒被控对象小车SPCE061A芯片MIC输入口复位按钮控制按钮程序下载接口图1 控制系统所需硬件5、系统硬件设计系统的硬件方面,由于大部分的功能实现都是在61板上完成的,只有电机控制部分电路另外设计在一块独立的电路板上,我们称之为控制板。
下面详细的介绍小车的结构和运行原理以及控制电路板的结构和功能实现。
图2 系统硬件框图图3 系统硬件组装效果图5.1 车体介绍语音控制小车为四轮结构。
其中前面两个车轮由前轮电机控制,在连杆和支点作用下控制前轮左右摆动,来调节小车的前进方向。
在自然状态下,前轮在弹簧作用下保持中间位置。
后面两个车轮由后轮电机驱动,为整个小车提供动力。
所以又称前面的轮子为方向轮,后面的两个轮子为驱动轮。
5.2 小车的行走原理.直走:由小车的结构分析,在自然状态下,前轮在弹簧作用下保持中间状态,这是只要后轮电机正转小车就会前进。
倒车:倒车动作和前进动作刚好相反,前轮电机仍然保持中间状态,后轮电机反转,小车就会向后运动。
图4 小车前进、后退示意图左转:前轮电机逆时针旋转(规定为正转),后轮电机正转,这时小车就会在前后轮共同作用下朝左侧前进。
右转:前轮电机反转,后轮电机正转,这时小车就是会在前后轮共同作用下朝右侧前进。
图5 小车转向示意图5.3 控制板原理图控制板主要包括:接口电路、电源电路和两路电机的驱动电路,控制板原理图如下。
接口电路:接口电路负责将61板的I/O接口信号传送给控制电路板,I/O信号主要为控制电机需要的IOB8~IOB11这四路信号,同时为了方便后续的开发和完善,预留了IOB12~IOB15 以及IOA8~IOA15接口,可以在这些接口上添加一些传感器。
电源部分:整个小车有4个电源信号:电池电源,控制板工作电源,61板工作电源,61板的I/O输出电源。
系统供电由电池提供,控制板直接采用电池供电(VCC),然后经二极管D1后产生61板电源SPCE061A 在语音控制小车中的应用(VCC_61),通过61板的Vio跳线产生61板的端口电源(V1)。
图6 小车控制电路图6、系统软件设计6.1 系统的主程序设计系统的主程序流程如下图所示:图7 主程序流程图共分为四大部分:初始化部分、训练部分、识别部分、重训操作。
初始化部分:初始化操作将IOB8~IOB11 设置为输出端,用以控制电机。
必要时还要有对应的输入端设置和PWM 端口设置等。
训练部分:训练部分完成的工作就是建立语音模型。
程序一开始判断小车是否被训练过,如果没有训练过则要求对其进行训练,并且会在训练成功之后将训练的模型存储到Flash,在以后使用时不需要重新训练;如果已经训练过会把存储在Flash 中的模型调出来装载到辨识器中。
识别部分:在识别环节当中,如果辨识结果是名字,停止当前的动作并进入待命状态,然后等待动作命令。
如果辨识结果为动作指令小车会语音告知相应动作并执行该动作,在运动过程中可以通过呼叫小车SPCE061A在语音控制小车中的应用的名字使小车停下来。
重训操作:考虑到有重新训练的需求,设置了重新训练的按键(61 板的KEY3),循环扫描该按键,一旦检测到此键按下,则将擦除训练标志位(0xe000 单元),并等待复位。
复位后,程序重新执行,当检测到训练标志位为0xffff 时会要求重新对其进行训练。
6.2主控制源程序://======================================================// The information contained herein is the exclusive property of// Sunnnorth Technology Co. And shall not be distributed, reproduced,// or disclosed in whole in part without prior written permission.// (C) COPYRIGHT 2003 SUNNORTH TECHNOLOGY CO.// ALL RIGHTS RESERVED// The entire notice above must be reproduced on all authorized copies.//========================================================//========================================================// 工程名称:Car_Demo// 功能描述:实现小车的语音控制// 涉及的库:CMacro1016.lib// bsrv222SDL.lib// sacmv26e.lib// 组成文件:main.c// Flash.asm, hardware.asm,ISR.asm// hardware.h,s480.h, hardware.inc// 硬件连接: IOA0-----KEY1// IOA1-----KEY2// IOA2-----KEY3// IOB8-----前进// IOB9-----倒车// IOB10----左拐// IOB11----右拐// 维护记录: 2005-12-12 v1.0//========================================================#include "s480.h"#include "bsrsd.h"#define P_IOA_Data (volatile unsigned int *)0x7000#define P_IOA_Dir (volatile unsigned int *)0x7002#define P_IOA_Attrib (volatile unsigned int *)0x7003#define P_IOB_Data (volatile unsigned int *)0x7005#define P_IOB_Dir (volatile unsigned int *)0x7007#define P_IOB_Attrib (volatile unsigned int *)0x7008#define P_TimerA_Data (volatile unsigned int *)0x700A#define P_TimerA_Ctrl (volatile unsigned int *)0x700B#define P_TimerB_Data (volatile unsigned int *)0x700C#define P_TimerB_Ctrl (volatile unsigned int *)0x700D#define P_Watchdog_Clear (volatile unsigned int *)0x7012#define P_INT_Mask (volatile unsigned int *)0x702D#define P_INT_Clear (volatile unsigned int *)0x7011#define NAME_ID 0x100#define COMMAND_GO_ID 0x101#define COMMAND_BACK_ID 0x102#define COMMAND_LEFT_ID 0x103#define COMMAND_RIGHT_ID 0x104#define S_NAME 0 //给我取个名字吧#define S_ACT1 1 //前进#define S_ACT2 2 //倒车,请注意#define S_ACT3 3 //左拐#define S_ACT4 4 //右拐#define S_RDY 5 //Yeah#define S_AGAIN 6 //请再说一遍#define S_NOVOICE 7 //没有听到任何声音#define S_CMDDIFF 8 //说什么暗语呀#define S_NOISY 8 //说什么暗语呀#define S_START 9 //准备就绪,开始辨识#define S_GJG 10 //拐就拐#define S_DCZY 11 //倒车,请注意extern unsigned int BSR_SDModel[100]; //外部变量BSR_SDModel[100],辨识器自带extern void F_FlashWrite1Word(unsigned int addr,unsigned int Value);extern void F_FlashErase(unsigned int sector);unsigned int uiTimeset = 3; //运行时间定时,调整该参数控制运行时间unsigned int uiTimecont; //运行时间计时//=============================================================// 语法格式:void Delay();// 实现功能:延时// 参数:无// 返回值:无//=============================================================void Delay(){unsigned int i;for(i=0;i<0x3Fff;i++){*P_Watchdog_Clear=0x0001;}}//=============================================================// 语法格式:void PlaySnd(unsigned SndIndex,unsigned DAC_Channel);// 实现功能:语音播放函数// 参数:SndIndex-播放语音资源索引号// DAC_Channel-播放声道选择// 返回值:无//=============================================================void PlaySnd(unsigned SndIndex,unsigned DAC_Channel){BSR_StopRecognizer(); //停止识别器SACM_S480_Initial(1); //初始化为自动播放SACM_S480_Play(SndIndex, DAC_Channel, 3); //开始播放一段语音while((SACM_S480_Status()&0x0001)!= 0) //是否播放完毕?{SACM_S480_ServiceLoop(); //解码并填充队列*P_Watchdog_Clear=0x0001; //清看门狗}SACM_S480_Stop(); //停止播放BSR_InitRecognizer(BSR_MIC); //初始化识别器}//=============================================================// 语法格式:int TrainWord(int WordID,int SndID);// 实现功能:训练一条指令// 参数:WordID-指令编码// SndID-指令提示音索引号// 返回值:无//=============================================================int TrainWord(unsigned int WordID,unsigned int SndID){int Result;PlaySnd(SndID,3); //引导训练,播放指令对应动作while(1){Result = BSR_Train(WordID,BSR_TRAIN_TWICE); //训练两次,获得训练结果if(Result==0)break;switch(Result){case -1: //没有检测出声音PlaySnd(S_NOVOICE,3);return -1;case -2: //需要训练第二次PlaySnd(S_AGAIN,3);break;case -3: //环境太吵PlaySnd(S_NOISY,3);return -3;case -4: //数据库满return -4;case -5: //检测出声音不同PlaySnd(S_CMDDIFF,3);return -5;case -6: //序号错误return -6;default:break;}}return 0;}//============================================================= // 语法格式:void TrainSD();// 实现功能:训练函数// 参数:无// 返回值:无//============================================================= void TrainSD(){while(TrainWord(NAME_ID,S_NAME) != 0) ; //训练名称while(TrainWord(COMMAND_GO_ID,S_ACT1) != 0) ; //训练第1个动作while(TrainWord(COMMAND_BACK_ID,S_ACT2) != 0) ; //训练第2个动作while(TrainWord(COMMAND_LEFT_ID,S_ACT3) != 0) ; //训练第3个动作while(TrainWord(COMMAND_RIGHT_ID,S_ACT4) != 0) ; //训练第4个动作}//============================================================= // 语法格式:void StoreSD();// 实现功能:存储语音模型函数// 参数:无// 返回值:无//=============================================================void StoreSD(){ unsigned int ulAddr,i,commandID,g_Ret;F_FlashWrite1Word(0xef00,0xaaaa);F_FlashErase(0xe000);F_FlashErase(0xe100);F_FlashErase(0xe200);ulAddr=0xe000;//********for(commandID=0x100;commandID<0x105;commandID++){g_Ret=BSR_ExportSDWord(commandID);while(g_Ret!=0) //模型导出成功?g_Ret=BSR_ExportSDWord(commandID);for(i=0;i<100;i++) //保存语音模型SD1(0xe000---0xe063){F_FlashWrite1Word(ulAddr,BSR_SDModel[i]);ulAddr+=1;}}}//=============================================================// 语法格式:void StoreSD();// 实现功能:装载语音模型函数// 参数:无// 返回值:无//=============================================================void LoadSD(){ unsigned int *p,k,jk,Ret,g_Ret;p=(int *)0xe000;for(jk=0;jk<5;jk++){for(k=0;k<100;k++){Ret=*p;BSR_SDModel[k]=Ret; //装载语音模型p+=1;}g_Ret=BSR_ImportSDWord();while(g_Ret!=0) //模型装载成功?g_Ret=BSR_ImportSDWord();}}//============================================================= // 语法格式:void GoAhead();// 实现功能:前进子函数// 参数:无// 返回值:无//============================================================= void GoAhead() //前进{PlaySnd(S_ACT1,3); //提示*P_IOB_Data=0x0100; //前进*P_INT_Mask |= 0x0004; //以下为中断定时操作__asm("int fiq,irq");uiTimecont = 0;}//============================================================= // 语法格式:void BackUp();// 实现功能:后退子函数// 参数:无// 返回值:无//============================================================= void BackUp() //倒退{PlaySnd(S_DCZY,3); //提示*P_IOB_Data=0x0200; //倒退*P_INT_Mask |= 0x0004; //以下为中断定时操作__asm("int fiq,irq");uiTimecont = 0;}//============================================================= // 语法格式:void TurnLeft();// 实现功能:左转子函数// 参数:无// 返回值:无//============================================================= void TurnLeft() //左转{PlaySnd(S_GJG,3);*P_IOB_Data=0x0900; //右转Delay(); //延时*P_IOB_Data=0x0500; //左转*P_INT_Mask |= 0x0004; //以下为中断定时操作__asm("int fiq,irq");uiTimecont = 0;}//============================================================= // 语法格式:void TurnRight();// 实现功能:右转子函数// 参数:无// 返回值:无//============================================================= void TurnRight() //右转{PlaySnd(S_GJG,3); //语音提示*P_IOB_Data=0x0500; //左转Delay(); //延时*P_IOB_Data=0x0900; //右转*P_INT_Mask |= 0x0004; //以下为中断定时操作__asm("int fiq,irq");uiTimecont = 0;}//============================================================= // 语法格式:void Stop();// 实现功能:停车子函数// 参数:无// 返回值:无//============================================================= void Stop() //停车{*P_IOB_Data=0x0000; //停车PlaySnd(S_RDY,3); //语音提示}//============================================================= // 语法格式:void BSR(void);// 实现功能:辨识子函数// 参数:无// 返回值:无//============================================================= void BSR(void){int Result; //辨识结果寄存Result = BSR_GetResult(); //获得识别结果if(Result>0) //有语音触发?{*P_IOB_Data=0x0000; //临时停车switch(Result){case NAME_ID: //识别出名称命令Stop(); //停车待命break;case COMMAND_GO_ID: //识别出第一条命令GoAhead(); //执行动作一:直走break;case COMMAND_BACK_ID: //识别出第二条命令BackUp(); //执行动作二:倒车break;case COMMAND_LEFT_ID: //识别出第三条命令TurnLeft(); //执行动作三:左转break;case COMMAND_RIGHT_ID: //识别出第四条命令TurnRight(); //执行动作四:右转break;default:break;}}}//============================================================= // 语法格式:void IRQ5(void);// 实现功能:中断服务子函数// 参数:无// 返回值:无//============================================================= void IRQ5(void)__attribute__((ISR)); //运动定时控制void IRQ5(void){if(uiTimecont++ == uiTimeset){*P_IOB_Data = 0x0000;}*P_INT_Clear = 0x0004;}//============================================================= // 语法格式:int main(void);// 实现功能:主函数// 参数:无// 返回值:无//=============================================================int main(void){ unsigned int BS_Flag; //Train标志位*P_IOA_Dir=0xff00; //初始化IOA,IOA0~7下拉输入*P_IOA_Attrib=0xff00;*P_IOA_Data=0x0000;*P_IOB_Dir=0x0f00; //初始化IOB,IOB8~11同向输出*P_IOB_Attrib=0x0f00;*P_IOB_Data=0x0000;BSR_DeleteSDGroup(0); //初始化存储器RAMBS_Flag=*(unsigned int *)0xe000; //读存储单元0xe000if(BS_Flag==0xffff) //没有经过训练(0xe000内容为0xffff){TrainSD(); //训练StoreSD(); //存储训练结果(语音模型)}else //经过训练(0xe000内容为0x0055){LoadSD(); //语音模型载入识别器}PlaySnd(S_START,3); //开始识别提示BSR_InitRecognizer(BSR_MIC); //初始化识别器while(1){BSR();if((*P_IOA_Data)&0x0004) //是否重新训练{F_FlashErase(0xe000);while(1);}}}6.3 语音识别的原理简介语音识别主要分为“训练”和“识别”两个阶段。