省赛论文C题智能小车Word格式.docx

上传人:b****7 文档编号:22204465 上传时间:2023-02-03 格式:DOCX 页数:31 大小:153.21KB
下载 相关 举报
省赛论文C题智能小车Word格式.docx_第1页
第1页 / 共31页
省赛论文C题智能小车Word格式.docx_第2页
第2页 / 共31页
省赛论文C题智能小车Word格式.docx_第3页
第3页 / 共31页
省赛论文C题智能小车Word格式.docx_第4页
第4页 / 共31页
省赛论文C题智能小车Word格式.docx_第5页
第5页 / 共31页
点击查看更多>>
下载资源
资源描述

省赛论文C题智能小车Word格式.docx

《省赛论文C题智能小车Word格式.docx》由会员分享,可在线阅读,更多相关《省赛论文C题智能小车Word格式.docx(31页珍藏版)》请在冰豆网上搜索。

省赛论文C题智能小车Word格式.docx

控制LCD显示的MCU有时间、路程、速度、金属检测模块,控制小车动作的MCU

有黑线、金属检测、电机控制模块。

1.4显示方案的决定

显示可采用LCD和LED两种方案。

照顾到题目要求显示多个参数和为了简化电路和算法。

我们决定采用,用户界面良好的LCD1602来实现显示。

1.5电机的比较和选择

使用两个直流机。

一个电机用来控制前轮的方向转动,后轮采用PWM控制电机前进速度。

直流机的扭矩大,但是不好控制,且不易于立即停止。

使用两个步进机对后轮驱动。

转弯时,只需控制一边的步进机的速度小于另一边的速度。

采用两个步进机控制很方便,但是两个步进机与小车一起的机械结构不好构造。

方案三:

前轮直流机驱动,后轮步进机驱动。

利用直流机的扭矩大的特性,控制转弯。

利用步进机的精确步进来控制小车前进、加速、减速、前进。

采用此方案符合要求。

二、系统的设计

2.1、总体设计

本设计分为两个MCU共6个模块:

前轮直流机驱动电路、后轮步进机驱动电路、轨迹探测模块、测距、测速及显示模块、金属探测模块。

前轮舵机驱动电路用于转向控制;

后轮步进机驱动电路用于速度控制;

探测模块利用反射式红外发射接收器对黑色轨道进行寻迹;

金属探测模块用于检测路过路径中探测黑线中和黑线外的金属。

控制显示部分的MCU:

控制小车的MCU:

2.2硬件系统设计

驱动电路使用步进机进行驱动。

实际电路图如下:

所用到的步进机的型号是PM42L-048-SYMG,工作电压2V~24V,两相四线。

2.2.2车转弯系统

前轮的转弯控制采用舵机转弯控制,舵机用调速控制芯片L298控制正反转。

为确保在行驶过程小车各部件均能正常工作且相互之间不收影响,我们使用了三组电源为不同模块提供工作电压。

其中:

其中一组12V电源为步进电机供电,另一组6V电源为直流机供电,一组5V为控制电路供电。

如此安排既满足了电机、电路的供电要求,也不会使电路系统因电压过大而烧坏,同时避免了各个系统之间的干扰。

2.2.4金属探测报警系统

金属探测系统采用FELING公司的LGA12M-5N1金属探测器。

工作电压6V到36V,工作电流20-200mA,有效探测距离为5mm。

我们采用P3.5,P3.6,P3.7作为金属探测器的接口,当出现低点平时为检测出金属。

将其安装于车头,分中间和两侧安装。

当检测到有金属时,输出至LED指示报警。

2.2.5寻轨系统

将9个反射式红外接收器

分布于小车头部,检测到黑线时,信号分别经过LM324比较电压,并把比较后得到的信号传送给单片机的P0口检测,检测黑线输出为高电平,否则为低电平。

2.2.6测速系统,测路程,计时系统

2.3软件系统

三、系统调试

系统功能:

该智能小车以宽度20mm,弧半径500mm黑色引导线为作为引导完成左行90°

,和右行90°

,并直行等功能。

并实时检测并显示小车速度、行驶路程、行驶时间和检测到的金属数目和金属位置。

在检测到铁片时能提示,会停车5秒并报警。

并在引导线中间断开时仍能够在规定时间内完成整个路程。

测试表

直道最大速度(cm/s)

直道最小速度(cm/s)

完成时间

测量总路程

(cm)

轨道上金属数

轨道外金属数

金属总数

球丢落次数

金属1位置

金属2位置

金属3位置

金属4位置

金属5位置

金属6位置

1

8

5

1:

41’

224

4

21

cm

82

149cm

181cm

120cm

171cm

2

7

43’

227

6

20

80

149

179cm

未测

3

40’

219

19

150cm

180cm

119cm

170cm

结果分析:

最大速度与最小速度均能较好的符合要求。

记录的完成时间,测量的路程均符合要求,很好的符合了行走的任务。

轨道内的金属均能检测到,但轨道外的金属有一次为能检测到,主要原因是舵机拐弯时偏离金属片,正好没有检测到金属。

其他次检测都符合要求。

小车行走稳定,小球未曾丢落。

该项符合要求。

总体上我们得小车符合实验要求。

性能表现良好。

四、总结

本系统以两个51单片机为核心控制器,分别控制LCD显示信息,和小车动作。

自动进行黑线寻轨,和金属检测。

以我们测试的数据来看我们的系统架构设计合理,功能电路实现较好,系统性能优良、稳定,我们的小车较好地达到了题目要求的各项指标。

【1】《51单片机C语言应用程序设计实例精讲》/戴佳戴卫恒编著-电子工业出版社,2006.4

【2】童诗白,华成英.模拟电子技术基础[M].北京:

高等教育出版社,2001.

【3】《MCS-51单片机应用开发实用子程序》/边春元王志强编著-人民邮电出版社,2005.9

【6】《8051单片机实践与应用》/吴金戎沈庆阳郭庭吉编著-清华大学出版社,2002.9

【7】《机器人设计与控制》/美丹尼斯.克拉克-科学出版社,2004.

附录

控制MCU程序清单

;

小车控制程序

;

--------------------------

RTURNBITP1.5;

左转

LTURNBITP1.6;

右转

BEGAINBITP1.0;

开始的按键

STOP_KEYBITP1^1

MIDDLEBITP0.4;

中间探测器

LEFTBITP0.5;

左边探测器

RIGHTBITP0.3;

右边探测器

LLEFTBITP0.6;

次左边探测器

RRIGHTBITP0.2;

次右边探测器

LLLEFTBITP0.7;

最左边探测器

RRRIGHTBITP0.1;

最右边探测器

LLLLEFTBITP3.1

RRRRIGHTBITP3.2

METAL1BITP3.5;

金属探测1

METAL2BITP3.6;

金属探测2

METAL3BITP3.7;

金属探测3

METAL4BITP3.4

METAL5BITP3.3

METAL_ALARMBITP3.0

ORG00H

JMPSTART

START:

CLRLLLLEFT

CLRRRRRIGHT

MOVP2,#00H

MOVP0,#00H

SETBP1^7

SETBSTOP_KEY

SETBLTURN

SETBRTURN

LOOP:

JNBBEGAIN,FOR2;

按钮按了没

JMPLOOP

FOR2:

CALLDELAY1

JNBBEGAIN,$

JMPFOR3

FOR3:

FOR33:

MOVR0,#00H;

开始时的速度

FOR4:

MOVA,R0

MOVDPTR,#TABLE

MOVCA,@A+DPTR

JZFOR33

CPLA

MOVP2,A

CALLCHECK1

;

CALLDELAY1

INCR0

JMPFOR4

CHECK1:

CLRC

MOVR4,#07H;

如果同时有4个以上检测到就是到尽头

MOVR5,#04H

MOVA,P0

CONTINUE:

RLCA

JCCHECK22

DJNZR4,CONTINUE

JMPCHECK23

CHECK22:

DJNZR5,CHECK13

CALLSTOP

CLRSTOP_KEY

JMP$

CHECK13:

DJNZR4,CONTINUE

CHECK23:

JBLEFT,A2

JBRIGHT,A3

JBMIDDLE,A1

JBLLEFT,A2

JBRRIGHT,A3

JBLLLEFT,A2

JBRRRIGHT,A3

JBLLLLEFT,BACK11

JBRRRRIGHT,BACK22

SETBRTURN

RET

BACK11:

CALLBACK1

BACK22:

CALLBACK2

RET

A1:

JNBMETAL1,STOP5S;

检测到金属停5秒

JNBMETAL2,STOP5S

JNBMETAL3,STOP5S

JNBMETAL4,STOP5S

JNBMETAL5,STOP5S

CALLDELAY2;

直线还是加速

A2:

SETBLTURN;

转弯减速

CLRRTURN

A3:

CLRLTURN;

STOP5S:

ORLP2,#0FFH

CLRMETAL_ALARM

CALLDELAY3

SETBMETAL_ALARM

JNBMETAL1,CHECK2;

检测到金属

JNBMETAL2,CHECK2

JNBMETAL3,CHECK2

JNBMETAL4,CHECK2

JNBMETAL5,CHECK2

CHECK2:

FOR55:

FOR6:

JZFOR55

JNBMETAL1,CHECK6;

JNBMETAL2,CHECK6

JNBMETAL3,CHECK6

JNBMETAL4,CHECK6

JNBMETAL5,CHECK6

CHECK6:

CALLCHECK3

JMPFOR6

CHECK3:

JBLEFT,A22

JBRIGHT,A33

JBMIDDLE,A11

JBLLEFT,A22

JBRRIGHT,A33

JBLLLEFT,A22

JBRRRIGHT,A33

JBLLLLEFT,BACK1

JBRRRIGHT,BACK2

BACK1:

MOVR3,#30H

SETBRTURN

CLRLTURN

FOR99:

FOR8:

MOVDPTR,#TABLE1

JZFOR99

CALLDELAY1

INCR0

DJNZR3,FOR8

BACK2:

MOVR3,#30H

SETBLTURN

CLRRTURN

FOR88:

FOR7:

JZFOR88

DJNZR3,FOR7

A11:

A22:

CLRRTURN

A33:

STOP:

DELAY1:

MOVR7,#50;

减速延时

D1:

MOVR6,#248

DJNZR6,$

DJNZR7,D1

DELAY2:

MOVR1,#50;

加速延时

D2:

MOVR2,#248

DJNZR2,$

DJNZR1,D2

DELAY3:

MOVR1,#05;

延时5秒

D22:

CALLDELAY4

DJNZR1,D22

DELAY4:

MOVR5,#100

D3:

MOVR6,#20

D4:

MOVR7,#248

DJNZR7,$

DJNZR6,D4

DJNZR5,D3

TABLE1:

DB0cH,09H,03H,06H;

步进机的码表

DB00H

TABLE:

DB0cH,06H,03H,09H

END

显示MCU程序清单

//------------------------

//小车显示程序

#include<

reg51.h>

math.h>

#definedisplay_portP2//definelcddisplayports

#definesmall_distance27//definethesmallunitofdistance

sbitRS=P0^5;

sbitRW=P0^6;

sbitE=P0^7;

sbitALARM=P1^3;

sbitmetal1_port=P1^5;

//definetheportfordetectthemetals

sbitmetal2_port=P1^6;

sbitmetal3_port=P1^7;

sbitmetal4_port=P1^4;

sbitmetal5_port=P1^3;

sbitBEGAIN=P1^0;

sbitSTOP=P1^1;

unsignedchartime_count=20;

//definethecountforonesecond

intdistance=0;

//definethedistanceofcarrunning

unsignedchardistance_reg=0;

unsignedcharminute=0;

//registerfortime

unsignedcharsecond=0;

unsignedcharspeed=0;

unsignedchartime_key=0;

//estimatethesignalofsecond

unsignedcharmetal_key=0;

//estimatethesignalofmetal

unsignedcharmetal1=0;

//definethedistancesofeverymetals

unsignedcharmetal2=0;

unsignedcharmetal3=0;

unsignedcharmetal4=0;

unsignedcharmetal5=0;

unsignedcharmetal_count=0;

//definethecountofmetals

unsignedcharCOLON=0x3a;

//definethelettersforlcdtodisplay

unsignedcharNULL=0x20;

unsignedcharT=0x54;

unsignedcharS=0x53;

unsignedcharD=0x44;

unsignedcharM=0X4d;

unsignedcharnumcode[]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39};

unsignedchartimes[]={0x00,0x00,0x00,0x00};

//regitersfortimedistanceandmetalfordisplay

unsignedcharspeeds[]={0x00,0x00};

unsignedchardistances[]={0x00,0x00,0x00};

unsignedcharmetals1[]={0x00,0x00,0x00};

unsignedcharmetals2[]={0x00,0x00,0x00};

unsignedcharmetals3[]={0x00,0x00,0x00};

unsignedcharmetals4[]={0x00,0x00,0x00};

unsignedcharmetals5[]={0x00,0x00,0x00};

voiddelayl()//delayforlcdinitial

{

unsignedchari,j;

i=0x05;

j=0xFF;

while(i--)

while(j--);

}

voidenable(void)//enabledatesforlcd

RS=0;

RW=0;

E=0;

delayl();

E=1;

voidwrite(void)//writedatesforlcd

RS=1;

voidtime_run()//timedeal

second++;

if(second>

=60)

{

second=0;

minute++;

if(minute>

=10)

minute=0;

}

}

timer()interrupt1using1//0.05secondinterrupt

time_count--;

if(time_count==0)

time_key=1;

time_count=20;

TH0=(65536-50000)/256;

TL0=(65536-50000)%256;

voidlcd_initial()//lcdinitial

{

display_port=0x01;

enable();

display_port=0x38;

display_port=0x0e;

display_port=0x06;

display_port=0x80;

voiddate_initial()//datesinitial

times[0]=numcode[minute];

times[1]=COLON;

times[2]=numcode[second/10];

times[3]=numcode[second%10];

speeds[0]=numcode[speed/10];

speeds[1]=numcode[speed%10];

distances[0]=numcode[distance/100];

distances[1]=numcode[(distance/10)%10];

distances[2]=numcode[distance%10];

metals1[0]=numcode[metal1/100];

metals1[1]=numc

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1