智能小车分析方案智能小车分析方案.docx
- 文档编号:25858677
- 上传时间:2023-06-16
- 格式:DOCX
- 页数:38
- 大小:2.68MB
智能小车分析方案智能小车分析方案.docx
《智能小车分析方案智能小车分析方案.docx》由会员分享,可在线阅读,更多相关《智能小车分析方案智能小车分析方案.docx(38页珍藏版)》请在冰豆网上搜索。
智能小车分析方案智能小车分析方案
电子设计大赛设计报告
题目名称_____智能搬运小车__
学生学院___物理与光电工程学院_
队员庄伟林林鉴杰陈奕利
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。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 智能 小车 分析 方案