声音导引系统软件设计.docx
- 文档编号:10091013
- 上传时间:2023-05-23
- 格式:DOCX
- 页数:34
- 大小:431.71KB
声音导引系统软件设计.docx
《声音导引系统软件设计.docx》由会员分享,可在线阅读,更多相关《声音导引系统软件设计.docx(34页珍藏版)》请在冰点文库上搜索。
声音导引系统软件设计
1引言
导航即引导某一设备从指定航线的一点运动到另一点的方法。
随着技术的发展,使用导航系统的现代机动车辆在逐渐的增多。
这种类型的导航系统使得用户能够计算出到达特定目的地的路线,并且在行程期间沿着该路线引导用户。
为了能够提供这些功能,导航系统使用其中包含关于地理区域、城镇、位置、建筑物、街道、沿特定部分道路的偏爱行程时间、道路的速度限制等信息的地理数据。
使用这种地理数据,导航系统能够找到最优路线,即从起点至特定目的地最短和/或最快的一条路线。
可以由用户通过适当的用户接口输入该起点和/或目的地。
可替换地,在某些导航系统中,也可以使用自动位置确定设备、例如使用GPS来确定起点。
1.1导航技术的应用和发展
目前说到导航人们就立刻会想到GPS导航。
在交通系统中,车载终端导航系统十分重要,GPS是该功能的核心。
与此同时,三维导航也是GPS的首要功能,飞机、轮船、地面车辆以及步行者都可以利用GPS导航器进行导航。
车载终端导航系统是在全球定位系统GPS基础上发展起来的一门新型技术。
GPS导航仪就是能够帮助用户准确定位当前位置,并且根据既定的目的地计算行程,通过地图显示和语音提示两种方式引导用户行至目的地的汽车驾驶辅助设备[2]。
目前在运钞车、急救车、危险品及贵重物品运输车等特种车辆领域,车载GPS被广泛应用。
中国加入WTO后,汽车市场需求更加旺盛。
车载导航系统可以为私人汽车车主提供丰富的增值服务。
未来当GPS性价比进一步提高时,GPS车载系统将有着较为广阔的应用前景。
导航系统使用图像和声音的组合沿着道路引导移动车辆。
然而,由于在驾驶的同时观看图像可能发生事故而造成危险,因此比起图像向导功能,驾驶者更依靠语音向导功能。
声音导航在很多领域得也到了广泛运用,所谓声音导航就是利用声波在介质中传播来定位从而引导航行。
目前,声纳是各国海军进行水下监视使用的主要技术,用于对水下目标进行探测、分类、定位和跟踪;进行水下通信和导航,保障舰艇、反潜飞机和反潜直升机的战术机动和水中武器的使用。
20世纪形成的初级知识型声纳和综合声纳系统,在21世纪必将得到进一步的发展和提高。
21世纪声纳技术将应用海洋声学、电子学、计算机学、材料学、通信理论等领域最新成果,用更精致的模型表征海洋声环境物理特征,从而创造出高级知识型声纳和声纳系统。
声纳技术在反水雷中的应用非常广泛。
随着声纳技术的发展,其应用范围还在不断扩大。
现代海战赋予水雷新的使命,把它作为某些特定条件下的主战装备和杀手锏武器。
因此现在各国海军都在大力加强反水雷战的能力,尤其是军事强国更是努力研发反水雷技术。
1.2基于单片机在声音引导系统中的应用概述
单片微型计算机简称单片机,他是在一块芯片上集成了CPU,RAM,ROM,定时计数器和各种I/O接口硬件。
就其组成而言单片机就是一个计算机,它具有许多运用于控制的指令和硬件支持。
自问世以来由于它优良的特性被广泛应用。
8051单片机广泛应用于键盘,电话机显示器电冰箱,空调,洗衣机等电器中。
基于单片机的声音导航定位系统结构简单,制作方便,声音导引小车试验结果表明能够完成对既定目标的定位,并能根据声音导航往指定的位置靠近,且对无线信号响应灵敏,但由于声音频率的局限性,目前它只能有声音干扰较小的环境下完成对特定位置的定位及导航,自主行走也仅限于给定的路线,且当声源与接收模块距离较远时误差会加大。
如若使用超声波的发射和接收来代替声音模块,就可以减少干扰和加大测试距离。
另外,由于工业生产、生活的自动化都离不开智能化的机器,譬如:
人们对太空的探索,对单调工作的替代,在危险环境中的操作等都需借助于智能化的行走、运动机构。
因此,由声音引导的智能小车作为最常用的行走机构在工业生产与生活中必将得到广泛的应用。
本文在分析已有的智能小车设计基础上,充分借鉴已有算法,并结合声音导引系统的自身特点、设计要求和功能特性来实现声音导引小车运动。
将单片机硬件与软件有机结合,形成一套具有优良特性,准确度高的声音控制小车自动定位系统。
1.3本文工作及内容安排
第一章介绍了声音导引系统的研究背景以及相关领域的研究现状,导航技术即及声音导航技术的应用。
阐述了系统实现的目的与意义,概述了本论文的主要工作。
第二章主要阐述系统设计的方案选择与论证,对整个系统设计进行分析比较,通过一系列的论证较全面的对系统设计的实现方法做一阐述。
并确定本系统实现的设计方法和关键技术。
第三章是硬件系统设计,声音导引系统的实现基于单片机硬件与软件的有机结合,简略介绍了声音导引小车硬件电路的设计与实现。
第四章是软件系统设计,包括可移动声源控制软件和音频接收模块控制软件两部分,并详细介绍可移动声源控制软件部分。
第五章是对系统测试结果的报告,主要通过系统测试数据来描述声控小车的运行过程和定位。
最后一章对本文所做的工作进行全面的总结,并指出了工作中的不足以及在提出后期完善工作。
2声音引导系统的设计
2.1概述
本系统采用两片STC12C5A60S2增强型51单片机,双直流电机双轮驱动小车。
通过接收点收到声音信号时间不同,判断小车离各个接收站的距离远近,通过无线传输模块控制车载单片机,进而控制小车运动,到达目的地,发出声光信号。
本系统在设计中注意低功耗处理和力求高性价比等细节。
本设计主要特点:
高效的L293电机驱动电路,提高电源利用率。
双电源设计,控制电路电源与电机电源隔离,信号通过光耦传输。
采用测时间差的方式,通过3点声音信号实现精确定位。
2.2控制系统的总体要求
(1)制作可移动的声源。
可移动声源产生的信号为周期性音频脉冲信号,如图2所示,声音信号频率不限,脉冲周期不限。
图1信号波形示意图
(2)可移动声源发出声音后开始运动,到达Ox线并停止,这段运动时间为响应时间,测量响应时间,用下列公式计算出响应的平均速度,要求平均速度大于5cm/s。
(3)可移动声源停止后的位置与Ox线之间的距离为定位误差,定位误差小于3cm。
(4)可移动声源在运动过程中任意时刻超过Ox线左侧的距离小于5cm。
(5)可移动声源到达Ox线后,必须有明显的光和声指示。
(6)功耗低,性价比高。
2.3模块的论证
根据题目设计要求,本设计由移动声源系统和声源坐标采集系统组成声音导引系统,其中移动声源系统包括单片机控制器模块,电机驱动模块,音频发射模块,无线收发模块,电源。
上位机包括单片机控制器模块,音频接收模块,无线收发模块,电源。
2.3.1单片机控制模块
根据设计要求,声音导引车系统控制器能够有效控制音频脉冲信号收发、小车电机的动作、计算和显示实时车速、运行时间和距离,与接收器进行无线通信传输数据,并有语音播放和指示灯显示当前声源定位状态。
基于对S51系列及AVR系列单片机的性能指标分析,再考虑我们使用熟练程度,我们采用2片STC12C5A60S2单片机作为控制部分控制器件,分别用于可移动声源和上位机。
STC12C5A60S2/AD/PWM系列单片机是宏晶科技生产的单时钟/机器周期(1T)的单片机,是高速/低功耗/超强抗干扰的新一代8051单片机,指令代码完全兼容传统8051,但速度快8-12倍。
内部集成MAX810专用复位电路,2路PWM,8路高速10位A/D转换(250K/S),针对电机控制,强干扰场合。
2.3.2无线收发模块
根据题目设计要求,可移动声源发出音频信号,利用三个地点的音频接收电路测量出小车离三个定点的距离,然后产生可移动声源的坐标误差信号,并用无线收发模块把此信号传输到可移动声源的小车上,引导其运动。
以下对于无线收发模块的几个方案进行讨论与比较。
方案一:
采用由分立元件超外差接收电路和无线发射器组成无线收发模块。
此模块电路复杂,成本高,传输速率低,可靠性差等缺点。
还易受外界杂散信号的干扰和电路自身的不稳定而产生噪声。
方案二:
采用廉价的Nordic公司NRF24L01芯片核心构成无线收发模块。
nRF24L01内置频率合成器、功率放大器、晶体振荡器、调制器等功能模块。
这些特性使得由nRF24L0l构建的无线数据传输系统具有成本低,速率高,传输可靠等优点。
基于上述分析,采用方案二。
2.3.3电机及驱动模块选择
驱动电机选择
常用驱动电机有两种:
步进电机、直流电机。
方案一:
采用步进电机。
步进电机优点是控制简单,电机旋转速度及距离易读取,缺点是起动较慢,驱动电路复杂,价格贵。
方案二:
采用直流电机。
直流电机优点是起动快,驱动电路简单,价格便宜。
缺点是控制复杂,电机旋转速度及距离读取需加装光电码盘。
综合分析上述两方案,为取得较高的声源运行速度,我们选择方案二。
驱动模块选择
本设计要求声源小车要根据误差信号通过单片机电机控制ASSP芯片MMC-1构成的驱动电路来实现对移动声源小车的控制,而电机驱动电路主要实现电机的正反转来控制车体的前后和左右方向的选择,所以电机类型也是重要的指标。
方案一:
采用分立元件三极管组成的H桥PWM调速电路实现对直流电动机的速度和方向控制。
由于采用分立元件组成电机逻辑驱动,易造成驱动电路稳定性差,且价格贵。
方案二:
采用双桥电机驱动芯片L298实现对带光电编码盘的直流电机进行控制。
L298内部结构如图2.4.1所示。
L298是一款高集成度、双桥结构的直流/步进电机驱动器,而且一片L298可以同时驱动两个电机。
L298电机驱动电路优点是使用元件少,可靠性高,控制简单,费用低。
2.3.4音频发射
通过单片机定时器产生一个4Khz的脉冲信号,控制三极管的通断,使喇叭产生一个高频音频信号。
2.3.5音频接收
通过MIC接收,音频信号经放大和滤波后再整形成方波,测出响应时间。
具体工作原理:
主控单片机通过无线给从机发送触发信息,并开始计时,当车载单片机接收到信号后发出4Khz音频信号。
当MIC接收到小车上发来的音频信号,从而停止计时,再根据声速便可测出声源距3个接收点之间的距离,通过主控单片机计算,给小车发送指令,引导小车到达目的地。
2.4系统总体框架
本系统由两片STC12C5A60S2单片机主控单片机和从控单片机,声源发射器,接收站A,接收站B,接收站C,两个无线传输模块nRF24L01,电机控制芯片,电机驱动模块,声光电路等组成。
图2系统总体框架
3硬件部分设计
4软件部分设计
4.1总体思路
4.1.1C语言简介
单片机应用系统的程序设计,可以采用汇编语言,也可以采用c语言。
汇编语言是一种用助记忆符来代表机器语言的符号语言。
因为他最接近机器语言,所以汇编语言对单片机的操作直接、简洁,编制的的程序紧凑、执行效率高。
但是不同种类的单片机其汇编语言存在差异,在一种单片机上开发的应用程序不能直接应用到另一种单片机上,如果进行移植难度大,程序的可读性也差。
此外但应用系统规模较大时,程序开发的工作量非常大。
而C语言恰好相反,可移植性好,与自然语言非常接近,同样的功能可以用少量的语句完成,入门容易,编程效率高,程序可读性好。
而且C语言程序中也可以嵌入汇编语言,以满足对执行效率或操作有特殊要求的情况。
因此在嵌入式系统应用程序的开发中,C语言逐步成为主要的编程语言。
C语言具有如下优越性:
1.无须懂得单片机的具体硬件,也能够编出符合硬件实际的专业水平的程序。
2.不懂得单片机的指令集,也能够编写完美的单片机程序。
3.不同函数的数据实行覆盖,有效利用片上有限的RAM空间。
4.提供auto、static、const等存储类型和专门针对8051单片机的data、idata、pdata、xdata、code等存储类型,自动为变量合理地分配地址。
5.C语言提供复杂的数据类型(数组、结构、联合、枚举、指针等),极大地增强了程序处理能力和灵活性。
6.提供small、compact、large等编译模式,以适应片上存储器的大小。
7.中断服务程序的现场保护和恢复,中断向量表的填写,是直接与单片机相关的,都由C编译器代办。
8.程序具有坚固性:
数据被破坏是导致程序运行异常的重要因素。
C语言对数据进行了许多专业性的处理,避免了运行中间非异步的破坏。
9.提供常用的标准函数库,以供用户直接使用。
10.有严格的句法检查,错误很少,可容易地在高级语言的水平上迅速地被排掉。
11.可方便地接受多种实用程序的服务:
如片上资源的初始化有专门的实用程序自动生成;再如,有实时多任务操作系统可调度多道任务,简化用户编程,提高运行的安全性等等。
12.头文件中定义宏、说明复杂数据类型和函数原型,有利于程序的移植和支持单片机的系列化产品的开发。
使用C语言肯定要使用到C编译器KEIL51软件,以便把写好的C程序编译为机器码,这样单片机才能执行编写好的程序。
KEILuVISION2是众多单片机应用开发软件中优秀的软件之一,它支持众多不同公司的MCS51架构的芯片,它集编辑,编译,仿真等于一体,同时还支持,PLM,汇编和C语言的程序设计,它的界面和常用的微软VC++的界面相似,界面友好,易学易用,在调试程序,软件仿真方面也有很强大的功能。
因此很多开发51应用的工程师或普通的单片机爱好者,都对它十分喜欢。
4.1.2软件部分总述
小车启动后,蜂鸣器发出音频信号后,车载单片机收到上位机由无线数据通信模块传来的计时信号,求出时间差△t0,经过处理,控制小车的运行,进行声光提示。
具体思路:
车载单片机内部程序可移动声源由智能小车与压电蜂鸣器组成,初始设置接收器A和接收器B在工作状态,接收器C在停止状态,小车启动,蜂鸣器发出音频信号,接收器收到信号后触发中断,到达这两个接收器的时间是不同的,通过采集音频信号,求出时间差△t0,若△t0>0,单片机发出“前进信号”,小车前进,同时,音频信号持续发出,不断得出时间差,控制小车运动。
当小车位于Ox中轴线上,△t0=0,单片机发出“停止信号”,小车停止,进行声光提示。
图3声音引导系统示意图
图中,AB与AC垂直,OX是AB的中垂线,OY是AC的中垂线,W是Ox和OY的交点。
通过判断SA,SB,SC两两之间的距离差与0的关系来控制声源的运动。
例如:
当SA-SB>0,声源一直向前进;当SA-SB=0,声源停止运动;当SA-SB<0,声源向后运动。
上位机及车载部分系统软件整体流程图如下:
图4系统软件整体流程图
车载单片机部分程序主要实现的功能是,蜂鸣器不断发出声波,根据上位机通过无线接收器传来的处理信号,引导小车进行相关动作,到达指定位置后产生相应的声光提示。
其中包含无线收发子程序,声音发送子程序,电机驱动子程序,声光提示子程序子程序,以及主程序模块。
可移动声源部分软件流程图如右。
图5可移动声源部分软件流程图
4.2无线收发模块
4.2.1无线收发模块的配置
SPI口为同步串行通信接口,最大传输速率为10Mb/s,传输时先传送低位字节,再传送高位字节。
但针对单个字节而言,要先送高位再送低位。
与SPI相关的指令共有8个,使用时这些控制指令由nRF24L01的MOSI输入。
相应的状态和数据信息是从MISO输出给MCU。
nRF24L0l所有的配置字都由配置寄存器定义,这些配置寄存器可通过SPI口访问。
nRF24L01的配置寄存器共有25个,常用的配置寄存器如表2所示。
地址
寄存器名称
描述
00
CONFIG
设置工作模式
01
EN_AA
自动应答功能设置
02
EN_RXADDR
使能接收通道地址
03
SETUP_AW
设置地址宽度
04
SETUP_RETR
设置自动重发
07
STATUS
状态寄存器
0A-0F
RX_ADDR_P0-P5
设置接收通道地址
10
TX_ADDR
设置发射机地址
11-16
RX_PW_P0~P5
设置接收通道的数据长度
表2常用的配置寄存器
具体程序代码如下:
//==============================************=========================
uchardate;
ucharTxBuf[3]={0xa1,0xa1,0xa1};
//*****************************NRF24L01******************************#defineTX_ADR_WIDTH5//5uintsTX地址宽度
#defineRX_ADR_WIDTH5//5uintsRX地址宽度
#defineTX_PLOAD_WIDTH3//20uintsTXpayload
#defineRX_PLOAD_WIDTH3//20uintsTXpayload
uintconstTX_ADDRESS[TX_ADR_WIDTH]={0x34,0x43,0x10,0x10,0x01};//本地地址
uintconstRX_ADDRESS[RX_ADR_WIDTH]={0x34,0x43,0x10,0x10,0x01};//接收地址
//*******************配置NRF24L01寄存器指令**********************
#defineREAD_REG0x00//读寄存器指令
#defineWRITE_REG0x20//写寄存器指令
#defineRD_RX_PLOAD0x61//读取接收数据指令
#defineWR_TX_PLOAD0xA0//写待发数据指令
#defineFLUSH_TX0xE1//冲洗发送FIFO指令
#defineFLUSH_RX0xE2//冲洗接收FIFO指令
#defineREUSE_TX_PL0xE3//定义重复装载数据指令
#defineNOP0xFF//保留
//******************配置SPI(nRF24L01)寄存器地址*******************
#defineCONFIG0x00//配置收发状态,CRC校验模式以及收发状态响应方式
#defineEN_AA0x01//自动应答功能设置
#defineEN_RXADDR0x02//可用信道设置
#defineSETUP_AW0x03//收发地址宽度设置
#defineSETUP_RETR0x04//自动重发功能设置
#defineRF_CH0x05//工作频率设置
#defineRF_SETUP0x06//发射速率、功耗功能设置
#defineSTATUS0x07//状态寄存器
#defineOBSERVE_TX0x08//发送监测功能
#defineCD0x09//地址检测
#defineRX_ADDR_P00x0A//频道0接收数据地址
#defineRX_ADDR_P10x0B//频道1接收数据地址
#defineRX_ADDR_P20x0C//频道2接收数据地址
#defineRX_ADDR_P30x0D//频道3接收数据地址
#defineRX_ADDR_P40x0E//频道4接收数据地址
#defineRX_ADDR_P50x0F//频道5接收数据地址
#defineTX_ADDR0x10//发送地址寄存器
#defineRX_PW_P00x11//接收频道0接收数据长度
#defineRX_PW_P10x12//接收频道0接收数据长度
#defineRX_PW_P20x13//接收频道0接收数据长度
#defineRX_PW_P30x14//接收频道0接收数据长度
#defineRX_PW_P40x15//接收频道0接收数据长度
#defineRX_PW_P50x16//接收频道0接收数据长度
#defineFIFO_STATUS0x17//FIFO栈入栈出状态寄存器设置
uintbdatasta;//状态标志
sbitRX_DR=sta^6;
sbitTX_DS=sta^5;
sbitMAX_RT=sta^4;
4.2.2无线收发的初始化
无线收发的初始化主要完成地址的配置频道的选择,是否自动应答,工作频率,发射速率及发射的数据长度,为收发做好准备工作。
具体程序如下:
/*NRF24L01初始化
//**********************************************************************************/
voidinit_NRF24L01(void)
{
inerDelay_us(100);
CE=0;//chipenable
CSN=1;//Spidisable
SCK=0;//Spiclocklineinithigh
SPI_Write_Buf(WRITE_REG+TX_ADDR,TX_ADDRESS,TX_ADR_WIDTH);//写本地地址
SPI_Write_Buf(WRITE_REG+RX_ADDR_P0,RX_ADDRESS,RX_ADR_WIDTH);//写接收端地址
SPI_RW_Reg(WRITE_REG+EN_AA,0x01);//频道0自动,ACK应答允许
SPI_RW_Reg(WRITE_REG+EN_RXADDR,0x01);//允许接收地址只有频道0
SPI_RW_Reg(WRITE_REG+RF_CH,0);//设置信道工作为2.4GHZ,收发必须一致
SPI_RW_Reg(WRITE_REG+RX_PW_P0,RX_PLOAD_WIDTH);//设置接收数据长度,本次设置为32字节
SPI_RW_Reg(WRITE_REG+RF_SETUP,0x07);//设置发射速率为1MHZ,发射功率为最大值0dB
SPI_RW_Reg(WRITE_REG+CONFIG,0x0f);//IRQ收发完成中断响应,16位CRC,主接收
}
4.2.3无线模块的通信协议
通信协议是一个系统与其他系统之间为了能顺利进行通信而制定的规则。
通信时按照事先约定的协议进行通信。
nRF24L01在接收模式下可以接收6路不同通道的数据,每一个数据通道使用不同的地址但是共用相同的频道。
通道0是唯一的一个可以配置为40位自身地址的数据,通道1~5数据通道都为8位自身地址和32位公用地址,所有的数据通道都可以设置为增强型ShockBurst模式nRF24L01,在确认收到数据后记录地址,并以此地址为目标地址发送应答信号,在发送端数据通道0被用做接收应答信号。
因此数据通道0的接收地址要与发送端地址相等,以确保接收到正确的应答信号。
采用相同的协议对通信数据进行打包解包,所有的数据都是无符号字节型,数据流以先传高字节后传低字节的顺序进行传输。
数据帧的格式如下图所示:
前导码
地址
9位标志位
数据位(1~32)
CRC校验
数据帧的格式
数据帧的作用如下表:
前导码
前导码用来检测0和1芯片在接收模式下去除前导码在发送模式下加入前导码
地址
地址内容为接收机地址。
地址宽度可以是3、4或5字节宽度。
地址可以对接收通道及发送通道分别进行配置。
从接收的数据包中自动
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 声音 导引 系统软件 设计