毕业设计219语音控制模型与仿真.docx
- 文档编号:17348130
- 上传时间:2023-07-24
- 格式:DOCX
- 页数:56
- 大小:1.14MB
毕业设计219语音控制模型与仿真.docx
《毕业设计219语音控制模型与仿真.docx》由会员分享,可在线阅读,更多相关《毕业设计219语音控制模型与仿真.docx(56页珍藏版)》请在冰点文库上搜索。
毕业设计219语音控制模型与仿真
1单片机系统概述
1.1单片机系统的特点
1.2单片机技术的发展
1.3单片机技术的应用
2凌阳SPCE061A单片机
2.1凌阳SPCE061A的硬件结构
2.1.1µ’nSP™内核结构
2.1.2SPCE061A存储器
2.1.3SPCE061A的输入/输出接口
2.1.4定时器/计数器
2.2凌阳SPCE061A的指令系统
2.2.1指令的分类
2.2.2寻址方式
3SPCE061精简开发板—61板
3.161板简介
3.261板的硬件结构
3.2.1电源电路
3.2.2音频电路
3.2.3ICE接口电路
3.3凌阳语音
3.3.1凌阳音频简介
3.3.2常用的应用程序接口API
3.3.3语音识别技术
3.3.4用61板实现语音播放
4智能玩具“听话精灵”的系统设计
4.1系统概述
4.2系统的硬件设计及其原理
4.2.1语音识别原理
4.2.2硬件电路
4.3语音识别程序
4.4智能玩具的仿真调试
1.单片机系统概述
随着嵌入式系统开发技术的快速发展及其在各个领域的广泛应用,人们对电子产品的小型化和智能化要求越来越高,作为高科技技术之一的单片机以其体积小、功能强、价格底、使用灵活等特点,显示出明显的优势和广泛的应用前景。
在航空航天、机械加工、智能玩具、家用电器、通信系统等领域,单片机都发挥了重要作用。
可以认为单片机技术已成为现代电子技术应用领域十分重要的技术之一。
1.1单片机系统的特点
所谓单片机(SingleChipMicrocomputer)是指在一块芯片中集成有中央处理器(CPU)、存储器(RAM和ROM)、基本I/O接口以及定时器/计数器等部件,并具有独立指令系统的智能器件,即在一块芯片上实现一台微型计算机的功能。
如果是简单控制对象,只需要利用单片机作为控制核心,不需要另外增加外部设备就能完成。
对于较复杂的系统,只需要对单片机进行适当扩展即可,十分方便。
归纳起来,单片机及应用系统有以下特点:
(1)单片机具有独立的指令系统。
(2)系统配置以满足控制对象的要求为出发点,使系统具有较高的性价比。
(3)系统规模小,实际应用系统简单实用,成本底,效益好。
(4)抗干扰能力强,可靠性高,使用方便。
(5)系统小巧玲珑,控制能力强,体积小,便于嵌入被控设备中。
1.2单片机技术的发展
随着微电子技术的迅速发展,目前各个公司研制出了适合于各种领域的单片机。
高性能单片机芯片市场也异常活跃,不断采用新技术,使单片机的种类,性能不断提高,应用领域不断扩大。
如ATMEL公司开发的89C51芯片,片内含有4KBEPROM;89C51FA芯片,片内含16KBEPROM;凌阳公司最近推出的SPCE061A芯片,片内有32KBFLASH和2KBRAM,使得片内可储存量增加,控制能力增强。
这些性能的提高和改进归纳起来,有以下四个方面:
1.CPU的改进
(1)采用双CPU结构,提高芯片的处理能力。
(2)增加了数据总线宽度,提高处理速度,从8位、16位到32位
(3)采用流水线结构,类似于高性能的微处理器,提高了运算速度,能够实现简单的DSP功能,适合做数字信号处理。
(4)串行总线结构,将外部数据总线改为串行传送方式,提高了系统的可靠性。
2.存储器的发展
增大片内存储器容量,有利于系统的可靠性。
编程加密技术,达到程序保密的目的。
3.片内I/O接口
(1)增加驱动能力,减少了外围驱动芯片的使用,可直接驱动LED、LCD等显示器等,简化了系统设计,降低了系统成本
(2)增加了异步串行通信口,提高了单片机系统的灵活性。
(3)增加了逻辑操作功能,具有位寻址操作,增加了操作和控制的灵活性。
(4)带有A/D、D/A转换器,直接对模拟信号输入和输出。
(5)并行I/O接口设置灵活,可以利用指令将端口的任一位设置为输入、输出、上拉、下拉和悬浮等状态
(6)带有PWM输出,可直接驱动控制小型直流电机调速,大大方便使用。
1.3单片机系统应用
由于单片机体积小、价格低、可靠性高、使用范围大以及有其本身的指令系统等诸多优势,在各个领域、各个行业都得到了广泛的应用。
目前不仅优位单片机,16位单片机也得到了广泛的应用。
如机电一体化、集散数据采集系统、分布式控制系统、智能仪器仪表、家用电器终端及外部设备控制。
2凌阳SPCE061A单片机
SPCE061A型单片机是凌阳科技公司最新推出的一款16位微处理器,具有体积小、集成度高、易扩展、可靠性高、功耗低、结构简单、中断处理能力强等特点,内嵌32K字闪存FLASH,处理速度高,能够很方便地完成普通单片机的功能,尤其适应于数字语音播放和识别等应用领域,是数字语音识别与语音信号处理的理想产品,得到了广泛应用。
SPCE061A的结构比较简单,在芯片内部集成了ICE仿真电路接口、FLASH程序存储器、SRAM数据存储器、通用I/O端口、定时器/计数器、中断控制、CPU时钟、模-数转换器A/D、DAC输出、通用异步串行输入输出接口、串行输入输出接口和低电压监测/低电压复位等若干部分。
各个部分之间存在着直接或间接的联系。
2.1凌阳SPCE061A的硬件结构
2.1.1µ’nSP™内核结构
SPCE061A单片机采用凌阳µ’nSP™内核结构。
µ’nSP™内核的结构由总线、算术逻辑运算单元、寄存器组、中断系统及堆栈等部分组成。
其结构如图所示:
用户寄存器
SP:
堆栈指针
R1-R4:
普通寄存器
BP:
基指针
SR:
段寄存器
NZSR:
标志位
DS:
数据选择字段
CS:
代码选择字段
PC:
程序计数器
SB:
移位缓存器
内部寄存器
DR:
数据寄存器
BR:
B寄存器
硬件单元
ADDRGEN:
地址编码器
SHIFTER:
移位器
ALU:
算术运算单元
图2-1:
µ’nSP的内核结构
1.ALU算术逻辑运算单元
μ’nSP™的ALU非常有特色,除了一般基本的16位算术逻辑运算,还提供了结合算术逻辑的16位移位运算。
在数字信号处理方面,提供了高速的16位×16位乘法运算和内积(乘加)运算。
(1)16位算术逻辑运算
μ’nSP™与大多数CPU一样,提供了基本的算术运算与逻辑操作指令,加法、减法、比较、补码、异或、或、与、测试、写入、读出等16位算术逻辑运算及数据传送操作。
(2)结合算术逻辑的16位移位运算
μ’nSP™的移位运算包括:
算术右移ASR、逻辑左移LSL、逻辑右移LSR、旋转左移ROL及旋转右移ROR。
μ’nSP™的移位器shifter就串接在ALU的前面,也就是说,操作数在经过移位处理后,马上会进入ALU进行算数逻辑运算。
所以,μ’nSP的移位指令都是复合式指令,一个指令会同时完成移位和算术逻辑运算。
程序设计者可利用这些复合式的指令,撰写更精简的程序代码,进而增加程序代码密集度(CodeDensity)。
在微控制器应用中,如何增加程序代码密集度是非常重要的问题;提高程序代码密集度可以减少程序代码的大小,进而减少ROM或FLASH的需求,以降低系统成本与增加执行效能。
(3)16位×16位的乘法运算和内积(乘加)运算
除了普通的16位算数逻辑运算指令外,μ’nSP™还提供了高速的16位×16位乘法运算指令Mul和16位内积运算指令Muls。
二者都可以用于有符号数相乘(signedsigned)或无符号数与有符号数相乘(unsignedsigned)的运算。
其中,Mul指令只需花费12个时钟周期,Muls指令花费10n+6个时钟周期,其中n为乘加的项数。
2.寄存器组
μ’nSP™CPU的寄存器组一共有8个16位寄存器,可分为通用寄存器和专用寄存器两大类别。
通用寄存器包括:
R1~R4,作为算术逻辑运算的来源及目标寄存器。
专用寄存器包括SP、BP、SR、PC,是与CPU特定用途相关的寄存器。
(1)用寄存器R1~R4(General-purposeregisters)
可用于数据运算或传送的ers)来源及目标寄存器。
寄存器R4、R3配对使用,还可组成一个32位的乘法结果寄存器MR;其中R4为MR的高字符组,R3为MR的低字符组,用于存放乘法运算或内积运算结果。
(2)堆栈指针寄存器SP(StackPointer)
SP是用来纪录堆栈地址的寄存器,SP会指向堆栈的顶端。
堆栈是一个先进后出的内存结构,μ’nSP™的堆栈结构是由高地址往低地址的方向来储存的。
CPU执行push、子程序调用call、以及进入中断服务子程序(ISR,InterruptServiceRoutine)时,会在堆栈里储存寄存器内容,这时SP会递减以反映堆栈用量的增加。
当CPU执行pop时、子程序返回ret、以及从ISR返回reti时,SP会递增以反映堆栈用量的减少。
μ’nSP™堆栈的大小限制在2K字的SRAM内,即地址在0x000000~0x0007FF的内存范围中。
(3)基址指针寄存器BP(BasePointer)
μ’nSP™提供了一种方便的寻址方式,即基址寻址方式[BP+IM6];程序设计者可通过BP来存取ROM与RAM中的数据,包括:
局部变量(LocalVariable)、函数参数(FunctionParameter)、返回地址(ReturnAddress)等等。
BP除了上述用途外,也可做为通用寄存器R5,用于数据运算传送的来源及目标寄存器。
因此,在程序中,BP与R5是共享的,均代表基址指针寄存器。
(4)程序寄存器PC(ProgramCounter)
它的作用与一般微控制器中的PC相同,是用来纪录程序目前执行位置的寄存器,以控制程序走向。
CPU每执行完一个指令,就会改变PC的值,使其指向下一条指令的地址。
在μ’nSP™里,16位的PC寄存器与SR寄存器的CS字段,共同组成一个22位的程序代码地址。
(5)状态寄存器SR(StatusPointer)
SR内含许多字段,每个字段都有特别的用途。
其中包含两个6位的区段选择字段:
CS(CodeSegment),DS(DataSegment),它们可与其它16位的寄存器结合在一起形成一个22位的地址,用来寻址4M字容量的内存。
SPCE061A只有32K字的闪存,只占用一页的存储空间,所以CS和DS字段在SPCE061A中都是设为0。
算数逻辑运算的结果会影响CPU内的标志(flag),标志的内容可以作为条件判断的依据。
μ’nSP™有四个1位的标志:
N、Z、S、C,即SR寄存器中间的4个位(B6~B9)。
3数据总线和地址总线
μ’nSP™是16位单片机,它具有16位的数据线和22位地址线。
由此决定其基本数据类型是16位的“字”型,而不是8位的“字节”型;因此内存都是按“字”操作的,22位的地址线最多可寻址到4M字的内存空间。
地址线中的高6位A16~A21来自SR寄存器中的6位的CS字段或是6位的DS字段,低16位A0~A15则来自内部寄存器。
通常,地址线的高6位称为内存地址的PageSelector,简称为页码(Page);而低16位则称为内存地址的偏移量(Offset)。
μ’nSP™通过对区段(Segment)的编码来实现内存分页的检索,即是说‘Segment’的含义与‘Page’的含义是相等的。
因而,通过Segment与Offset的配合即可产生22位地址。
2.1.2SPCE061A存储器
SPCE061A单片机片内存储器地址映射表如图2-2所示,单片机的存储器有2K的SRAM(包括堆栈区)和32K闪存FLASH。
2KSRAM
保留空间
I/O端口
系统端口
32KFLASHROM
中断向量
0X0000
0X07FF
0X0800
0X6FFF
0X7000
0X7FFF
0X8000
0XFFF5
0XFFF6
0XFFFF
图2-2:
SPCE061A内存映射表
1.RAM
SPCE061A有2K字的SRAM(包括堆栈区),其地址范围从0x0000到0x07FF。
前
64个字,即0x0000~0x003F地址范围内,可采用6位地址直接地址寻址方法,存取速度为2个CPU时钟周期;其余范围内(0x0040~0x07FF)内存的存取速度则为3个CPU时钟周期。
2.堆栈
SP是用来记录堆栈地址的寄存器,SP会指向堆栈的顶端。
堆栈是一个先进后出的内存结构,μ’nSP™的堆栈结构是由高地址往低地址的方向来储存的。
CPU执行push、子程序呼叫call、以及进入中断服务子程序(ISR,InterruptServiceRoutine)时,会储存寄存器内容在堆栈里,这时SP会递减以反映堆栈用量的增加。
当CPU执行pop、子程序返回ret、以及从ISR返回reti时,SP会递增以反映堆栈用量的减少。
μ’nSP™堆栈的大小限制在2K字的SRAM内,即地址为0x000000~0x0007FF的内存范围中。
SPCE061A系统复位后,SP初始化为0x07FF,每执行push指令一次,SP指针减一。
PUSH后SP减一0X07ff
堆栈生长方向
POP后SP加一0X0000
图2-3:
堆栈生成方向
3.闪存FLASH
32K字片内Flash存储器被划分为128页(每页存储容量为256字),在CPU正常运行状态下均可通程序擦除或写入。
全部32K字Flash存储器均可在ICE工作方式下被编程写入或被擦除。
2.1.3SPCE061A的输入/输出接口
输入/输出接口(也可简称为I/O口)是单片机与外设交换信息的通道。
输入端口负责从外界接收检测信号、键盘信号等各种开关量信号。
输出端口负责向外界输送由内部电路产生的处理结果、显示信息、控制命令、驱动信号等。
µ’nSP™内有并行和串行两种方式的I/O口。
并行口线路成本较高,但是传输速率也很高;与并行口相比,串行口的传输速率较低但可以节省大量的线路成本。
SPCE061A有两个16位通用的并行I/O口:
A口和B口。
这两个口的每一位都可通过编程单独定义成输入或输出口。
A口的IOA0~IOA7用作输入口时具有唤醒功能,即具有输入电平变化引起CPU中断功能。
在那些用电池供电、追求低能耗的应用场合,可以应用CPU的睡眠模式(通过软件设置)以降低功耗,需要时以按键来唤醒CPU,使其进入工作状态。
例如:
手持遥控器、电子字典、PDA、计算器、移动电话等。
1.I/O端口结构
SPCE061A提供了位控制结构的I/O端口,每一位都可以被单独定义用于输入或输出数据。
通常,对某一位的设定包括以下3个基本项:
数据向量Data、属性向量Attribution和方向控制向量Direction。
3个端口内每个对应的位组合在一起,形成一个控制字,用来定义相应I/O口位的输入输出状态和方式。
例如,假设需要IOA0是下拉输入管脚,则相应的Data、Attribution和Direction的值均被置为“0”。
如果需要IOA1是带唤醒功能的悬浮式输入管脚,则Data、Attribution和Direction的值被置为“010”。
与其它的单片机相比,除了每个I/O端口可以单独定义其状态外,每个对应状态下的I/O端口性质电路都是内置的,在实际的电路中不需要再次外接。
例:
设端口A口为带下拉电阻的输入口,在连接硬件时无需在片外接下拉电路。
A口和B口的Data、Attribution和Direction的设定值均在不同的寄存器里,用户在进行I/O口设置时要特别注意这一点。
I/O端口的组合控制设置如表所示:
表2-1:
端口的组合控制设置
方向
属性
数据
功能
带唤醒
功能
功能描述
0
0
0
下拉﹡
是﹡﹡
带下拉电阻的输入引脚
0
0
1
上拉
是﹡﹡
带上拉电阻的输入引脚
0
1
0
高阻
是﹡﹡
高阻态输入引脚
0
1
1
高阻
否
高阻态输入引脚
1
0
0
高电平输出(带数据反相器)
否
带数据反相器的高电平输输出
(当数据位写入0时,输出1)
1
0
1
低电平输出(带数据反相器)
否
带数据反相器的低电平输出
(当数据位写入1时,输出0)
1
1
0
低电平输出
否
带数据缓存器的低电平输出
(无数据反相功能)
1
1
1
高电平输出
否
带数据缓存器的高电平输出
(无数据反相功能)
注:
*:
口位默认为带下拉电阻的输入管脚;
**:
只有当IOA[7~0]内位的控制字为000,001和010时,相应位才具有唤醒的功能。
图2-5:
I/O结构
2.A口寄存器
(1)P_IOA_Data(读/写)(7000H)
A口的数据单元,用于向A口写入或从A口读出数据。
当A口处于输入状态时,读出是读A口管脚电平状态;写入是将数据写入A口的数据寄存器。
当A口处于输出状态时,写入输出数据到A口的数据寄存器。
(2)P_IOA_Buffer(读/写)(7001H)
A口的数据缓冲寄存器写入或从该寄存器读出数据。
当A口处于输入状态时,是将A口的数据写入到A口的数据寄存器;读出则是从A口数据寄存器内读其数值。
当A口处于输出状态时,写入输出数据到A口的数据寄存器。
(3)P_IOA_Dir(读/写)(7002H)
A口的方向向量单元,用于用来设置A口是输入还是输出,该方向控制向量寄存器可以写入或从该寄存器内读出方向控制向量。
Dir位决定了口位的输入/输出方向:
即‘0’为输入,‘1’为输出。
(4)P_IOA_Attrib(读/写)(7003H)
A口的属性向量单元,用于A口属性向量的设置。
(5)P_IOA_Latch(读)(7004H)
A口的锁存寄存器,该单元以锁存A口上的输入数据,用于进入睡眠状态前的触键唤醒功能的启动。
3.B口寄存器
(1)P_IOB_Data(读/写)(7005H)
B口的数据单元,用于向B口写入或从B口读出数据。
当B口处于输入状态时,读出是读B口管脚电平状态;写入是将数据写入B口的数据寄存器。
当B口处于输出状态时,写入输出数据到B口的数据寄存器。
(2)P_IOB_Buffer(读/写)(7006H)
B口的数据向量单元,用于向数据寄存器写入或从该寄存器内读出数据。
当B口处于输入状态时,写入是将数据写入B口的数据寄存器;读出则是从B口数据寄存器里读其数值。
当B口处于输出状态时,写入数据到B口的数据寄存器。
(3)P_IOB_Dir(读/写)(7007H)
B口的方向向量单元,用于设置IOB口的状态。
‘0’为输入,‘1’为输出。
(4)P_IOB_Attrib(读/写)(7008H)
B口的属性向量单元,用于设置IOB口的属性。
2.1.4定时器/计数器
SPCE061A提供了两个16位的定时/计数器:
TimerA和TimerB。
TimerA为通用计数器;TimerB为多功能计数器。
TimerA的时钟源由时钟源A和时钟源B进行“与”操作而形成;TimerB的时钟源仅为时钟源A。
TimerA的结构如图2-6所示,TimerB的结构如图2-7所示。
定时器发生溢出后会产生一个溢出信号(TAOUT/TBOUT)。
一方面,它会作为定时器中断信号传输给CPU中断系统;另一方面,它又会作为4位计数器计数的时钟源信号,输出一个具有4位可调的脉宽调制占空比输出信号APWMO或BPWMO(分别从IOB8和IOB9输出),可用来控制马达或其它一些设备的速度。
此外,定时器溢出信号还可以用于触发ADC输入的自动转换过程和DAC输出的数据锁存。
向定时器的P_TimerA_Data(读/写)(700AH)单元或P_TimerB_Data(读/写)(700CH)单元写入一个计数值N后,选择一个合适的时钟源,定时器/计数器将在所选的时钟频率下开始以递增方式计数N,N+1,N+2,…0xFFFE,0xFFFF。
当计数达到0xFFFF后,定时器/计数器溢出,产生中断请求信号,被CPU响应后送入中断控制器进行处理。
同时,N值将被重新载入定时器/计数器并重新开始计数。
写入P_TimerA_Ctrl(700BH)单元的第6~9位,可选择设置APWMO输出波形的脉宽占空比;同理,写入P_TimerB_Ctrl(700DH)单元的第6~9位,便可选择设置BPWMO输出波形的脉宽占空比。
时钟源A是高频时钟源,来自带锁相环的晶体振荡器输出Fosc;时钟源B的频率来自32768Hz实时时钟系统,也就是说,时钟源B可以作为精确的计时器。
例如,2Hz定时器可以作为实时时钟的时钟源。
图2-6:
TimerA结构
图2-7:
TimerB结构
从上面的结构我们可以看出时钟源A是一个高频时钟源,时钟源B是一个低频时钟源。
时钟源A和时钟源B的组合,为TimerA提供了多种计数速度。
若以ClkA作为门控信号,‘1’表示允许时钟源B信号通过,而‘0’则表示禁止时钟源B信号通过而停止TimerA的计数。
例如,如果时钟源A为“1”,TimerA时钟频率将取决于时钟源B;如果时钟源A为“0”,将停止TimerA的计数。
EXT1和EXT2为外部时钟源。
寄存器:
(1)P_TimerA_Data(读/写)(700AH)
TimerA的数据单元,用于向16位预置寄存器写入数据(预置计数初值)或从其中读取数据。
在写入数值以后,计数器便会在所选择的频率下进行加一计数,直至计数到0xFFFF产生溢出。
.溢出后P_TimerA_Data中的值将会被重置,再以置入的值继续加一计数。
(2)P_TimerA_Ctrl(写)(700BH)
TimerA的控制单元如表所示。
用户可以通过设置该单元的第0~5位来选择TimerA的时钟源(时钟源A、B)。
设置该单元的第6~9位(如表2-3所示),TimerA将输出不同频率的脉宽调制信号,即对脉宽占空比输出APWMO进行控制。
表2-2:
P_TimerA_Ctrl单元
B15-B10
B9
B8
B7
B6
B5
B4
B3
B2
B1
B0
……
占空比的设置
时钟源B选择位
时钟源A选择位
表2-3:
设置B6-B9位
B9
B8
B7
B6
脉冲占空比(APWMO)
TAON
1
0
0
1
9/16
1
1
0
1
0
10/16
1
1
0
1
1
11/16
1
1
1
0
0
12/16
1
1
1
0
1
13/16
1
1
1
1
0
14/16
1
1
1
1
1
TAOUT触发信号
1
0
0
0
0
关断
0
0
0
0
1
1/16
1
0
0
1
0
2/16
1
0
0
1
1
3/16
1
0
1
0
0
4/16
1
0
1
0
1
5/16
1
0
1
1
0
6/16
1
0
1
1
1
7/16
1
1
0
0
0
8/16
1
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 毕业设计 219 语音 控制 模型 仿真