王佳斌课设.docx
《王佳斌课设.docx》由会员分享,可在线阅读,更多相关《王佳斌课设.docx(14页珍藏版)》请在冰豆网上搜索。
王佳斌课设
XI`ANTECHNOLOGICALUNIVERSITY
课程设计报告
课程名称嵌入式综合课程设计
专业:
计算机科学与技术
班级:
120603
姓名:
王佳斌
学号:
120603112
指导教师:
赵世峰
成绩:
2015年12月10日
目录
一、设计任务与要求........................................2
二、系统方案设计........................................2
三、各模块功能与指标......................................5
四、实施原理及软件实现....................................7
五、调试与结果............................................11
六、心得体会..............................................12
一、设计任务与要求
1、设计任务
以ARM系列的单片机作为控制芯片,以直流电机、电机驱动、循迹模块和超声波避障模块及电源电路以及其他电路组成。
系统以单片机通过I/O口,通过红外传感器检测黑线,利用单片机输出的PWM脉冲来控制直流电机的转速,即控制小车的行驶速度;并且利用超声波避障模块来使小车能够进行自动避障功能,能够较为准确地避开行驶过程中的障碍物。
2、设计要求
整个系统的设计以单片机为核心,利用了多种传感器,将软件和硬件相结合。
本系统能实现如下功能:
(1) 自动沿预设轨道行驶小车在行驶过程中,能够自动检测预先设好的轨道,实现直道和弧形轨道的前进。
若有偏离,能够自动纠正,返回到预设轨道上来。
(2)当小车探测到前进前方的障碍物时,可以自动调整,躲避障碍物,从无障碍区通过。
小车通过障碍区后,能够自动循迹
二、系统方案设计
1、硬件选取
在硬件选取时,分为以下几个模块:
(1)处理器
智能小车常见的处理器有C51、C52以及ARM系列单片机。
经过查阅资料和对比分析,最终选取ARM中的STM32系列单片机作为处理器。
主要是基于其性价比高、配置丰富灵活、低功耗,并且搭载ARM公司最新的、具有先进架构的Cortex-M3内核等优点。
(2)避障模块
常见的避障模块主要是超声波模块和红外模块,考虑到两种模块都有一定的限制性和约束条件,最终选择将其搭配使用,以降低由于超声波和红外自身不足而造成的距离计算误差,使小车能够获得较为精确的障碍物的位置,实现准确避障。
最终选定HC-SR04+超声波模块和LY-R0001红外避障模块。
(3)电机驱动模块
电机驱动中常见的芯片是L298N,其主要特点是能提供4路最大2A的电流输出,供电电压0-24V,并能提供5V输出给MCU供电,支持PWM调速,单芯片最大输出25W,性价比高等。
考虑到让小车高速稳定前进,能够实现四驱功能,最终选定双L298N驱动模块,这样既能够节省车体空间,也有利于控制和走线。
(4)电机
由于小车的速度调解是作为避障和路径规划的一个关键点,在选取电机上能够自带测速的电机自然成为了首选。
经过对比考量后,最终选择ASLONGJGA25-371电机,主要利用其可测速、测转角的功能,以提高小车避障时的精度。
(上述模块详细资料见附表)
(5)编程语言及环境
常用的arm处理器的编程语言有汇编语言和c语言,但是汇编语言在编程时稍显复杂,并且是直接操作寄存器,对初学者来说,相对较难,因此编程语言我选择的是C语言。
编程环境也有很多种,在51单片机学习的基础上,我决定使用keil环境来编程,这个环境使用方便,并且可以在线调试。
2、硬件结构布局和配置
小车的硬件布局显得尤为关键。
经过深思熟虑,决定将避障模块放在车体头部,这样能够有效地检测的小车前方的障碍物,同时,ARM开发板作为整个小车系统的核心,则放在车体中间位置,这样便于控制每一个硬件模块。
电机驱动作为供电枢纽,完成所有模块的供电,最主要的是对四个车轮的电机供给电压,其自然得安装在车体前身,这样方便电源线、ARM开发板,以及电机连接。
红外循迹模块则置放与两个超声波模块的中间部位,智能小车要实现循迹,那么询及模块必须置放与小车的前轮之前,这样才能准确的探测黑线并且能够保证智能小车能够沿着黑线行驶。
详细的硬件布局如:
图2-2-1。
图2-2-1小车硬件布局
(1)管脚配置
已知电机驱动有8个输入管脚IN1-IN8、8个输出OUT1-OUT8以及4个使能ENA-END。
硬件连接通过配置ARM开发板的管脚,分别连接IN1-IN8。
其中每两个IN口代表对一个电机进行驱动,如IN1、IN2对应左前方电机输入信号,IN3、IN4对应左后方电机输入信号等。
当电机驱动得到电信号后,要通过相应的管脚输出信号,从而实现对电机的控制。
那么OUT1-OUT7就代表电动机的输出信号,即将这几个管脚分别连接到电动机的引脚上。
其中OUT1、OUT2对应左前方电机,OUT3、OUT4对应左后方电机,OUT5、OUT6对应右前方电机,OUT7、OUT8对应有后方电机。
(2)软件实现
软件实现主要是根据电机不同的运转情况,通过对ARM引脚的配置来控制电机驱动IN口电平的高低,进而实现ARM对电机运转的控制。
并根据电机驱动对于IN口不同所实现的电机运转状态的变化来编写小车的直行、左拐、右拐、左后倒、右后倒等不同情况下的代码。
代码编写完成并通过软件仿真验证后通过JLINK仿真器将代码烧入片子中,然后查看小车运转情况。
(3)智能车处理器
智能车的处理器,采用的是STM32F103VE的开发板,这个开发板管脚较多,并且配置灵活,也容易上手,掌握基本配置后,就能够进行试验。
在此之前,也在KEIL4的编程环境下练习了许多的基础实验,为这次的课程设计积累了不少的经验。
如图2-2-2,是STM32F103VE开发板的管脚图。
图2-2-2STM32F103VE管脚图
接线方式:
电源处由电机驱动给ARM单片机供5V电源、;
PD0—PD7接电机驱动的IN1—IN8;
PE11:
接小车右边的超声波避障模块的Echo;
PE12:
接小车右边的超声波避障模块的Trig;
PE13:
接小车右边的超声波避障模块的Echo;
PE14:
接小车右边的超声波避障模块的Trig;
PC0:
接小车正前方红外循迹模块的OUT;
三、各模块功能与指标
1、电源模块
系统利用蓄电池提供12V直流电源,实现电机稳定的12V直流稳压电,为单片机以及其他各模块以及无线传输电路提供电源。
2、电机驱动模块
电机驱动中常见的芯片是L298N,能提供4路最大2A的电流输出,供电电压0-24V,并能提供5V输出给MCU供电,支持PWM调速,单芯片最大输出25W,能够让小车高速稳定前进,能够实现四驱功能,能够节省车体空间,也有利于控制和走线。
3、减速电机模块
电机采用的是ASLONGJGA25-371减速电机,该电机带编码器测速码盘马达,能够快速的启动、制动和反转。
所带编码器的保证了测速的精度,芯片上已经继承了脉冲整形出发电路,输出的是矩形波,输出的波形十分稳定。
该电机能够精确到1.4。
,因此能够准确的计算车前进的速度。
各线的含义为:
红线为电机电源的正极,黑色线为电机电源的负极,绿色线为传感器的地线,蓝色线为传感器的电源线,黄色和白色线分别为信号A和B的输出点。
各项参数:
工作电压:
6-24VDC,额定电压:
12V
4、避障模块
避障模块采用的是超声波避障模块和红外避障模块相结合的方式,以此来避免由于超声波测量盲区过大,红外易受光线干扰而产生误差。
超声波避障模块采用的是HC-SR04+。
可准确的检测到小车左前方和右前方的障碍物并且做出相应的避障措施,使小车能够实现自动避障功能。
如图,3-4-1是超声波避障模块实物图。
图3-4-1超声波模块
5、循迹模块
红外循迹模块采用的是DOFLYLY-0040,用于小车走黑线、数字信号输出,感应范围为2mm——20mm。
利用循迹功能,能够路循迹模块,用于小车走黑线,数字信号输出,电位器用于调节灵敏度,LED灯指示使智能车在不同的固定行驶路线上行驶。
四、实施原理及软件实现
1、自动避障技术
(1)实施原理
自动避障模块采用的是两个超声波模块和一个红外模块。
我们采用的是一个红外避障模块,放在小车的正前方,在其两侧采用的是两个超声波避障模块。
这样就能探测小车前方的较大范围内的障碍物,并能够准确的采取相应的避障措施,实现自动避障功能,保证无人车能无碰撞的行驶。
图4-1-1超声波时序图
图4-1-2硬件分布图4-1-3超声波避障原理演示
如图4-1-2,是智能小车超声波模块在智能车上的位置布局图,图4-1-3是超声波避障原理的简单演示图,超声波的工作原理大致为:
超声波模块的触发信号(Trig端)发出一个40—50us的高电平,这时模块内部循环发出8个40Khz脉冲。
接收到信号时,接收端(Echo)产生一个高电平,高电平的持续时间即为超声波发出信号到接收信号的持续时间。
通过公式测试距离=高电平持续时间*340/2单位为米。
(2)超声波避障的配置代码
voidTIM_Configuration(void)//超声波定时器配置
{
TIM_TimeBaseInitTypeDefTIM_TimeBaseStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);
TIM_DeInit(TIM3);
TIM_TimeBaseStructure.TIM_Period=5000;
TIM_TimeBaseStructure.TIM_Prescaler=0;
TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1;
TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;
TIM_TimeBaseInit(TIM3,&TIM_TimeBaseStructure);
TIM_PrescalerConfig(TIM3,359,TIM_PSCReloadMode_Immediate);TIM_ARRPreloadConfig(TIM3,DISABLE);
TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE);
TIM_Cmd(TIM3,DISABLE);
}
voidGPIO_Configuration(void)//超声波控制端口配置
{
GPIO_InitTypeDefGPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE,ENABLE);
/*Echopindefine*/
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_11;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOE,&GPIO_InitStructure);
/*Triglepindefine*/
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_12;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOE,&GPIO_InitStructure);
}
floatSensor_using(void)//传感器的使用函数
{
floatdistance=0;
u16TIM=0;
GPIO_SetBits(GPIOE,GPIO_Pin_12);//trig端接受维持大约10us的高电平触发
delay();
GPIO_ResetBits(GPIOE,GPIO_Pin_12);
TIM_Cmd(TIM2,ENABLE);
while(!
GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_11)&&overflow==0);
TIM2->CNT=0;
while(GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_11)&&overflow==0);
TIM_Cmd(TIM2,DISABLE);
if(overflow!
=0)
{
overflow=0;
return0.0;
}
TIM=TIM_GetCounter(TIM2);
distance=(float)sqrt((TIM/20.0*17)*(TIM/20.0*17)-module_interval*module_interval/4.0)+12.0;
return(distance);
}
2、寻迹模块
(1)红外寻迹原理
红外寻迹模块采用的是DOFLYLY-0040,用于小车走黑线、数字信号输出,当智能车寻迹行驶时,红外模块向处理器返回低电平,这时是小车正常的循迹行驶;若智能车由于躲避障碍物而走出了黑线,这时,红外模块将会向处理器返回高电平,同时处理器会对智能车的行驶做出相应的调整。
(2)红外寻迹程序实现
voidTIM4_Configuration(void)//循迹中断定时器
{
TIM_TimeBaseInitTypeDefTIM_TimeBaseStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4,ENABLE)
TIM_DeInit(TIM4)
TIM_TimeBaseStructure.TIM_Period=5000;
TIM_TimeBaseStructure.TIM_Prescaler=0;
TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1;
TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;
TIM_TimeBaseInit(TIM4,&TIM_TimeBaseStructure);
TIM_PrescalerConfig(TIM4,1799,TIM_PSCReloadMode_Immediate);TIM_ARRPreloadConfig(TIM4,DISABLE);
TIM_ITConfig(TIM4,TIM_IT_Update,ENABLE);
TIM_Cmd(TIM4,DISABLE);
}
3、电机驱动模块
(1)电机选择
选择正确的直流电机驱动方式决定小车能否正常工作,是本设计功能实现的基础。
方案一:
BTS7960以其内阻小、驱动电流大的特点而在全国飞思卡尔智能汽车竞赛中广泛使用。
适用于电流驱动的大电流高集成芯片,去内部带有一个P沟道的高边MOSFET、一个N沟道的底边MOSFET和一个驱动IC,驱动IC具有逻辑电平输入、电流诊断、斜率调节、死去时间产生和过温、过压、欠压、过流及短路保护功能。
驱动直流电机有着很好的效果,唯一不足是价格太高。
方案二:
电机驱动中常见的是L298N,其主要特点是能提供4路最大2A的电流输出,供电电压0-24V,并能提供5V输出给MCU供电,支持PWM调速,单芯片最大输出25W,性价比高等。
考虑到让小车高速稳定前进,能够实现四驱功能,最终选定双L298N驱动模块,这样既能够节省车体空间,也有利于控制和走线。
(2)电机驱动程序
//电机驱动模块I/O配置
voidIN_GPIOB_Config(void)
{
GPIO_InitTypeDefGPIO_IS;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD,ENABLE);
GPIO_IS.GPIO_Pin=GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7;
GPIO_IS.GPIO_Mode=GPIO_Mode_Out_PP;
GPIO_IS.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOD,&GPIO_IS);
//Setstheselecteddataportbits.
GPIO_SetBits(GPIOD,GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7);
}
五、调试与结果
1、ISO-MINISTM32F103VE单片机编程
在硬件调试过程中,程序是最重要的。
STM32F103VE是STM32的增强系列,增强型系列时钟频率达到72MHz,是同类产品中性能最高的产品;基本型时钟频率为36MHz,以16位产品的价格得到比16位产品大幅提升的性能,是32位产品用户的最佳选择。
两个系列都内置32K到128K的闪存,不同的是SRAM的最大容量和外设接口的组合。
时钟频率72MHz时,从闪存执行代码,STM32功耗36mA,是32位市场上功耗最低的产品,相当于0.5mA/MHz。
STM32F103VE单片机处理能力强、功能多、运算速度快、片内资源丰富、超低功耗、资料齐全,易上手。
2、小车循迹避障的调试
在本设计中,采用MCU通过红外循迹模块检测黑线,以确定智能车行驶路径,避障模块采集周围物体信息后处理信息以达到循迹避障的效果。
在调试时,通过对红外模块电位器的调节则可理解为通过调节基准电压以调节接收管灵敏度。
通过对超声波模块安装的位置的改变,以确定最佳位置以及无人车前方避障的范围。
经过多次调试后,小车循迹避障已经能够实现,并且十分精准。
六、心得体会
ARM单片机的配置和使用比MCS-51单片机稍显复杂,使用起来也有较多的复杂配置,但是ARM单片机的功能比较完善,当然学习和利用起来,就相对较难。
根据设计要求,我阅读了大量的关于智能车寻迹避障的前期准备资料,并认真分析了设计课题的需求,然后确定了所遇要的硬件。
实验过程中遇到的问题不少,通过不断得对程序的漏洞分析和硬件的布局搭配等,及时发现在实验中出现的复杂问题。
另外,我觉得在单片机控制智能车过程中要理清思路,比如如何用单片机控制引脚高低电平,从而使输出左右轮速度变换,是转弯过程变得更加灵活,除此之外,硬件也存在一定的不稳定性从而会使在最终结果出现一些出乎意料的结果,使实验变得不完美,因此我们不仅在硬件上最求高稳定性,更要在软件上追求灵活性,使做出的结果更加完善。
第页