1、拥有 7组 GPIO,可配置为输入、输出、开漏、弱上拉等模式。4个 32位 Timer,每个都个拆分为 2个独立子定时器。6路 16位 PWM,通过 CCP管脚能产生高达 25Mhz的方波。自制车架 车轮用步进电机精确控制,步进电机用放大电路驱动,受 PWM信号控制。锂离子电池给放大电路和开发板供电。车架前方有红外探头,通过即时返回数据进行判断实现自动避障。开发板外接红外线接收头,实现红外线人工控制。编程开发平台 IAR Embedded Workbench IAR 是 LM3S系列适配的开发平台之一,适合用 C 语言和库函数进行编程,操作简单,较易上手。3.可行性论证 LM3S1138芯片的
2、资源比较丰富,自带 Timer产生 PWM方波。智能小车的速度要求低于步进电机的最高速度,并能通过步进电机实现精准控制,每个脉冲转动一个固定角度,因此步进电机适合作为驱动。红外线控制通过芯片对突发接收的信号进行解码,获取红外遥控的控制信息,红外解码使用流行的方案。车架前方装有四个探头,四路信号的触发顺序可作为障碍判断的依据。二、软件编程 1.PWM模块#include#include#include#include#include#include#include#include#include#include#include“LM3S1138_PinMap.H”/*定义按键*/#define
3、KEY_PORT SYSCTL_PERIPH_GPIOG#define KEY_PIN GPIO_PORTG_BASE,GPIO_PIN_5#define keyGet()GPIOPinRead(KEY_PIN)/定义全局的系统时钟变量 unsigned long TheSysClock=12000000UL;/*Function name:jtagWait *Descriptions:防止 JTAG 失效,KEY=PG5 *input parameters:无*output parameters:无 *Returned value:无 *Created by:张伟杰*Created Date
4、:2014.05.15*/void jtagWait(void)SysCtlPeripheralEnable(KEY_PORT);/*使能 KEY 所在的 GPIO 端口*/GPIOPinTypeGPIOInput(KEY_PIN);/*设置 KEY 所在管脚为输入*/if(keyGet()=0 x00)/*如果复位时按下 KEY,则进入*/for(;);/*死循环,以等待 JTAG 连接*/SysCtlPeripheralDisable(KEY_PORT);/*禁止 KEY 所在的 GPIO 端口*/*Function name:Timer_0_Init *Descriptions:初始化
5、Timer0 *input parameters:2014.05.15*/void Timer_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输出*/Sy
6、sCtlPeripheralEnable(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输出反相*/*Function name:Timer_0_Level_1 *Descriptions:左右轮一档 *input parameters:2014.05.15*/vo
7、id Timer_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);/*设置 Ti
8、merB 的 PWM匹配值*/TimerEnable(TIMER0_BASE,TIMER_BOTH);/*使能定时器计数,PWM开始输出*/系统初始化 void SystemInit(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.75V Sys
9、CtlClockSet(SYSCTL_USE_PLL|/系统时钟设置,采用 PLL SYSCTL_OSC_MAIN|/主振荡器 SYSCTL_XTAL_6MHZ|/外接 6MHz晶振 SYSCTL_SYSDIV_10);/分频结果为 20MHz*/TheSysClock=SysCtlClockGet();/获取系统时钟,单位:Hz int main(void)jtagWait();/*防止 JTAG 失效,重要!*/SystemInit();Timer_0_Init();/*定时器初始化*/Timer_0_Level_1();for(;2.红外接收器模块#include#include#inc
10、lude#include#include#include#include#include#include#include#include#include“LM3S1138_PinMap.H”/*定义按键*/#define KEY_PORT SYSCTL_PERIPH_GPIOG#define KEY_PIN GPIO_PORTG_BASE,GPIO_PIN_5#define keyGet()GPIOPinRead(KEY_PIN)#define IR_PORT SYSCTL_PERIPH_GPIOF#define IR_PIN GPIO_PORTF_BASE,GPIO_PIN_1 /定义全局的
11、系统时钟变量 unsigned long TheSysClock=12000000UL;unsigned IR_flag=0;unsigned long IR_code_3232;unsigned long IR_code_8=0;unsigned a;int Time_Get();void Delay_100_us();IR_Int_Init *Descriptions:初始化 IR 端口和中断 *input parameters:2014.05.18*/void IR_Int_Init(void)SysCtlPeripheralEnable(IR_PORT);GPIOPinTypeGPIOInput(IR_PIN);GPIOIntTypeSet(IR_PIN,GPIO_LOW_LEVEL);GPIOPinIntEnable(IR_PIN);IntEnable(INT_GPIOF);IntMasterEnable();/系统初始化 void SystemInit(void)SysCtlLDOSet(SYSCTL_LDO_2_50V);/分频结果为 20MHz*/TheSysClock=SysCtlClockGet()
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1