智能小车嵌入式系统设计分析Word下载.docx
《智能小车嵌入式系统设计分析Word下载.docx》由会员分享,可在线阅读,更多相关《智能小车嵌入式系统设计分析Word下载.docx(24页珍藏版)》请在冰豆网上搜索。
拥有7组GPIO,可配置为输入、输出、开漏、弱上拉等模式。
4个32位Timer,每个都个拆分为2个独立子定时器。
6路16位PWM,通过CCP管脚能产生高达25Mhz的方波。
自制车架车轮用步进电机精确控制,步进电机用放大电路驱动,受PWM信号控制。
锂离子电池给放大电路和开发板供电。
车架前方有红外探头,通过即时返回数据进行判断实现自动避障。
开发板外接红外线接收头,实现红外线人工控制。
编程开发平台IAREmbeddedWorkbenchIAR是LM3S系列适配的开发平台之一,适合用C语言和库函数进行编程,操作简单,较易上手。
3.可行性论证LM3S1138芯片的资源比较丰富,自带Timer产生PWM方波。
智能小车的速度要求低于步进电机的最高速度,并能通过步进电机实现精准控制,每个脉冲转动一个固定角度,因此步进电机适合作为驱动。
红外线控制通过芯片对突发接收的信号进行解码,获取红外遥控的控制信息,红外解码使用流行的方案。
车架前方装有四个探头,四路信号的触发顺序可作为障碍判断的依据。
二、软件编程1.PWM模块#include#include#include#include#include#include#include#include#include#include#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);
/*禁止KEY所在的GPIO端口*/*Functionname:
Timer_0_Init*Descriptions:
初始化Timer0*inputparameters:
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输出反相*/*Functionname:
Timer_0_Level_1*Descriptions:
左右轮一档*inputparameters:
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|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();
/获取系统时钟,单位:
Hzintmain(void)jtagWait();
/*防止JTAG失效,重要!
*/SystemInit();
Timer_0_Init();
/*定时器初始化*/Timer_0_Level_1();
for(;
2.红外接收器模块#include#include#include#include#include#include#include#include#include#include#include#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_3232;
unsignedlongIR_code_8=0;
unsigneda;
intTime_Get();
voidDelay_100_us();
IR_Int_Init*Descriptions:
初始化IR端口和中断*inputparameters:
2014.05.18*/voidIR_Int_Init(void)SysCtlPeripheralEnable(IR_PORT);
GPIOPinTypeGPIOInput(IR_PIN);
GPIOIntTypeSet(IR_PIN,GPIO_LOW_LEVEL);
GPIOPinIntEnable(IR_PIN);
IntEnable(INT_GPIOF);
IntMasterEnable();
/系统初始化voidSystemInit(void)SysCtlLDOSet(SYSCTL_LDO_2_50V);
/分频结果为20MHz*/TheSysClock=SysCtlClockGet()