电赛全国一等奖报告智能小车c题Word格式文档下载.doc
《电赛全国一等奖报告智能小车c题Word格式文档下载.doc》由会员分享,可在线阅读,更多相关《电赛全国一等奖报告智能小车c题Word格式文档下载.doc(17页珍藏版)》请在冰点文库上搜索。
3电路与程序设计 4
3.1电路的设计 4
3.1.1系统总体框图 4
3.1.2电源子系统框图与电路原理图 5
3.1.3传感器电路原理图 5
3.1.4电机驱动 6
3.2程序的设计 6
3.2.1程序功能描述与设计思路 6
3.2.2程序流程图 7
4测试方案与测试结果 7
4.1测试方案 7
4.2测试条件与仪器 7
4.3测试结果及分析 7
4.3.1测试结果(数据) 7
4.3.2测试分析与结论 8
附录1:
电路原理图 9
附录2:
源程序 10
1系统方案
本系统主要由激光模块、红外模块、无线模块、电机驱动模块、电源模块组成。
这次采用的车模是1:
14的高仿车模,目的是能够再现现实中的小车智能控制方案。
智能小车系统采用飞思卡尔的16位微控制器MC9S12XS128单片机作为核心控制单元用于智能汽车系统的控制。
在选定智能小车系统采用光电传感器方案后,赛车的位置信号由车体前方的光电传感器采集,经XS128MCU的I/O口接收后,用于赛车的运动控制决策,同时内部ECT模块发出PWM波,驱动直流电机对智能小车进行加速和减速控制,以及伺服电机对赛车进行转向控制,使赛车在赛道上能够自主行驶,超车等功能。
1.1传感器方案的论证与选择
方案一:
采用CCD摄像头采集道路信息,并进行处理,方案的优点是采集的信息更为丰富,机械结构简单,缺点是成本较高,软件编程复杂,对单片机速度要就较高。
方案二:
采用红外进行检测,该方案的优点是硬件简单,可以实现实时控制,但是红外对管前瞻较小,不能对控制进行优先判断。
方案三:
采用激光传感器,既可以检测到较远距离的路况,处理方式也比较简单,成本较低。
综合以上三种方案,选择方案三。
1.2无线方案的论证与选择
采用24L01无线方案,24L01方案稳定,成本低廉,但是配置起来较为繁琐。
在通信过程中有一定的数据流失现象。
采用蓝牙方案,蓝牙方案低功耗,小体积以及低成本的芯片解决方案使得Bluetooth技术甚至可以应用于极微小的设备中。
智能车的行驶过程中,需要实时发出准确的速度信息,所以综合以上两种方案,发现蓝牙的方案较为成熟,稳定,并且能够满足低功耗的要求,选择方案二。
1.3测速方案的论证与选择
采用霍尔集成片。
该器件内部有三片霍尔金属板组成,当磁铁正对着金属板时,由于霍尔效应,金属板发生横向导通,因此可以在车轮上安装磁片,而将霍尔集成片安装在固定车架上,通过对脉冲的计数进行车速测量。
受鼠标工作原理的启发,采用断续式光电开关。
由于该开关是沟槽结构,可以将其置于固定轴上,再在车轮上均匀地固定多个遮光条,让其恰好通过沟槽,产生一个脉冲。
通过脉冲的计数,对速度进行测量。
以上两种方案都是比较可行的转速测量方案。
尤其是霍尔元件,在工业上得到广泛采用。
在本题中,小车的车轮较小,方案一采用电子的方式代替机械结构,能够有效减少齿间的摩擦,降低机械损耗,是作品更加的耐用,并且霍尔元件更为轻巧,便捷,别且能够有足够的脉冲,可以实现对小车的智能控制.
1.4控制系统的论证与选择
采用沿内径行驶的方案,该方案比较稳定,但是对道路信息处理比较少,实现超车较为困难。
采用弯道,起始道路识别,配合内径行驶方案,该方案能够合理利用道路中提供的信息,完成更为复杂的行驶策略,并且可以更加合理的实现超车等功能。
综合考虑采用方案二。
2系统理论分析与计算
2.1控制理论的分析
2.1.1控制方式
本次比赛设置的路面信息很多,但是识别起来比较复杂,我们采取在传感器上安装舵机的方式,这样激光可以灵活多角度的检测路面信息。
智能小车通过激光,红外,霍尔等多种传感器获取到路况以及车况的信息,同时实时采用蓝牙通信,将对方的车辆情况告诉本车,综合这些信息,小车采取不同的控制策略。
智能车为了满足能够自动驾驶的功能,采用了激光的方式对道路两边的黑线信息进行检测,整合打角与激光管接收数据的关系,从而检测出道路的信息,在道路中实现自动驾驶的功能。
车前安装了红外对管,可以将两车的距离较为准确的测出,可以使两车距离较远的时候实现追逐,当两车距离比较近时后面的车能够及时减速。
蓝牙的无线通信将两车行驶的信息,包括车速,位置,状态等实时的发送到对方的车辆,如果两车较近,则前车加速后车减速,如果两车相距较远,则后车加速,在超车的过程中,后车加速,前车减速,直到超车结束后,两车以正常的速度行驶。
2.1.12PID算法
当被控对象的结构和参数不能完全掌握或得不到精确的数学模型,控制理论的其他技术难以采用时,系统控制器的结构和参数必须依靠经验和现场调试来确定,这时应用PID控制技术最为方便.即使当我们不完全了解一个系统和被控对象,或是不能通过有效的测量手段来获得系统参数时,也适合采用PID控制技术.PID控制器就是根据系统的误差,利用比例、积分、微分计算。
2.1.3PID计算
PID计算方式如图1所示:
图一
经过测算和推导,我们得出了PID的计算公式
在该智能车系统中,PID各个参数经过调试得出:
K=160
P=300
I=350
D=125
2.2红外测距的计算
2.2.1红外测距所得到的电压
经过实验,我们得出了红外测距的电压与被测物距离的关系如图2所示
图二
2.2.2红外测距AD值与距离的关系
经过数学建模,我们得出在5cm以后红外测距值大体与距离成反比关系,从而建立公式:
D=13/V
其中D为计算得出的距离值,V为红外管得到的电压
2.3两车之间通信方法
2.3.1两车之间通信方式
两车通过蓝牙实现双工通信,通信的过程中实时的传输两车之间的速度,状态等信息,并根据这样的信息协调两车的速度,保证两车不会相撞,通信采用与串口通信方式相同的方式,按位(bit)发送和接收字节。
尽管比按字节(byte)的并行通信慢,但是串口可以在使用一根线发送数据的同时用另一根线接收数据。
它很简单并且能够实现远距离通信。
以波特率9600数据位8位,带有奇偶校验位和停止位,传送字符信息。
2.3.2通信信息
当小车被放到赛道上开启时,小车将会不断通过蓝牙向对方小车发出申请,同时采用中断的方式准备接收对方小车的申请信号,但接收到时,两车成功通信,并同时启动。
当被超车识别到超车线时,将减速行驶,当速度达到一定阈值时,将发送指令向被超车,表示可以超车。
当超车的车识别到超车线时,等待被超车的信息,当收到信息进行超车动作,完成超车动作后发送信息给被超车,表示完成超车,可以加速行驶。
2.4节能论证
尽管小车需要舵机,电机的多方平衡控制,但我们也尽力保证小车的节能要求,在满足题目要求的同时尽量降低小车的功耗,做到低碳环保。
2.4.1电源芯片的选择
选用凌特LT1085电源芯片,在保证能够提供较大电流的基础上极可能的提高电源的利用效率,由于LT1085属于线性稳压芯片,我们采用7.2V低压差供电,使在电源芯片上的压差降低,能够有效降低在电源上的功率,降低其功耗,达到节能的效果。
2.4.2激光的控制与选择
我们采用8050与8550为激光驱动,并使用调制管和分时点亮的策略进行激光的点亮,不仅可以实现激光应有的功能,而且可以大大降低激光管所消耗的电能,除此之外,我们也在激光上合理的测试了限流电阻,在保证激光亮度的同时降低其功耗
3电路与程序设计
3.1电路的设计
3.1.1系统总体框图
系统总体框图如图3所示:
图三系统总体框图
3.1.2电源子系统框图与电路原理图
1、电源子系统框图
图四电源子系统框图
2、电源子系统电路
图五电源子系统电路
3.1.3传感器电路原理图
1、传感器子系设计
传感器采用带有调制的激光方案,采用8550和8050进行信号的放大来驱动激光管,并将调制信号耦合进去。
2、传感器子系统电路
图六传感器子系统电路
3.1.4电机驱动
采用MOS管的H桥驱动,如图所示。
图七电机驱动电路
3.2程序的设计
3.2.1程序功能描述与设计思路
1、程序功能描述
根据题目要求软件部分主要实现对于小车的智能控制操作,是本题的核心,小车要在程序的引导下不仅完成道路的识别并且自动驾驶,而且还要实现超车,相互领跑等复杂的动作。
2、程序设计思路
分析跑道特点,跑道主要由直道,一般弯道,超车标志区弯道和超车区组成,且在跑道的每个弯道处都有弯道标志线或超车标志线,在超车区有虚线引导。
因而在程序设计的时候可以充分利用这些标志辅助我们检测循迹。
在软件编程的时候,会遇到各种不同的道路情况,需要我们采取各种不同策略,我们把它划分为很多种状态,采用状态机的设计方法,不同状态来回更替,这样可以使程序设计清晰明了且能大大简化编程。
下面是几种主要状态策略的分析:
1.直道。
直道是比较简单的部分,由于激光循迹部分为跑道内侧的黑胶带,因而要使激光传感器斜着射到跑道内侧,并且需要通过软件滤波,去除打到赛道外部的激光的不定状态。
在这种设计中会遇到的问题是在弯道处容易导致打角不合适而出现掉轮。
2.一般弯道。
由于容易在过弯时掉轮,因而在检测到弯道标志线后我们采取先保持角度延时一定时间后给一个大角度打角过弯的方法,通过不断测试延时时间和打角值,得到了很好的效果。
3.超车标志区。
超车标志区识别很容易和弯道标志误识别,通过测试,我们采用在一定时间内计数采到标志线上的数量的方法来判断。
4.超车区。
这个区是最难处理的部分。
由于要求车交替超车,所以车在这个部分要做两种动作。
被超车在识别出超车标志线后使传感器达到另一侧,通过跑道外侧边沿的黑胶带来循线,而在超车区的中部位置停车,等待后面的车超车。
而后面的车则是识别出超车标志线后延时后大打角进入超车道,检测到超车道内侧边沿后反方向打角出超车区,通过调试不同阶段的延时时间和打角角度,可以得到很好的效果。
5.两车协调。
两车要求同时启动并且不碰撞,我们在车的前面安装了红外测距,通过它来防止撞车。
我们也使用了蓝牙无线模块,在起始区协同同时启动,在超车超车动作完成之后告诉等待在超车区的被超车可以启动进入下一轮的交替超车。
3.2.2程序流程图
初始化
蓝牙握手,发出启动信号
传感器引导行驶
传感器检测转弯标志以及超车标志
减速,等待被超车
加速,超车
完成超车
无线通信
1、主程序流程图
2、超车子程序流程图
检测超车标志
超车车辆
被超车辆
减速,摇头舵机打外角,检测外延
加速,检测内径的路线
根据内径的道路情况和红外测距得到的值控制
等待接收状态信息
退出状态,正常行驶
无线发射状态信息
标志位识别,退出超车状态
4测试方案与测试结果
4.1测试方案
1、硬件测试
将各个电路绘制,焊接完毕后,测试激光传感器能否收到,红外是否可以测距,码盘以及电机驱动是否可以正确完成各种功能。
2、硬件软件联调
编写软件可以实现普通的自动驾驶功能,能够满足基本的沿路,并进行一定的速度控制,这样可以验证,软硬件的基本部分是没有问题的,当确定这一点后,我们将根据题目,进行下一步的策略算法设计。
初步任务完成后,我们会优化软硬件,使其更为流畅,稳定的行驶。
4.2测试条件与仪器
测试条件:
检查多次,仿真电路和硬件电路必须与系统原理图完全相同,并且检查无误,硬件电路保证无虚焊。
测试仪器:
秒表
4.3测试结果及分析
4.3.1测试结果(数据)
1、两个车分别跑完一圈
1
2
3
4
5
平均
甲车
10s
9.5s
11s
10.8s
乙车
9.8s
10.2s
11.2s
12s
2、完成乙车超过甲车一圈
次数
时间
10.5s
3、完成相互领跑4圈
40s
39s
41s
42s
4.3.2测试分析与结论
根据上述测试数据,甲乙可以实现题目中,由此可以得出以下结论:
1、小车可以实现完全的自动行驶功能
2、小车可以完成相互超车功能
3、小车可以比较稳定的实现各种路况的自主行驶的功能,并能实现追逐,超车等高级功能。
综上所述,本设计达到设计要求,并在实现的过程中体现了很多创新点。
14
电路原理图
源程序
voidmain(void)
{
(void)EnCoderTimer_Disable();
InitAll();
if(!
Switch_GetBit(0))
{
mode=OVER_TAKE;
}
else
mode=SINGLE_LAP;
Cpu_Delay100US(500);
(void)EnCoderTimer_Enable();
if(mode==OVER_TAKE)
while(TRUE)
{
while(SCI_SendChar(HELLO)!
=ERR_OK);
(void)SCI_RecvChar(&
message_recieved);
if(message_recieved==HELLO)break;
}
DiDi_ClrVal();
Cpu_Delay100US(1000);
DiDi_SetVal();
for(;
;
)
while(Distance_Measure(FALSE)!
=ERR_OK);
while(Distance_GetValue16(&
Distance)!
LaserLighten();
Analyz_Laser_Status();
if(IsMaster==TRUE)
if(LaserStatus==STRIGHTLINE)
{
if(Distance<
5000)SpeedSet=16;
elseif(Distance<
6000)SpeedSet=14;
elseif(Distance<
7000)SpeedSet=10;
90000)SpeedSet=7;
12000)SpeedSet=5;
15000)SpeedSet=0;
elseSpeedSet=0;
}
elseif(LaserStatus==CURVE)SpeedSet=11;
elseif(LaserStatus!
=FOLLOW_START2&
&
LaserStatus!
=IDLE&
=SPECIAL_STRAIGHT_AHEAD&
LaserStatus!
=SPECIAL_STRAIGHT_FOLLOW&
=EXIT_RIGHT_TRACK4_PRE_STRAIGHT)
SpeedSet=10;
}
else
if(LaserStatus==STRIGHTLINE)SpeedSet=13;
elseif(LaserStatus==CURVE)SpeedSet=11;
=FOLLOW_START2&
=IDLE&
=FIRST_LAP_STRAIGHT&
=SPECIAL_STRAIGHT_FOLLOW&
TurnToSet();
SpeedControl();