自动避障小车设计Word版_第1页
自动避障小车设计Word版_第2页
自动避障小车设计Word版_第3页
自动避障小车设计Word版_第4页
自动避障小车设计Word版_第5页
已阅读5页,还剩42页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、自动避障小车技术报告前言设计背景:在科学探索和紧急抢险中经常会遇到对与一些危险或人类不能直接到达的地域的探测,这些就需要用机器人来完成。而在机器人在复杂地形中行进时自动避障是一项必不可少也是最基本的功能。因此,自动避障系统的研发就应运而生。我们的自动避障小车就是基于这一系统开发而成的。随着科技的发展,对于未知空间和人类所不能直接到达的地域的探索逐步成为热门,这就使机器人的自动避障有了重大的意义。我们的自动避障小车就是自动避障机器人中的一类。自动避障小车可以作为地域探索机器人和紧急抢险机器人的运动系统,让机器人在行进中自动避过障碍物。目录一、 设计目标:3二、 方案设计:42.1直流调速系统42

2、.2检测系统5三 硬件设计53.1、SPCE061A单片机最小系统53.1.1SPCE061A时钟电路83.1.2PLL锁相环93.1.3看门狗Watchdog93.1.4低电压复位(LVR)103.1.5I/O端口103.1.6时基与定时器113.1.7SPCE061A的定时器/计数器113.1.8ADC、DAC123.2、超声波传感器12四 软件设计164.1软件设计各模块164.2速度控制174.3障碍物检测174.4看门狗174.5基频中断184.6程序设计流程图19五:测试数据、测试结果分析及结论19程序附录211主程序:212中断程序243、测距程序28一、 设计目标:1. 小车从

3、无障碍地区启动前进,感应前进路线上的障碍物后,能自动避开障碍物。2. 根据障碍物的位置选择下一步行进方向,选择左拐还是右拐,若障碍物在左边则自动右拐,若障碍物在右边则左拐,若障碍物在正前方可任意选择左拐或者是右拐,以达到避开障碍物的目的。3. 通过利用单片机内时钟源的控制设定左拐和右拐的时间,从而能持续前进。4. 为达到速度的可控性,需设置两个独立按键对小车进行控速。二、 方案设计:根据设计要求,确定如下方案:在现有玩具电动车的基础上,加装超声波传感器,实现对电动车的运行状况的实时测量,并将测量数据传送至单片机进行处理,然后由单片机根据所检测的各种数据实现对电动车的智能控制。这种方案能实现对电

4、动车的运动状态进行实时控制,控制灵活、可靠,精度高,可满足对系统的各项要求。2.1直流调速系统采用脉宽调速系统脉宽调速系统的主电路采用脉宽调制式变换器,简称PWM变换器。脉宽调速也可通过单片机控制继电器的闭合来实现,但是驱动能力有限。为顺利实现电动小汽车的前行与倒车,本设计采用了可逆PWM变换器。可逆PWM变换器主电路的结构式有H型、T型等类型。我们在设计中采用了常用的双极式H型变换器,它是由4个三极电力晶体管和4个续流二极管组成的桥式电路。如附录一:2.2检测系统检测系统主要实现红外传感器,超声波传感,光电传感器对车的运行进行实时测量,即利用这种传感器对电动车的避障、位置、行车状态进行测量。

5、行车开始、结束及超声波检测:在车的开始和结束阶段,都是用红外式的光电传感器,当按下此光电开头,小车就开始行驶,在完成任务后,再按下此开关,小车就停止前进。在前进的过程中不断的发送超声波,并对接到的进行处理计算。如果处理得到的结果是发现前面的障碍时,再行进一次距离的处理,当距离小是40CM时,让小车倒退一段时间,再进行避障处理,如果距离大于40CM,就直接进避障处理。三 硬件设计3.1、SPCE061A单片机最小系统我们用的是凌阳的SPCE061A单片机最小系统其概述如下:SPCE061A 是继nSP系列产品SPCE500A等之后凌阳科技推出的又一款16位结构的微控制器。与SPCE500A不同的

6、是,在存储器资源方面考虑到用户的较少资源的需求以及便于程序调试等功能,SPCE061A里只内嵌32K字的闪存(FLASH)。较高的处理速度使nSP能够非常容易地、快速地处理复杂的数字信号。因此,与SPCE500A相比,以nSP为核心的SPCE061A微控制器是适用于数字语音识别应用领域产品的一种最经济的选择。 性能 􀂋 16位nSP微处理器; 􀂋 工作电压(CPU) VDD为2.43.6V (I/O) VDDH为2.45.5V ;􀂋 CPU时钟:0.32MHz49.152MHz ; 内置2K字SRAM; 􀂋 内置32K F

7、LASH; 􀂋 可编程音频处理; 􀂋 晶体振荡器; 􀂋 系统处于备用状态下(时钟处于停止状态),耗电仅为2A3.6V; 􀂋 2个16位可编程定时器/计数器(可自动预置初始计数值); 􀂋 2个10位DAC(数-模转换)输出通道; 􀂋 32位通用可编程输入/输出端口; 􀂋 14个中断源可来自定时器A / B,时基,2个外部时钟源输入,键唤醒; 􀂋 具备触键唤醒的功能; 􀂋 使用凌阳音频编码SACM_S240方式(2.4K位/秒),能容纳2

8、10秒的语音数据; 􀂋 锁相环PLL振荡器提供系统时钟信号; 􀂋 32768Hz实时时钟; 􀂋 7通道10位电压模-数转换器(ADC)和单通道声音模-数转换器; 􀂋 声音模-数转换器输入通道内置麦克风放大器和自动增益控制(AGC)功能; 􀂋 具备串行设备接口; 􀂋 具有低电压复位(LVR)功能和低电压监测(LVD)功能; 内置在线仿真电路ICE(In- Circuit Emulator)接口; 􀂋 具有保密能力; 具有WatchDog功能;16位nSP微处理器硬件结构图

9、3.1.1SPCE061A时钟电路SPCE061A时钟电路采用晶体振荡器。下图为SPCE061A时钟电路的接线图。外接晶振采用32768Hz。3.1.2PLL锁相环PLL电路的作用是将系统提供的实时时钟的基频(32768Hz)进行倍频,输出系统时钟Fosc3.1.3看门狗WatchdogSPCE061A的清狗周期为0.75S;清看门狗操作寄存器:P_Watchdog_Clear(0x7012H)清狗操作:在每个0.75S的清狗周期里P_Watchdog_Clear写入0x0001。3.1.4低电压复位(LVR)通过某种方式,使单片机内存各寄存器的值变为初始的操作称为复位。SPCE061A的复位

10、方式为低电压复位。3.1.5I/O端口OA口:IOA0IOA6:7路普通AD输入端口,IOA0IOA7:触键唤醒功能 IOB口:外部中断输入,串行接口、PWM输出等复用端口3.1.6时基与定时器时基信号可提供常用的、现成的频率信号,完成部分定时器的功能3.1.7SPCE061A的定时器/计数器递增计数方式,自动重载定时器/计数器初始值,输出4位可调脉宽比PWM信号,溢出频率/2的方波输出,多种时钟源输入。3.1.8ADC、DACSPCE061A的特色是其强大灵活的语音功能;而单片机对语音处理的支持,除了其处理能力外,还有片内集成的ADC、DAC;特别是集成有AGC电路的MIC通道。ADC转换过

11、程:3.2、超声波传感器1基本特性与参数指标 超声波传感器谐振频率:40KHz; 模组传感器工作电压:4.5V9V 模组接口电压:4.5V5.5V2主要功能三种测距模式选择跳线J1(短距、中距、可调距): 短距:20cm100cm左右(根据被测物表面材料决定),精度1cm; 中距:70cm400cm左右(根据被测物表面材料决定); 可调:范围由可调节参数确定,当调节在合适的值时,最远测距700cm左右;3结构示意图 一般应用时,只需要用两条10PIN排线把J5与SPCE061A的IOB口低八位连接,J4与IOB口高八位连接,同时设置好J1、J2跳线就完成硬件的连接了。不同测距模式的选择只需改变

12、测距模式跳线J1的连接方法即可。模组工作的性能与被测物表面材料有很大关系,如毛料、布料对超声波的反射率很小,会严重影响测量结果实物图:J1为选择工作模式,J2选择电源接口4电路原理图介绍:超声波谐振频率调理电路由单片机产生40KHz的方波,并通过模组接口(J4)送到模组的CD4049,而后面的CD4049则对40KHz频率信号进行调理,以使超声波传感器产生谐振。超声波回波接收处理电路超声波接收处理部分电路前级采用NE5532构成10000倍放大器,对接收信号进行放大;后级采用LM311比较器对接收信号进行调整,比较电压为LM311的3管脚的输入,可由J1跳线选择不同的比较电压以选择不同的测距模

13、式。测距程序流程图超声波测距的功能函数流程图如图。用户只需进行六次测距操作,这六次的测量结果需要经过处理后才可得到最终的测距返回值,然后将返回值化成距离。四 软件设计4.1软件设计各模块void RunTime2Hz(void);设置2HZ基频中断向量函数。void OffTime2Hz(void);清2HZ基频中断向量函数。void Clear_WatchDog(void);清看门狗函数unsigned int SP_GetCh(void);取键值函数void delay2s(int timer)可调的延迟函数4.2速度控制速度控制用TIMERA的PWM输出控制,当它前进时设PWM为12/1

14、6,当它转弯时设为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

15、_Ctrl = r1; INT IRQ; /开中断4.6程序设计流程图五:测试数据、测试结果分析及结论测试方法与仪器:1.测试仪器 测试仪器包括数字万用表、信号发生器、示波器、直流稳压电源等。2.测试方法 数字万用表主要用来测试各个IO口的状态;信号发生器与示波器用于测试超声波传感器信号的接收与传输;试验测试能不能完成固定避障。结论:经过了我们的努力,我们基本上能完上避障的功能!当然我们之后还有很长的路要走,在之后我们会自己做一个最小系统,此次我们更侧重于软件方面的设计。同时我们还要设计更多的外围电路,实现更多的功能。其中包括:红外光电检测用来检测旁边的物体;还有红外遥控器,用来控制小车的运行

16、与停止;再加一个显示器,用来显示路程和时间等等。附录一: 程序附录:程序设计中包括:主程序,测距程序,中断程序组成;1主程序:#include "SPCE061A.h"#include "ceju.h"unsigned char INTflag; /定时标识unsigned int sum; /2hz 计数器 1次为0。5秒void RunTime2Hz(void);void OffTime2Hz(void);void Clear_WatchDog(void);void delay2s(int timer) /设置基频为2HZ的中断,就是一次定时0。5S

17、 sum=timer; RunTime2Hz(); /运行中断 while(!INTflag) Clear_WatchDog();/清看门狗 INTflag = 0; OffTime2Hz(); /结束中断void delay2s(int timer);int main(void)unsigned int Back_data; /装距离*P_IOB_Dir=0x1f00;/初始化IOB,IOB812同向输出*P_IOB_Attrib=0x1f00;*P_IOB_Data=0x0000;INTflag = 0;Clear_WatchDog(); /清看门狗while(1) *P_TimerA_C

18、trl=0x0373; *P_TimerA_Data=0xff9f; /设前进PWM这14/16Back_data = measure_Times(0);/测距if(Back_data=0) /判断是否为0,为0则为前进 *P_TimerA_Ctrl=0x0373; *P_TimerA_Data=0xff9f;else if(Back_data<=40) /判断是否小于40CM,小于则进行倒车*P_TimerA_Ctrl=0x006; *P_IOB_Data=0x1000; /倒车delay2s(0);*P_IOB_Data=0x0100; /前进delay2s(3);else if(B

19、ack_data<=100) /判断是否小于1M,小于则进行避障 *P_TimerA_Ctrl=0x0333; *P_IOB_Data=0x0400; /左转 delay2s(1); *P_IOB_Data=0x0800; /右转 delay2s(1); *P_IOB_Data=0x0400; /左转 delay2s(1); *P_TimerA_Ctrl=0x006; /停止PWM运行 *P_IOB_Data=0x0000;/停车 while(1) ; else Clear_WatchDog(); 2中断程序:#include "SPCE061A.h"#include

20、 "ceju.h"void IRQ3(void)_attribute_(ISR); /IRQ中断服务程序void IRQ3(void)*P_INT_Clear = 0x0100;/EXT1_IRQ_ult();/调用超声波测距的外部中断服务程序.TEXT.include SPCE061A.inc;.external _sum;.external _INTflag;.public _IRQ5;_IRQ5: /定时3秒的中断程序push r1,r4 to sp;r1 =0x0008; test r1,P_INT_Ctrl;jnzL_4Hz; / Timer A FIQ entr

21、ence r1 = 0x0004; P_INT_Clear = r1; /清中断 r1 = _sum /取时基信号量 r1 += 1; cmp r1,4; je loop0; _sum=r1 /保存时基信号量 pop r1,r4 from sp; reti; loop0: r1 = 0x0001; _INTflag = r1; /设置中断标识 r1 = 0 _sum = r1pop r1,r4 from sp; reti; L_4Hz: r1 = 0x0008; P_INT_Clear = r1; /清中断 pop r1,r4 from sp;reti;.external _sum;.incl

22、ude SPCE061A.inc;.CODE.public _Clear_WatchDog;_Clear_WatchDog: .PROCR1=0x0001; P_Watchdog_Clear=R1; /清看门狗retf;.ENDP.public _RunTime2Hz; /初始化中断为2HZ定时中断源_RunTime2Hz: .procr1 = 0x0004; P_INT_Ctrl = r1; INT IRQ; /开中断 retf .endp;.public _OffTime2Hz;_OffTime2Hz: .proc r1 = P_INT_Ctrl r1 &= 0xfffb; P_I

23、NT_Ctrl = r1; r1 = 0x0000 _sum = r1; retf; .endp;3、测距程序#include "SPCE061A.h"#define LONG_SEND_TIMER1000/中距测距时的40KHz信号发射时长#define LONG_SEND_TIMER23000/中距测距的补充测距时的40KHz信号发射时长#define LONG_WAIT_DELAY600/中距测距的防余波干扰延时时长#define LONG_WAIT_DELAY21500/中距测距的补充测距时的防余波干扰延时时长#define LONG_RES_ADD0x00B0/中

24、距测距的结果补偿值#define LONG_RES_ADD20x0220/中距测距的补充测距时的结果补偿值#define LOW_SEND_TIMER250/短距测距时的40KHz信号发射时长#define LOW_SEND_TIMER21000/短距测距的补充测距时的40KHz信号发射时长#define LOW_WAIT_DELAY180/短距测距的防余波干扰延时时长#define LOW_WAIT_DELAY2400/短距测距的补充测距时的防余波干扰延时时长#define LOW_RES_ADD0x0034/短距测距的结果补偿值#define LOW_RES_ADD20x00B0/短距测距

25、的补充测距时的结果补偿值unsigned int Counter_buf;/超声波测距当中,用于保存TimerB计数的变量,相当于时长unsigned int EXT1_IRQ_flag=0;/外部中断标志变量,用于EXT1的IRQ中断程序和测距程序同步void Delay_ult(unsigned int timers)unsigned int i;for(i=0;i<timers;i+)_asm("nop");unsigned int Resoult_ult(unsigned int Counter) /计算距离unsigned int uiTemp;unsign

26、ed long ulTemp;ulTemp = (unsigned long)Counter*33500; /*以声音的速度,以厘米为单位ulTemp = ulTemp/196608; ulTemp = ulTemp>>1;/除二uiTemp = (unsigned int)ulTemp;return uiTemp;unsigned int measure2_ult(unsigned int type);unsigned int measure_ult(unsigned int type) / 超声波测距模组的测距程序,完成一次测距unsigned int Exit_flag =

27、1;unsigned int uiTemp;unsigned int uiResoult;unsigned int uiSend_Timer,uiWait_Timer,uiRes_Add;unsigned int uiSystem_Clock;uiSystem_Clock = *P_SystemClock;/将当前的系统时钟设置暂时保存起来*P_SystemClock = 0x0088;/将系统时钟设置为49MHz,分频比为1,强振模式if(type)/根据type即测距类型,选择不同的测距参数uiSend_Timer = LONG_SEND_TIMER;uiWait_Timer = LONG

28、_WAIT_DELAY;uiRes_Add = LONG_RES_ADD;elseuiSend_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;/T

29、rB 工作在192KHz频率while(*P_TimerB_Data<uiWait_Timer)/等待一定时间后再打开TimerA的计数(来源于EXT1)/以避开余波的干扰*P_Watchdog_Clear = 0x0001;*P_INT_Clear = 0x0100;/开中断前先清中断*P_INT_Ctrl = *P_INT_Ctrl_New|0x0100;*P_INT_Clear = 0xffff;/清除中断发生标志_asm("IRQ ON");/打开总中断使能EXT1_IRQ_flag = 0;/TimerA的溢出中断的标志变量置0while(Exit_flag

30、)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,表示超时Exit_flag = 0;uiResoult = measure2_ult(type);/再进行一次补充的测距,将会加长40KHz信号发射的量*P_TimerB_Ctr

31、l = 0x0006;/停止定时器BuiTemp = *P_TimerB_Data;*P_Watchdog_Clear = 0x0001;*P_INT_Ctrl = *P_INT_Ctrl_New&(0x0100);/关掉外部中断_asm("IRQ OFF");/关掉总中断*P_SystemClock = uiSystem_Clock;/恢复系统时钟的设置return uiResoult;void EXT1_IRQ_ult(void) /超声波测距模组的测距程序的EXT1中断服务程序Counter_buf = *P_TimerB_Data;*P_TimerB_Ctr

32、l = 0x0006;*P_INT_Ctrl = *P_INT_Ctrl_New&(0x0100);/关掉外部中断*P_INT_Clear = 0xffff;/清除中断发生标志EXT1_IRQ_flag = 1;/通知测距程序,外部中断已发生unsigned int measure2_ult(unsigned int type) /补充进行一次远距的测量,以保证能够获取测量结果unsigned int Exit_flag = 1;unsigned int uiResoult;unsigned int uiSend_Timer,uiWait_Timer,uiRes_Add;*P_Time

33、rB_Ctrl = 0x0006;*P_INT_Ctrl = *P_INT_Ctrl_New&(0x0100);/关掉外部中断_asm("IRQ OFF");/关掉总中断*P_INT_Clear = 0xffff;/清除掉中断发生标志if(type)/根据type即测距类型,选择不同的测距参数uiSend_Timer = LONG_SEND_TIMER2;uiWait_Timer = LONG_WAIT_DELAY2;uiRes_Add = LONG_RES_ADD2;elseuiSend_Timer = LOW_SEND_TIMER2;uiWait_Timer =

34、 LOW_WAIT_DELAY2;uiRes_Add = LOW_RES_ADD2;*P_TimerB_Data = 0xfed2;*P_TimerB_Ctrl = 0x03c0;Delay_ult(uiSend_Timer);*P_TimerB_Ctrl = 0x0006;*P_TimerB_Data = 0x0000;*P_TimerB_Ctrl = 0x0001;while(*P_TimerB_Data<uiWait_Timer)/等待一定时间,以避开余波的干扰*P_Watchdog_Clear = 0x0001;*P_INT_Ctrl = *P_INT_Ctrl_New|0x01

35、00;/打开外部中断*P_INT_Clear = 0xffff;/清除中断发生标志_asm("IRQ ON");/打开总中断使能EXT1_IRQ_flag = 0;/TimerA的溢出中断的标志变量置0while(Exit_flag)if(EXT1_IRQ_flag=1)/当该变量在timerA的FIQ中断中被置1时表示接收到了回波Exit_flag = 0;/exitCounter_buf = Counter_buf+uiRes_Add;/计数值加上一定的调整数据uiResoult = Resoult_ult(Counter_buf);/对计数值进行处理,得出距离值if(*P_TimerB_Data>10000)/如计数值大于1

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论