语音智能设计方案_第1页
语音智能设计方案_第2页
语音智能设计方案_第3页
语音智能设计方案_第4页
语音智能设计方案_第5页
已阅读5页,还剩33页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、. . . . 随着电子业的发展,智能化家电将是发展的必然趋势,语音控制也必将进入实用阶段。我在现有市场多功能电风扇的基础上,设计了一种新型的智能电风扇,使电风扇更加人性化,其功能设计将会大大提高电风扇的市场竞争力。本设计以凌阳16位单片机SPCE061A为核心,设计完成了一个语音控制智能电风扇。我追求对事物的方便,她不再需要手动的那些机械方面的操作,而是用那些更加方便,快捷的东西。本人设计的语音控制电风扇,就能大大方便她的生活,节约了时间,特别是易于使用、且只能识别她一个人的语音。只要站在房间的某个角落,通过人的语音识别与控制,就能实现对电风扇进行控制,这种功能方便了她的生活。人性化设计,友

2、好智能的人机交互方式,也值得今后市场的大面积普与。所以研究语音控制电风扇具有广阔的应用前景。系统要具有以下功能:将特定人的语音的信号经过处理、压缩转为数据存入存储器。操作人发出语音指令,系统接受后在部进行处理、查询,产生响应控制信号来控制单片机IO口电平高低来触发继电器的开关,在一般风扇调速的基础上来控制每个档位的开关,从而实现电机调速的目的。设计完成一个语音控制的整个过程。根据开始录制的语音命令来控制风扇的启动、加快转速,减小转速等功能。3系统总体方案设计论证方案论证:3.1.1 方案一:采用MCS-51系列单片机实现,由于有语音识别和语音播放功能,所以需要扩展语音识别模块和语音播放模块,这

3、样必然造成端口的资源紧,所以还必须加入接口扩展芯片。该实现方案结构如图1所示:接口总线MCS-51接口扩展模块语音识别模块块语音播报模块电机驱动模块图1 采用51单片机实现3.2.2 方案二:采用SPCE061A实现语音控制电风扇方案,由于SPCE061A部具有语音识别和语音播放功能,所以只需要比较以上两个方案,该实现方案结构如图2示。MIC输入模块SPCE061A电机驱动模块语音输出模块图2 采用凌阳SPCE061A实现它具有16位控制器,体积小、驱动能力高、集成度高、易扩展、可靠性高、功耗低、结构简单、中断处理能力强等特点。而且处理器运行速度高,以与风扇的实时控制需求,而且该单片机可以实现

4、语音播报。凌阳SPCE061A与MCS-51单片机性能比较如下表所示:表1SPCE061A与8051系列性能比较系列类型SPCE061A8051 系列核心GPIO中断结构存储器CPU时钟16 位nSP核心32:A(16)、B(16);可以按位单独定义其状态14个中断源,2个优先级32K字FLASH ,2K字SRAM32768Hz - 49.152MHz(可软件选)8 位8051 核心32:P0(8)/P1(8)/P3(8);不可以单独定义状态5个中断源,2个优先级4KROM,128 字节RAM2 - 8MHz由于凌阳SPCE061A 有以上特点,而且减少了很多51单片机所没有的外围电路,如声电

5、转换电路,采样电路,MIC输入电路,语音放大与语音播报电路等。所以在控制系统的选择上采用了方案2。SPCE061A 的其它特点:2个16 位定时器/ 计数器;32768 实时时钟;2 通道10 位DAC;7 通道10 位ADC 和1 通道MIC 输入;具备触键唤醒;低电压检测/ 复位功能;看门狗计数器;低电压低功耗;自带PWM 输出功能;置式带自动增益控制的扩音机输入通道;大容量的ROM与静态RAM;具有通用异步全双工串行接口URAT;具有RS-232 标准的发送/ 接收波形;两个数字式采样比较端口;具有大量的语音播放函数,并且语音播放功能强大。3.3 系统的整体结构系统总体框图如下图3所示。

6、凌阳SPCE061A单片机麦克风MIC输入扬声器电风扇驱动电路电风扇语音放大图3 系统总体框图 图中的语音输入部分MIC_ IN电路、滤波电路、声音输出部分的功率放大环节等已经做到了精简开发板61 板上,声音输出直接接扬声器即可,为我们使用提供了很大的方便。在电机的驱动方面,通过三个继电器的通断来分别实现电机的加速,减速,停三态运行。3.4 凌阳单片机硬件组成凌阳SPCE061A单片机板具有高度集成化的电路,很多电路都集成在61板上, 14个中断源,1通道专用音频AD转换通道,7通道AD转换通道,电源电路,置MIC放大电路和自动增益(AGC)放大电路,2路电流输出型的DA转换通道,2个16位通

7、用定时器/计数器,实时实钟(RTC),低电压复位、低电压监测,置在线仿真接口(ICE),具有功能,具有WatchDog等功能。本设计只用到电路以下功能:电源电路,时钟电路,MIC输入电路,音频放大输出电路,电机驱动电路(其中电机驱动电路是设计的电路)。4各部分硬件电路的设计4.1.电源电路采用双电源供电方式,将电机驱动电源与控制系统电源分开,分别实现强弱电供电。凌阳单片机接4.5V直流电源(由3节5号干电池即可)。电机驱动系统接220V交流电,从而驱动电机转动。4.2.控制核心4.2.1 凌阳单片机结构概览SPCE061A有两种封装:一种为80个引脚,即LQFP80封装,排列图如图4所示;另一

8、种为84个引脚,即PLCC84封装。图5为SPACE061A的实验板实物图。图4 SPCE061A PLCC80封装图图5 SPACE061A实验板实物图4.2.2凌阳16位单片机核特点随着单片机功能集成化的发展,其应用领域也逐渐地由传统的控制,扩展为控制处理、数据处理以与数字信号处理(DSP Digital Signal Processing)等领域。凌阳公司的16位单片机就是为适应这种发展而设计的。它的CPU核采用凌阳最新推出的nSP(Microcontroller and Signal Processor)16位微处理器芯片(以下简称nSP。该nSP所形成的16位nSP系列单片机采用的是

9、模块式集成结构,以nSP核为中心集成不同规模的ROM、RAM以与并行I/O口ADC和DACPWMWatchdogUARTLVD和LVRSIO等功能部件,这给智能风扇系统的设计带来了很大的方便。nSP有以下特点:(1) 集成度高、可靠性好且易于扩展。 (2) nSP把各功能部件模块化地集成在一个芯片里,部采用总线结构,因而减少了各功能部件之间的连线,提高了其可靠性和抗干扰能力。另外,模块化的结构易于系统扩展,以适应不同用户的需求。有较强的中断处理和数字信号处理的能力。 (3)nSP的中断系统支持10个中断向量与14个中断源,适合实时应用领域。 (4) 高性能价格比。 (5)nSP片带有高寻址能力

10、的ROM、静态RAM和多功能的I/O口。另外,nSP的指令系统提供具有较高运算速度的16位×16位的乘法运算指令和积运算指令,为其应用增添了DSP功能,使得nSP运用在复杂的数字信号处理方面既很便利,又比专用的DSP芯片廉价。 (6)功能强、效率高的指令系统。 (7)nSP指令系统的指令格式紧凑,执行迅速,并且其指令结构提供了对高级语言的支持,这可以大大缩短产品的开发时间。 (8)低功耗、低电压。(9)nSP采用CMOS制造工艺,同时增加了软件激发的弱振方式、空闲方和掉电方式,极降低了其功耗。(10)nSP的工作电压围大,能在低电压供电时正常工作,且能用电池供电。这对于其在野外作业等

11、领域中的应用具有特殊的意义。4.3 MIC输入电路与音频放大输出电路本系统接入MIC电路,如图6所示,MIC为录制语音辨识命令服务。MIC采集的语言先通过置自动增益控制放大器,再经SPCE061A置的八通道10位模数转换器转换位数字量信号,硬件ADC最高采样速率可达96KHZ。图6 MIC输入电路图7 音频输出电路凌阳的SPCE061A 16位单片机,具有DSP功能,其中嵌有高速AD转换器, 有很强的信息处理能力,最高时钟可达到49M,具备运算速度高的优势,这为语音的播放、录放、合成与辨识提供了条件。音频输出部分的原理图ADC如图7所示 从图7中可以看到两个跳线,其作用在于可以测量DAC的输出

12、波形;另外拔掉跳线,断开DAC到喇叭放大的通路,使得DAC通道处于开路状态。这样便于用DAC做其他用途,用户可以用过这个跳线来加入自己的外围电路。凌阳音频压缩算法根据不同的压缩比分为以下几种:SACM-A2000:压缩比为8:,8:1.25,8:1;5SACM-S480: 压缩比为80:3,80:4.5;SACM-S240: 压缩比为80:1.5。按音质排序:A2000>S480>S240,本设计采用说S2040压缩方式,先用windows系统自带的录音机事先把所需的语音信号录制好,然后用凌阳Compress Tool工具将音频文件进行压缩,最后命名成自己所需要的语音文件。本系统共

13、包括十多个语音资源,整个语音信号经凌阳SACM_S480压缩算法压缩只占有13.2K存储空间,SPCE061A单片机具有32k闪存,使用部flash即可满足要求。凌阳SPCE061A单片机自带双通道DAC音频输出, DAC1、DAC2转换输出的模拟量电流信号分别通过AUD1和AUD2管脚输出,DAC输出为电流型输出,所以DAC输出经过SPY0030音频放大,以驱动喇叭放音,放大电路(图7,只列出了DAC1,DAC2类似),这为单片机的音频设计提供了极大方便。在它们后面接一个简单的音频放大电路和喇叭即可实现语音播报功能,音频的具体功能主要通过程序来实现。凌阳SPCE061A单片机自带双通道DAC

14、音频输出, DAC1,DAC2转换输出的模拟量电流信号分别通过AUD1和 AUD2管脚输出,DAC输出为电流型输出,所以DAC输出经过SPY0030音频放大,以驱动扬声器发声。4.4 电机驱动电路风扇驱动总体电路图如下图8所示:图8 风扇驱动电路对该部分电路的设计,主要应解决两个问题:弱电(凌阳单片机系统)和强电(AC220V)的控制。再就是电平工作部分,由于电平驱动不够,在这里我选择了9012三极管来放大从而来驱动继电器。对于问题一,我采用了继电器控制电路,其中AC 5V继电器是一个电磁继电器,它有一个线圈,在线圈入电流时,在它周围就产生磁场,也就是说,它变成了一个电磁铁,在它的磁极处,有一

15、个软铁做的衔铁,作为动触点,当通电时,街铁被吸引过来,就可以实现与静触点的断开或闭合,从而可以控制电路的通断,它实质就是一个能自动控制的开关。可以实现低电压弱电流控制高电压强电流。对于驱动力方面,由于8050不能驱动AC 5V的继电器,所以我改成了9012来作为驱动放大。对于PNP型三极管9012,后面会具体介绍。下面介绍继电器的工作原理和特性。4.4.1 继电器原理与电路符号1.继电器实物图与电路符号如下图9所示图9 继电器原理与电路符号继电器线圈在电路中用一个长方框符号表示,如果继电器有两个线圈,就画两个并列的长方框。同时在长方框或长方框旁标上继电器的文字符号“J”。继电器的触点有两种表示

16、方法:一种是把它们直接画在长方框一侧,这种表示法较为直观。另一种是按照电路连接的需要,把各个触点分别画到各自的控制电路中,通常在同一继电器的触点与线圈旁分别标注上一样的文字符号,并将触点组编上,以示区别。2、电磁继电器的工作原理和特性如下电磁式继电器一般由铁芯、线圈、衔铁、触点簧片等组成的。只要在线圈两端加上一定的电压,线圈中就会流过一定的电流,从而产生电磁效应,衔铁就会在电磁力吸引的作用下克服返回弹簧的拉力吸向铁芯,从而带动衔铁的动触点与静触点(常开触点)吸合。当线圈断电后,电磁的吸力也随之消失,衔铁就会在弹簧的反作用力返回原来的位置,使动触点与原来的静触点(常闭触点)吸合。这样吸合、释放,

17、从而达到了在电路中的导通、切断的目的。对于继电器的“常开、常闭”触点,可以这样来区分:继电器线圈未通电时处于断开状态的静触点,称为“常开触点”;处于接通状态的静触点称为“常闭触点”。 3、AC 5V继电器主要产品技术参数 (1)、额定工作电压 是指继电器正常工作时线圈所需要的电压。根据继电器的型号不同,可以是交流电压,也可以是直流电压。 此继电器的额定工作电压是250V,额定工作电流是5A。(2)、直流电阻 是指继电器中线圈的直流电阻,可以通过万能表测量。此继电器的直流电阻是60欧姆。(3)、吸合电流 是指继电器能够产生吸合动作的最小电流。在正常使用时,给定的电流必须略大于吸合电流,这样继电器

18、才能稳定地工作。而对于线圈所加的工作电压,一般不要超过额定工作电压的1.5倍,否则会产生较大的电流而把线圈烧毁。 其吸合电流是8A。(4)、释放电流是指继电器产生释放动作的最大电流。当继电器吸合状态的电流减小到一定程度时,继电器就会恢复到未通电的释放状态。这时的电流远远小于吸合电流。(5)、触点切换电压和电流是指继电器允许加载的电压和电流。它决定了继电器能控制电压和电流的大小,使用时不能超过此值,否则很容易损坏继电器的触点。 4.4.2 三极管9012原理与电路符号9012是一种最常用的普通三极管。 它是一种低电压,大电流,小信号的PNP型硅三极管,其实物和电路符号如下图10所示:图10 90

19、12实物和电路符号集电极电流Ic:集电极允许最大电流Max -500mA ,集电极-基极电压允许通过最大电压Vcbo:-40V ,工作温度:-55 to +150,和9013(NPN)相对主要用途有开关应用和电流电压放大的作用。4.5 整体电路图整体电路图见附录图175系统软件设计5.1.主程序设计语音识别电风扇的主程序流程图如图11所示系统总体流程可分为四大部分:初始化部分,训练部分,识别部分,重训操作。开始初始化已经训练过Y N装载语音模型训练风扇保存训练结果进入识别模式语音识别与执行N重新训练清模型存贮区 Y等待复位图11 系统总体程序流程图初始化部分:初始化操作将IOB口作为电风扇的输

20、出口。该部分的功能是对凌阳单片机进行初始化操作。初始化部分程序如下所示: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

21、;/清看门狗SACM_S480_Stop();/停止播放BSR_InitRecognizer(BSR_MIC);/初始化识别器训练部分:训练部分完成的工作就是建立语音模型,程序一开始判断单片机是否被训练过,如果没有训练过则要求对其进行训练,并且会在训练成功之后将训练的模型存贮到FLASH,在以后使用时不需要重新训练;如果已经训练过会把存贮在FLASH中的模型调出来装载到辨识器中。训练部分程序如下:int TrainWord(unsigned int WordID,unsigned int SndID)int Result;PlaySnd(SndID,3);/引导训练,播放指令对应动作while

22、(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

23、: /序号错误return -6;default:break;return 0;/=/ 语法格式:void TrainSD();/ 实现功能:训练函数/ 参数:无/ 返回值:无/=void TrainSD()while(TrainWord(NAME_ID,S_NAME) != 0) ; /训练第1个动作while(TrainWord(COMMAND_GO_ID,S_ACT1) != 0) ; /训练第2个动作while(TrainWord(COMMAND_BACK_ID,S_ACT2) != 0) ; /训练第3个动作while(TrainWord(COMMAND_LEFT_ID,S_ACT3

24、) != 0) ; /训练第4个动作void StoreSD() unsigned int ulAddr,i,commandID,g_Ret; F_FlashErase(0xe000); F_FlashErase(0xe100); ulAddr=0xe000;for(commandID=0x100;commandID<0x104;commandID+)g_Ret=BSR_ExportSDWord(commandID);while(g_Ret!=0)/模型导出成功?g_Ret=BSR_ExportSDWord(commandID);for(i=0;i<100;i+)/保存语音模型SD

25、1(0xe000-0xe063) F_FlashWrite1Word(ulAddr,BSR_SDModeli);ulAddr+=1;/=/ 语法格式:void StoreSD();/ 实现功能:装载语音模型函数/ 参数:无/ 返回值:无/=void LoadSD()unsigned int *p,k,jk,Ret,g_Ret;p=(int *)0xe000;for(jk=0;jk<4;jk+)for(k=0;k<100;k+)Ret=*p;BSR_SDModelk=Ret;/装载语音模型p+=1;g_Ret=BSR_ImportSDWord();while(g_Ret!=0)/模型

26、装载成功?g_Ret=BSR_ImportSDWord();当操作者训练失败时,单片机会提示,没有听到任何声音或说什么暗语呀,请重新输入(这两种情况当单片机没有识别出声音时和识别出但不是被训练的话语),操作者得重新输入这条命令,直到输入成功,再进行下一命令的识别,如果都训练成功,单片机则会说,已训练成功,请开始辨识。接着操作者输入任何的刚刚训练的声音,单片机就会执行相应的动作。识别部分:在识别环节当中,如果辨识结果是名字,停止当前的动作并进入待命状态,然后等待动作命令。如果辨识结果为动作指令单片机会语音告知相应动作并执行该动作,在转动过程中可以通过呼叫风扇的名字使风扇停下来。重训操作:考虑到有

27、重新训练的需求,设置了重新训练的按键(61板的KEY3 ),循环扫描该按键,0xe000 单元),并等待复位。复位后,程序重新执行,当检一旦检测到此键按下,则将擦除训练标志位(测到训练标志位为0xffff 时会要求重新对其进行训练。5.2系统子程序设计5.2.1 训练子程序程序测试把程序下载到凌阳单片机后通过对Watchdog进行训练,训练过程如下:听到提示“请输入第一条命令”后,说出一句语音命令。如果输入成功,会提示“请再说一遍”,重复刚才的语音命令。如果由于某种原因导致输入失败,会提示“没有听到任何声音”、“环境噪声太大”,如果两次训练的语音差别过大会提示“两次输入不一样”。第一条命令训练

28、成功后,用同样的办法训练第二条语音命令。两条命令都训练完成后,就可以开始识别了如果识别出第一条语音命令,则提示“识别成功,第一条命令”如果识别出第一条语音命令,则提示“识别成功,第二条命令”如果没有成功的建立模型,单片机会会告知失败的原因并要求重新训练。成功训练名称后会给出下一条待训练指令提示音,参照训练名称训练方式训练加速指令。依次训练风扇的名称,一档,二档,关等全部训练成功子程序返回,训练结束。开始训练训练名称训练开风扇指令名称训练成功一档指令训练成功训练一档指令开指令训练成功训练二档指令二档指令训练成功训练结束 N N Y Y N N Y图12 特定人训练流程图训练子程序如下所示/=/

29、语法格式:void Kai();/ 实现功能:开子函数/ 参数:无/ 返回值:无/=/void Kai() /开/ /unsigned int j;/PlaySnd(S_ACT1,3);/*P_IOB_Data=0xFFFF0;/=/ 语法格式:void Guan();/ 实现功能:关子函数/ 参数:无/ 返回值:无/=/void Guan() /关/unsigned int j;/=/ 语法格式:void Yidang();/ 实现功能:一档子函数/ 参数:无/ 返回值:无/=/void Yidang() /一档/unsigned int j;/=/ 语法格式:void Erdang();/

30、 实现功能:二档子函数/ 参数:无/ 返回值:无/=/void Erdang() /二档/unsigned int j;/5.2.2 语音识别子程序语音识别流程如图13所示:首先获取辨识器的辨识结果,判断是否有语音触发,如果有语音触发则会返回识别结果的ID号,ID号对应名称或者对应不同的动作。如果ID号为名称,则结束运动(如果当前在运动状态),进入待命状态,等待下一次的指令触发;如果ID号为动作,则语音告知将要执行的动作,并执行该动作。图13 语音识别原理框图5.3 系统总程序设计系统总程序设计见附录2 5.4 语音辨识 语音辨识技术有三大研究围:口音独立、连续语音与可辨认字词数量。 口音独立

31、: 1) 早期只能辨认特定的使用者即特定语者(Speaker Dependent,SD)模式,使用者可针对特定语者辨认词汇(可由使用者自行定义,如人名声控拨号),作简单快速的训练纪录使用者的声音特性来加以辨认。随着技术的成熟,进入语音适应阶段 SA(speakeradaptation),使用者只要对于语音辨识核心,经过一段时间的口音训练后,即可拥有不错的辨识率。利用凌阳语音压缩工具“Compress Tool”将录好的语音压缩成S480格式。把压缩后的语音资源文件复制到工程所在文件夹下。将上述文件添加到工程中 Project -> Add to Project -> Files b

32、srSD.inc,bsrSD.h,Hardware.asm,Hardware.inc Project -> Add to Project -> Resource9个S480格式语音资源文件 Project -> Setting -> Link bsrv222SDL.lib Sacmv26e.lib寄存器入栈是定时器A中断吗?清中断状态寄存器组出栈返回停止辨 识吗?中断辨识,调用-BSR-FIQ-Routine寄存器组出栈转至?BSR-BUSY清中断状态返回中断放音 吗?S480放音寄存器组出栈转至?BSR-BUSY清FIQ-TMIA中断状态返回A2000放音图14 特定

33、人连续语音识别中断流程在这里我们用特定人语音识别来控制风扇,(即操作者通过说话来控制风扇)特定人连续语音识别中断流程算法如附录36 系统调试6.1驱动电路测试一、继电器测试 1、测触点电阻 用万能表的电阻档,测量常闭触点与动点电阻,其阻值为0;而常开触点与动点的阻值就为无穷大。由此可以区别出那个是常闭触点,那个是常开触点。经测试找到引脚常开与常闭触点。2、测线圈电阻 可用万能表R×10档测量继电器线圈的阻值,从而判断该线圈是否存在着开路现象。 经测试发现,没有开路现象发生。并且测得线圈阻止为约68欧姆。3、测量吸合电压和吸合电流 找来可调稳压电源和电流表,给继电器输入一组电压,且在供

34、电回路中串入电流表进行监测。慢慢调高电源电压,听到继电器吸合声时,记下该吸合电压和吸合电流。4、测量释放电压和释放电流 也是像上述那样连接测试,当继电器发生吸合后,再逐渐降低供电电压,当听到继电器再次发生释放声音时,记下此时的电压和电流,亦可尝试多几次而取得平均的释放电压和释放电流。一般情况下,继电器的释放电压约在吸合电压的1050,如果释放电压太小(小于1/10的吸合电压),则不能正常使用了,这样会对电路的稳定性造成威胁,工作不可靠。测量参数如下表2所示:表2 性能参数 性能参数次数直流电阻(欧姆)吸合电流(A)吸合电压(V)释放电流(mA)释放电压(V)一次687.935010099二次6

35、883551201006.2语音辨识部分测试I/O口定义分析:对风扇I/O口定义时,我选择了对I/OB0口用来对风扇的开关控制,对IO口的定义,我选择的是IOB0-IOB3低四位是一档,当前地址是:*P_IOA_Dir=0x00f00;IOB4-IOB7高四位是二档,当前十六进制地址是:*P_IOA_Dir=0x000f; IOB8-IOB11高四位是停止档,当前十六进制地址是:*P_IOA_Dir=0x00f0。首先单片机提示请输入触发名称,操作者输入命令“一档”。单片机提示“请再说一遍”,操作者输入同样的命令,如果识别不成功,单片机会说请重新输入,输入成功的话,单片机接着提示:“请输入第二

36、条命令” 操作者输入的命令“二档”。同样如果识别不成功,单片机会提示请重新输入,如果成功,单片机会提示请输入第三条命令,依次进行下去。如果三条命令输入都成功,单片机会提示,识别成功,请进行辨识。操作者输入命令“一档”,单片机会执行相应的 “开”命令,此时,IOB0-IOB3口输入低电平,使风扇转起来。操作者输入“一档”命令,单片机IOB4-IOB7口输入低电平。依次输入“二档”命令,相应的IOB8-IOB11口为低电平。最后操作者输入命令“停”,单片机所有IOB口为高电平,风扇停止转动,经过测试符合设计要求,达到测试指标。I/O口定义与风扇速度对照如表3所示:由于9012是低电平触发,故IOB

37、口为低电平时风扇转动。其中在输入中,运用三输入与非门进行逻辑关系运算,只有在每次输入一个口时此命令有效。不然会出现两档或三档同时打开的情况,所以使用三输入逻辑门解决了这一情况,三输入与非门由编程实现。其具体见附录3程序表3 输入电平与风扇速度对照表IOB0- IOB3IOB4-IOB7IOB8-IOB11电风扇011一档101二档110三档111停主函数以与IO口定义如下:int main(void)int Result; /辨识结果寄存unsigned int Ready=0;/待命标志位unsigned int BS_Flag;/Train标志位*P_IOA_Dir=0xff00;/初始化

38、IOA,IOA07下拉输入*P_IOA_Attrib=0xff00;*P_IOA_Data=0x0000;*P_IOB_Dir=0xffff;/初始化IOB,IOB811同向输出*P_IOB_Attrib=0xffff;*P_IOB_Data=0xfffff;BSR_DeleteSDGroup(0);/初始化存储器RAMBS_Flag=*(unsigned int *)0xe000;/读存储单元0xe000if(BS_Flag=0xffff)/没有经过训练(0xe000容为0xffff)TrainSD();/训练StoreSD();/存储训练结果(语音模型)else /经过训练(0xe000容

39、为0x0055)LoadSD();/语音模型载入识别器PlaySnd(S_START,3);/开始识别提示BSR_InitRecognizer(BSR_MIC);/初始化识别器while(1)Result = BSR_GetResult();/获得识别结果if(Result>0)/有识别结果?/if(Result=NAME_ID) /名称/PlaySnd(S_RDY,3);/播放待命提示音/Ready=1;/进入待命状态/if(Ready=1)/待命状态?/switch(Result)case COMMAND_GO_ID:/识别出第一条命令PlaySnd(S_ACT1,3); *P_IO

40、B_Data=0xFFFF0;break;case COMMAND_BACK_ID:/识别出第二条命令PlaySnd(S_ACT2,3); *P_IOB_Data=0xFFFF;break;case COMMAND_LEFT_ID:/识别出第三条命令PlaySnd(S_GJG,3); *P_IOB_Data=0xFF0F;break;case COMMAND_RIGHT_ID:/识别出第四条命令PlaySnd(S_GJG,3); *P_IOB_Data=0xF0FF;break;default:break;if(*P_IOA_Data)&0x0004)/是否重新训练F_FlashEra

41、se(0xe000);while(1)/等待中断*P_Watchdog_Clear=0x0001;6.3 整机测试对整机进行测试时,发现风扇不能正常工作(由于开始我用的是8050,高电平触发的三极管来驱动继电器)于是我换成9012三极管,结果电路工作正常。后测试发现风扇不能实现调速功能,用万用表测试发现,驱动电路工作正常; 同时检查程序发现软件在定义IO口时没有同时定义三个口的状态,结果三路信号同时作用,由于逻辑的混乱从而达不到调速的目的。于是使用三输入与非门通过软件编程实现电平控制。经过修改后,该问题解决了。对硬软件整机调试后,系统实现预期的功能,完成测试指标。附录附录1 图15 系统总体电

42、路图图16 系统总体实物图附录2 图17 风扇驱动电路实物图附录3 系统总程序设计/=/ 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 RESE

43、RVED/ The entire notice above must be reproduced on all authorized copies./=#include "s480.h"#include "bsrsd.h"#defineP_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

44、(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

45、P_TimerB_Ctrl(volatile unsigned int *)0x700D #define P_Watchdog_Clear(volatile unsigned int *)0x7012 #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_NAME0#define S_ACT11#define S_ACT22#define S_ACT33#define S_ACT44#define S_RDY5#define S_AGAIN6#define S_NOVOICE7#define S_CMDDIFF8#define S_NOISY 9#define S_START 10#define S_GJG11extern unsigned int BSR_SDModel100;/外部变量BSR_SDModel100,辨识器自带extern void F_FlashWrite1Word(unsigned int addr,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论