智能小车嵌入式系统设计分析

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

-0-前言智能小车是在动态不确定环境下对人工智能的考验,是以各种工控目的为载体的高科技对抗,是培养信息、自动化领域科技人才的重要手段,同时也是展示高科技水平的生动窗口和促进科技成果实用化和产业化的有效途径。智能小车的研究融入了机器人学、机电一体化技术、通讯与计算机技术、视觉与传感器技术、智能控制与决策等多学科的研究成果,反映出一个国家信息与自动化技术的综合实力。所以本论文对智能小车的研究意义重大。-1-目录一、总体设计方案........................................21.总体方案.....................................................22.平台选取.....................................................23.可行性论证...................................................3二、软件编码............................................31.PWM模块..............................................................32.红外线接收模块........................................................83.红外探头模块.........................................................16三、程序调试...........................................25四、小结...............................................25-2-一、总体设计方案1.总体方案智能小车可在自主行驶和人工控制两种模式之间切换,并实现自动避障。通过PWM输出驱动步进电机来实现小车的行驶,改变PWM的周期、占空比、正反则可以实现前进、后退、转弯、加速、减速等行为。通过红外探头检测前方障碍实现自动避障。外接红外线接收器,可以通过自制的红外线遥控来控制小车的行为。2.平台选取EasyARM1138开发板开发板搭载LuminaryLM3S1138芯片,为32位ARMCortex–M3内核(ARMv7架构),50Mhz运行频率。拥有7组GPIO,可配置为输入、输出、开漏、弱上拉等模式。4个32位Timer,每个都个拆分为2个独立子定时器。6路16位PWM,通过CCP管脚能产生高达25Mhz的方波。自制车架-3-车轮用步进电机精确控制,步进电机用放大电路驱动,受PWM信号控制。锂离子电池给放大电路和开发板供电。车架前方有红外探头,通过即时返回数据进行判断实现自动避障。开发板外接红外线接收头,实现红外线人工控制。编程开发平台IAREmbeddedWorkbenchIAR是LM3S系列适配的开发平台之一,适合用C语言和库函数进行编程,操作简单,较易上手。3.可行性论证LM3S1138芯片的资源比较丰富,自带Timer产生PWM方波。智能小车的速度要求低于步进电机的最高速度,并能通过步进电机实现精准控制,每个脉冲转动一个固定角度,因此步进电机适合作为驱动。红外线控制通过芯片对突发接收的信号进行解码,获取红外遥控的控制信息,红外解码使用流行的方案。车架前方装有四个探头,四路信号的触发顺序可作为障碍判断的依据。二、软件编程1.PWM模块#includehw_types.h#includehw_memmap.h#includehw_ints.h#includehw_sysctl.h#includehw_gpio.h#includehw_timer.h#includeinterrupt.h#includesysctl.h-4-#includegpio.h#includetimer.h#include“LM3S1138_PinMap.H”/*定义按键*/#defineKEY_PORTSYSCTL_PERIPH_GPIOG#defineKEY_PINGPIO_PORTG_BASE,GPIO_PIN_5#definekeyGet()GPIOPinRead(KEY_PIN)//定义全局的系统时钟变量unsignedlongTheSysClock=12000000UL;/******************************************************************Functionname:jtagWait**Descriptions:防止JTAG失效,KEY=PG5**inputparameters:无**outputparameters:无**Returnedvalue:无**Createdby:张伟杰**CreatedDate:2014.05.15****************************************************************/voidjtagWait(void){SysCtlPeripheralEnable(KEY_PORT);/*使能KEY所在的GPIO端口*/GPIOPinTypeGPIOInput(KEY_PIN);/*设置KEY所在管脚为输入*/if(keyGet()==0x00){/*如果复位时按下KEY,则进入*/for(;;);/*死循环,以等待JTAG连接*/}SysCtlPeripheralDisable(KEY_PORT);/*-5-禁止KEY所在的GPIO端口*/}/******************************************************************Functionname:Timer_0_Init**Descriptions:初始化Timer0**inputparameters:无**outputparameters:无**Returnedvalue:无**Createdby:张伟杰**CreatedDate:2014.05.15****************************************************************/voidTimer_0_Init(void){SysCtlPeripheralEnable(CCP0_PERIPH);/*使能CCP0所在的GPIO端口PB0*/GPIOPinTypeTimer(CCP0_PORT,CCP0_PIN);/*配置CCP0管脚为PWM输出*/SysCtlPeripheralEnable(CCP1_PERIPH);/*使能CCP1所在的GPIO端口PF6*/GPIOPinTypeTimer(CCP1_PORT,CCP1_PIN);/*配置CCP1管脚为PWM输出*/SysCtlPeripheralEnable(SYSCTL_PERIPH_TIMER0);/*使能定时器模块*/TimerConfigure(TIMER0_BASE,TIMER_CFG_16_BIT_PAIR|TIMER_CFG_A_PWM|TIMER_CFG_B_PWM);/*配置定时器为双16位PWM*///TimerControlLevel(TIMER0_BASE,TIMER_BOTH,false);/*控制PWM输出反相*/}-6-/******************************************************************Functionname:Timer_0_Level_1**Descriptions:左右轮一档**inputparameters:无**outputparameters:无**Returnedvalue:无**Createdby:张伟杰**CreatedDate:2014.05.15****************************************************************/voidTimer_0_Level_1(void){//TimerPrescaleSet(TIMER0_BASE,TIMER_BOTH,99);/*设置预分频值*/TimerControlLevel(TIMER0_BASE,TIMER_BOTH,true);TimerLoadSet(TIMER0_BASE,TIMER_BOTH,60000);/*设置定时器初值,AB均为50Hz*/TimerMatchSet(TIMER0_BASE,TIMER_A,6000);/*设置TimerA的PWM匹配值*/TimerMatchSet(TIMER0_BASE,TIMER_B,6000);/*设置TimerB的PWM匹配值*/TimerEnable(TIMER0_BASE,TIMER_BOTH);/*使能定时器计数,PWM开始输出*/}//系统初始化voidSystemInit(void){SysCtlLDOSet(SYSCTL_LDO_2_50V);//设置LDO输出电压SysCtlClockSet(SYSCTL_USE_OSC|//系统时钟设置,采用主振荡器SYSCTL_OSC_MAIN|-7-SYSCTL_XTAL_6MHZ|SYSCTL_SYSDIV_1);/*SysCtlLDOSet(SYSCTL_LDO_2_75V);//配置PLL前须将LDO电压设置为2.75VSysCtlClockSet(SYSCTL_USE_PLL|//系统时钟设置,采用PLLSYSCTL_OSC_MAIN|//主振荡器SYSCTL_XTAL_6MHZ|//外接6MHz晶振SYSCTL_SYSDIV_10);//分频结果为20MHz*/TheSysClock=SysCtlClockGet();//获取系统时钟,单位:Hz}intmain(void){jtagWait();/*防止JTAG失效,重要!*/SystemInit();Timer_0_Init();/*定时器初始化*/Timer_0_Level_1();for(;;);-8-}2.红外接收器模块#includehw_types.h#includehw_memmap.h#includehw_ints.h#includehw_sysctl.h#includehw_gpio.h#includehw_timer.h#includeinterrupt.h#includesysctl.h#includegpio.h#includetimer.h#includesystick.h#include“LM3S1138_PinMap.H”/*定义按键*/#defineKEY_PORTSYSCTL_PERIPH_GPIOG#defineKEY_PINGPIO_PORTG_BASE,GPIO_PIN_5#definekeyGet()GPIOPinRead(KEY_PIN)#defineIR_PORTSYSCTL_PERIPH_GPIOF#defineIR_PINGPIO_PORTF_BASE,GPIO_PIN_1//定义全局的系统时钟变量unsignedlongTheSysClock=12000000UL;unsignedIR_flag=0;unsignedlongIR_code_32[32];unsignedlongIR_code_8=0;unsigneda;intTime_Get();voidDelay_100_us();-9-/******************************************************************Functionname:jtagWait**Descriptions:防止JTAG失效,KEY=PG5**i

1 / 27
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功