当前位置:文档之家› 智能车实验报告

智能车实验报告

宁波大学创新性开放实验报告题目基于光电传感器的自动寻迹小车学号:姓名:专业:指导教师:目录光电感应智能车................................................................................................ 错误!未定义书签。

一、硬件系统…………………………………………………………………………………错误!未定义书签。

(一)硬件框图 (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或0e(k)是当前给定速度和测量速度的偏差,e(k-1)是上次的偏差。

PID控制程序:#include <stdlib.h>#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) //一阶偏差的限制范围ee1 = 500;if(ee1 < -500)ee1 = -500;PID_e_SUM += PID_e0; //偏差之和if(PID_e_SUM > 200) //积分最多累计的温差PID_e_SUM = 200;if(PID_e_SUM < -200)PID_e_SUM = -200;PID_Out = PID_kp*PID_e0+PID_kd*ee1; //计算PID比例和微分输出if(abs(PID_e0) < 200) //如果温度相差小于1.5度则计入PID 积分输出{if(abs(PID_e0) > 100) //如果温度相差大于1度时积分累计限制{if(PID_e_SUM > 100)PID_e_SUM = 100;if(PID_e_SUM < -100)PID_e_SUM = -100;}d_out = PID_ki*PID_e_SUM; //积分输出if(PID_e0 < -5) //当前温度高于设定温度0.5度时积分累计限制{if(PID_e_SUM > 150)PID_e_SUM = 150;if(PID_e_SUM > 0) //当前温度高于设定温度0.5度时削弱积分正输出d_out >>= 1;}PID_Out += d_out; //PID比例,积分和微分输出}elsePID_e_SUM=0;PID_Out/=100; //恢复被PID_Out系数放大的倍数if(PID_Out > 200)PID_Out=200;if(PID_Out<0)PID_Out=0;if(PID_e0 > 300) //当前温度比设定温度低3度则全速加热PID_Out=200;if(PID_e0 < -20) //当前温度高于设定温度0.2度则关闭加热PID_Out=0;Hot_T_Run=PID_Out; //加热时间控制输出PID_e2 = PID_e1; //保存上次偏差PID_e1 = PID_e0; //保存当前偏差1、舵机驱动原理:控制电路板接受来自信号线的控制信号,控制电机转动,电机带动一系列齿轮组,减速后传动至输出舵盘。

舵机的输出轴和位置反馈电位计是相连的,舵盘转动的同时,带动位置反馈电位计,电位计将输出一个电压信号到控制电路板,进行反馈,然后控制电路板根据所在位置决定电机的转动方向和速度,从而达到目标停止。

即由pwm波产生模块计算相应的pwm波占空比,产生pwm波,驱动舵机,改变舵机前轮转角意识智能车转弯。

程序:#include <reg51.h>#define uchar unsigned char#define uint unsigned intuinta,b,c,d; /*a、b为舵机1、2的脉冲宽度/* /*c、d为中间变量/* sbit p12=P1^2;sbit p13=p1^3;sbit p37=P3^7;/*输出管脚void timer0(void) interrupt 1 using 1{p12=!p12; /*输出取反*/c=20000-c; /*20000 /*一个周期时间20msTH0=-(c/256);TL0=-(c%256); /*重新定义初值if(c>=500&&c<=2500)c=a;else c="20000-a"; /*判断宽度是否在正常范围内void timer1(void) interrupt 3 using 1{p13=!p13; d=20000-d;TH1=-(d/256);TL1=-(d%256);if(d>=500&&d<=2500)d=b;else d="20000-b"; }void main(void){TMOD=0x11; /*设初值p12=1;p13=1;a=1500;b=1500; /*舵机90度的位置c=a;d=b;TH0=-(a/256);TL0=-(a%256);TH1=-(b/256); TL1=-(b%256); /*设定定时器初始计数值EA=1;ET0=1; TR0=1;EX0=1;EX1=1;ET1=1; TR1=1;PX0=0;PX1=0;PT1=1;PT0=1; /*设定中断优先级在程序中只要改变a,a从500变化到2500,就可以让舵机从0变化到180度。

相关主题