毕业设计基于单片机的运水机器人设计.docx

上传人:b****7 文档编号:9007748 上传时间:2023-02-02 格式:DOCX 页数:20 大小:528.60KB
下载 相关 举报
毕业设计基于单片机的运水机器人设计.docx_第1页
第1页 / 共20页
毕业设计基于单片机的运水机器人设计.docx_第2页
第2页 / 共20页
毕业设计基于单片机的运水机器人设计.docx_第3页
第3页 / 共20页
毕业设计基于单片机的运水机器人设计.docx_第4页
第4页 / 共20页
毕业设计基于单片机的运水机器人设计.docx_第5页
第5页 / 共20页
点击查看更多>>
下载资源
资源描述

毕业设计基于单片机的运水机器人设计.docx

《毕业设计基于单片机的运水机器人设计.docx》由会员分享,可在线阅读,更多相关《毕业设计基于单片机的运水机器人设计.docx(20页珍藏版)》请在冰豆网上搜索。

毕业设计基于单片机的运水机器人设计.docx

毕业设计基于单片机的运水机器人设计

某某某某大学

XXXXXXXXXXXXUNIVERSITY

XXXXXX学院

电子综合实践

 

姓名

题目运水机器人

 

目录

Ⅰ、设计任务与要求4

1.1基本设计任务4

1.2控制设计任务4

1.3软件设计任务5

Ⅱ、方案设计与论证5

2.1电源方案5

2.2驱动电路方案5

2.3距离控制方案5

Ⅲ、总体设计6

3.1系统硬件电路设计6

3.1.1探测传感器模块6

3.1.2电机驱动模块8

3.2系统软件设计8

3.2.1软件计时的分析与计算8

3.2.3系统软件流程图9

Ⅳ、测试结果及结果分析9

4.1测试仪器及工具9

4.2测试步骤9

4.2.1预备工作9

4.2.2正式测试10

4.3测试结果10

4.4测试结果分析10

Ⅴ、创新点11

5.1添加计时模块11

5.2实用性11

Ⅵ、总结与心得11

参考文献11

附件一:

参考程序12

附件二:

总原理图15

附件三:

元器件清单16

 

摘要:

命题要求设计自动运水机器人。

本设计是以STC89C52单片机为核心器件,应用红外开关,直流电机等器件,实现命题要求。

经过测试,该机器人达到所有命题所要求的技术指标。

在此基础之上,本设计添加了计时模块,使设计更具实用性。

关键词:

运水;电机驱动;探测传感器

 

运水机器人

Ⅰ、设计任务与要求

本任务为F题:

运水机器人。

设计任务具体内容如下:

图1-1参考图

图1-2路线图

1.1基本设计任务

依据命题题意,本设计采用直流电机带轮式小车带实现机器人的运动。

机器人上面要装有盛水容器,以便完成在A-C之间的运水任务。

当红外光电开关探测到黑色边线的时候停止小车运动,小车停在A区是通过手动控制小车重新运动,小车停在C区通过软件延时控制小车重新运动,这样达到循环运动,进而完成运水任务。

1.2控制设计任务

由于本设计采用手动完成整个过程中的装水、卸水任务,因此控制任务即为控制A-C之间的距离。

这里通过红外光电开关扫描是否达到黑色边线,即为判断是否达到题目要求的2000mm(黑色边线即为图1-2中的起始/返回边线),通过与软件配合,以完成要求。

1.3软件设计任务

机器人的所有动作由都要由软件控制实现。

用软件对红外开关扫描所得信号进行对比,以控制直流电机的停止/正反转。

通过软件对按键的识别控制硬件启动。

用软件来控制时间显示模块的计数周期。

Ⅱ、方案设计与论证

本设计主要需要完成运水小车在A-C之间运水任务。

利用红外光电开关对由黑色电胶布制作的起始/返回边线进行探测,再通过软件的配合,对探测结果进行分析,并控制小车车轮的停止/正反转,让小车在A-C之间固定距离内行进。

通过单片机与软件的集合对时间显示模块进行控制,达到显示时间的任务。

2.1电源选择方案

方案一:

采用双电源供电,在设计中,将CPU电源和电机驱动电源完全靠光电耦合器隔离,这样电机启动时的冲击信号就不会对CPU有影响,增加了系统的可靠性。

缺点是电路设计复杂,电路成本较高。

设计要求较低,且此方案较为复杂、成本高,故放弃。

方案二:

采用单电源供电,电机的驱动和CPU逻辑控制电源采用同一个电源。

该方案设计简单,而且成本较低,缺点是电机启动的瞬间电流过大,容易对上一级电路产生冲击,电路的稳定性不好。

这个方案已经可以满足实验的要求了,采用此方案。

2.2驱动电路选择方案

方案一:

采用三极管驱动电机,滤波效果好,在单片机跟电机共用一个电源,在电流较高的情况下,单片机仍能不受干扰而正常工作。

优点:

电路压降较小,所以在大电流的情况下,发热很小。

缺点:

电路连接较为复杂,驱动功率较小,不适于大功率驱动。

该驱动电路的功率不能满足要求,故放弃此方案。

方案二:

使用专用芯片L298所组成的电机驱动电路。

驱动芯片L298是驱动步进电机的专用芯片,我们利用它内部的桥式电路来驱动直流电机。

优点:

控制比较简单,电路简单,集成芯片简化了电路的复杂性,驱动功率大。

缺点:

电路发热较大,成本略高。

结合作品要求,采用此方案。

2.3距离控制方案

方案一:

直接采用软件控制距离,即:

根据小车的平均速度设定相应前进/后退时间,达到控制前行/后退目的。

优点:

无需其他硬件支持,节约成本,制作简单。

缺点:

不易自动控制,距离控制不精确,多次循环后会导致小车偏离预定路径。

考虑到设计要求的距离控制精度较高,放弃此方案。

方案二:

采用光电传感器根据固定在地面上的两个边线的探测(如:

固定在地面的两条黑色胶带)进行探测,通过固定边线之间的距离来达到距离控制的距离的目的,进而达到要求。

缺点:

增加成本,增加软件设计难度,制作较为困难。

优点:

距离控制精确,易于自动控制。

由于本设计对距离有较高的要求,故采用此方案。

Ⅲ、总体设计

经过对各个方案分析比较,最终确定总方案如图3-1所示。

该系统所有模块都由主单片机控制。

其中,设计各个模块,包括单片机、显示模块、电机驱动、光电探测由四节AA电池供电。

电机驱动采用L298驱动芯片控制。

用光电传感器对边线的探测来控制距离。

通过单片机的机器周期计算时间计数周期,以达到计时目的。

 

图3-1系统方案图

3.1系统硬件电路设计

3.1.1探测传感器

探测传感器采用CNY-70反射式光电开关。

红外线光电开关属于光电接近开关,它利用被测物体对红外光束的遮光或反射,对所有能反射光线的物体均可检测,根据检测方式的不同,分为漫反射式、镜反射式、对射式、槽式、光纤式光电开关等。

图3-2为CNY-70的输入输出特性曲线:

 

 

图3-2CNY70特性曲线

从图3-2可以看出,随着发光管电流逐渐增加,输出电流逐渐变大,因此我们选择输入电流为20mA。

CNY-70的发光管的导通压降大约为1.5V,输入电压选择5V,因此电阻我们选择200

 

图3-3探测传感器

通过电压比较器,将传感器的输出电压转换成逻辑电平,通过单片机判断探测是否有黑线,然后通过软件调整,使小车能够完成B区的动作。

由于CNY-70受自然光影响,因此在使用时比较器比较电压采用电位器调节,通过手动调节适应不同的光照环境。

3.1.2电机驱动模块

L298芯片是一种高电压、大电流、高功率驱动器,其设计是为接受标准TTL逻辑电平信号和驱动电感负载的,例如继电器、圆筒形线圈、直流电动机和步进电动机。

每桥的三级管的射极是连接在一起的,相应外接线端可用来连接外设传感电阻。

可安置另一输入电源,使逻辑能在低电压下工作。

L298芯片是具有15个引出脚的多瓦数直插式封装的集成芯片。

 

图3-4电机驱动模块

3.2系统软件设计

3.2.1软件计时的分析与计算

单片机内部定时器有4种工作模式,方式0是13位计数器,由于计时时间过短,中断频率高,所以不选用此模式;方式2是自动重装式计数器,是8位计数器,同样中断频率过高;方式3也是8位计数器;方式1是16位计数器,综合考虑,选用方式1做精确计时。

由于51单片机是12分频,因此机器周期=晶振频率/12。

在该设计中,选用频率为12MHz的晶振,因此机器周期=1μs。

定时1s需要1000000个机器周期,因此通过20次定时器中断完成1s的定时,每次完成50000个周期的定时,因此每次给定时器的初值应该是TH0=B0H,TL0=3CH。

3.2.3系统软件流程图

 

注:

D为电机转动方向标记。

图3-5系统流程图

Ⅳ、测试结果及结果分析

4.1测试仪器及工具

测试仪器及工具:

100ml量筒两个,卷尺(两米以上)一把,黑色电胶布一卷,大号水桶两个,水量充足。

4.2测试步骤

4.2.1测试前预备工作

①、用卷尺在地面标出两米距离,并用黑色电胶布在两米的两端各粘贴一条纵边线。

②、将水桶装满水,置于A端,量筒也置于A端,空水桶置于另外C端。

③、根据测试场地光照条件,将小车的探测器调试到最佳状态。

4.2.2正式测试

①、将小车置于初试边线,即有水的水桶的一端,启动小车电源。

②、用量筒量取100ml水置于小车上的水杯里。

按下出发键,同时秒表开始计时。

小车从A端,经过B区域到C端停止。

③、小车在C端停止后,数码管显示卸水倒计时8S,此时,取下车上的水,倒入空桶内,并将水杯放回小车,8S结束后,小车返回,数码管显示小车前进时间与卸水时间(8S)之和,并在此基础上继续计时。

④、小车返回A端后,秒表停止计时。

⑤、循环②-③-④步骤若干次。

⑥、关闭电源,清空水杯中的水。

清理测试现场。

4.3测试结果如下表

项目

趟次

小车显示运行一个周期时间(S)

实际运行一个周期时间(S)

运水量(mL)

第一趟

14S

14.56S

100mL

第二趟

14S

14.23S

100mL

第三趟

15S

15.19S

100mL

第四趟

14S

14.86S

100mL

第五趟

14S

14.35S

100mL

第六趟

14S

14.66S

100mL

第七趟

14S

14.85S

100mL

第八趟

15S

14.88S

100mL

第九趟

15S

15.26S

100mL

第十趟

14S

14.79S

100mL

表4-1调试结果

4.4测试结果分析

通过对测试数据的分析,可以看出,小车已经实现了在A-B-C-B-A区域较为稳定的循环运水过程,即小车已经实现了题目所给出的所有要求。

另外,小车显示每周期时间与实际每周期所用时间误差小于1S,达到了额外添加计时模块的目的。

通过计算,可得出小车的平均速度为0.63m/s,单位时间运水量大约为7mL/s。

Ⅴ、创新点

5.1添加计时模块

在题目要求之外,本设计增加了周期计时装置,在此基础上,若通过进一步改进,可自动显示小车平均速度。

据此又可以在没有其他额外装置的情况下大概知道电池电量(事先测量好小车在不同电量情况下的速度,并画出不同电量对应不同速度的曲线图,用实测速度与此曲线图对比可知大概电量)。

另外,通过简单计算,还达到了计算单位时间运水量的目的。

5.2实用性

①、将该设计用于餐厅、酒吧等餐饮场所,所用于传菜、续杯等较为简单的服务。

既可增加娱乐性和趣味性,亦可节省雇员成本。

②、用该设计取代某些高功耗、高压电机带动的传送带,降低能耗,增加安全系数。

Ⅵ、总结与心得

通过对该作品的制作,了解了各个模块之间相互协同工作的重要性,初步掌握如何控制好各个模块之间的关系。

通过对探测传感器的使用,了解了传感器在设计中的重要作用,有益于对传感器的进一步学习。

本次电子综合实践也锻炼了我们的动手能力,但最重要的是锻炼了如何解决问题的能力。

参考文献:

1、胡汉才.单片机原理及其接口技术.北京:

清华大学出版社,2005

2、阎石.数字电子技术基础.北京:

高等教育出版社,2001

3、童诗白华成英.模拟电子技术基础.北京:

高等教育出版社,2001

4、郁有文等.传感器原理及工程应用.西安:

西安电子科技大学出版社,2008

 

附件一:

参考程序如下:

#include

#defineSEGPORT0P2

#defineSEGPORT1P0

#defineMOTOR_PORTP3

#defineFRONT_SENSORP1_4

#defineBACK_SENSORP1_5

#defineSTART_BUTTONP1_7

#defineSTOP_TIME8//卸水延时

#defineT_H(65536-50000)/256

#defineT_L(65536-50000)%256

//电机操作指令

#defineSTOP_MOTOR0X00

#defineRUN_FORWARD0x05

#defineRUN_BACK0X0A

unsignedcharcodedisptab[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x40};//显示译码

unsignedcharcount=0;//中断计数

unsignedcharmin=0;

unsignedcharsec=0;

unsignedcharmin_s;

unsignedcharsec_s;

unsignedcharsuccess=0;//完成阶段标志

bitinput;

bitdirection=0;

bitshowflag=1;

/*******延时1ms***********/

voiddelay_ms(void)

{

unsignedchari,j;

for(i=5;i>0;i--)

for(j=98;j>0;j--);

}

/*********延时n个ms***********/

voiddelay_nms(unsignedintt)

{

for(;t>0;t--)

delay_ms();

}

/********定时器初始化*********/

voidtimer_init()

{

TH0=T_H;

TL0=T_L;

TMOD=0X01;

ET0=1;

EA=1;

TR0=0;//并不启动定时器

}

/******外围硬件初始化*********/

voiddevice_init()

{

count=0;

min=0;

sec=0;

success=0;

direction=0;

showflag=1;

SEGPORT0=disptab[sec%10];//显示初始化值

SEGPORT1=disptab[min%10];

P3=STOP_MOTOR;//停止马达

}

/********时钟中断子程********/

voidtimer()interrupt1

{

TH0=T_H;

TL0=T_L;

count++;

if(showflag==1)

{

SEGPORT0=disptab[sec%10];

SEGPORT1=disptab[min%10];

}

if(count==20)

{

count=0;

sec++;

if(sec==10)

{

sec=0;

min++;

if(min==10)

min=0;

}

}

}

/********主函数**********/

voidmain(void)

{

device_init();

timer_init();

//检测启动按键是否按下

while

(1)

{

START_BUTTON=0;

input=START_BUTTON;

if(input)

{

delay_nms(5);

input=START_BUTTON;

if(input)

{

success=1;

direction=0;

break;

}

}

}

TR0=1;

delay_nms(1000);//待命延时

MOTOR_PORT=RUN_FORWARD;//检测START键完成启动马达前进

delay_nms(1000);//屏蔽起始黑线的检测

while

(1)

{

switch(success)

{

case1:

FRONT_SENSOR=0;//检测前面的传感器

if(FRONT_SENSOR==1)//已经检测到前面传感器过线则开始检测后面的传感器

{

success=(direction)?

0:

2;

if(success==0)//返回时前轮过线则停止

{

MOTOR_PORT=STOP_MOTOR;

TR0=0;

}

}

else

success=direction?

1:

1;

break;

case2:

//已经检测到前面传感器过线则开始检测后面的传感器

BACK_SENSOR=0;

if(BACK_SENSOR==1)

success=(direction)?

1:

3;

elsesuccess=(direction)?

2:

2;

break;

case3:

MOTOR_PORT=STOP_MOTOR;//停止马达

delay_nms(1500);//刹车延时

min_s=min;

sec_s=sec;

sec=0;

min=0;

while((sec+min*10)<=STOP_TIME)//目的地卸货倒计时

{

showflag=0;

SEGPORT0=disptab[(STOP_TIME-min*10-sec)%10];

SEGPORT1=disptab[(STOP_TIME-min*10-sec)/10];

}

sec_s=sec_s+STOP_TIME+min_s*10;//累加前面的时间

min=sec_s/10;

sec=sec_s%10;

showflag=1;

MOTOR_PORT=RUN_BACK;

success=2;

direction=1;

delay_nms(1000);//屏蔽返回黑线检测;

break;

}

}

}

 

附件二:

总原理图如下:

 

附图一总原理图

 

附件三:

元器件清单

元器件

用量

元器件

用量

元器件

用量

双驱动轮式小车

一辆

共阴数码管

两个

电阻电容

若干

AT89S52

一片

万能板

两块

按键

两个

CNY-70

两个

发光二极管

一个

铜柱

四个

L298

一片

开关

一个

铜丝

若干

7805

一片

晶振

一个

矿泉水瓶

一个

OP07

两片

AA干电池

四个

小水杯

一个

附表一元器件清单

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

当前位置:首页 > 总结汇报 > 学习总结

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

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