创新设计与实践报告--自动寻迹小车--基于S08单片机的自动寻迹小车设计 本文关键词:小车,设计,单片机,实践,创新
创新设计与实践报告--自动寻迹小车--基于S08单片机的自动寻迹小车设计 本文简介:创新设计与实践实训题目:基于S08单片机的自动寻迹小车设计专业班级:自动化学生姓名:学号:指导教师:王威设计地点:2010年12月20日成绩:日期:1创新设计与实训任务书学生姓名专业班级自动化学号题目基于S08单片机的自动寻迹小车设计课题性质其他课题来源自拟指导教师王威主要内容(参数)全国大学生“飞
创新设计与实践报告--自动寻迹小车--基于S08单片机的自动寻迹小车设计 本文内容:
创新设计与实践
实训题目:
基于S08单片机的自动寻迹小车设计
专业班级:
自动化
学生姓名:
学
号:
指导教师:
王威
设计地点:
2010年
12
月
20
日
成绩:
日期:
1
创新设计与实训任务书
学生姓名
专业班级
自动化
学号
题
目
基于S08单片机的自动寻迹小车设计
课题性质
其他
课题来源
自拟
指导教师
王威
主要内容
(参数)
全国大学生“飞思卡尔”杯智能车竞赛是教育部主办的大学生5大赛事之一,具有较强的综合训练作用。本设计基于S08单片机,基于反射式光耦设计自动寻迹小车,主要内容如下:
1、
设计智能车寻迹电路;
2、
设计智能车电机驱动及调速电路;
3、
编写程序,能够适应各种赛道。
通过本次创新设计使得学生巩固所学的理论与技能,提高学生的实践能力和应用能力,初步掌握实际的工程设计方法,设计步骤,为将来的学习与毕业设计打下坚实的基础。
任务要求
(进度)
(包括应具备的条件、图表等)
设计要求:
1.
设计基于光电开关的寻迹电路;
2.
设计小车主电机驱动及调速电路;
3.
编写主程序,使小车能够根据比赛赛道自动寻迹前进;
4、绘制相应的硬件图纸及软件流程图;
5.
完成软件与硬件设计并加以调试;
6.
按照要求撰写创新设计与实践报告书。
主要参考
资料
[1]
王威.嵌入式微控制器S08AW原理与实践[M].北京:北京航空航天大学出版社,2009.
[2]
陈杰.
传感器与检测技术[M].北京:高教出版社,2004.
[3]
邵贝贝
龚光华.单片机认识与实践[M].北京:北京航空航天大学出版社,2006.
[4]
阎石.数字电子技术基础(第三版).
北京:高等教育出版社,1989
审查意见
系(教研室)主任签字:*年*月*日
绪论
1.1
设计背景
为加强大学生实践、创新能力和团队精神的培养,促进高等教育教学改革,
受教育部高等教育司委托(教高司函[2005]201
号文,附件1),由教育部高等学校自动化专业教学指导分委员会(以下简称自动化分教指委)主办全国大学生智能汽车竞赛。该竞赛以“立足培养、重在参与、鼓励探索、追求卓越”为指导思想,是以智能汽车为竞赛平台的多学科专业交叉的创意性科技竞赛,是面向全国大学生的一种具有探索性的工程实践活动,旨在促进高等学校素质教育,培养大学生的综合知识运用能力、基本工程实践能力和创新意识,激发大学生从事科学研究与探索的兴趣和潜能,倡导理论联系实际、求真务实的学风和团队协作的人文精神。
该竞赛分竞速赛与创意赛两类比赛。竞速赛是在规定的模型汽车平台上,使
用飞思卡尔半导体公司的8
位、16
位微控制器作为核心控制模块,通过增加道
路传感器、电机驱动电路以及编写相应软件,制作一部能够自主识别道路的模型
汽车,按照规定路线行进,以完成时间最短者为优胜。创意赛在统一比赛平台上,
充分发挥参赛队伍想象力,以特定任务为创意目标,完成研制作品,由竞赛专家
组观摩作品现场展示、质疑、现场观众投票等环节,最终决定比赛名次。该竞赛
涵盖了控制、模式识别、传感技术、电子、电气、计算机、机械等多个学科知识。
该竞赛以飞思卡尔半导体公司为协办方,已成功举办了五届,曾得到了原教
育部副部长吴启迪教授、原高教司张尧学司长及理工处领导、飞思卡尔公司与各
高校师生的高度评价,已发展成全国26
个省(自治区)、直辖市的300
余所高校广泛参与的全国大学生智能汽车竞赛。第三、四、五届连续被教育部批准列入国家教学质量与教学改革工程资助项目之一(附件2,教高函[2010]13
号)。飞思卡尔公司在2010
年8
月26
与国家教育部国际合作交流司签署了关于“高等学校人才培养战略合作协议”,此协议将继续赞助全国大学生“飞思卡尔”
杯智能汽车竞赛。
1.2
设计的意义
智能车竞赛与教育部已举办的数学建模、电子设计、机械设计、结构设计4大专业竞赛不同,是以迅猛发展的汽车电子为背景,涵盖了控制、模式识别、传感技术、电子、电气、计算机、机械等多个学科交叉的科技创意性比赛。
引导和激励学生实事求是、刻苦钻研、勇于创新、多出成果、提高素质,发现和培养一批在学术科技上有作为、有潜力的优秀人才。
1.3
设计所需的设备
采用组委会提供的标准赛车底盘(赛车MATIZ,配备标准驱动电机RS-380SH、转向舵机和可充电蓄电池);单片机FREESCALE的8位单片机MC9S08AW60开发评估板;传感器采用红外反射式对管及触发电路;电机驱动采用基于33886芯片的H-Bridge驱动电路。
车模介绍
◆车模:G768
◆电机:RS380-ST/3545,
◆舵机:FUTABA3010
2
总体设计
2.1
小车系统可分为6个部分:
◆电源管理:稳定电压,使系统电压稳定在要求的电压范围
◆光电传感器:检测路径,校正小车在跑道上的位置
◆车速传感:实时检测小车当前的速度
◆参数选择:根据小车当前的状态,确定算法的参数
◆驱动电机:根据小车的速度、位置,增减速度
◆转向电机:控制小车的方向
2.2
跑道
小车跑道宽度50CM,中间黑线20mm,小车从出发去出发,跑完一圈后,在起始线后1米范围内自动停下来。
3
硬件电路设计
3.1
传感器的选择
光电式传感器是利用光电器件把光信号转换成电信号的装置。光电式传感器工作时,先将被测量转换为光量的变化,然后通过光电器件再把光量的变化转换为相应的电量变化,从而实现非电量的测量。光电式传感器的核心(敏感元件)是光电器件,光电器件的基础是光电效应。本设计采用采用A/D转换的光电对管红外光耦传感器,当发光二极管由A→B导通时,会发出红外线,经小车跑道散射,红外接收二极管在接收到红外线时会由C→D导通,从而使OUT1的电压由+5V变为+0.7。
3.2
车速检测
电动机的测速有很多方法,常见的有测速发电机测速、霍尔传感器测速、编码器测速、光电码盘测速等。测速发电机测速适合大型电机的测速。霍尔传感器测速的方法具有抗干扰能力强,准确可靠地特点,但是测速分度较低,结构也比较复杂。编码器测速,不但使用方便,运行可靠稳定而且分辨率高,也是目前智能车大赛中普遍使用的测速装置,但是价格有点高。我们将着重介绍光电码盘测速,这种测速方法比较简单、容易操作,而且编码器也是基于光电码盘测速的原理。
接下来的是电路部分,需要用到槽型光耦,槽型光耦的外形成一个“凹”字型,一边是个红外发射管另一边是接收管,它们都被塑料壳包起来,中间留了一条很细的窄缝,没有障碍物时接收管能接受到红外线,有东西挡住中间时接收管就接收不到了。在选择槽型光耦时中间缝越细小说明管子性能越好。
从右图电路中可以看出没有遮挡时,发射管发出的光线直接被接收管接收,接收管导通集电极电位为低电平,当光线被遮挡时,接收管接受不到光线,处于截止状态,集电极为高电平,后面串了个CD40106BC施密特触发器的作用是对信号整形,遮光物体进入和离开时都有一个过程,这就使得信号变化也有一个过程,不是规则的方波,不能直接提供给MCU,加上施密特触发器以后,通过阀值触发,就变成规则的电平信号了。将方波信号送入测速芯片CD4040BC,可在Q0—Q11管脚输出小车的速度。链接电路图、CD4040BC封装图如下:
3.3
电源管理
通过稳压芯片LM2940将电池电压7.2V将为5V供单片机和光电传感器,使用一个普通二极管将另一路输出电压钳制到5.7V向舵机供电。电路图如下:
3.4
转向电机
1、舵机内部结构:由舵盘、齿轮组、位置反馈电位计、直流电机、控制电路板等组成
2、工作原理:脉宽信号给定参考位置,舵机内部电路通过反馈控制调节舵盘角位。舵盘角位由PWM控制信号的脉宽决定。
3、舵机基本参数:
型
号:
S3010
电
压:
4.0
~
6.0
[V]
角度控制:1°/
400us
工作速度:
0.16
+
0.02
堵转力矩:
6.5
+
1.3
[
Kg.cm]
3.5
驱动电机
电机驱动电路,我们在此使用MC33886芯片直接驱动。
◆MC33886特性:工作电压:5-40V
◆导通电阻:
120毫欧姆
◆输入信号:TTL/CMOS
◆PWM频率:
/*
for
EnableInterrupts
macro/
#include
“derivative.h“/*
include
peripheral
declarations/
#include
/*********************************定义舵机变量******************************************/
int
ad_data[12];
/*定义数组,存放12路ad转化后的值*/
int
ad_add=0;
int
ad_average=0
;
int
AD,Turn;
int
mid_flag,left_close,right_close;
char
Zhuanjiao[]={180,170,160,150,140,130,121,113,106,100,95,90,85,80,74,67,59,50,40,30,20,10,0};
int
flag0,flag1,flag2,flag3,flag4,flag5,flag6,flag7,flag8,flag9,flag10,flag11;
/*********************************定义电机变量******************************************/
#define
Stop1
TPM2C0V=2500;PTCD_PTCD6=0;PTFD_PTFD7=0;//能耗
#define
Stop2
TPM2C0V=1500;PTCD_PTCD6=1;PTFD_PTFD7=0;//反转
int
cangshu[]={6,6,6,5,5,4,4,3,3,0,0,0,0,0,-3,-3,-4,-4,-5,-5,-6,-6,-6,};
//char
ShuruSudu[]={35,35,35,35,38,38,40,40,42,42,45,45,45,42,42,40,40,38,38,35,35,35,35};
//char
Shuruspeed[]={23,23,23,23,24,25,26,27,28,29,35,35,35,29,28,27,26,25,24,23,23,23,23};
//冲出跑道
char
Shuruspeed[]={12,12,12,13,14,15,16,17,18,19,20,20,20,19,18,17,16,15,14,13,12,12,12};//刚好
//
char
Shuruspeed[]={8,8,8,7,7,8,9,9,10,11,13,13,13,11,10,9,9,8,7,7,8,8,8};
int
speed,a,b;
int
u=0;
int
v,w;
int
uk;
int
m,n;
int
zw[]={0,0,0,0,0,0,0,0,0,0,0};
int
r;
int
l[]={0};
int
circle=0;
typedef
struct
{
int
NextPoint;
int
ThisPoint;
//设定目标
Desired
value
int
Kp;
//比例常数
Proportional
Const
int
Ki;
//积分常数
Integral
Const
int
Kd;
//微分常数
Derivative
Const
int
LastError;
//Error[-1]
int
PrevError;
//Error[-2]
int
SumError;
//Sums
of
Errors
}
speedPID
;
speedPID
sPID;
/*pp=/
typedef
struct
{
int
NextPoint;
int
ThisPoint;
//设定目标
Desired
value
int
Kp;
//比例常数
Proportional
Const
int
Ki;
//积分常数
Integral
Const
int
Kd;
//微分常数
Derivative
Const
int
LastError;
//Error[-1]
int
PrevError;
//Error[-2]
int
SumError;
//Sums
of
Errors
}
steerPID
;
steerPID
DjPID;
/*,*pp=/
/*************************************************************************/
void
ADCInit(void)
{
ADC1CFG=0X00;
/*A/D初始化,高速模式,8位精度,ADCK=总线频率*/
ADC1SC2=0X00;
/*软件触发,比较功能禁止*/
APCTL1=0XFF;
/*AD0~AD7使能*/
APCTL2=0XFF;
/*AD8-AD15使能*/
ADC1SC1=0X00;
/*禁止转换完成中断,单词转换,选择AD0,并启动了转换*/
}
/*************************************************************************/
void
get_data(void)
{
ad_add=0;
/*采集*/
ADC1SC1=0X00;
/*选择AD通道0,若转化没有结束则等待,否则将转化结果存放入ad_data[0]中*/
for(;!ADC1SC1_COCO;);
ad_data[0]=ADC1RL;
ad_add=ad_add+ad_data[0]
;
ADC1SC1=0X01;
for(;!ADC1SC1_COCO;);
ad_data[1]=ADC1RL;
ad_add=ad_add+ad_data[1]
;
ADC1SC1=0X02;
for(;!ADC1SC1_COCO;);
ad_data[2]=ADC1RL;
ad_add=ad_add+ad_data[2]
;
ADC1SC1=0X03;
for(;!ADC1SC1_COCO;);
ad_data[3]=ADC1RL;
ad_add=ad_add+ad_data[3]
;
ADC1SC1=0X04;
for(;!ADC1SC1_COCO;);
ad_data[4]=ADC1RL;
ad_add=ad_add+ad_data[4];
ADC1SC1=0X05;
for(;!ADC1SC1_COCO;);
ad_data[5]=ADC1RL;
ad_add=ad_add+ad_data[5]
;
ADC1SC1=0X06;
for(;!ADC1SC1_COCO;);
ad_data[6]=ADC1RL;
ad_add=ad_add+ad_data[6]
;
ADC1SC1=0X07;
for(;!ADC1SC1_COCO;);
ad_data[7]=ADC1RL;
ad_add=ad_add+ad_data[7];
ADC1SC1=0X08;
for(;!ADC1SC1_COCO;);
ad_data[8]=ADC1RL;
ad_add=ad_add+ad_data[8];
ADC1SC1=0X09;
for(;!ADC1SC1_COCO;);
ad_data[9]=ADC1RL;
ad_add=ad_add+ad_data[9]
;
ADC1SC1=0X0A;
for(;!ADC1SC1_COCO;);
ad_data[10]=ADC1RL;
ad_add=ad_add+ad_data[10];
ADC1SC1=0X0B;
for(;!ADC1SC1_COCO;);
ad_data[11]=ADC1RL;
ad_add=ad_add+ad_data[11];
ad_average=
ad_add
/7;
/*************************************************************************/
if(ad_data[0]>=ad_average)
{
flag0=1;
}
if(ad_data[0]=ad_average)
{
flag1=300;
}
if(ad_data[1]=ad_average)
{
flag2=5;
}
if(ad_data[2]=ad_average)
{
flag3=700;
}
if(ad_data[3]=ad_average)
{
flag4=8;
}
if(ad_data[4]=ad_average)
{
flag5=1100;
}
if(ad_data[5]=ad_average)
{
flag6=13;
}
if(ad_data[6]=ad_average)
{
flag7=1500;
}
if(ad_data[7]=ad_average)
{
flag8=17;
}
if(ad_data[8]=ad_average)
{
flag9=1900;
}
if(ad_data[9]=ad_average)
{
flag10=21;
}
if(ad_data[10]=ad_average)
{
flag11=2300;
}
if(ad_data[11]7)
if(TurnThisPoint-pp->NextPoint;
//偏差e(k)
pp->SumError+=Error;
//积分
e(1)+e(2)+*******
dError=Error-pp->LastError;
//当前微分
pp->PrevError=pp->LastError;
pp->LastError=Error;
if((w>=1500)||((Turn>14)||(TurnKp*Error+pp->Ki*pp->SumError/50+pp->Kd*dError);
}
/*********************舵机PID****************************/
int
steerPIDCalc
(steerPIDpp)
{
int
dError,Error;
Error=pp->ThisPoint-pp->NextPoint;
//偏差
pp->SumError+=Error;
//积分
dError=pp->LastError-pp->PrevError;
//当前微分
pp->PrevError=pp->LastError;
pp->LastError=Error;
return
(pp->Kp*Error+pp->Ki*pp->SumError/2500+pp->Kd*dError);
}
/*********************舵机控制****************************/
void
SteerContral(void)
{
int
djpid;
DjPID.NextPoint=0;
DjPID.ThisPoint=Zhuanjiao[Turn];
//turn为黑线位置
if(v>0)
{
djpid=v;
}
else
{
djpid=101+steerPIDCalc(
}
v=0;
TPM2C1V=djpid;
a=TPM2C1V;
}
/*********************电机控制****************************/
void
SpeedContral(void)
{
if(circle>=2)
{
TPM2C0V=2500;
PTCD_PTCD6=0;
PTFD_PTFD7=0;
for(;;)
{
__RESET_WATCHDOG();
}
}
else
{
sPID.NextPoint=speed;
sPID.ThisPoint=Shuruspeed[Turn];
if(u>0)
{
uk=u;
}
else
{
uk=speedPIDCalc(
}
u=0;
TPM2C0V=uk;
w=TPM2C0V;
}
}
/*********************起始延时***************************/
void
Start_Key(void)
{
for(;;)
{
if(PTGD_PTGD4==0)
{
delay1(1);
if
(PTGD_PTGD4==0)
{
delay2(10)
;
EnableInterrupts;
break
;
}
}
__RESET_WATCHDOG();
}
}
/********************起始线识别*******************************////////////////
void
StartLine()
{
if((ad_data[7]=70
PTGD_PTGD6=1;
delay(8000);
PTGD_PTGD6=0;
}
}
///************************************************************************////
void
main(void)
{
IOInit();
ICGInit();
ADCInit();
servoInit();
PIDInit();
//
SOPT_COPE=0;
TPM3SC
=
0x4F;
/*总线时钟128分频*/
TPM3MOD
=
2500;
DisableInterrupts;
//
EnableInterrupts;
Start_Key();
for(;;)
{
get_data();
//
//
//
StartLine();
n=zw[10]*1024+zw[9]*512+zw[8]*256+zw[7]*128+zw[6]*64+zw[5]*32+zw[4]*16+zw[3]*8+zw[2]*4+zw[1]*2+zw[0];
m=zw[6]*64+zw[5]*32+zw[4]*16+zw[3]*8+zw[2]*4+zw[1]*2+zw[0];
if((m==124)||(m==120)||(m==112))
///////
//直道入弯
{
if((speed>4)
Stop1;
}
if((speed>4)
Stop1;
}
u=100*speed*(abs(Turn-12));
r=0;
SteerContral();
SpeedContral();
}
篇2:小型电子产品设计报告智能小车报告
小型电子产品设计报告智能小车报告 本文关键词:报告,小车,产品设计,智能,电子
小型电子产品设计报告智能小车报告 本文简介:小型电子产品设计报告题目智能小车设计报告学院XXXX专业应用电子技术班级应用电子A班学号XXXXXX学生姓名XXX完成日期2014年5月24日摘要本文介绍了一种基于52单片机的小车寻轨系统。该系统采用3个高灵敏度的单端反射式红外光电对管和红外传感器来实现小车的寻轨功能。并利用单片机产生PWM波,通过
小型电子产品设计报告智能小车报告 本文内容:
小型电子产品设计报告
题
目
智能小车设计报告
学
院
XXXX
专
业
应用电子技术
班
级
应用电子A班
学
号
XXXXXX
学生姓名
XXX
完成日期
2014年5月24日
摘要
本文介绍了一种基于52单片机的小车寻轨系统。该系统采用3个高灵敏度的单端反射式红外光电对管和红外传感器来实现小车的寻轨功能。并利用单片机产生PWM波,通过控制电机驱动芯片去控制小车速度。测试结果表明,该系统能够平稳跟踪给定的路径。本小车以AT89C52低功耗、高性能单片机为检测和控制核心,通过写入的驱动、循迹等程序再连接外围电路来实现小车的启停、智能避障、智能循迹功能。
关键词:简易智能小车、AT89C52、主板电路、红外探测电路、马达驱动电路
引言
当今社会,科学技术日新月异,时代前进的步伐越迈越宽,应用自动化设备,计算机处理,现代化通讯,数字化信息,现代化显示设备等高新技术而建立的现代化智能,监控等系统已经得到充分的发展与应用,智能机器人也就应运而生。同时,在建设以人为本的和谐社会的过程中,智能服务机器人能够完成考古发掘,海底揭密,宇宙探索等危险作业,以保证人身安全。《国家中长期科学和技术发展规划纲要》一文指出:智能服务机器人是在非结构环境下为人类提供必要服务的多种高技术集成的智能化装备。以服务机器人和危险作业机器人应用需求为重点,研究设计方法、制造工艺、智能控制和应用系统集成等共性基础技术。重点研究低成本的自组织网络,个性化的智能机器人。2006━2020年,既是国家中长期技术发展计划实现阶段,也是我们最具有活力和最激情洋溢的时段。该智能小车模型是一辆由PCB和车体拼装的小车。所有的机械结构和零部件都安装固定在电路板上。因此完全不需要机械加工,非常适合实验阶段机器人的研制。
目
录
摘要
引言
1.任务分析4
2.方案初步设计4
2.1设计思路4
2.1.1
机械部分设计4
2.1.2
电路部分设计4
2.1.3
软件部分设计5
2.2总体方案论证与选择5
3.产品详细设计6
3.1
硬件设计6
3.1.1主板电路6
3.1.2红外探测电路7
3.1.3马达驱动电路9
3.2软件设计11
3.2.1开发工具11
3.2.2设计思路12
3.2.3程序12
4.调试与测试20
4.1驱动模块的功能测试20
4.2循迹模块的功能测试20
4.3主板模块的功能测试21
4.4软件的功能测试21
5.总结21
附作品图22
参考文献22
1.任务分析
本小车以AT89C52低功耗、高性能单片机为检测和控制核心,通过写入的驱动、循迹等程序再连接外围电路来实现小车的启停、智能避障、智能循迹功能。充分运用了C52单片机的功能。论文介绍了智能小车的机械结构和硬件电路的实现方法。在机械结构上采用的是四轮四驱动,为小车的启动和运转提供强劲的动力,四轮式小车的应用范围广,稳定性更优越,底盘空间大,便于安装传感器、驱动电路,循迹电路,使小车外观搭配更为合理美观。
分析整个智能车系统,PCB电路板功能化、模块化。自行设计制作的PCB电路板形状根据车模量身定做,布局走线合理,并根据功能实现了模块化分离,使电路的易用性、稳定性大幅提高,维护和更换也更加容易。
在未来的智能车设计中,定会出现更先进的光电传感器,也会出现更先进的技术,使光电车拥有更大的前瞻,采集到更多的赛道信息。随着信息的增加,期待着更先进的技术出现。
2.方案初步设计
2.1设计思路
2.1.1
机械部分设计:
包括智能小车的底盘、驱动模块和循迹模块电路板、传感器等的安装设计,这些设计是非常严格的,它们都得根据元件的需要来设计。
2.1.2
电路部分设计:
根据需求设计相应的电路原理图,调试电路板,在检查完硬件连接和完成电路的综合调试后,进入软件设计部分。
2.1.3
软件部分设计:
根据需求设计相应的程序流程图,在此基础上编写出程序,并下载到控制小车的芯片中用以控制小车。这个部分的设计也包括三个方面的设计即:电机驱动部分的程序、传感器读入部分和循迹的实现。
2.2总体方案论证与选择
方案一:基于AT89C52单片机,配以其他常用模块电路完成智能小车设计。此方案主要包括以下几个模块:避障模块、黑线检测模块、电机驱动模块、及显示模块。方案总体框图,如图1所示。此方案使用常用单片机AT89C52作为主控芯片,AT89C52是一个低电压,高性能CMOS
8位单片机,片内含8k
bytes的可反复擦写的Flash只读程序存储器和256
bytes的随机存取数据存储器(RAM),器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,片内置通用8位中央处理器和Flash存储单元,32个双向I/O口;
256x8bit内部RAM;3个16位可编程定时/计数器中断;时钟频率0-24MHz;2个串行中断,可编程UART串行通道;2个外部中断源,共8个中断源;
2个读写中断口线,3级加密位;
低功耗空闲和掉电模式,软件设置睡眠和唤醒功能。
方案二:ATmega16是基于增强的AVR
RISC结构的低功耗8
位CMOS微控制器。配以其他常用模块电路完成智能小车设计。此方案主要包括以下几个模块:避障模块、黑线检测模块、电机驱动模块、及显示模块。方案总体框图,如图2所示。此方案使用ATmega16单片机作为主控芯片,16K字节的系统内可编程Flash(具有同时读写的能力,即RWW),512
字节EEPROM,1K
字节SRAM,32
个通用I/O
口线,32
个通用工作寄存器,用于边界扫描的JTAG
接口,支持片内调试与编程,三个具有比较模式的灵活的定时器/
计数器(T/C),片内/外中断,可编程串行USART,有起始条件检测器的通用串行接口,8路10位具有可选差分输入级可编程增益(TQFP
封装)
的ADC
,具有片内振荡器的可编程看门狗定时器,一个SPI
串行端口,以及六个可以通过软件进行选择的省电模式。
鉴于对51单片机知识领域的掌握,选择方案一更好,控制方便,编程简单,且功能易于实现。
3.产品详细设计
3.1
硬件设计
3.1.1主板电路
主板电路原理图
主板电路PCB图
3.1.2红外探测电路
方案一:用光敏电阻组成光敏探测器。
光敏电阻的阻值可以跟随周围环境光线的变化而变化。当光线照射到白线上面时,光线发射强烈,光线照射到黑线上面时,光线发射较弱,因此光敏电阻在白线和黑线上方时,阻值会发生明显的变化。将阻值的变化值经过比较器就可以输出高低电平。这种方案受光照影响很大,不能够稳定的工作。
方案二:采用反射式红外发射-接收ST168
采用反射式红外发射-接收器ST168,直接用直流电压对发射管进行供电。其优点是可以实现实时控制,而且灵敏度可调,受外界干扰较小。
方案三:采用脉冲调制的红外发射-接收器
在方案二的基础上采用脉冲调制发射。由于环境光干扰主要是直流分量,因此如果采用带有特定交流分量的调制信号,则可在接收端采用相应的手段来大幅减少外界干扰。缺点是实现复杂、成本高。
综合分析:由于传感器可以在车体的下部,发射、接收距离地面都很近,外界光对其干扰都很小。因此在基本不影响效果的前提下,为了方便起见,选用反射式红外发射-接收器ST168作为循迹检测模块的传感器。
循迹电路采用的是ST188红外对管,在小车行进的过程中由51机控制发射管发射信号,再将接收回来的信号送入单片机进行分析处理,使小车沿着反射信号的方向前进。
红外探测电路原理图
红外探测电路PCB图
3.1.3马达驱动电路
方案一:采用交流电经直流稳压处理后供电
:采用交流电提供直流稳压电源,电流驱动能力及电压稳定性最好,且负载对电源影响也最小。但由于需要电线对小车供电,极大影响了壁障小车行动的灵活性及地形的适应能力。而且壁障小车极易把拖在地上的电线识别为障碍物,人为增加了不必要的障碍。故我们放弃了这一方案。
方案二:采用单一电源供电。电源直接给单片机供电,通过单片机的IO口连接到电动机上,这样输出的电压稳定,不会给电路造成损坏。同时也减轻了小车的重量,使小车在启动和停止时的反应时间更短,减小了惯性的影响。其供电也比方案一简单。
综上所述,我们选择方案二。
电机驱动部分主要采用一片L298N和主控芯片AT89C52单片机相连接构成驱动电路。L298N芯片直插式的15个引脚,其中两个使能端ENA和ENB,两个反馈端SA和SB,四个输入端IN1、IN2、IN3和IN4一个接地端GND,一个VSS(5V时性能最好)逻辑电源电压输入端和一个VS功率电源电压输入端。L298N可同时驱动两个电机,最大输出电流为2A,鉴于它的良好性能和价格,选取L298N作为电机驱动芯片,L298N芯片如下图,L298N的四个输出端直接与两个电机相连驱动电机。
L298N实物图
电机驱动电路原理图
电机驱动电路PCB图
3.2软件设计
3.2.1开发工具
我们采用的软件是Altium.Designer.v6.9.
Altium
Designer
是原Protel软件开发商Altium公司推出的一体化的电子产品开发系统,主要运行在Windows操作系统。这套软件通过把原理图设计、电路仿真、PCB绘制编辑、拓扑逻辑自动布线、信号完整性分析和设计输出等技术的完美融合,为设计者提供了全新的设计解决方案,使设计者可以轻松进行设计,熟练使用这一软件必将使电路设计的质量和效率大大提高。
3.2.2设计思路
程序先从看程序开始,然后写了串口程序,在写串口程序过程中也遇到不少问题,最后都找到了解决方法。写出的串口程序可以清晰的在上位机上呈现出摄像头所采集的图像,在这一过程中也遇到许多问题,比如采集得到的是乱码,一些有规律的乱码,仔细查找原因,原来是波特率设置的问题,虽然程序中设定的波特率和上位机的是一致的,但设置为9600和57600的效果却完全不同。另外还是因为没有设置换行,呈现出的是把本来是列上的图像,放到了每一行上,解决方法是,在每一发送结束后,加了一个换行函数。该程序也得到了应用。
3.2.3程序
#include
“reg52.h“sbit
LED
=
P1^0;
sbit
BUZZER
=
P1^1;
sbit
MotoL1
=
P1^7;
sbit
MotoL2
=
P1^2;
sbit
MotoR1
=
P1^5;
sbit
MotoR2
=
P1^6;
sbit
ENA_L
=
P1^3;
sbit
ENA_R
=
P1^4;
sbit
SMG_1
=
P2^2;
sbit
DATA
=
P2^1;
sbit
CLK
=
P2^0;
sbit
sens_out
=
P0^0;
unsigned
char
count=0;
unsigned
char
speed;
unsigned
char
spd1;
unsigned
char
spd2;
unsigned
char
code
tab[]={0x3F,0x0c,0x5b,0x4f,0x6c,0x67,0x77,0xcd,0x7f,0x6f,0x00};
unsigned
char
Tdata[4];
unsigned
int
cnt500;
bit
dp;
unsigned
char
Keyboard();
unsigned
char
tance();
void
turn_l();
void
turn_rr();
void
forward();
void
turn_r();
void
turn_ll();
void
stop();
void
display();
void
delay(unsigned
int
x)
{
unsigned
char
i;
while(x--)
{
for(i=250;i>0;i--);
}
}
//*******************************
void
main(void)
{
unsigned
char
KeyV;
unsigned
char
senS;
LED=0;
BUZZER=0;
delay(300);
LED=1;
BUZZER=1;
delay(300);
LED=0;
BUZZER=0;
delay(300);
LED=1;
BUZZER=1;
ENA_L=1;
ENA_R=1;
MotoL1=0;
MotoR1=0;
TMOD=0x01;
TH0=0xFC;
TL0=0x18;
TR0=1;
EA=1;
ET0=1;
speed=8;
spd1=speed;
spd2=speed;
Tdata[0]=1;
Tdata[1]=2;
Tdata[2]=3;
Tdata[3]=4;
while(1)
{
//按键
KeyV=Keyboard();
if(KeyV==1)
{
ENA_L=
!ENA_L;
ENA_R=
!ENA_R;
}
if(KeyV==2)
{
speed++;
if(speed>14)
speed=14;
spd1=speed;
spd2=speed;
}
if(KeyV==3)
{
if(speed!=0)speed--;
spd1=speed;
spd2=speed;
}
//显示
if(dp==1)
{
display();
dp=0;
}
//循轨
senS=tance();
switch(senS)
{
case
0:
forward();break;
//0000
0000
case
1:
turn_rr();break;
//0000
0010
case
2:
forward();break;
//0000
0100
case
3:
turn_r();break;
//0000
0110
case
4:
turn_ll();break;
//0000
1000
//case
5:
KeyValue=2;break;
//0000
1010
case
6:
turn_l();break;
//0000
1100
case
7:
stop();break;
//0000
1110
default:
break;
}
}
}
void
INT_T0(void)interrupt
1
{
TH0=0xfc;
TL0=0x18;
cnt500++;
if(cnt500>499)
{
cnt500=0;
dp=1;
}
count++;
if(count>14)
count=0;
if(count>1;
return(tmp3);
}
void
turn_l(void)
{
spd2=0;
spd1=speed;
}
void
turn_rr(void)
{
spd2=speed;
spd1=speed-5;
}
void
forward(void)
{
spd2=speed;
spd1=speed;
}
void
turn_r(void)
{
spd2=speed;
spd1=0;
}
void
turn_ll(void)
{
spd2=speed-5;
spd1=speed;
}
void
stop(void)
{
ENA_L=0;
ENA_R=0;
}
void
turn_ll(void)
{
spd2=speed-5;
spd1=speed;
}
void
stop(void)
{
ENA_L=0;
ENA_R=0;
}
4.调试和测试
仪器名称
用途
电脑
调试及下载程序
数字万用表
测量各种电路工作情况
直流稳压电源
提供系统工作电压
4.1驱动模块的功能测试
驱动模块的调试是能正常的驱动电机的转动。一个电机对应两盏LED灯,电机的正反转分别对应一盏LED灯亮。LED灯能正常的亮灭即表示驱动模块正常。
4.2循迹模块的功能测试
完成小车循迹的主要器件是三个红外探测,发射管发射出信号后,接收管再将接收到的信号送入单片机进行处理,判断黑线在小车下的位置,从而实现了循迹功能。首先,要调试探测板能否正常工作。经检测,遇黑线对应LED灯亮,从而判断探测板无问题。再之后是调整红外探测的灵敏度。确定探测板与跑道的距离,转动可调电阻,从而使三盏LED灯在同一高度能灵活亮灭。
4.3主板模块的功能测试
主模块是连接驱动模块和循迹模块的重要桥梁,也是接受信息和控制的中枢。所以,这部分的调试尤为重要。首先检测的是7805稳压芯片是否正常工作。再就是各个部分的检测,蜂鸣器、LED灯、开关、52芯片等是否能正常工作。最后是显示部分的检测。短接电路,看看数码管是否是每一段都是正常点亮。结果只是一些线路未接,硬件无问题,基本功能可以实现。
4.4软件的功能测试
根据老师讲的程序,分部完成各部的控制程序。电机驱动,两个电机不同速度;数码管显示,显示固定的数;按键控制,停止、启动、加速、减速;探测,转向与速度控制。通过一次次的试跑,不断调整初始速度、小转弯的速度、大转弯的速度、左右转的速度,完成基本的循轨。再在确保能循轨的情况下,加快速度,减少时间,调试出最佳的初始速度、转弯速度、直线速度。
5.
总结
本学期电子设计制作与创新提高课程的学习任务,是让我们制作智能小车并最后能让它自动寻轨。
通过此次的设计制作,使我们更加认识到了动手能力和理论知识的重要性,而理论与实践的结合更是重中之重。当然,我们也深刻地认识到我们的不足,由于自身理论知识的欠缺和动手能力的不佳在工作中频频受阻,走了好多弯路,虽然在制作过程中不可避免地遇到很多问题,但是最后还是在老师以及同学的帮助下圆满解决了这些问题,实现了整个系统设计与最后调试,相关指标达到预期的要求,很好地完成了本次设计任务。经过多次的修改和调试测量,本设计基本符合设计要求,由于受人为因素和软硬件的限制,系统难免不了带来一些误差,但通过调节和精确计算可以减小误差,并且在不断的摸索前进中我们学到了很多东西。在制作和调试过程中,小组团结合作,在调试过程中更加的被我们引以重视,每个有可能错误的环节,大家集思广益,寻找可能存在的错误,最终可以说圆满的完成任务。通过这次创新设计,我了解并掌握了传感器的基本理论知识,更深入的掌握单片机的开发应用和编程控制。我深刻的认识到团队的协作真的很重要,周围人的帮助也很重要,而这两个方面,我都拥有了,大家一起的努力,我们有了坎坷的过程,有了圆满的结果,让我们对理论和实践有了更好的认知。
附作品图
参考文献
1.
阎吉祥.
激光原理与技术[M].
北京:高等教育出版社,2006.(5)
2.
卓晴,黄开胜,邵贝贝等.
学做智能车-挑战“飞思卡尔”杯[M].
北京:
北京航空航天大学出版社,2007.(3).
3.
孙同景,陈桂友.
Freescale
9S12
十六位单片机原理及嵌入式开发技术[M].
北京:
机械工业出版社,2008.(7)
.
4.薛涛,宫辉,曾鸣等.
单片机与嵌入式系统开发方法[M].
北京:
清华大学出版社,2009,(10).
篇3:2020年小车司机工作总结精选
20XX年小车司机工作总结精选 本文关键词:小车,工作总结,司机,精选,XX
20XX年小车司机工作总结精选 本文简介:20XX年小车司机工作总结精选一年来,本人在办公室行政科的正确领导下,在同事们的大力支持下,牢固树立安全行车和服务至上的思想,较好地完成了全年的各项工作任务。现将本人一年来的思想、工作等情况总结如下:一、加强学习,不断提高政治理论素质和业务水平一是认真学习马克思列宁主义、毛泽东思想和邓小平理论,特别
20XX年小车司机工作总结精选 本文内容:
20XX年小车司机工作总结精选
一年来,本人在办公室行政科的正确领导下,在同事们的大力支持下,牢固树立安全行车和服务至上的思想,较好地完成了全年的各项工作任务。现将本人一年来的思想、工作等情况总结如下:
一、加强学习,不断提高政治理论素质和业务水平
一是认真学习马克思列宁主义、毛泽东思想和邓小平理论,特别是“xxxx”重要思想,用正确的理论来指导自己改造好自己的世界观、人生观和价值观,增强自己的政治敏锐性和辨别是非的能力,用“xxxx”重要思想来武装自己的头脑,树立牢固的共产主义信念和全心全意为人民服务的宗旨意识。
二是紧紧围绕提高对“安全第一”思想观念的认识,针对自己的工作实际,认真学习车辆管理、交通安全等方面的法律法规和有关政策,进一步增强安全意识,增强自己对工作的适应能力,提高自己做好工作的本领。
二、努力工作,为领导和机关搞好服务
一是认真做好给领导的车辆服务工作。随着市委领导的调整,按照工作分工,我主要是为市委服务。由于服务对象变了,随之而来的就是服务方式的变化,为此,我在我在较短的时间内熟悉了领导的工作、生活习惯等,并按照新的要求,尽快调整自己的服务方式,做到了随时用车、随时出车,没有发生各种由于出车不及时而耽误领导工作的事情。同时,我把为领导服务和为机关服务紧密结合起来,在领导外出的情况下,如果办公室领导派我执行其他出车任务时,我也能够积极配合。
二是认真做好车辆的保养和维护工作。多年的驾驶员经历使我认识到,做好车辆保养和日常维修,是安全驾驶的保证。为此,我坚持把工夫下在平时,在没有出车任务时,及时对车辆进行保养和维护。这样,一方面使车辆在平时始终保持干净清洁,给领导以舒适的感觉;另一方面,通过对车辆的保养,及时发现毛病,小问题自己动手,大毛病立即向领导汇报后修理解决,从而做到了“有病不出车,出车保安全”。
三、严格管理,抓好小车班队伍建设
一是作好表率。作为小车班的班长,我始终做到严于律己,对待本职工作高标准、严要求,要求同志们做的,自己首先做到,发挥一名老大哥、老同志的模范带头作用,为小车班全体干部职工作好表率。
二是严格管理。在工作中,要求大家坚持服从领导分工,不挑肥捡瘦,不拈轻怕重,不论领导安排什么工作,都认真的去履行好职责。每位同志要严格遵守单位的各项规章制度和劳动纪律,要做到认真学习,严格遵守国家的道路交通法规和我省的有关规定,牢固树立安全第一的思想;坚持良好的驾驶作风,文明驾驶,礼貌行车;服从调度,热情服务,不断提高服务质量;搞好车辆的日常维护和保养,保持车况良好,车容整洁,确保各种机件齐全有效;坚持按时参加安全学习活动,抓好行车安全工作。
四、存在问题和下步打算
总之,一年来,我根据组织和领导的安排,做了一些工作,取得了一些成绩,但从更高的标准衡量自己,也还存在一些差距和不足。如对一些安全法规、政策学习得不够深,不够系统;为领导服务的主动性不够强;在处理为领导服务和为机关服务的关系上还需进一步提高,等等。在今后的工作中,我将不断抓好安全法规、政策的学习,增强安全观念;切实加强服务意识,正确处理好为领导服务和为机关服务的关系,认真做好服务工作,力争取得更大的成绩。