基于凌阳单片机的语音遥控小车文档格式.docx
《基于凌阳单片机的语音遥控小车文档格式.docx》由会员分享,可在线阅读,更多相关《基于凌阳单片机的语音遥控小车文档格式.docx(31页珍藏版)》请在冰豆网上搜索。
2.配合SPCE061A的语音特色,利用系统的语音播放和语音识别资源,实现语音控制的功能;
3.可以在行走过程中声控改变小车运动状态;
4.在超出语音控制范围时能够自动停车。
2.2功能说明
1.小车运动控制:
通过SPCE061A的I/O端口,驱动控制板的H桥电路,进而控制前轮电机和后轮电机。
2.声控功能:
利用特定人语音识别实现小车的名称和动作训练,并根据相应的语音指令输入执行前进、后退、左转、右转、停车等动作。
3.定时控制功能:
利用时基定时器设定运行时间,小车运行同时启动定时器,时间到小车停止运行。
车体:
双电机两轮驱动
供电:
电池(四节AA:
1.2V×
4或1.5V×
4)
注:
由于语音信号的不确定性,语音识别的过程会出现一定的误差和不准确性;
由于小车行动比较灵活,速度比较快,在使用时一定要注意保持场地足够大,且保证不会对周围的物体造成伤害;
不要让小车长时间运行在堵转状态(堵转状态:
由于小车所受阻力过大,造成小车电机加电但并不转动的现象),这样会造成很大的堵转电流,有可能会损坏小车的控制电路。
可以自行添加各种传感器,实现避障、循迹、跟踪等功能。
3芯片特性简介
3.1SPCE061A简介
随着单片机功能集成化的发展,其应用领域也逐渐地由传统的控制,扩展为控制处理、数据处理以及数字信号处理(DSP,DigitalSignalProcessing)等领域。
凌阳的16位单片机就是为适应这种发展而设计的。
它的CPU内核采用凌阳最新推出的µ
’nSP™(MicrocontrollerandSignalProcessor)16位微处理器芯片(以下简称µ
’nSP™)。
围绕µ
’nSP™所形成的16位µ
’nSP™系列单片机(以下简称µ
’nSP™家族)采用的是模块式集成结构,它以µ
’nSP™内核为中心集成不同规模的ROM、RAM和功能丰富的各种外设接口部件,如图3.1所示。
图3.1µ
’nSP™家族的模块式结构
µ
’nSP™内核是一个通用的核结构。
除此之外的其它功能模块均为可选结构,亦即这种结构可大可小或可有可无。
借助这种通用结构附加可选结构的积木式的构成,便可形成各种不同系列派生产品,以适合不同的应用场合。
这样做无疑会使每一种派生产品具有更强的功能和更低的成本。
’nSP™家族有以下特点:
体积小、集成度高、可靠性好且易于扩展
’nSP™家族把各功能部件模块化地集成在一个芯片里,内部采用总线结构,因而减少了各功能部件之间的连线,提高了其可靠性和抗干扰能力。
另外,模块化的结构易于系统扩展,以适应不同用户的需求。
具有较强的中断处理能力
’nSP™家族的中断系统支持10个中断向量及10余个中断源,适合实时应用领域。
高性能价格比
’nSP™家族片内带有高寻址能力的ROM、静态RAM和多功能的I/O口。
另外,µ
’nSP™的指令系统提供具有较高运算速度的16位×
16位的乘法运算指令和内积运算指令,为其应用增添了DSP功能,使得µ
’nSP™家族运用在复杂的数字信号处理方面既很便利,又比专用的DSP芯片廉价。
功能强、效率高的指令系统
’nSP™指令系统的指令格式紧凑,执行迅速,并且其指令结构提供了对高级语言的支持,这可以大大缩短产品的开发时间。
低功耗、低电压
’nSP™家族采用CMOS制造工艺,同时增加了软件激发的弱振方式、空闲方式和掉电方式,极大地降低了其功耗。
’nSP™家族的工作电压范围大,能在低电压供电时正常工作,且能用电池供电。
这对于其在野外作业等领域中的应用具有特殊的意义。
SPCE061A是一款16位μ'
nSP结构的微控制器。
该芯片带有硬件乘法器,能够实现乘法运算、内积运算等复杂的运算。
它不仅运算能力强,而且处理速度快,单周期最高可以达到49MHz。
SPCE061A内嵌32K字的FLASH程序存储器以及2K的SRAM。
同时该SOC芯片具有ADC和DAC功能[6],其MIC_ADC通道带有AGC自动增益环节,能够轻松将语音信号采集到芯片内部,两路10位的电流输出型DAC,只要外接一个功放就可以完成声音的播放。
以上介绍的这些硬件资源使得该SPCE061A能够单芯片实现语音处理功能[7]。
为实现语音播报功能SPCE061A精简开发板是最主要的部分,所有的设计都是围绕它展开的,它为播报的实现提供了理论基础。
SPCE061A精简开发板(简称61板),是以凌阳16位单片机SPCE061A精简开发-仿真-实验板,大小相当于一张扑克牌,可作为单片机项目初期研发使用。
61板除了具备单片机最小系统电路外,还包括有电源电路、音频电路(含MIC输入部分和DAC音频输出部分)、复位电路等,采用电池供电,方便随身携带!
使我们在掌握软件的同时,熟悉单片机硬件的设计制作,锻炼我们的动手能力,也为单片机学习者和开发者创造了一个良好的学习条件和开发新产品的机会!
61板上有调试器接口(Probe接口)以及下载线(EZ_Probe)接口,分别可接凌阳科技的在线调试器、简易下载线,配合unSPIDE,可方便地在板上实现程序的下载、在线仿真调试[8]。
61板上的主要功能模块如下:
SPCE061A单片机最小系统外围电路模块;
电源输入模块;
音频电路(DAC音频功放输出)模块;
按键模块;
I/O端口接口模块;
调试、下载接口模块;
16位µ
’nSP™微处理器;
电压(CPU)VDD为2.4~3.6V(I/O)VDDH为2.4~5.5V;
时钟:
0.32MHz~49.152MHz;
内置2K字SRAM;
内置32KFLASH;
可编程音频处理;
晶体振荡器;
系统处于备用状态下(时钟处于停止状态),耗电仅为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)功能;
内置在线仿真电路ICE(In-CircuitEmulator)接口;
具有保密能力;
具有WatchDog功能[9]。
SPEC061A片内存储器结构:
SPEC061A有2K的SRAM(包括堆栈区),其地址范围为0x0000-0x07FF。
前64个字,即0x0000-0x003F地址范围内可采用6位地址直接地址寻址方法,寻访速度为2个CPU时钟周期;
其余0x0040-0x07FF地址范围内存储器的寻访速度则为3个CPU时钟周期。
SPCE061A是一个用闪存代替掩膜ROM的MTP(多次编程)芯片,具有32K闪存容量。
用户可以用闪存来存储用户程序。
为了安全起见,不对用户开放整体擦除功能。
32K字的内嵌式闪存被划分为128页(每页存储容量为256个字),它们在CPU正常状态下均可通过程序擦除或写入。
全部32K字闪存均可在ICE工作方式下被编程写入或被擦除。
SPCE061A的结构如图3.2所示:
图3.2SPCE061A的结构
SPCE061A有两种封装片,一种为84个引脚,PLCC84封装形式;
另一种为80个引脚,LQFP80封装。
它的排列如图3.3所示。
图3.3SPCE061ALQFP80分装引脚排列图
在PLCC84封装中,有15个空余脚,用户使用时这15个空余脚悬浮。
在LQFP80封装中有9个空余脚,用户使用时这9个空余脚接地。
最小系统接线如图3.4所示,在OSC0、OSC1端接上晶振及谐振电容,在锁相环压控振荡器的阻容输入VCP端接上相应的电容电阻后即可工作。
其它不用的电源端和地端接上0.1µ
F的去藕电容提高抗干扰能力。
图3.4SPCE061A最小系统原理图
3.2端口结构
SPCE061A提供了位控制结构的I/O端口,每一位都可以单独用于数据输入或输出。
每个独立的位可通过以下3种控制向量来作设定:
1.数据向量Data
2.属性向量Attribution
3.方向控制向量Direction
每3个对应的控制向量组合在一起,形成一个控制字,用来定义相对应I/O端口位的输入输出状态和方式。
例如,假设需要IOA0是下拉输入引脚,则相对应的Data、Attribution和Direction的值均被设为“0”。
如果需要IOA1是带唤醒功能的悬浮式输入引脚,则Data、Attribution和Direction的值被设为“010”。
与其它的单片机相比,SPCE061A除了每个I/O口可以单独定义其状态外,每个对应状态下的I/O端口性质电路都是内置的,在实际的电路中不需要再外接。
例:
设A口为带下拉电阻的输入端口,在连接硬件时不用再外接下拉电路。
1.IO口的使用:
IOA0到TOA7,用于数码管显示的段驱动。
IOA8到IOA15,用于数码管显示的位驱动。
IOB8到IOB15,用于1*8键盘输入。
IOB0用于SPR4096模组的时钟端口SCK信号。
IOB1用于SPR4096模组的数据端口SDK信号。
IOB2用于数码管的冒号段驱动。
IOA口(IOA0—IOA15)设置为:
带数据缓存器的低电频输出。
IOB口(IOB8—IOB15)设置为:
带下拉电阻的输入引脚。
IOB0与IOB2 设置为:
带数据缓存器的高电频输出。
2.SIO口的设置:
设置IOB0为SCK(串行接口时钟端口),IOB1为SDK(串行接口数据端口),如表b7置1时不必设置IOB0和IOB1的输入输出状态。
串行设备地址设置为24位由b0,b1控制。
设置数据帧的写传输b6控制。
设置传输速率CPUCLK/8,b4,b3控制。
具体控制字如表3.1:
表3.1SIO口的控制设置
b7
b6
b5
b4
b3
b2
b1
b0
SIO-Config
R/W
R/W-EN
Clock-Sel
---
Addr-Select
1
以上就是所用到的与硬件如LED、键盘、SPR_4096连接的端口的介绍,除此之外还有异步通信串行接口、音频输入接口、麦克风MIC输入接口等。
3.3凌阳中断应用
(1)在每条指令结束后系统都自动检测中断请求信号,如果有中断请求,相应的中断允许位为真(允许中断),相应的总中断0许位为真(允许中断),则响应中断。
(2)保护现场,CPU一旦响应中断,中断系统会自动的保存当前的PC和SR寄存器(入栈)进入中断服务程序地址入口,中断服务程序中可以通过入栈保护原程序中用到的数据,保护现场前,一般要关中断以防止现场被破坏。
保护现场一般是将堆栈指令将原程序中用到的寄存器推入堆栈,在保护现场之后要开中断,以响应更高优先级的中断申请。
(3)中断服务,即为相应的中断源服务。
(4)清相应的中断请求标志位,以免CPU总是执行该中断。
(5)恢复现场,用堆栈指令将保护在堆栈中的数据弹出来,在恢复现场前要关中断,以防止现场被破坏,在恢复现场后应及时开中断。
(6)返回,此时CPU将PC指针和SR内容出栈恢复断点,从而使CPU继续执行刚才被中断的程序。
CPU执行中断的服务流程图如图3.5所示。
图3.5中断服务流程图
SPCE061A系列单片机中断系统,是凌阳16位单片机中中断功能较强的一种,它可以提供14个中断源,具有两个中断优先级,可实现两级中断嵌套功能。
用户可以用关中断指令(或复位)屏蔽所有的中断请求,也可以用开中断指令使CPU接受中断申请。
每一个中断源可以用软件独立控制为开或关中断状态;
但中断级别不可用软件设置。
SPCE061A的结构给出了三种类型的中断:
软件中断、异常中断和事件中断。
1)软件中断,软件中断是由软件指令break产生的中断。
软件中断的向量地址为FFF5H。
2)异常中断,异常中断表示为非常重要的事件,一旦发生,CPU必须立即进行处理。
目前SPCE061A定义的异常中断只有‘复位’一种。
通常,SPCE061A系统复位可以由以下三种情况引起:
上电、看门狗计数器溢出以及系统电源低于电压低限。
不论什么情况引起复位,都会使复位引脚的电位变低,进而使程序指针PC指向由一个复位向量(FFF7H)所指的系统复位程序入口地址。
3)事件中断,事件中断(可简称“中断”,以下提到的“中断”均为事件中断)一般产生于片内设部件或由外设中断输入引脚引入的某个事件。
这种中断的开通/禁止,由相应独立使能和相应的IRQ或FIQ总使能控制。
SPCE061A的事件中断可采用两种方式:
快速中断请求即FIQ中断和中断请求即IRQ中断。
这两种中断都有相应的总使能。
中断源:
SPCE061A单片机的中断系统有14个中断源分为两个定时器溢出中断、两个外部中断、一个串行口中断、一个触键唤醒中断、7个时基信号中断、PWM音频输出中断。
中断向量:
共有9个中断向量即FIQ、IRQ0~IRQ6及UARTIRQ。
这9个中断向量共可安置14个中断源供用户使用,其中有3个中断源可安置在FIQ或IRQ0~IRQ2中,另有10个中断源则可安置在IRQ3~IRQ6中。
还有一个专门用于通用异步串行口UART的中断源,须安置在UARTIRQ向量中。
详细如3.2表所示。
表3.2中断向量
中断源
中断优先级
中断向量
保留字
Fosc/1024溢出信号PWMINT
FIQ/IRQ0
FFF8H/FFF6H
_FIQ/_IRQ0
TimerA溢出信号
FIQ/IRQ1
FFF9H/FFF6H
_FIQ/_IRQ1
TimerB溢出信号
FIQ/IRQ2
FFFAH/FFF6H
_FIQ/_IRQ2
外部时钟输入信号EXT1
IRQ3
FFFBH
_IRQ3
外部时钟输入信号EXT2
触键唤醒信号
4096Hz时基信号
IRQ4
FFFCH
_IRQ4
2048Hz时基信号
1024Hz时基信号
4Hz时基信号
IRQ5
FFFDH
_IRQ5
2Hz时基信号
频选信号TMB1
IRQ6
FFFEH
_IRQ6
频选信号TMB2
UART传输中断
IRQ7
FFFFH
_IRQ7
BREAK
软中断
从表中可以看到每个中断入口地址对应多个中断源,因此在中断服务程序中需通过查询中断请求位来判断是那个中断源请求的中断。
SPCE061A单片机有多个中断源,为了使每个中断源都能独立地被开放和屏蔽,以便用户能灵活使用,它在每个中断信号的通道中设置了一个中断屏蔽触发器,只有该触发器无效,它所对应的中断请求信号才能进入CPU,即此类型中断开放。
否则即使其对应的中断请求标志位置“1”,CPU也不会响应中断,即此类型的中断被屏蔽。
同时CPU内还设置了一个中断允许触发器,它控制CPU能否响应中断。
中断控制寄存器。
SPCE061A对中断源的开放和屏蔽,以及每个中断源是否被允许中断,都受中断允许寄存器P_INT_Ctrl和P_INT_Clear及P_INT_Ctrl_New控制和一些中断控制指令。
中断控制单元P_INT_Ctrl(读/写)(7010H)。
P_INT_Ctrl控制单元具有可读和可写的属性,其读写时的意义是不同的。
其各位如表3.3所列。
表3.3中断控制单元P_INT_Ctrl
B7
B6
B5
B4
B3
B2
B1
B0
IRQ3_KEY
IRQ4_4KHz
IRQ4_
2KHz
1KHz
IRQ5_
4Hz
2Hz
IRQ6_
TMB1
TMB2
B15
B14
B13
B12
B11
B10
B9
B8
FIQ_Fosc/1024
IRQ0_Fosc/1024
FIQ_TMA
IRQ1_TMA
FIQ_TMB
IRQ2_TMB
IRQ3_
EXT2
EXT1
当写中断控制单元中的某位为“1”时,即允许该位所代表的中断被开放,并关闭屏蔽中断触发器,此时当有该中断申请时,CPU会响应。
否则如果该位被置0则禁止该位所代表的中断。
即使有中断申请,CPU也不会响应。
当读取中断控制单元时,其主要作为中断标志,因为其每一位均代表一个中断,当CPU响应某中断时,便将该中断标志置“1”,即将P_INT_Ctrl中的某位置“1”,可以通过读取该寄存器来确定CPU响应的中断。
清除中断标志控制单元P_INT_Clear(写)(7011H)。
清除中断标志控制单元主要用于清除中断控制标志位,当CPU响应中断后,会将中断标志置位为“1”,当进入中断服务程序后,要将其控制标志清零,否则CPU总是执行该中断。
其各位如表3.4所列。
表3.4清除中断标志控制单元P_INT_Clear
因为P_INT_Clear寄存器的每一位均对应一个中断,所以如果想清除某个中断状态标志,只要将该寄存器中对应的中断位置1即可清除该中断状态标志位。
该寄存器只有写的属性,读该寄存器是无任何意义的。
激活和屏蔽中断控制单元P_INT_Ctrl_New(读/写)(702DH)。
该单元用于激活和屏蔽中断。
其各位如表3.5所列。
表3.5激活和屏蔽中断控制单元P_INT_Ctrl_New
FIQ
IRQ0
IRQ1
IRQ2
当写该控制单元时,与P_INT_Ctrl功能相似。
读该控制单元时,只作为了解激活那一中断的功能使用。
与其写入值是一致的。
在语音遥控小车系统中应用了两个中断,如下:
1)FIQTMA用于语音播放/识别中断
2)IRQ52Hz用于运动中断定时控制
3.4凌阳语音
表3.6列出了不同音频质量等级的编码技术标准(频响)。
表3.6不同音频质量等级的编码技术标准
信号类型
频率范围/Hz
采样率/kHz
量化精度/(位)
电话语音
200~3400
8
16
宽带音频(AM质量)
50~7000
调频广播(FM质量)
20000~150000
37.8
高质量音频(CD质量)
20~20000
44.1
凌阳音频压缩算法处理的语音信号的范围是200Hz-3.4KHz的电话话音。
压缩分无损压缩和有损压缩。
无损压缩一般指:
磁盘文件,压缩比低:
2:
1~4:
1。
而有损压缩则是指:
音/视频文件,压缩比可高达100:
凌阳音频压缩算法根据不同的压缩比分为以下几种(具体可参见语音压缩工具一节内容):
SACM-A2000:
压缩比为8:
1,8:
1.25,8:
1.5
SACM-S480:
压缩比为80:
3,80:
4.5
SACM-S240: