智能小车分析方案智能小车分析方案.docx

上传人:b****1 文档编号:13205951 上传时间:2023-06-12 格式:DOCX 页数:38 大小:2.68MB
下载 相关 举报
智能小车分析方案智能小车分析方案.docx_第1页
第1页 / 共38页
智能小车分析方案智能小车分析方案.docx_第2页
第2页 / 共38页
智能小车分析方案智能小车分析方案.docx_第3页
第3页 / 共38页
智能小车分析方案智能小车分析方案.docx_第4页
第4页 / 共38页
智能小车分析方案智能小车分析方案.docx_第5页
第5页 / 共38页
智能小车分析方案智能小车分析方案.docx_第6页
第6页 / 共38页
智能小车分析方案智能小车分析方案.docx_第7页
第7页 / 共38页
智能小车分析方案智能小车分析方案.docx_第8页
第8页 / 共38页
智能小车分析方案智能小车分析方案.docx_第9页
第9页 / 共38页
智能小车分析方案智能小车分析方案.docx_第10页
第10页 / 共38页
智能小车分析方案智能小车分析方案.docx_第11页
第11页 / 共38页
智能小车分析方案智能小车分析方案.docx_第12页
第12页 / 共38页
智能小车分析方案智能小车分析方案.docx_第13页
第13页 / 共38页
智能小车分析方案智能小车分析方案.docx_第14页
第14页 / 共38页
智能小车分析方案智能小车分析方案.docx_第15页
第15页 / 共38页
智能小车分析方案智能小车分析方案.docx_第16页
第16页 / 共38页
智能小车分析方案智能小车分析方案.docx_第17页
第17页 / 共38页
智能小车分析方案智能小车分析方案.docx_第18页
第18页 / 共38页
智能小车分析方案智能小车分析方案.docx_第19页
第19页 / 共38页
智能小车分析方案智能小车分析方案.docx_第20页
第20页 / 共38页
亲,该文档总共38页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

智能小车分析方案智能小车分析方案.docx

《智能小车分析方案智能小车分析方案.docx》由会员分享,可在线阅读,更多相关《智能小车分析方案智能小车分析方案.docx(38页珍藏版)》请在冰点文库上搜索。

智能小车分析方案智能小车分析方案.docx

智能小车分析方案智能小车分析方案

电子设计大赛设计报告

 

题目名称_____智能搬运小车__

学生学院___物理与光电工程学院_

队员庄伟林林鉴杰陈奕利

 

2009年5月1日

 

装配图<正面)

智能搬运小车设计报告

 

一、总体框架

<1)、本搬动小车通过单片机AT89S52,用三个373分时输入外部信号,通过分析处理,再用一个573芯片输出步进电机驱动信号,成功地实现了取放黑铁,寻找右光源和左光源的功能。

<2)、电路方框图。

 

<3)系统总框图。

系统总框图

二、硬件实现及单元电路设计。

1、主控芯片AT89S52。

AT89S52主要性能;

  与MCS-51单片机产品兼容、8K字节在系统可编程Flash存储器、1000次擦写周期、全静态操作:

0Hz~33Hz、三级加密程序存储器、32个可编程I/O口线、三个16位定时器/计数器八个中断源、全双工UART串行通道、低功耗空闲和掉电模式、掉电后中断可唤醒、看门狗定时器、双数据指针、掉电标识符。

  功能特性描述

At89s52是一种低功耗、高性能CMOS8位微控制器,具有8K在系统可编程Flash存储器。

使用Atmel公司高密度非易失性存储器技术制造,与工业80C51产品指令和引脚完全兼容。

片上Flash允许程序存储器在系统可编程,亦适于常规编程器。

在单芯片上,拥有灵巧的8位CPU和在系统可编程Flash,使得AT89S52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。

AT89S52具有以下标准功能:

8k字节Flash,256字节RAM,32位I/O口线,看门狗定时器,2个数据指针,三个16位定时器/计数器,一个6向量2级中断结构,全双工串行口,片内晶振及时钟电路。

另外,AT89S52可降至0Hz静态逻辑操作,支持2种软件可选择节电模式。

空闲模式下,CPU停止工作,允许RAM、定时器/计数器、串口、中断继续工作。

掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。

8位微控制器8K字节在系统可编程FlashAT89S52。

 

2、直流电机驱动取放铁片。

考虑到电磁铁耗电很大,所以我们选择用直流电机机械方式实现铁片的取放。

通过L298芯片驱动,用直流电机实现磁铁的磁铁上升<放下铁块)或下降<吸上铁片)。

我们考虑了几种方案实现直流电机的驱动;

 

L298电路图如下。

直流电机驱动电路图

L298电路图

 

 

放铁片原理图

 

 

取铁片原理图

 

3、探测黑白铁片与边界。

以下为我们考虑的方案;

我们使用PRP光电对管实现对黑白铁以及边界的探测。

光电对管实物图

 

电压比较器TL084

信号处理实物图

PRP光电一体化对管原理图

 

R2

1M

光电对管检测电路图

 

4、步进电机与驱动。

方案选择;由于本系统为智能电动车,其驱动轮的驱动电机的选择就显得十分重要。

由于小车要实现对路径的准确定位和精确测量,我们综合考虑了一下两种方案:

方案1;采用步进电机作为该系统的驱动电机。

由于其转过的角度可以精确地定位,可以实现小车前进路程和位置的精确确定位。

方案2:

采用直流减速电机。

直流减速电机转动力矩大,体积小,重量轻,装配方便,但是不能做到很好的定位。

权衡利弊,我们选择了第一方案。

小车驱动部份我们选择用二相六线步进电机。

因为步进电机可以很好地实现同步与精确控制功能,但是缺点是耗电大,震动大。

但权衡利弊,与直流电机相双,步进电机驱动力强大,所以我们选择用步进电机。

步进电机作为执行元件,是机电一体化的关键产品之一,广泛应用在各种自动化控制系统中。

随着微电子和计算机技术的发展,步进电机的需求量与日俱增,在各个国民经济领域都有应用。

步进电机是一种将电脉冲转化为角位移的执行机构。

当步进驱动器接收到一个脉冲信号,它就驱动步进电机按设定的方向转动一个固定的角度(称为“步距角”>,它的旋转是以固定的角度一步一步运行的。

可以通过控制脉冲个数来控制角位移量,从而达到准确定位的目的;同时可以通过控制脉冲频率来控制电机转动的速度和加速度,从而达到调速的目的。

步进电机可以作为一种控制用的特种电机,利用其没有积累误差(精度为100%>的特点,广泛应用于各种开环控制。

现在比较常用的步进电机包括反应式步进电机

永磁式步进电机一般为两相,转矩和体积较小,步进角一般为7.5度或15度;

反应式步进电机一般为三相,可实现大转矩输出,步进角一般为1.5度,但噪声和振动都很大。

反应式步进电机的转子磁路由软磁材料制成,定子上有多相励磁绕组,利用磁导的变化产生转矩。

混合式步进电机是指混合了永磁式和反应式的优点。

它又分为两相和五相:

两相步进角一般为1.8度而五相步进角一般为0.72度。

这种步进电机的应用最为广泛,也是本次细分驱动方案所选用的步进电机。

我们的步进电机使用的驱动芯片是lm2003。

步进电机驱动芯片LM2003实物图

LM2003芯片原理图

 

步进电机实物图

 

LM2003

步进电机驱动相图

 

二相六线步进电机接线图

 

5、寻找光源。

当光敏二极管正对光源时,电阻变小,经过电压比较器向单片机输入信号。

 

 

 

6、电路板。

我们通过Proteldxp绘制电路图后,采用热转印方法制成PCB双面板。

 

 

主控电路AT89S52

输出锁存器74hc573,作为单片机分时存出的输出口。

主板稳压电路

1602lcd插口

 

主电路板实物图<正面)

主电路板实物图<反面)

 

主电路板pcb图

主电路板各部分原理图如下:

 

6智能小车程序框图。

 

 

 

7、智能小车源程序。

#include

 

unsignedintminute=0。

second=0,sum=0。

unsignedcharidataminute1=0,second1=0。

sum1=0。

unsignedcharidatarecordminute1=0,recordsecond1=0,recordsum1=0。

unsignedcharidatarecordminute2=0,recordsecond2=0,recordsum2=0。

unsignedcharbdatastatus=0。

unsignedcharbdatastatus1=0。

unsignedcharbdatastatus2=0。

unsignedcharbdataprpflagd。

unsignedcharbdataprpflage。

unsignedintidatatime0=0。

unsignedlongintidatatime2=0。

unsignedlongintidatatime2_1。

unsignedintidatatime2_2。

unsignedchardatamotor=0。

unsignedcharbdatad=0。

unsignedcharbdatae=0。

unsignedcharbdatad1=0。

unsignedcharbdatae1=0。

unsignedcharlightcount=0。

unsignedcharv0。

unsignedcharvb。

 

sbitprp5_0=d1^6。

sbitprp5_1=d1^7。

sbitprp1_0=d1^4。

sbitprp1_1=d1^5。

sbitprp6_0=d1^2。

sbitprp6_1=d1^3。

sbitprp2_0=d1^0。

sbitprp2_1=d1^1。

sbitprp7_0=e1^6。

sbitprp7_1=e1^7。

sbitprp3_0=e1^4。

sbitprp3_1=e1^5。

sbitprp8_0=e1^2。

sbitprp8_1=e1^3。

sbitprp4_0=e1^0。

sbitprp4_1=e1^1。

sbitprp5_000=prpflagd^6。

sbitprp5_001=prpflagd^7。

sbitprp1_000=prpflagd^4。

sbitprp1_001=prpflagd^5。

sbitprp6_000=prpflagd^2。

sbitprp6_001=prpflagd^3。

sbitprp2_000=prpflagd^0。

sbitprp2_001=prpflagd^1。

sbitprp7_000=prpflage^6。

sbitprp7_001=prpflage^7。

sbitprp3_000=prpflage^4。

sbitprp3_001=prpflage^5。

sbitprp8_000=prpflage^2。

sbitprp8_001=prpflage^3。

sbitprp4_000=prpflage^0。

sbitprp4_001=prpflage^1。

 

sbitprp5_00=d^6。

sbitprp5_01=d^7。

sbitprp1_00=d^4。

sbitprp1_01=d^5。

sbitprp6_00=d^2。

sbitprp6_01=d^3。

sbitprp2_00=d^0。

sbitprp2_01=d^1。

sbitprp7_00=e^6。

sbitprp7_01=e^7。

sbitprp3_00=e^4。

sbitprp3_01=e^5。

sbitprp8_00=e^2。

sbitprp8_01=e^3。

sbitprp4_00=e^0。

sbitprp4_01=e^1。

sbitforward=status^0。

sbitbackward=status^1。

sbitturnleft=status^3。

sbitturnright=status^2。

sbitrightforward=status^5。

sbitrightbackward=status^4。

sbitleftforward=status^6。

sbitleftbackward=status^7。

sbitflag=status1^5。

sbitwhiteiron=status1^6。

sbitblackiron=status2^0。

sbitsearchiron=status1^0。

sbitsearchrightlight=status1^1。

sbitseachleftlight=status1^2。

unsignedcharinterfere。

unsignedcharuninterfere。

sbitrightorleft=status1^4。

sbitunflag=status2^3。

sbitfoundblack=status2^4。

sbitfoundwhite=status2^5。

sbitfoundboundary=status2^6。

unsignedcharwhiteironcount=0。

unsignedcharblackironcount=0。

unsignedcharironcount=0。

 

voidtimer0initializtion(>。

voidtimer2initializtion(>。

voidturnright90degree(>。

voidturnleft90degree(>。

voidputdown(>。

voidgoforwardaccelerat(>。

voidgobackwardaccelerat(>。

voidputup(>。

voidfoundblackiron(>。

voidfoundwhiteiron(>。

voidturnright180degree(>。

voidbackwardalign(>。

voidforwardalign(>。

voidestimate(>。

voidboundaryturnright90degree(>。

voidboundaryturnright180degree(>。

voidboundaryturnleft180degree(>。

voidsearchlightblackiron(>。

voidoneturnleft80degree(>。

voidoneturnright80degree(>。

voidoneturnright180degree(>。

voidoneturnleft80degree(>。

voidsearchlightwhiteiron(>。

voidsearchlightwhiteiron(>。

voidscan(>。

 

voidmain(>

{

timer0initializtion(>。

timer2initializtion(>。

time2=0。

while(time2<=50>。

rightorleft=0。

status=0。

goforwardaccelerat(>。

flag=0。

while(flag==0>。

estimate(>。

if(foundboundary==1>

{

boundaryturnright90degree(>。

scan(>。

estimate(>。

if(foundwhite==1>

{

putdown(>。

searchlightwhiteiron(>。

}

else

{

putdown(>。

searchlightblackiron(>。

}

scan(>。

estimate(>。

if(foundwhite==1>

{

putdown(>。

searchlightwhiteiron(>。

}

else

{

putdown(>。

searchlightblackiron(>。

}

scan(>。

estimate(>。

if(foundwhite==1>

{

putdown(>。

searchlightwhiteiron(>。

}

else

{

putdown(>。

searchlightblackiron(>。

}

scan(>。

estimate(>。

if(foundwhite==1>

{

putdown(>。

searchlightwhiteiron(>。

}

else

{

putdown(>。

searchlightblackiron(>。

}

gotoend0200。

}

 

else

{

if(foundblack==1>

{

putdown(>。

searchlightblackiron(>。

scan(>。

estimate(>。

if(foundwhite==1>

{

putdown(>。

searchlightwhiteiron(>。

}

else

{

putdown(>。

searchlightblackiron(>。

}

scan(>。

estimate(>。

if(foundwhite==1>

{

putdown(>。

searchlightwhiteiron(>。

}

else

{

putdown(>。

searchlightblackiron(>。

}

scan(>。

estimate(>。

if(foundwhite==1>

{

putdown(>。

searchlightwhiteiron(>。

}

else

{

putdown(>。

searchlightblackiron(>。

}

gotoend0200。

}

 

else

{

if(foundwhite==1>

{

putdown(>。

searchlightwhiteiron(>。

scan(>。

estimate(>。

if(foundwhite==1>

{

putdown(>。

searchlightwhiteiron(>。

}

else

{

putdown(>。

searchlightblackiron(>。

}

scan(>。

estimate(>。

if(foundwhite==1>

{

putdown(>。

searchlightwhiteiron(>。

}

else

{

putdown(>。

searchlightblackiron(>。

}

scan(>。

estimate(>。

if(foundwhite==1>

{

putdown(>。

searchlightwhiteiron(>。

}

else

{

putdown(>。

searchlightblackiron(>。

}

}

}

 

}

end0200:

while(1>。

}

 

voidgoforwardaccelerat(>

{

status=0。

forward=1。

vb=5。

time2=0。

while(time2<=8>。

vb=4。

time2=0。

while(time2<=8>。

vb=3。

time2=0。

while(time2<=8>。

vb=2。

time2=0。

while(time2<=8>。

vb=1。

}

 

voidgobackwardaccelerat(>

{

status=0。

backward=1。

vb=5。

time2=0。

while(time2<=8>。

vb=4。

time2=0。

while(time2<=8>。

vb=3。

time2=0。

while(time2<=8>。

vb=2。

time2=0。

while(time2<=8>。

vb=1。

}

 

voidscan(>

{

status=0。

while((foundblack!

=1>&&(foundwhite!

=1>>

{

goforwardaccelerat(>。

flag=0。

while(flag==0>。

status=0。

estimate(>。

if(foundboundary==1>

{

foundboundary=0。

if(rightorleft==1>

{

rightorleft=0。

boundaryturnleft180degree(>。

time2=0。

while(time2<=8>。

status=0。

}

else

{

rightorleft=1。

boundaryturnright180degree(>。

time2=0。

while(time2<=8>。

status=0。

}

}

}

}

 

voidsearchlightblackiron(>

{

unsignedlongintlightdalign。

rightorleft=0。

vb=4。

turnright=1。

while(prp8_01==1>。

status=0。

time2=0。

while(time2<=20>。

turnright=1。

time2=0。

while(time2<=30>。

time2=0。

while(prp8_01==1>。

status=0。

if(time2<=180>

gotob0173。

status=0。

turnright=1。

time2=0。

while(time2<=20>。

while(prp8_01==1>。

time2=0。

while(time2<=10>。

status=0。

time2=0。

while(time2<=20>。

b0173:

time2_1=0。

goforwardaccelerat(>。

time2=0。

while(time2<=40>。

flag=0。

while(flag==0>。

time2=0。

while(time2<=40>。

status=0。

putup(>。

time2=0。

while(time2<=8>。

 

turnright180degree(>。

goforwardaccelerat(>。

time2=0。

while(time2<=90>。

b0294:

status=0。

forward=1。

flag=0。

while(flag==0>。

estimate(>。

if(foundboundary==0>

gotob0294。

status=0。

time2=0。

while(time2<=8>。

gobackwardaccelerat(>。

forwardalign(>。

status=0。

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

当前位置:首页 > 自然科学 > 物理

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2