自动避障小车设计文档格式.docx

上传人:b****1 文档编号:616661 上传时间:2023-04-29 格式:DOCX 页数:29 大小:1.64MB
下载 相关 举报
自动避障小车设计文档格式.docx_第1页
第1页 / 共29页
自动避障小车设计文档格式.docx_第2页
第2页 / 共29页
自动避障小车设计文档格式.docx_第3页
第3页 / 共29页
自动避障小车设计文档格式.docx_第4页
第4页 / 共29页
自动避障小车设计文档格式.docx_第5页
第5页 / 共29页
自动避障小车设计文档格式.docx_第6页
第6页 / 共29页
自动避障小车设计文档格式.docx_第7页
第7页 / 共29页
自动避障小车设计文档格式.docx_第8页
第8页 / 共29页
自动避障小车设计文档格式.docx_第9页
第9页 / 共29页
自动避障小车设计文档格式.docx_第10页
第10页 / 共29页
自动避障小车设计文档格式.docx_第11页
第11页 / 共29页
自动避障小车设计文档格式.docx_第12页
第12页 / 共29页
自动避障小车设计文档格式.docx_第13页
第13页 / 共29页
自动避障小车设计文档格式.docx_第14页
第14页 / 共29页
自动避障小车设计文档格式.docx_第15页
第15页 / 共29页
自动避障小车设计文档格式.docx_第16页
第16页 / 共29页
自动避障小车设计文档格式.docx_第17页
第17页 / 共29页
自动避障小车设计文档格式.docx_第18页
第18页 / 共29页
自动避障小车设计文档格式.docx_第19页
第19页 / 共29页
自动避障小车设计文档格式.docx_第20页
第20页 / 共29页
亲,该文档总共29页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

自动避障小车设计文档格式.docx

《自动避障小车设计文档格式.docx》由会员分享,可在线阅读,更多相关《自动避障小车设计文档格式.docx(29页珍藏版)》请在冰点文库上搜索。

自动避障小车设计文档格式.docx

因此,与SPCE500A相比,以μ’nSP™为核心的SPCE061A微控制器是适用于数字语音识别应用领域产品的一种最经济的选择。

性能

􀂋

16位μ’nSP™微处理器;

工作电压(CPU)VDD为2.4~3.6V(I/O)VDDH为2.4~5.5V;

CPU时钟:

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功能;

16位μ’nSP™微处理器硬件结构图

3.1.1.SPCE061A时钟电路

SPCE061A时钟电路采用晶体振荡器。

下图为SPCE061A时钟电路的接线图。

外接晶振采用32768Hz。

3.1.2.PLL锁相环

PLL电路的作用是将系统提供的实时时钟的基频(32768Hz)进行倍频,输出系统时钟Fosc

3.1.3.看门狗Watchdog

SPCE061A的清狗周期为0.75S;

清看门狗操作寄存器:

P_Watchdog_Clear(0x7012H)

清狗操作:

在每个0.75S的清狗周期里P_Watchdog_Clear写入0x0001。

3.1.4.低电压复位(LVR)

通过某种方式,使单片机内存各寄存器的值变为初始的操作称为复位。

SPCE061A的复位方式为低电压复位。

3.1.5.I/O端口

OA口:

IOA0~IOA6:

7路普通AD输入端口,IOA0~IOA7:

触键唤醒功能

IOB口:

外部中断输入,串行接口、PWM输出等复用端口

3.1.6.时基与定时器

时基信号可提供常用的、现成的频率信号,完成部分定时器的功能

3.1.7.SPCE061A的定时器/计数器

递增计数方式,自动重载定时器/计数器初始值,输出4位可调脉宽比PWM信号,溢出频率/2的方波输出,多种时钟源输入。

3.1.8.ADC、DAC

SPCE061A的特色是其强大灵活的语音功能;

而单片机对语音处理的支持,除了其处理能力外,还有片内集成的ADC、DAC;

特别是集成有AGC电路的MIC通道。

ADC转换过程:

3.2、超声波传感器

1.基本特性与参数指标

超声波传感器谐振频率:

40KHz;

模组传感器工作电压:

4.5V~9V

模组接口电压:

4.5V~5.5V

2.主要功能

三种测距模式选择跳线J1(短距、中距、可调距):

短距:

20cm~100cm左右(根据被测物表面材料决定),精度1cm;

中距:

70cm~400cm左右(根据被测物表面材料决定);

可调:

范围由可调节参数确定,当调节在合适的值时,最远测距700cm左右;

3.结构示意图

一般应用时,只需要用两条10PIN排线把J5与SPCE061A的IOB口低八位连接,J4与IOB口高八位连接,同时设置好J1、J2跳线就完成硬件的连接了。

不同测距模式的选择只需改变测距模式跳线J1的连接方法即可。

模组工作的性能与被测物表面材料有很大关系,如毛料、布料对超声波的反射率很小,会严重影响测量结果

实物图:

J1为选择工作模式,J2选择电源接口

4.电路原理图介绍:

超声波谐振频率调理电路

由单片机产生40KHz的方波,并通过模组接口(J4)送到模组的CD4049,而后面的CD4049则对40KHz频率信号进行调理,以使超声波传感器产生谐振。

超声波回波接收处理电路

超声波接收处理部分电路前级采用NE5532构成10000倍放大器,对接收信号进行放大;

后级采用LM311比较器对接收信号进行调整,比较电压为LM311的3管脚的输入,可由J1跳线选择不同的比较电压以选择不同的测距模式。

测距程序流程图

超声波测距的功能函数流程图如图。

用户只需进行六次测距操作,这六次的测量结果需要经过处理后才可得到最终的测距返回值,然后将返回值化成距离。

四软件设计

4.1软件设计各模块

voidRunTime2Hz(void);

设置2HZ基频中断向量函数。

voidOffTime2Hz(void);

清2HZ基频中断向量函数。

voidClear_WatchDog(void);

清看门狗函数

unsignedintSP_GetCh(void);

取键值函数

voiddelay2s(inttimer)

可调的延迟函数

4.2速度控制

速度控制用TIMERA的PWM输出控制,当它前进时设PWM为12/16,当它转弯时设为8/16。

其代码为:

*P_TimerA_Ctrl=0x0333;

*P_TimerA_Data=0xff9f;

4.3障碍物检测

用TIMERB的TONT输出给超声波提供出射频率,并给它延迟一段时间,发射完时,清TIMERB,让它工作在计时方式,当计到10000时!

没有收到回波,则说明前在无障碍。

如果有收到回波则说明有障碍。

4.4看门狗

看门狗只要一定时间给其喂狗,就可以保证程序不会跑飞,跑飞就会自动复位。

其代码就只有一句:

*P_Watchdog_Clear=0x0001;

4.5基频中断

采用2HZ的基频中断,实现实时控制;

一次中断,中断时间为0。

5S,其代码如下:

[P_INT_Ctrl]=r1;

INTIRQ;

//开中断

4.6程序设计流程图

五:

测试数据、测试结果分析及结论

测试方法与仪器:

1.测试仪器

测试仪器包括数字万用表、信号发生器、示波器、直流稳压电源等。

2.测试方法

数字万用表主要用来测试各个IO口的状态;

信号发生器与示波器用于测试超声波传感器信号的接收与传输;

试验测试能不能完成固定避障。

结论:

经过了我们的努力,我们基本上能完上避障的功能!

当然我们之后还有很长的路要走,

在之后我们会自己做一个最小系统,此次我们更侧重于软件方面的设计。

同时我们还要设计更多的外围电路,实现更多的功能。

其中包括:

红外光电检测用来检测旁边的物体;

还有红外遥控器,用来控制小车的运行与停止;

再加一个显示器,用来显示路程和时间等等。

附录一:

程序附录:

程序设计中包括:

主程序,测距程序,中断程序组成;

1.主程序:

#include"

SPCE061A.h"

ceju.h"

unsignedcharINTflag;

//定时标识

unsignedintsum;

//2hz计数器1次为0。

5秒

voiddelay2s(inttimer)//设置基频为2HZ的中断,就是一次定时0。

5S

{

sum=timer;

RunTime2Hz();

//运行中断

while(!

INTflag)

{

Clear_WatchDog();

//清看门狗

}

INTflag=0;

OffTime2Hz();

//结束中断

}

voiddelay2s(inttimer);

intmain(void)

{

unsignedintBack_data;

//装距离

*P_IOB_Dir=0x1f00;

//初始化IOB,IOB8~12同向输出

*P_IOB_Attrib=0x1f00;

*P_IOB_Data=0x0000;

//清看门狗

while

(1)

*P_TimerA_Ctrl=0x0373;

*P_TimerA_Data=0xff9f;

//设前进PWM这14/16

Back_data=measure_Times(0);

//测距

if(Back_data==0)//判断是否为0,为0则为前进

{

*P_TimerA_Ctrl=0x0373;

*P_TimerA_Data=0xff9f;

}

elseif(Back_data<

=40)//判断是否小于40CM,小于则进行倒车

{

*P_TimerA_Ctrl=0x006;

*P_IOB_Data=0x1000;

//倒车

delay2s(0);

*P_IOB_Data=0x0100;

//前进

delay2s(3);

}

=100)//判断是否小于1M,小于则进行避障

*P_TimerA_Ctrl=0x0333;

*P_IOB_Data=0x0400;

//左转

delay2s

(1);

*P_IOB_Data=0x0800;

//右转

//停止PWM运行

*P_IOB_Data=0x0000;

//停车

while

(1)

{;

}

else

Clear_WatchDog();

}

}

2.中断程序:

voidIRQ3(void)__attribute__((ISR));

//IRQ中断服务程序

voidIRQ3(void)

*P_INT_Clear=0x0100;

//

EXT1_IRQ_ult();

//调用超声波测距的外部中断服务程序

.TEXT

.includeSPCE061A.inc;

.external_sum;

.external_INTflag;

.public_IRQ5;

_IRQ5:

//定时3秒的中断程序

pushr1,r4to[sp];

r1=0x0008;

testr1,[P_INT_Ctrl];

jnzL_4Hz;

//TimerAFIQentrence

r1=0x0004;

[P_INT_Clear]=r1;

//清中断

r1=[_sum]//取时基信号量

r1+=1;

cmpr1,4;

jeloop0;

[_sum]=r1//保存时基信号量

popr1,r4from[sp];

reti;

loop0:

r1=0x0001;

[_INTflag]=r1;

//设置中断标识

r1=0

[_sum]=r1

L_4Hz:

r1=0x0008;

reti;

.CODE

.public_Clear_WatchDog;

_Clear_WatchDog:

.PROC

R1=0x0001;

[P_Watchdog_Clear]=R1;

retf;

.ENDP

.public_RunTime2Hz;

//初始化中断为2HZ定时中断源

_RunTime2Hz:

.proc

retf

.endp;

.public_OffTime2Hz;

_OffTime2Hz:

r1=[P_INT_Ctrl]

r1&

=0xfffb;

r1=0x0000

[_sum]=r1;

retf;

3、测距程序

#defineLONG_SEND_TIMER1000//中距测距时的40KHz信号发射时长

#defineLONG_SEND_TIMER23000//中距测距的补充测距时的40KHz信号发射时长

#defineLONG_WAIT_DELAY600//中距测距的防余波干扰延时时长

#defineLONG_WAIT_DELAY21500//中距测距的补充测距时的防余波干扰延时时长

#defineLONG_RES_ADD0x00B0//中距测距的结果补偿值

#defineLONG_RES_ADD20x0220//中距测距的补充测距时的结果补偿值

#defineLOW_SEND_TIMER250//短距测距时的40KHz信号发射时长

#defineLOW_SEND_TIMER21000//短距测距的补充测距时的40KHz信号发射时长

#defineLOW_WAIT_DELAY180//短距测距的防余波干扰延时时长

#defineLOW_WAIT_DELAY2400//短距测距的补充测距时的防余波干扰延时时长

#defineLOW_RES_ADD0x0034//短距测距的结果补偿值

#defineLOW_RES_ADD20x00B0//短距测距的补充测距时的结果补偿值

unsignedintCounter_buf;

//超声波测距当中,用于保存TimerB计数的变量,相当于时长

unsignedintEXT1_IRQ_flag=0;

//外部中断标志变量,用于EXT1的IRQ中断程序和测距程序同步

voidDelay_ult(unsignedinttimers)

unsignedinti;

for(i=0;

i<

timers;

i++)

__asm("

nop"

);

unsignedintResoult_ult(unsignedintCounter)//计算距离

unsignedintuiTemp;

unsignedlongulTemp;

ulTemp=(unsignedlong)Counter*33500;

//*以声音的速度,以厘米为单位

ulTemp=ulTemp/196608;

ulTemp=ulTemp>

>

1;

//除二

uiTemp=(unsignedint)ulTemp;

returnuiTemp;

unsignedintmeasure2_ult(unsignedinttype);

unsignedintmeasure_ult(unsignedinttype)//超声波测距模组的测距程序,完成一次测距

unsignedintExit_flag=1;

unsignedintuiResoult;

unsignedintuiSend_Timer,uiWait_Timer,uiRes_Add;

unsignedintuiSystem_Clock;

uiSystem_Clock=*P_SystemClock;

//将当前的系统时钟设置暂时保存起来

*P_SystemClock=0x0088;

//将系统时钟设置为49MHz,分频比为1,强振模式

if(type)//根据type即测距类型,选择不同的测距参数

uiSend_Timer=LONG_SEND_TIMER;

uiWait_Timer=LONG_WAIT_DELAY;

uiRes_Add=LONG_RES_ADD;

else

uiSend_Timer=LOW_SEND_TIMER;

uiWait_Timer=LOW_WAIT_DELAY;

uiRes_Add=LOW_RES_ADD;

*P_TimerB_Data=0xfed2;

*P_TimerB_Ctrl=0x03c0;

//发40KHz的信号触发超声波传感器

Delay_ult(uiSend_Timer);

//等待发送

*P_TimerB_Ctrl=0x0006;

//关定时器B

*P_TimerB_Data=0x0000;

*P_TimerB_Ctrl=0x0001;

//TrB工作在192KHz频率

while(*P_TimerB_Data<

uiWait_Timer)//等待一定时间后再打开TimerA的计数(来源于EXT1)

{//以避开余波的干扰

*P_Watchdog_Clear=0x0001;

//开中断前先清中断

*P_INT_Ctrl=*P_INT_Ctrl_New|0x0100;

*P_INT_Clear=0xffff;

//清除中断发生标志

__asm("

IRQON"

//打开总中断使能

EXT1_IRQ_flag=0;

//TimerA的溢出中断的标志变量置0

while(Exit_flag)

if(EXT1_IRQ_flag==1)//当该变量在timerA的FIQ中断中被置1时表示接收到了回波

{

Exit_flag=0;

//退出标示

Counter_buf=Counter_buf+uiRes_Add;

//计数值加上一定的调整数据

uiResoult=Resoult_ult(Counter_buf);

//对计数值进行处理,得出距离值

}

if(*P_TimerB_Data>

10000)//如计数值大于10000,表示超时

uiResoult=measure2_ult(type);

//再进行一次补充的测距,将会加长40KHz信号发射的量

*P_TimerB_Ctrl=0x0006;

//停止定时器B

uiTemp=*P_TimerB_Data;

*P_INT_Ctrl=*P_INT_Ctrl_New&

(~0x0100);

//关掉外部中断

IRQOFF"

//关掉总中断

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

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2