智能车实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
宁波大学
创新性开放实验报告题目基于光电传感器的自动寻迹小车
学号:
姓名:
专业:
指导教师:
目录
光电感应智能车................................................................................................ 错误!未定义书签。
一、硬件系统…………………………………………………………………………………错误!未定义书签。
(一)硬件框图 (3)
1、电源模块 (4)
2、寻迹模块 (4)
3、驱动模块 (5)
4、测速模块 (6)
二、软件系统 (7)
(一)主程序流程图 (7)
1、电机驱动 (8)
2、舵机驱动 (10)
参考文献 (13)
光电感应自动寻迹智能车
【摘要】如果把自动寻迹小车成比例的扩大数倍,就成为真正有意义上的智能车,可以运用于军事、民用领域,对未来汽车行业的发展有一定的借鉴意义。通过光电传感器来寻找轨迹,以所编写的程序为软件支持,通过单片机计算生成相应的控制参数,驱动电机来使小车按照轨迹运动。其中小车在直线行驶过程控制参数保持不变,匀速行驶,而在小车要转弯之前则要先减速以防止小车过弯时冲出赛道,弯道过去之后在加速行驶以减少行驶时间。
【关键词】红外传感器;PID控制;自动寻迹
一、硬件系统
(一)智能小车的整体结构图
智能车通过单片机来接受和发出参数状态信号,电源模块是给智能车各个模块提供电压以使模块可以正常运作,寻迹模块则是包含着参数输送给单片机的作用,驱动模块是小车动起来的根源,测速模块是为了控制车速以使智能车平稳的沿着车道运行。
1、电源模块
在“飞思卡尔”比赛中,比赛方提供的是智能车竞赛统一配发的标准车模用7.2V 供电,但是在单片机系统、路径识别的光电传感器、光电码编码器等均需要5V电源,直流电机可以使用7.2V 蓄电池直接供电,我们采用的电源有串联型线性稳压电源(LM2940、7805等)和开关型稳压电源(LM2596)两大类。对于单片机,选用LM2940-5单独对其进行供电;而其它模块则需要通过较大的电流,利用LM2940-5和LM2596-5对控制系统和执行部分开供电,可以有效地防止各器件之间发生干扰,以及电流不足的问题,使得系统能够稳定地工作。
电源电路图:
2、寻迹模块
寻迹模块是智能车系统的关键模块之一,所寻找的路径的好坏,将直接影响竞赛的结果,我们采用的是光电传感器来寻找路径,光电传感器具有电路简单、信号处理速度快等特点。因为在赛道中由黑色轨迹线和大面积的白色区域组成,则会使发光二极管发射的光线强度不同,从而使接受到的光线强度不同,以此来指示小车前进。
红外传感器电路图:
3、驱动模块
电机驱动电路可以用MOS管搭建H桥驱动电路。采用MOS管构成的H桥电路,控制直流电机紧急制动。用单片机控制MOS管使之工作在占空比可调的开关状态,精确调整电动机转速。这种电路由于MOS管工作在饱和截止状态,而且还可以选择阻很小的MOS管,所以效率可以非常高,并且H桥电路可以快速实现转速和方向控制。MOS管开关速度高,所以非常适合采用PWM调制技术。所以我们选择了用MOS管搭建H桥驱动电路。
电机正转电路:
电机驱动电路:
4、测速模块
在比赛中常用霍尔传感器来测速。如图1所示,在半导体薄片两端通以控制电流I,并在薄片的垂直方向施加磁感应强度为B的匀强磁场,则在垂直于电流和磁场的方向上,将
产生电势差为UH的霍尔电压,它们之间的关系为U=k,d为薄片厚度,k为霍尔系数,通过对一定时间脉冲信号数量的捕捉可以计算出车轮的速度。
霍尔传感器的电路图:
二、软件系统
系统主程序流程图
开始
系统初始化
定时器开始
寻迹模块工作
驱动电机工作
舵机工作
定时中断否
速度采样
1、电机驱动
因为智能车在赛道上的路径不是一条直线,它是存在弯道的,所以让小车以个加速度均匀的行驶是难以实现的,在此,我们采用在弯道里速度慢一些以保证稳定性,在直道上速度快一些以减少整体行驶时间。在软件上的计算方法采用PID控制。PID控制器简单易懂,使用中不需精确的系统模型是我们选择的原因。
算法:u(t)=kp[e(t)+1/TI∫e(t)dt+TD*de(t)/dt]
在实验中为提高精确度,选择积分分离PID算法,即当速度误差较大时选择PD控制,可避免大的超调,又使系统有较快的相应,当速度误差较小时选择PID控制,可保证控制精度。u(k)=kpe(k)+bT i∑e(j)+T d*[e(k)-e(k-1)] b=1或0
e(k)是当前给定速度和测量速度的偏差,e(k-1)是上次的偏差。
PID控制程序:
#include
#include "global_varible.h"
void PID_Math(void)
{
signed long ee1; //偏差一阶
//signed long ee2; //偏差二阶
signed long d_out; //积分输出
if(!Flag_PID_T_OK)
return;
Flag_PID_T_OK=0;
Temp_Set=3700; //温度控制设定值37.00度
PID_e0 = Temp_Set-Temp_Now; //本次偏差
ee1 = PID_e0-PID_e1; //计算一阶偏差
//ee2 = PID_e0-2*PID_e1+PID_e2; //计算二阶偏差
if(ee1 > 500) //一阶偏差的限制围