凌阳单片机1Word格式文档下载.docx

上传人:b****4 文档编号:17997846 上传时间:2022-12-12 格式:DOCX 页数:32 大小:136.46KB
下载 相关 举报
凌阳单片机1Word格式文档下载.docx_第1页
第1页 / 共32页
凌阳单片机1Word格式文档下载.docx_第2页
第2页 / 共32页
凌阳单片机1Word格式文档下载.docx_第3页
第3页 / 共32页
凌阳单片机1Word格式文档下载.docx_第4页
第4页 / 共32页
凌阳单片机1Word格式文档下载.docx_第5页
第5页 / 共32页
点击查看更多>>
下载资源
资源描述

凌阳单片机1Word格式文档下载.docx

《凌阳单片机1Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《凌阳单片机1Word格式文档下载.docx(32页珍藏版)》请在冰豆网上搜索。

凌阳单片机1Word格式文档下载.docx

每个相连接的不同ICE模块都拥有自己独特的3—bitID,当PC在传送control信号时都会先传送该3—bitID,只有ICE本身的ID和control信号的ID相同时才会执行该命令或回传资料。

61板上的74HC244主要在我们选用下载线的时候起作用,主要奇缓存的作用和完成SDA是作为数据回送还是数据下传的选择。

2.1.5传感器模块

用光敏电阻组成光敏探测器。

光敏电阻的阻值可以跟随周围环境光线的变化而变化。

当光线照射到白线上面时,光线发射强烈,光线照射到黑线上面时,光线发射较弱。

因此光敏电阻在白线和黑线上方时,阻值会发生明显的变化。

将阻值的变化值经过比较器就可以输出高低电平。

2.2语音控制小车概述

2.2.1功能要求

语音控制小车的主要功能:

可以通过简单的I/O操作实现小车的前进、后退、左转、右转功能;

配合SPCE061A的语音特色,利用系统的语音播放和语音识别资源,实现语音控制的功能;

可以在行走过程中声控改变小车的运动状态;

2.2.2车体结构

车体结构图图3、4所示。

语音控制小车为四轮结构,车的结构示意图如下图所示。

其中前面两个车轮由前轮电机控制,在连杆和支点作用下控制前轮左右摆动,来调节小车的前进方向。

在自然状态下,前轮在弹簧作用下保持中间位置。

后面两个车轮又后轮电机驱动,为整个小车提供动力,所以又称前面的轮子为方向轮,后面的轮子为驱动轮。

整个小车分为三大部分:

车体部分、61板、控制板。

车体部分:

小车车体主要为两个电机驱动装置,分前轮(方向)驱动和后轮(动力驱动)。

在车体的下面有一个可以安装3节AA电池的电池盒,整个小车的电源就是由它来提供的。

在小车的底部有一个红色的小开关,它负责控制整个小车的电源开通与关断。

61板:

61板是小车的核心部分,它负责整个小车控制信号的产生,以及语音的播放和识别功能实现的。

在不使用小车时可以将61板从小车上拆下来,61板仍然是完整的,可以用它来做其它的实验或开发。

控制板:

控制板负责将来自61板的控制信号转化为能够驱动电动机的信号。

2.2.4硬件框图

小车控制系统硬件结构比较简单,主要分为两个部分:

一个是SPCE061A精简开发板(即“61”板)如图5所示,另外一个是电机控制板如图6所示。

电机控制板的工作就是根据61板的输出新高去启动和停止相应的电机,以及调整电机的正反转方向。

正是通过开启和关闭相应的电机,使电机在不同的组合状态运转,最终来实现小车的前进,倒退等功能。

2.3小车方案及程序分析

2.3.1小车方案

可以通过简单的I/O操作实现小车的前进、后退、左转、右转功能;

实现能自动往返于起跑线与终点线间的智能流程,并具备人工遥控(我们选用语音控制)的功能。

2.3.2程序流程图

1、语音识别总流程图

语音识别小车的主程序流程如图7所示,分为四大部分:

初始化部分、训练部分、识别部分、重训操作。

初始化部分:

初始化操作将IOB8~IOB11设置为输出端,用以控制电机。

必要时还要有对应的输入端设置和PWM端口设置等。

训练部分:

训练部分完成的工作就是建立语音模型。

程序一开始判断小车是否被训练过,如果没有训练过则要求对其进行训练,并且会在训练成功之后将训练的模型存储到FLASH,在以后使用时不需要重新训练;

如果已经训练过会把存储在FLASH中的模型调出来装载到辨识器中。

识别部分:

在识别环节当中,如果辨识结果是名字,则进入自动往返流程状态。

如果辨识结果为动作指令小车会语音告知相应动作并执行该动作。

重训操作:

考虑到有重新训练的需求,设置了重新训练的按键(61板的KEY3),循环扫描该按键,一旦检测到此键按下,则将擦除训练标志位(0xe000单元),并等待复位。

复位后,程序重新执行,当检测到训练标志位为0xffff时会要求重新对其进行训练。

下面详细介绍以上提到的子程序。

2、训练函数流程图

当程序检测到训练标志位BS_Flag内容为0xffff,就会要求操作者对它进行训练操作,训练操作的过程如图8所示:

训练采用两次训练获取结果的方式,以训练名字为例:

小车首先会提示:

给我取个名字吧,这时你可以告诉它一个名字;

然后它会提示:

请再说一遍,这时再次告诉它名字,如果两次的声音差别不大,小车就能够成功的建立模型,名称训练成功;

如果没能够成功的建立模型,小车会告知失败的原因并要求重新训练。

成功训练名称后会给出下一条待训练指令提示音:

前进,参照名称训练方式训练前进指令。

依次训练小车的名称—前进指令—倒车指令—左转指令—右转指令,全部训练成功子程序返回,训练结束。

3、语音识别函数流程图

语音识别流程如图9所示:

首先获取辨识器的辨识结果,判断是否有语音触发,如果有语音触发则会返回识别结果的ID号,ID号对应名称或者对应不同的动作。

如果ID号为名称,则进入运动自动往返程序流程;

如果ID号为动作,则语音告知将要执行的动作,并执行该动作。

动作子程序:

动作子程序包括:

前进、倒车、左拐、右拐、自动往返子程序。

前进:

由小车的结构原理和驱动电路分析知:

只要IOB8为高电平,IOB9,IOB10,IOB11全部为低电平即可实现小车的前进。

前进子程序包括语音提示、置端口数据、启动定时器操作。

倒车:

由小车的结构原理分析和驱动电路分析知:

只要IOB9为高电平,IOB8,IOB10,IOB11全部为低电平即可实现小车的倒退。

倒退子程序包括语音提示、置端口数据、启动定时器操作。

左转:

小车左转需要两个条件:

1.前轮左偏2.后轮前进,这时对应的I/O状态为:

IOB8、IOB10为高电平,IOB9、IOB11为低电平。

左转子程序包括语音提示、置端口数据、启动定时器操作。

右转:

小车右转需要两个条件:

1.前轮右偏2.后轮前进,这时对应的I/O状态为:

IOB8、IOB11为高电平,IOB9、IOB10为低电平。

右转子程序包括语音提示、置端口数据、启动定时器操作。

4、自动往返(如图10所示):

由语音识别子函数的名字命令来触发的自动往返鱼如图1所示的跑道的上的子程序。

该程序流程实现小车对各黑线的识别并在识别后执行相应的动作,识别黑线流程实质上是在检测到黑线并又黑线到白线的上升(原为下降,为实现检测信号的灵敏度加反向器后为上升沿)沿脉冲触发下依次开外部中断Ext2IRQ313次的过程。

在从起点到终点过程中当检测到D线以及在从终点返回起点检测到E线时小车步进减速并开启IRQ6-4HZ中断定时8s后自动加速前进继续检测后续黑线并执行相应动作流程。

同时为实现在终点线H过后停留10 

s的要求,需要在检测到H线后开启IRQ5-4HZ中断实现定时10;

A、B、C、D、E、F、G……线时开外不中断2,分别在去城和回程检测到D、E线时开IRQ6-2HZ,在第一次检测到G线时小车停10S。

5、中断控制流程。

虽然已经有了前进、后退以(通过直接呼叫小车的名字使其停车)等语音控制指令,但是考虑环境的干扰因素,小车运行时的噪音影响和有效距离的限制,小车运行后可能接收不到语音指令而一直运行。

为了防止出现这种情况,加入了时间控制,在启动小车运行的同时启动定时器,定时器时间到停止小车的运行,该定时器借助于2Hz时基中断完成,图12.14所示为该程序的流程图。

可以在程序中修改uiTimeset参数来控制运行时间,当uiTimeset=2时,运行时间为1s,以此类推。

3.1硬件连接调试过程

硬件调试过程相对顺利,实验第一步就是按照实验说明书对61板的元件进行焊接以及小车车体的连接安装;

在对实习要求理解的基础上确立了实现方案后,硬件的连接有了明确的要求:

为了实现对黑线的检测需要连接黑白传感器,由于黑白线的识别是基于外部黑白传感信号的输入进而开外不中断实现的(在本次方案中采用外部中断2IPQ3),所以将IOB3口外接黑白传感器,以实现对黑白信号的检测。

由于光线的关系,在实际调程序时传感器的灵敏度不是很高,多数情况下很难检测到信号。

基于上述现象,我们给传感器附加白光灯,用以解决光线不稳定给程序调试带来的影响。

经过上面步骤的硬件改良后,虽然黑白线的识别以明显改善,在光线条件良好的情况下黑白线识别信号检测基本正常,但在相对较暗情况下,传感器并不灵敏。

为了改进这个缺陷,通过对传感器的输出信号的检测发现,在有白线到黑线时信号更为灵敏,于是就有有了在黑白传感器输出口加反向器的设计。

由于车体焊接存在的问题,在程序调试过程中出现了一系列的硬件问题,但经过仔细分析后,这些问题都得到了解决,硬件的调试改进为软件的实现调试打下了基础。

3.2程序调试过程分析

本次设计任务对软件编写调试的能力要求相对较高,程序调节是否顺利决定了实习进度。

由于初次接触61的编程,所以在实习初期我们主要是学习和认知61的板以及61编程的基本知识,这是个学习深入的过程。

在对编程基础知识了解后,基于对题目要求的理解和思考,我们确定实现方案。

这个方案的确定是在查阅了,61资料“语音控制小车”的实现程序后得到的思路。

基于对现有程序框架的理解,我们加入了自动往返程序流程。

当然,程序的调试是不可能一两次就能成功的。

这其中遇到的问题有很多,其中就有硬件的问题以及对61编程的知识的理解的不够而出现的调试困难。

3.3总体结果分析

本设计应用了SPCE061A的软硬件资源,实现了语音控制功能。

标准的C语言编程,丰富的语音资源函数为编程提供了很大的方便。

该设计方案结构简单,以单芯片实现了语音播放与识别以及电机控制功能,相当于“语音识别芯片+普通单片机”的功能。

该语音控制小车操作比较简单,训练和识别成功的几率也比较高,是一个典型的语音识别方案。

4. 

源代码:

//======================================================

// 

Theinformationcontainedhereinistheexclusivepropertyof

SunnnorthTechnologyCo.Andshallnotbedistributed,reproduced,

ordisclosedinwholeinpartwithoutpriorwrittenpermission.

(C)COPYRIGHT2003 

SUNNORTHTECHNOLOGYCO.

ALLRIGHTSRESERVED

Theentirenoticeabovemustbereproducedonallauthorizedcopies.

//========================================================

工程名称:

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-12v1.0

#include"

s480.h"

bsrsd.h"

#define 

P_IOA_Data 

(volatileunsignedint*)0x7000 

#defineP_IOA_Dir 

(volatileunsignedint*)0x7002

#defineP_IOA_Attrib 

(volatileunsignedint*)0x7003

#defineP_IOB_Data 

(volatileunsignedint*)0x7005 

#defineP_IOB_Dir 

(volatileunsignedint*)0x7007 

#defineP_IOB_Attrib 

(volatileunsignedint*)0x7008 

#defineP_TimerA_Data 

(volatileunsignedint*)0x700A 

#defineP_TimerA_Ctrl 

(volatileunsignedint*)0x700B 

#defineP_TimerB_Data 

(volatileunsignedint*)0x700C 

#defineP_TimerB_Ctrl 

(volatileunsignedint*)0x700D 

#defineP_Watchdog_Clear 

(volatileunsignedint*)0x7012 

#defineP_INT_Mask 

(volatileunsignedint*)0x702D 

#defineP_INT_Clear 

(volatileunsignedint*)0x7011 

#defineP_INT_Ctrl 

(volatileunsignedint*)0x7010 

#defineP_SystemClock 

(volatileunsignedint*)0x7013 

#defineNAME_ID 

0x100

#defineCOMMAND_GO_ID 

0x101

#defineCOMMAND_BACK_ID 

0x102

#defineCOMMAND_LEFT_ID 

0x103

#defineCOMMAND_RIGHT_ID 

0x104

#defineS_NAME 

//给我取个名字吧

#defineS_ACT1 

//前进

#defineS_ACT2 

//倒车,请注意

#defineS_ACT3 

//左拐

#defineS_ACT4 

//右拐 

#defineS_RDY 

//Yeah

#defineS_AGAIN 

//请再说一遍

#defineS_NOVOICE 

//没有听到任何声音

#defineS_CMDDIFF 

//说什么暗语呀

#defineS_NOISY 

#defineS_START 

//准备就绪,开始辨识 

#defineS_GJG 

10 

//拐就拐

#defineS_DCZY 

11 

extern 

unsignedintBSR_SDModel[100];

//外部变量BSR_SDModel[100],辨识器自带

externvoidF_FlashWrite1Word(unsignedintaddr,unsignedintValue);

externvoidF_FlashErase(unsignedintsector);

unsignedintuiTimeset=3;

//运行时间定时,调整该参数控制运行时间

unsignedintuiTimecont;

//运行时间计时

unsignedinttime_10s,time,tem,h,temp,m,c,y,t;

//=============================================================

//语法格式:

voidDelay();

//实现功能:

延时

//参数:

//返回值:

voidDelay() 

{

unsignedinti;

for(i=0;

i<

0x3Fff;

i++)

*P_Watchdog_Clear=0x0001;

}

voidPlaySnd(unsignedSndIndex,unsignedDAC_Channel);

语音播放函数

SndIndex-播放语音资源索引号

DAC_Channel-播放声道选择

voidPlaySnd(unsignedSndIndex,unsignedDAC_Channel)

BSR_StopRecognizer();

//停止识别器

SACM_S480_Initial

(1);

//初始化为自动播放

SACM_S480_Play(SndIndex,DAC_Channel,3);

//开始播放一段语音

while((SACM_S480_Status()&

0x0001)!

=0) 

//是否播放完毕?

SACM_S480_ServiceLoop();

//解码并填充队列

//清看门狗

SACM_S480_Stop();

//停止播放

BSR_InitRecognizer(BSR_MIC);

//初始化识别器

intTrainWord(intWordID,intSndID);

训练一条指令

WordID-指令编码

SndID-指令提示音索引号

intTrainWord(unsignedintWordID,unsignedintSndID)

intResult;

PlaySnd(SndID,3);

//引导训练,播放指令对应动作

while

(1)

Result=BSR_Train(WordID,BSR_TRAIN_TWICE);

//训练两次,获得训练结果

if(Result

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 小学教育 > 其它课程

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1