为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

避障语音控制小车系统

2012-11-30 35页 doc 1MB 120阅读

用户头像

is_909587

暂无简介

举报
避障语音控制小车系统 绪论 当今社会,科学技术日新月异,时代前进的步伐越迈越宽,应用自动化设备,计算机处理,现代化通讯,数字化信息,现代化显示设备等高新技术而建立的现代化智能,监控等系统已经得到充分的发展与应用,智能机器人也就应运而生。同时,在建设以人为本的和谐社会的过程中,智能服务机器人能够完成多种危险作业,以保证人身安全。因此,重点研究低成本的自组织网络,个性化的智能机器人成为主要方向。 此外随着汽车工业的迅速发展,关于汽车的研究也就越来越受人关注。全国电子大赛和省内电子大赛几乎每次都有智能小车这方面的题目,全国各高校也都很重视该题目的研究...
避障语音控制小车系统
绪论 当今社会,科学技术日新月异,时代前进的步伐越迈越宽,应用自动化设备,计算机处理,现代化通讯,数字化信息,现代化显示设备等高新技术而建立的现代化智能,监控等系统已经得到充分的发展与应用,智能机器人也就应运而生。同时,在建设以人为本的和谐社会的过程中,智能服务机器人能够完成多种危险作业,以保证人身安全。因此,重点研究低成本的自组织网络,个性化的智能机器人成为主要方向。 此外随着汽车工业的迅速发展,关于汽车的研究也就越来越受人关注。全国电子大赛和省内电子大赛几乎每次都有智能小车这方面的题目,全国各高校也都很重视该题目的研究。可见其研究意义也很适应了当今智能机器人研究方向。本设计就是在这样的背景下提出的,指导教师已经有充分的准备。本题目是结合科研项目而确定的设计类课题。设计的智能电动小车应该能够实时显示时间、速度,具有语音识别、避障功能,可程控行驶速度。 根据题目的要求,确定如下:在现有玩具电动车的基础上,加装光电、红外线,实现对电动车的速度、位置、运行状况的实时测量,并将测量数据传送至单片机进行处理,然后由单片机根据所的各种数据实现对电动车的智能控制。 这种方案能实现对电动车的运动状态进行实时控制,控制灵活、可靠、精度高,可满足对系统的各项要求。本设计采用凌阳系列中的SPCE061A单片机为控制核心,利用红外线传感器检测道路上的障碍,控制电动小汽车的自动避障,快慢速行驶,以及自动停车,并可以自动记录时间和速度,语音识别功能。SPCE061A是一款16位单片机,它的易用性和多功能性受到了广大使用者的好评。它是第三代单片机的代表。 新一代的单片机的最主要的技术特点是向外部接口电路扩展,以实现Microcomputer完善的控制功能为己任,将一些外部接口功能单元如A/D﹑PWM﹑PCA(可编程计数器阵列)﹑WDT(监视定时器)﹑高速I/O口﹑计数器的捕获/比较逻辑等。这一代单片机中,在总线方面最重要的进展是为单片机配置了芯片间的串行总线,为单片机应用系统设计提供了更加灵活的方式。凌阳公司还为这一代单片机SPCE061A系列单片机引入了具有较强功能语音识别。新一代单片机为外部提供了相当完善的总线结构,为系统的扩展与配置打下了良好的基础。 本设计就采用了比较先进的SPCE061A为控制核心,SPCE061A采用CHOMS工艺,功耗很低。该设计具有实际意义,可以应用于考古、机器人、医疗器械等许多方面。尤其是在足球机器人研究方面具有很好的发展前景。所以本设计与实际相结合,现实意义很强。 硬件电路设计 硬件框图 避障语音控制小车系统构成框图如图2-1所示。主要由61板、电机驱动板、车体(含前后轮电机)和显示板等部分构成。 图2-1 控制系统构成框图 硬件连接如图2-2所示。 图2-2 硬件连接图 硬件原理图 硬件电路包括外部电机驱动电路如图2-3所示,外扩显示板如图2-4和2-5所示。 图2-3 电机驱动电路图 电机前后轮驱动模块驱动采用分立元件组成的H桥控电路,内部定时器产生的PWM波经IOB9输入H桥电路驱动电机前进,同时IOB8为低电平;反之,车辆倒车;IOB10输入H桥高电平,IOB11为低电平时车左转,反之,车辆右转。(注意H桥两臂不能同时出现高电平信号。) 为了便于单片机的引脚有效利用,所以对此电路PCB的设计还扩了多个引脚插槽,彼此都为并联,这样设计主要两方面的好处,其一是使单片机的引脚利用率,其二是便于各模块的连接,即插即用,便于固定,并且稳定性高。 在设计中还把电源引脚也集成到插槽内,这样外扩模块供电方式也解决了,这也为本硬件设计的一大特色。 图2-4 外扩显示板电路图 图2-5 显示测速板丝网图 此模块中用四段八段数码管作为显示器,并具有双重功能,在小车行驶时能显示倒计时,又能通过按键的切换来显示小车的当前速度,此外在四位数码管的两侧分别有四个LED灯用以显示小车的运行状态。在显示板的右侧为测速装置,它由一组红外对管以及两个三极管配合而成的比较器组成,当检测到白线后,就会产生高电平,进行中断触发。而在车轮上贴有白色胶带,所以要想检测车速,只要判断单位时间内产生的中断数即可。 硬件资源利用 微控制器电路 控制器采用凌阳科技公司的SPCE061A,其硬件资源分配见表2-3所示。 表2-3 硬件资源分配表 资源名称 具体分类 作用 初始化 IO口分配 IOA0~IOA2 IOA0~IOA2,采用61板集成按键 根据需要采用复用模式 IOA0: 时间调整设置键 IOA1: 时间加、速度时间显示切换键 IOA2: 时间减、重训练键 带下拉的输入端 IOB7 用于控制避障电路的工作与否(TX) 低电平输出 IOA8~IOA15 数码管数据端a~h 低电平输出 IOB0、IOB1 IOB4~IOB6 四位数码管与8个LED的位选段,用于动态扫描 低电平输出 IOB2 外部中断EXT1, 用于避障电路(RX) 带上拉的输入端 IOB3 外部中断EXT2, 用于测速电路(RX) 带上拉的输入端 IOB8~IOB11 IOB8~IOB11电机控制端8,9为后轮 低电平输出 ADC 选择MIC-IN模式 用于声音的输入 DAC 用作声音输出功能 单声道 FLASH存储器 用于存储语音特征要素 中断源的使用 FIQ-TMA 用于语音播放、识别 FIQ-TMB PWM调速输出 IRQ3_EXT1 用于避障子程序 IRQ3_EXT2 用于测速子程序 IRQ4_1KHz 用于时间与速度的显示扫描 IRQ5_2HZ 用于产生倒计时时间发生信号 IRQ5_4HZ 用于小车前后左右行驶时间的设定 IRQ5_8HZ 用于产生测速门控信号,1秒钟测速 电源板电路模块 4节AA的电池给61板提供6V的输入电压,经61板上电源稳压块SPY0029的作用下产生3.3V的电压供给SPCE061A。外部显示模块由61板提供电源,电机驱动由电池直接供电。 图2-4所示电源电路图中的VDDH3为SPCE061A的I/O电平参考,接SPCE061A的51脚,这种接法使得I/O输入输出高电平为3.3V,VDDP为PLL锁相环电源,接SPCE061A的7脚,VDD和VDDA为数字电源,分别接SPCE061A的15脚和36脚,AVSS1是模拟地,接SPCE061A的24脚;VSS是数字地,接SPCE061A的38脚;AVSS2接音频输出电路的AVSS2。 图2-4 电源电路图 键盘输入电路 键盘输入电路如图2-5键盘输入电路所示,当有键按下时,对应的I/O口被拉到高电平,CPU响应按键信号,进行相应的信号处理。 图2-5 键盘输入电路 麦克风输入电路 麦克采来的语音信号经AGC(自动增益控制放大)后进入MIC-IN通道进行A/D转换。音频录入部分:主要由Microphone、AGC电路、ADC电路构成。 图2-6是音频录入电路。因为SPCE061A内置了AGC电路和ADC电路,所以实现音频录入的外围电路变得如此简单。这部分电路与SPCE061A的连接是这样的:AGC 接音频录入AGC引脚(25脚),OPI接Microphone的第二运放输入脚(26脚),MICOUT接Microphone的第一运放输出脚(27脚),MICN接Microphone的负向输入脚(28脚),MICP接Microphone正向输入脚(33脚),VCM接ADC参考电压输出脚(34脚),VMIC接Microphone电源(37脚)。 语音信号经Microphone转换成电信号,由隔直电容隔掉直流成分,然后输入至SPCE061A内部前置放大器。SPCE061A内部自动增益控制电路AGC能随时跟踪、监视前置放大器输出的音频信号电平,当输入信号增大时,AGC电路自动减小放大器的增益;当输入信号减小时,AGC电路自动增大放大器的增益,以便使进入A/D的信号保持在最佳电平,又可使削波减至最小。 图2-6 麦克输入电路 CPU语音输出电路 SPCE061A内置2路10位精度的DAC,只需要外接功放电路即可完成语音的播放。 图2-7是音频输出电路图。可以接耳机,也可以直接听喇叭输出的声音。 图2-7 CPU语音输出电路 指示电路 指示灯实际排列如图2-8所示; 当车准备就绪的时候,车显示板的1号,5号,3号,7号四个灯亮起。 当遇到障碍物和显示速度的时候,车的八个灯全部点亮。 当车进入设置模式后,加数时1号,5号灯亮,减数的时2号,6号灯亮; 图2-8 指示灯排列图 避障电路 如图2-9所示,避障光电接收管采集的电流信号经三极管放大,在集电极将电流信号变成电压信号。当检测到障碍物后TX就会发生电平变化,产生外部中断。 图2-9 指示灯硬件电路原理图 本章小结 此章主要为小车的硬件结构,在设计中本着稳定性强,结构紧凑,便于扩展的原则,进行的电路原理图的设计以及PCB图的排版。在安全性上也进行了改进,比如在电机控制部分中为了防止短路,在设计中进行了优化。 凌阳音频函数在系统中的应用 本系统中凌阳音频的使用 语音处理大致可以分为A/D转换、编码处理、语音存储、语音解码处理以及D/A转换几大模块; SPCE061A针对以上的各大要素进行的解决方案为: 将A/D、编码算法、解码算法、存储及D/A作成相应的模块,对于每个模块都有其应用程序接口API,用户只需了解每个模块所要实现的功能及其参数的内容,然后调用该API函数即可实现语音处理功能。 语音资源格式的选取 表3-1所列出的是凌阳音频的几种算法: 表3-1 SACM-lib库中模块及其算法类型 模块名称 语音压缩编码率类型 资料采样率 SCAM_A2000 16Kbit/s,20Kbit/s,24Kbit/s 16KHz SCAM_S480/S720 4.8Kbit/s,7.2Kbit/s 16KHz SCAM_S240 2.4Kbit/s 24KHz SCAM_MS01 音乐合成(16Kbit/s,20 Kbit/s,24 Kbit/s) 16KHz SCAM_DVR(A2000) 16Kbit/s的资料率,8K的采样率,用于ADC通道录音功能 16KHz 麦克风输入所生成的WAVE文件,其占用的存储空间很大,对于单片机来说想要存储大量的信息显然是不可能的,而凌阳的SPCE061A提出了解决的,即SACM-LIB,该库将A/D、编码、解码、存储及D/A作成相应的模块,对于每个模块都有其应用程序接口API,只需了解每个模块所要实现的功能及其参数的内容,然后调用该API函数即可实现该功能,例如在程序中插入语音提示,或连续播放一段语音或音乐,也可以根据自己需要的空间或使用范围选择适合自己的算法如表3-2所示 表3-2 单片机对语音处理过程 SACM-S480压缩算法压缩比较大,为80:3,存储容量大,音质介于A2000和S240之间,适用于语音播放。本系统采用S480格式语音资源。 S480语音资源的制作 系统所用语音素材采用录音软件录制成WAV语音文件,其文件格式要求为单声道、16位、8K采样率。然后通过凌阳提供的语音压缩工具转换为S480格式文件。 凌阳语音辨识 对于语音辨识主要有以下两种: (1) 特定发音人识别SD(Speaker Dependent):是指语音样板由单个人训练,也只能识别训练人的语音命令,而他人的命令识别率较低或几乎不能识别。在本产品中采用特定人的语音识别。 (2) 非特定发音人识别SI(Speaker Independent):是指语音样板由不同年龄、不同性别、不同口音的人进行训练,可以识别一群人的命令。 本系统采用特定发音人识别。语音辨识库已被集成在凌阳的单片机开发环境unSP IDE 2.0.0软件安装包内,安装该软件后,可在其子目录下查找到。 语音识别基本流程: (1) 语音信号数字化。 (2) 特征提取:抽取反应语音本质的特征参数,形成特征矢量序列。 (3) 语音模型库:从一个或多个讲话者多次重复讲话中提取的语音参数模板。 (4) 模式匹配:把输入语音的特征参数与语音模型库进行比较分析,得到识别结果。 S480语音的应用程序接口API的功能介绍及应用 以下就SACM-S480算法具体介绍其API函数的格式、功能、参数、返回值、备注。 其相关API函数如下所示: int SACM_S480_Initial(int Init_Index) void SACM_S480_ServiceLoop(void) void SACM_S480_Play(int Speech_Index, int Channel, int Ramp_Set) void SACM_S480_Stop(void) void SACM_S480_Pause(void) void SACM_S480_Resume(void) void SACM_S480_Volume(Volume_Index) unsigned int SACM_S480_Status(void) Call F_FIQ_Service_SACM_S480 各函数具体内容如下: (1)【API格式】C:int SACM_S480_Initial(int Init_Index) ASM:R1=[Init_Index] Call F_SACM_S480_Initial 【功能说明】SACM_S480语音播放之前的初始化。 【参数】Init_Index=0 表示手动方式;Init_Index=1 则表示自动方式。 【返回值】0:代表语音模块初始化失败 1:代表初始化成功。 【备注】该函数用于对定时器、中断和DAC等的初始化。 (2)【API格式】C:void SACM_S480_ServiceLoop(void) ASM:Call F_SACM_S480_ServiceLoop 【功能说明】从资源中获取SACM_S480语音资料,并将其填入解码队列中。 【参数】无。 【返回值】无。 【备注】播放语音文件中数据,当出现FF FF FFH数据时便停止播放。 (3)【API格式】C:int SACM_S480_Play(int Speech_Index, int Channel, int Ramp_Set); ASM:R1=[Speech_Index] R2=[Channel] R3=[Ramp_Set] Call SACM_S480_Play 【功能说明】播放资源中SACM_S480语音。 【参数】Speech_Index 表示语音索引号。 Channel:1.通过DAC1通道播放; 2.通过DAC2通道播放; 3.通过DAC1和DAC2双通道播放。 Ramp_Set:0.禁止音量增/减调节; 1.仅允许音量增调节; 2.仅允许音量减调节; 3.允许音量增/减调节。 【返回值】无。 【备注】 ①SACM_S480的数据率有4.8Kbps\7.2Kbps三种,可在同一模块的几种算法中自动选择一种。 ②Speech_Index是定义在resource.inc文件中资源表(T_SACM_S480_Speech Table)的偏移地址。 ③中断服务子程序中F_FIQ_Service_SACM_S480必须放在TMA_FIQ中断向量上(参见SPCE的中断系统)。 ④函数允许TimerA以所选的的数据采样率(计数溢出)中断。 (4)【API格式】C:void SACM_S480_Stop(void); ASM:Call F_ SACM_S480_Stop 【功能说明】停止播放SACM_S480语音。 【参数】无。 【返回值】无。 (5)【API格式】C:void SACM_S480_Pause (void); ASM:Call F_ SACM_S480_Pause 【功能说明】暂停播放SACM_S480语音。 【参数】无。 【返回值】无。 (6)【API格式】C:void SACM_S480_Resume(void); ASM:Call F_ SACM_S480_Resume 【功能说明】恢复暂停播放的SACM_S480语音。 【参数】无。 【返回值】无。 (7)【API格式】C:void SACM_S480_Volume(Volume_Index); ASM:R1=[ Volume_Index] Call F_Model-Index_Volume 【功能说明】在播放SACM_S480语音时改变主音量。 【参数】Volume_Index为音量数,音量从最小到最大可在0~15之间选择。 【返回值】无。 (8)【API格式】C:unsigned int SACM_S480_Status(void); ASM:Call F_SACM_S480_Status 【返回值】=R1。 【功能说明】获取SACM_S480语音播放的状态。 【参数】无。 【返回值】当R1的值bit0=0,表示语音播放结束;bit0=1,表示语音在播放中。 (9)【API格式】ASM:Call F_FIQ_Service_SACM_S480 【功能说明】用作SACM_S480语音背景程序的中断服务子程序。通过前台子程序(自动方式的SACM_S480_ServiceLoop及手动方式的SACM_S480_Dec ode)对语音资料进行解码,然后将其送入DAC通道播放。 【参数】无 【返回值】无。 【备注】SACM_S480语音背景子程序只有汇编指令形式,且应将此子程序安置在TMA_FIQ中断源上。 语音辨识应用程序接口API的功能介绍及应用 在本系统中,借助语音辨识函数库开发训练语音和语音识别功能,以达到语音控制小车的目的。 图3-3是语音辨识的一个整体框图: 图3-3 语音辨识原理框图 常用的API函数介绍: 【API格式】C:int BSR_DeleteSDGroup(0); ASM:F_BSR_DeleteSDGroup(0) 【功能说明】SRAM初始化。 【参数】该参数是辨识的一个标识符,0代表选择SRAM,并初始化。 【返回值】当SRAM擦除成功返回0,否则,返回-1。 训练部分: 【API格式】C:int BSR_Train (int CommandID, int TraindMode); ASM:F_BSR_Train 【功能说明】训练函数。 【参数】 CommandID:命令序号,范围从0x100到0x105,并且对于每组训练语 都是唯一的。 TraindMode:训练次数,要求使用者在应用之前训练一或两遍: BSR_TRAIN_ONCE:要求训练一次。 BSR_TRAIN_TWICE要求训练两次。 【返回值】训练成功,返回0;没有声音返回-1;训练需要更多的语音数 据来训练,返回-2;当环境太吵时,返回-3;当数据库满,返回-4;当两次输入命令不通,返回-5;当序号超出范围,返回-6。 【备注】 在调用训练程序之前,确保识别器正确的初始化。 训练次数是2时,则两次一定会有差异,所以一定要保证两次训练结果接近 为了增强可靠性,最好训练两次,否则辨识的命令就会倾向于噪音 调用函数后,等待2秒开始训练,每条命令只有1.3秒,也就是说,当训练命令超出1.3秒时,只有前1.3秒命令有效。 辨识部分: (1)【API格式】C:void BSR_InitRecognizer(int AudioSource) ASM:F_BSR_InitRecognizer 【功能说明】辨识器初始化。 【参数】定义语音输入来源。通过MIC语音输入还是LINE_IN电压模拟量输入。 【返回值】无。 (2)【API格式】C:int BSR_GetResult(); ASM:F_ BSR_GetResult 【返回值】=R1 【功能说明】辨识中获取数据。 【参数】无。 【返回值】 当无命令识别出来时,返回0; 识别器停止未初始化或识别未激活返回-1; 当识别不合格时返回-2; 当识别出来时返回命令的序号。 【备注】该函数用于启动辨识,BSR_GetResult(); (3)【API格式】C:void BSR_StopRecognizer(void); ASM:F_BSR_StopRecognizer 【功能说明】停止辨识。 【参数】无。 【返回值】无。 【备注】该函数是用于停止识别,当调用此函数,FIQ_TMA中断将关闭。 中断部分: (4)【API格式】ASM:_BSR_InitRecognizer 【功能说明】在中断中调用,并通过中断将语音信号送DAC通道播放。 【参数】无。 【返回值】无。 【备注】 ① 该函数在中断FIQ_TMA中调用 ② 当主程序调用BSR_InitRecognizer时,辨识器便打开8K采样率的FIQ_TMA中断并开始将采样的语音数据填入辨识器的数据队列中。 ③ 应用程序需要设置一下程序段在FIQ_TMA中. 本章小结 本章介绍了凌阳SPCE061A的核心—语音,在此主要以S480为例分别从这种格式的存储、播放、识别中所用到的API函数做了详细的介绍。这些函数都为凌阳公司所提供的底层函数,所以应用时要注意函数的返回值以及函数的形参,这样也会节省大量的时间进行上层开发。 凌阳公司提供的这些API函数分别从C语言和汇编语言两种形式提供给用户,便于各方面用户的调用。 软件设计 系统软件设计说明 在进行微机控制系统设计时,除了系统硬件设计外,大量的工作就是如何根据每个生产对象的实际需要设计应用程序。因此,软件设计在微机控制系统设计中占重要地位。对于本系统,软件更为重要。 在单片机控制系统中,大体上可分为数据处理、过程控制两个基本类型。数据处理包括:数据的采集、数字滤波、标度变换等。过程控制程序主要是使单片机按一定的方法进行计算,然后再输出,以便控制生产。 为了完成上述任务,在进行软件设计时,通常把整个过程分成若干个部分,每一部分叫做一个模块。所谓“模块”,实质上就是所完成一定功能,相对独立的程序段,这种程序设计方法叫模块程序设计法。 模块程序设计法的主要优点是: 1.单个模块比起一个完整的程序易编写及调试; 2.模块可以共存,一个模块可以被多个任务在不同条件下调用; 3.模块程序允许设计者分割任务和利用已有程序,为设计者提供方便。 本系统软件采用模块化结构,由主程序﹑定时子程序、避障子程序﹑中断子程序显示子程序﹑调速子程序﹑算法子程序构成。 模块分析 整个软件系统分主程序模块、系统初始化模块、语音功能模块、显示功能模块、避障功能模块、运行时间控制模块、键盘功能模块。 主程序 主程序流程图 主程序是整个工程的核心。本项目的软件设计大量采用子函数结构,主程序通过调用各种子函数来实现系统功能。在主程序里包含了函数的初始化,其中包含了IO口的初始化,中断函数初始化,定时器初始化。还包含了训练函数,进行语音存储,识别函数的打开,蔽障和键盘的查询,以及速度的检测。 在主程序的开始的进行初始化之后,就会进入一个死循环中。用查询的方式判断键值的输入,以及判断中断标志位的变化,进而进行相应的处理。 主程序的流程图如图4-1所示。 图4-1 主程序流程图 初始化系统子函数 该函数承担着开机后初始化系统的任务,包含初始化I/O端口工作模式、初始化变量与参数、初始化定时器TimerB及开放它的FIQ中断。 其中具体包含,初始化操作将IOB8~IOB11设置为输出端,用以控制电机。必要时还要有对应的输入端设置和PWM端口设置等,同时还初始化IOA的高八口为显示信号输出端口。初始IOA0,IOA1,IOA2为按键输入端口,IOB2为避障信号输入端口,IOB0,IOB4~IOB7初始为输出端口用以控制数码管和LED的位选。 图4-2 初始化系统子函数流程图 语音功能的实现 凌阳科技针对SPCE061A开发了自己的语音函数库,该函数库能够实现语音训练、辨识、录制、播放等特色功能。 通过语音训练建立若干语音指令的语音特征参数数组,SPCE061A在识别模式下通过对比采集到的特征参数与训练建立的特征参数进行对比,根据对与不同训练指令的匹配程度输出返回参数,小车驱动电机子程序对该返回参数进行判断,决定前进、后退、左转、右转,还是原地不动。 系统中,语音功能涉及到语音播放和语音识别,其实现的软件流程如下分析。 语音播放功能 此模块的实现通过用户编写的播放子函数及中断服务程序完成。 在本设计中采用的是S480格式语音资源,它是介于A2000和S240语音格式之间一种资源,据有所占硬件存储资源少,音质清晰的特点。鉴于单片机内部资源有限的特点,故选此格式。 (1)自动播放S480格式语音资源子函数 传入参数为语音资源的序号,软件流程如图4-3。 图4-3 S480语音播放流程 (2)FIQ中断服务程序 系统功能中,实现S480语音播放、语音训练、语音识别这些功能需要使用中断服务程序。根据凌阳公司语音库函数的要求,为提高语音播放质量及保证识别效率,语音相关的后台中断服务函数必须安排在TimerA的FIQ中断服务中。 FIQ为凌阳61单片机的一个中断类型,在61单片机中包含了三种中断类型,分别为IRQ中断、FIQ中断、软件中断以及异常中断,快速FIQ可以打断普通中断IRQ,形成中断嵌套。 为保证数码管和LED显示效果,将动态扫描数码管和LED的程序安排在TimerB的FIQ中断服务中。 该中断服务程序采用汇编语言编写,旨在提高代码执行效率。 FIQ中断服务程序流程图如图4-4所示。 图4-4 FIQ中断服务程序 语音训练与识别 语音识别主要分为“训练”和“识别”两个阶段。在训练阶段,单片机对采集到的语音样本进行分析处理,从中提取出语音特征信息,建立一个特征模型;在识别阶段,单片机对采集到的语音样本也进行类似的分析处理,提取出语音的特征信息,然后将这个特征信息模型与已有的特征模型进行对比,如果二者达到了一定的匹配度,则输入的语音被识别。 1.训练单条语音指令子函数 训练单条语音为语音储存的基础,在本设计中主要储存了和小车动作相应的语音,以及和在训练时相应的语音。在训练时能储存的语音要素一共为五句,分别为为小车所起的名字,和控制小车的前后左右运动的四句话。在储存每一条语音时需要训练相同的两遍,如果两次输入不同则会有相应的语音提示,再从新输入。 训练单条语音指令子函数的软件流程图如图4-5所示。 图4-5 单条语音训练程序流程 2.训练多条语音指令的子函数 训练多条语音指令的子函数程序流程如图4-6所示。 图4-6 多条语音训练指令 3.语音识别结果处理子函数 语音识别结果处理子函数根据获得的语音识别结果参数来执行不同的程序分支。小车的前进、后退、左转、右转动作的子函数只有在外界获得相匹配的语音要素后各子函数才被调用。调用之后,只能运行2秒钟,因为当打开运行函数的同时,也把4赫兹的时机中断打开,定时2秒钟。本系统只有在前进的时候用到了PWM输出控制。 具体软件流程图如图4-7所示。 图4-7 语音识别流程 在该流程图中,考虑到小车从静止到运动需要较大的电机功率输出,故在程序上提出了一个软件处理技巧,即在响应“前进”语音指令后,不立即使用PWM驱动方式降低电机输出功率,而是首先全功率驱动电机,在延时一段时间(预计小车状态已转换到运动状态)后,关闭全功率驱动,代替以有固定占空比的PWM波驱动。这样可以有效降低小车稳定运行时的行驶速度。 每执行一次小车动作,都会启动IRQ5的2Hz中断来倒计时,中断计时到预先设定值后将在中断服务程序中停止小车并终止计时。 显示功能的实现 更新显示缓存子函数 数码管的扫描段码与整数的位具有一一对应的关系。更新显示缓存子函数中,程序提取传入参数(整数)的个、十、百、千位并转换为数码管段码(全局变量,作为显示缓存的一部分)。该功能实现的软件流程图如图4-8所示。 图4-8 数码管显示流程 动态扫描子函数 数码管显示采用的方式为动态扫描。之前常用到方法为延时法,延时法的实质是做无用计算,通过浪费时间来实现时间消耗,此方法会占用大量的CPU资源,降低CPU使用率。采用中断法实现显示扫描,将扫描放在时基中断中,每隔一定时间启动一次扫描,其它时间CPU可运行其它程序,此时CPU的使用率较高,这种扫描方式摒除了传统动态扫描中用冗余指令获得延时的方法,而是充分利用两次中断响应之间的停留时间作为视觉暂留时间。该方法能有效提高CPU运行效率。 此外动态扫描法还要注意以下几个方面: 在切换位选前,需要清除段码输出,否则易造成显示有残影。 扫描频率可以通过调节定时器初值完成。 注意操作端口时不要影响没有用到的I/O端口的状态。 动态扫描数码管和LED的流程图如图4-9所示。 图4-9 扫描数码管和LED的流程图 避障功能的实现 在本设计中采用了中断方式来进行蔽障,节约了MCU的利用率,提高了它的处理速度。 IRQ3中断服务程序 外部输入信号EX1的IRQ3中断服务程序是为避障传感器遇障信号的响应设置的。因语音播放遇障信息需要调用播放子函数,其程序执行时间相对较长,若直接设置在此中断服务程序中,易造成中断服务时间过长,影响系统其他中断的正常工作(特别是辨识功能将受很大影响)。故采取标志传递的方法,在中断中改变“障碍物检测标志”,主程序中的主循环程序通过查询“障碍物检测标志”来决定是否语音播放遇障信息。其流程图如图4-10所示。 图4-10 IRQ3中断服务程序 键盘功能的实现 按键所要完成的功能是通过SPCE061A单元板上的按键动作,来完成相应的预设的功能。而要实现按键的作用,在软件上其基础就要包含获取键值和键值处理这两个底层函数。 获取键值子函数 当按键按下时,相应I/O端口被拉到高点平状态,单片机通过查询I/O引脚的电平状态来形成键值,键值反映了键盘按键的当前操作状态。 调用获取键值子函数将返回当前键盘键值。在主程序中对键值的选取是通过查询的方式进行的,所以只有按键有返回值后才能实现按键的作用,在再取键值的子函数中应注意两点,一是先读取I/O口键值保存在寄存器中,判断读回值是否为零,为零则表示没有键按下,返回零。非零则延时大约30ms后再次读取I/O口键值,比较两次读取的键值是否相同,如果相同则返回键值,否则返回零。二是即使前两次检测按键值相同,但还有第三次判断,所以当按下按键后必须要松开,不能一直按着,如果这样的话,也不能作为一次有效地按键。 其软件流程图如图4-11所示。 图4-11 获取键值流程图 键值处理子函数 键值处理子函数的传入参数为某键值,其功能为根据不同键值执行不同的功能。在本系统中,按键功能设置为: KEY1:设置模式进入/退出键 KEY2:运行时间加1操作键 KEY3:运行时间减1操作键 如果KEY1没有进入设置模式,直接按下KEY2键四位数码管就会显示小车的当前的车速,直接按下KEY3,就会从擦出上次的训练语音,从新进入训练状态。 键值处理子函数的软件流程图如图4-12所示。 图4-12 键值处理流程图 直流调速系统 方案分析 根据题目的要求,确定如下方案:在现有玩具电动车的基础上,加装光电检测器,实现对电动车的速度、位置、运行状况的实时测量,并将测量数据传送至单片机进行处理,然后由单片机根据所检测的各种数据实现对电动车的智能控制。 这种方案能实现对电动车的运动状态进行实时控制,控制灵活、可靠,精度高,可满足对系统的各项要求。 方案一:串电阻调速系统。 方案二:静止可控整流器。简称V-M系统。 方案三:脉宽调速系统。 旋转变流系统由交流发电机拖动直流电动机实现变流,由发电机给需要调速的直流电动机供电,调节发电机的励磁电流即可改变其输出电压,从而调节电动机的转速。改变励磁电流的方向则输出电压的极性和电动机的转向都随着改变,所以G-M系统的可逆运行是很容易实现的。该系统需要旋转变流机组,至少包含两台与调速电动机容量相当的旋转电机,还要一台励磁发电机,设备多、体积大、费用高、效率低、维护不方便等缺点。且技术落后,因此搁置不用。 V-M系统是当今直流调速系统的主要形式。它可以是单相、三相或更多相数,半波、全波、半控、全控等类型,可实现平滑调速。V-M系统的缺点是晶闸管的单向导电性,它不允许电流反向,给系统的可逆运行造成困难。它的另一个缺点是运行条件要求高,维护运行麻烦。最后,当系统处于低速运行时,系统的功率因数很低,并产生较大的谐波电流危害附近的用电设备。 采用晶闸管的直流斩波器基本原理与整流电路不同的是,在这里晶闸管不受相位控制,而是工作在开关状态。当晶闸管被触发导通时,电源电压加到电动机上,当晶闸管关断时,直流电源与电动机断开,电动机经二极管续流,两端电压接近于零。脉冲宽度调制(Pulse Width Modulation),简称PWM。脉冲周期不变,只改变晶闸管的导通时间,即通过改变脉冲宽度来进行直流调速。 与V-M系统相比,PWM调速系统有下列优点: (1)由于PWM调速系统的开关频率较高,仅靠电枢电感的滤波作用就可以获得脉动很小的直流电流,电枢电流容易连续,系统的低速运行平稳,调速范围较宽,可达1:10000左右。由于电流波形比V-M系统好,在相同的平均电流下,电动机的损耗和发热都比较小。 (2)同样由于开关频率高,若与快速响应的电机相配合,系统可以获得很宽的频带,因此快速响应性能好,动态抗扰能力强。 (3)由于电力电子器件只工作在开关状态,主电路损耗较小,装置效率较高。 脉宽调速也可通过单片机控制继电器的闭合来实现,但是驱动能力有限。为顺利实现电动小汽车的前行与倒车,本设计采用了可逆PWM变换器。可逆PWM变换器主电路的结构式有H型、T型等类型。我们在设计中采用了常用的双极式H型变换器,它是由4个三极电力晶体管组成的桥式电路。 PWM技术介绍 PWM利用三极管等开关器件将直流电压变为方波的形式,输出的电压就在VLoad和0V之间不停的跳变,如图4-13所示 图4-13 PWM计算示意图 平均电压Uo=Th/(Th+Tl)*VLoad 可通过调整PWM的占空比来改变Th和Tl的比值 例如:Th=5ms Ti=5ms VLoad=1V Uo=Th/(Th+Tl)*VLoad =5/(5+5)*1 =0.5V 本设计中由SPCE061A的IOB8、IOB9输出PWM信号,经过H桥电路放大,驱动后轮直流电机可通过设置P_TimerA_Ctrl单元该单元的第0~5位来选择TimerA的时钟源(时钟源A、B)设置该单元的第6~9位,TimerA将输出不同频率的脉宽调制信号,即对脉宽占空比输出PWM进行控制。 有关P_TimerA_Ctrl寄存器的功能介绍详见表4-14。 表4-14 P_TimerA_Ctrl单元 b15-b10 b9-b6 b5-b3 b2-b0 …… 占空比的设置 时钟源B选择位 时钟源A选择位 通过对P_TimerA_Ctrl的b9-b6位的设置可以决定PWM的输出状态,其中当这四位都为0时,为关断PWM的输出。相应的加1,其占空比加1,因为为四位的设置,所以SPCE061A的PWM输出为十六级输出。 所以针对本设计的核心控制芯片SPCE061A要想输出PWM信号,只要对P_TimerA_Ctrl做相应的赋值即可,操作十分简单。 本章小结 本章为本设计的核心部分,前几章的介绍都为此章所服务,此章先是从语音的识别,介绍了小车如何受语音控制。又介绍了蔽障服务程序,接着介绍了键盘取值方式,最后重点讲述了凌阳SPCE061A的另一大特色PWM输出控制。 测试数据、测试结果分析及结论 训练小车 训练部分完成的工作就是建立语音模型。程序一开始判断小车是否被训练过,如果没有训练过则要求对其进行训练,并且会在训练成功之后将训练的模型存储到FLASH,在以后使用时不需要重新训练;如果已经训练过会把存储在FLASH中的模型调出来装载到辨识器中。 成功下载程序以后,小车就会提示你对它进行训练。训练采用应答式训练,每条指令的训练为两次,每一条命令的训练过程都是一样的,以前进为例说明: 步骤一:小车提示“前进”; 步骤二:告诉小车“前进”; 步骤三:小车提示“请再说一遍”(重复训练提示音); 步骤四:再次告诉小车“前进”(重复训练一次)。 这是一个完整的训练过程,如果训练成功,小车会自动进入下一条指令的训练,并会提示您下一条指令对应的动作(后退,左拐,右拐等);如果没有训练成功,小车会提示“说什么暗语呀”或者“没有听到任何声音”等信息,这样的话您就要重复刚才所说的四个步骤,直到成功为止。 整个的训练过程共有5次这样的训练,依次为:名称——前进——后退——左拐——右拐。 在识别环节当中,如果辨识结果是名字,停止当前的动作并进入待命状态,然后等待动作命令。如果辨识结果为动作指令小车会语音告知相应动作并执行该动作,在运动过程中可以通过呼叫小车的名字使小车停下来。 以下为小车的语音识别具体过程如下: 第一:叫小车的名字,小车在识别出名字以后会有一个回应信号。 第二:可以直接对小车说前进,倒车,左拐,右拐等,小车如果识别出指令同样会有一个回应信号,告诉你它要执行的动作,然后执行对应的动作,稍后小车会自然的停下来,或者遇到障碍物停车并发出警报; 在小车运行过程中可以再次对小车发出控制指令,小车在识别后会结束当前运动状态并执行新的命令。 第三:小车在运行前,你可以使用61板上面的KEY1键进入时间设定模式,KEY2和KEY3键盘设定小车前进时间。 重新训练 考虑到有重新训练的需求,设置了重新训练的按键(61板的KEY3),循环扫描该按键,一旦检测到此键按下,则将擦除训练标志位(0xe000单元),并等待复位。复位后,程序重新执行,当检测到训练标志位为0xffff时会要求重新对其进行训练。 测试中可能出现的情况及其排查 在实际的测试过程当中,可能会出现一系列的问题,请参照表5-1所示。 表5-1 测试问题解决方案对照表: 电源指示灯不亮 硬件问题 1.电池安装是否正确 2.开关是否打开 3.SPY0029输入是否为0 程序不能正常下载 硬件问题 1.PROBE选择和跳线是否正确 2.电源是否打开 软件问题 1.体选择(body select) 2.环境设置,头文件,库文件 3.是否有语法错误 显示不正常 硬件问题 1.显示板与61板是否良好连接 没有声音 硬件问题 1.喇叭没有连接好 2.DAC输出跳线错误 不能训练 硬件问题 1.MIC有问题 动作不对 硬件问题 1.10PIN排线连接顺序是否正确 2.请参照附录硬件排查 软件问题 1.代码部分,代码是否被更改 避障不能使用 外部问题 1.是否使用了黑色不易反射材料 硬件问题 1.参照附录硬件排查手册 软件问题 1.中断是否打开 2.中断是否存在冲突 本章小结 本章主要介绍了本设计的使用以及在测试中遇到的一些问题的解决方法,由于本设计严格按照程序而行,所以在训练和使用时最好是按照前面的说明进行。在运用时可能会出现电源连接不上,程序不能正常下载等,怎样去排除这些问题,顺利的进行调试,在本章也都介绍了常用的解决方式。 结论与展望 结论 历时三个月的设计过程中,我首先边查资料,边在实验室焊接小车的线路板。在焊接过程中,我感觉到即使是一个简单的电路,要想很轻松的焊好,也不是很容易的事情。有时是“虚焊”的原因,有时可能是阻值选错。在焊接显示电路时,我就错将680欧的电阻焊成了6.8千欧。这使我深深感受到理论与实际间的差距。通过这样的设计,提高了我的动手能力。每天在实验室除了焊接线路板,还可以上机编程,使我软件调试知识也提高了。 本设计采用的是SPCE61A单片机,这主要是因为该单片机的稳定性比较好。还可以采用其它系列的单片机。结构上配合多种传感器,实现了自动蔽障,速度测量,以及显示模块的增加,为智能小车增加了亮点。设计中充分发挥了SPCE61A单片机的硬件资源,两个中断、两个定时器、多个时机中断的应用,加之单片机的特色语音识别、PWM输出的合理应用,基本上压干了单片机的所有资源。当然在设计中也有一些地方做的不尽完善,比如语音识别只能识别五句话,速度控制只用到了单环反馈等等,这些都需要以后的完善。 展望 智能机器人是一个国家高科技发展水平的重要标志之一 ,具有广阔的应用前景。机器人技术的发展是一个国家高科技水平和工业自动化程度的重要标志和体现。机器人在当前生产生活中的应用越来越广泛 ,正在替代人发挥着日益重要的作用。机器人技术是综合了计算机、控制论、机构学、信息和传感技术、人工智能、仿生学等多学科而形成的高新技术 ,集成了多学科的发展成果 ,代表高技术的发展前沿 ,是当前科技研究的热点方向。随着计算机、微电子、信息技术的快速进步 ,机器人技术的开发速度越来越快 ,智能度越来越高 ,应用范围也得到了极大的扩展。 随着社会的不断进步,科学技术的不断发展,面向智能化方向的科学更成为当代社会的重要科学。然而,智能化的科学之中,对外界信息的采集和处理成为这门科学的重要支柱之一。在当代科学技术中占有十分重要的地位,因此汽车机器人领域这也为一个不容忽视的发展方向。 参考文献 [1] 罗亚非。凌阳16位单片机应用基础。北京:北京航空航天大学出版社,2003 [2] 谭浩强。C程序设计。北京:清华大学出版社,1999 [3] 唐清善等。Protel DXP 高级实例教程。北京:中国水利水电出版社,2004 [4] 李正军。计算机控制系统。北京:机械工业出版社,2005 [5] 高峰编。单片微型计算机原理与接口技术。北京:科学出版社,2003 [6] 船仓一朗,土屋尧等(日)。机器人控制电子学。宗光华,杨洋,唐伯雁译。北京:科学出版社,2004 [7] Ramon Pallas-Areny,John G. Webster(美)。传感器和信号调节,第2版。张伦译。北京:清华大学出版社,2003 [8] 21IC中国电子网。www.21ic.com 。 34代做毕业设计www.biyeshejiba.net 代做毕业论文www.newlw.com 域名空间www.56hulian.net _1234567897.vsd � 调整框的宽度可更改段落宽度。框的高度根据文本自动调整。� � � 开始 初始化为自动播放S480语音资源 播放语音� 播放完毕?� 解码并填充队列� 返回 N Y 停止辨识器� 恢复初始化辨识器� 停止播放S480语音� _1234567901.vsd � 调整框的宽度可更改段落宽度。框的高度根据文本自动调整。� � � 开始� 调用库函数BSR_GetResult() 获取识别返回参数 返回参数为 “前进”的语音指令ID号?� 返回参数为 “名字”的语音指令ID号?� 有语音触发?� 返回参数为 “后退”的语音指令ID号?� 返回参数为 “左转”的语音指令ID号?� 返回参数为 “右转”的语音指令ID号?� Y N N N N 返回 N N 语音播放示意该指令识别成功 语音播放示意该指令识别成功 语音播放示意该指令识别成功 语音播放示意该指令识别成功 语音播放示意该指令识别成功 Y Y Y Y Y 全功率驱动后轮电机 延时 PWM方式驱动后轮电机 调用后退子函数 使小车后退 调用左转子函数 使小车左转 调用右转子函数 使小车右转 开始计时� 开始计时� 开始计时� 开始计时� _1234567903.vsd � � � 开始 清段码输出 关闭所有数码管和LED位选� 循环计数器 为0?� 片选数码管个位输出段码缓存� 循环计数器 为1?� 片选数码管十位输出段码缓存� 循环计数器 为2?� 片选数码管百位输出段码缓存� 循环计数器 为3?� 循环计数器 为4?� 片选数码管千位输出段码缓存� 导通LED公共端输出段码缓存� 循环计数器 大于等于5 循环计数器 为加一� 循环计数器清零 返回 Y N N N N Y Y Y Y _1234567905.vsd � � 调整框的宽度可更改段落宽度。框的高度根据文本自动调整。� � 开始� 检测IOA0~IOA2的IO引脚电平存于临时键值变量temp_value 清看门狗� 再次检测IOA0~IOA2的IO引脚电平获得新键值 新键值与 temp_value相等?� N Y 第三次检测IOA0~IOA2的IO引脚电平获得第三次键值 第三次 键值为0x0000?� N Y 将temp_value作为返回值返回 返回� 短暂延时 _1234567906.vsd � � 调整框的宽度可更改段落宽度。框的高度根据文本自动调整。� � 开始� 置位模式标志 调用获取键值子函数获取当前键值 “设置键”?� “加操作键”? “减操作键”? 运行时间 大于1000? 运行时间 小于1 模式标志 为0?� Y 运行时间赋值1000� 运行时间赋值1� 清零模式标志 Y N N Y Y Y Y N 返回� N 运行时间变量加一� 运行时间变量减一� N _1234567904.vsd � � 调整框的宽度可更改段落宽度。框的高度根据文本自动调整。� � 开始 外部中断EX1?� 外部中断EX2?� 清EX2中断标志� 清按键唤醒 中断标志位 Y 停止计时并停车� 置位 障碍物检测标志 N N Y 返回� 清EX1中断标志� _1234567902.vsd � � 调整框的宽度可更改段落宽度。框的高度根据文本自动调整。� 开始 屏蔽FIQ和IRQ中断, 保证运算过程不被打断 提取整数的个位,并转换为对应段码存入缓存� 提取整数的十位,并转换为对应段码存入缓存� 清看门狗� 清看门狗� 提取整数的百位,并转换为对应段码存入缓存� 提取整数的千位,并转换为对应段码存入缓存� 清看门狗� 清看门狗� 返回� 恢复允许 FIQ和IRQ中断� _1234567899.vsd � 调整框的宽度可更改段落宽度。框的高度根据文本自动调整。� � � � 调用库函数BSR_Train()返
/
本文档为【避障语音控制小车系统】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索