《基于计算机控制的光碟智能存取装置研制毕业论文.doc》由会员分享,可在线阅读,更多相关《基于计算机控制的光碟智能存取装置研制毕业论文.doc(50页珍藏版)》请在三一办公上搜索。
1、基于计算机控制的光碟智能存取装置研制目 录一、项目简介1二、主要创新点1三、研究背景、目的和意义2四、探究过程21.研究方案探究22.技术路线图43.结构设计54.计算机管理功能的实现85.精确定位的实现176.路径算法的优化与创新应用257.设备连接与调试338.智能应用379.改进37五、展望和应用41六、感谢43七、附件43全国青少年科技创新大赛基于计算机控制的光碟智能存取装置-随机存储、自动搜索与控制、路径优化算法的创新与应用一、项目简介本项目的最终目标是实现一种基于计算机控制的光碟智能存取装置,是一个集计算机管理及软件开发、算法设计与控制为一体的计算机应用系统。完善后可以广泛应用于图
2、书馆、档案馆、电视台、广播电台、博物馆、资料室等需要管理大宗信息和资料的单位。主要研究内容包括:取多盘执行机构路径优化算法的研究与探讨;执行机构精度控制算法的研究与软件设计;光盘管理信息系统设计与程序开发;单片机控制及驱动系统设计;光盘位置检测的实现;存储机构设计与加工;整机系统的试验研究与改进等。系统装置实现如下功能:光碟随机存储功能,光碟存放时不需要按分类和编号进行对号入座和固定存放,即:哪里有空位就哪里存放;光碟自动搜索与控制功能:按存放位置自动更新、分层分类,并按照关键字进行自动搜索的数据库设计,实现对光碟基本信息的浏览、自动搜索和查找功能。同时,光碟取出执行机构会按照搜索到的光碟位置
3、信息,自动弹出要查找的光碟;取多盘路径优化功能,执行取多盘功能时,应用与计算机进行通信的单片机控制电路、驱动电路和执行结构,以路径最短方式进行路径优化设计,实现多盘自动弹出功能。稍做简化可直接进入家庭。系统装置具有广泛的应用前景和市场推广价值。 二、主要创新点1) 取多盘路径寻优算法及创新应用。本系统具有一次取多盘路径优化功能,采用了改进的回溯寻优法寻找最佳路径,利用截枝分界法来提高搜索效率,并对分界比较值进一步优化,使系统的取盘效率大大提高。2) 在取盘机构位置控制精度方面,本系统在普通分段线性化的基础上进行了改进,对取盘机构上的控制上采用了斜率分段线性化优化算法,使取盘的位置精度得到保证。
4、3)本系统装置功能人性化,充分考虑实用性与应用型,是集光、机、电、控制与信息为一体的综合智能化计算机实际应用系统。三、研究背景、目的和意义随着科学技术和文化事业的发展,光碟的数量是越来越多,而从林林总总的光碟中找到自己需要的光盘是一件费时费力的事情。有一天,我为了找老鹰乐队的珍藏碟,我花了一个上午的时间,将所有的碟翻了出来才找到。这不仅浪费了我的时间,也破坏了我那天的好心情。当时我就在想,是否可以有那么一个装置,存储物品的时候可以随意放置,取出的时候装置可以自动找到物品并把物品自动取出来。这样一个想法激发了我对这方面的探究兴趣。这样的装置研究出来,将对许多需要物品存储管理的场合和单位非常有用。
5、光碟是目前用途最广、也是最可靠的信息载体,经过调研,我发现图书馆,档案馆,电视台,广播电台,博物馆,资料室等这样的一些单位,保存、管理和使用数量巨大的光碟,以此作为切入口,我选择了以光碟自动存取作为研究对象开始我的探究之路。四、探究过程1.研究方案探究首先,这是一个自动装置,结构方面应该紧凑,要争取在有限的空间内存放尽可能多的光盘。根据观察,发现档案馆里存放档案的档案柜的设计和放置十分合理,一排排紧凑放置,每排仅留一个机动的操作位,由于每个柜底下有导轨和滑轮,柜子可以依次移动,当取档案时,把操作位调整到合适位置就可以进行操作。同时,市面上有一种栅格一样的结构,可以装几十张去掉封套、仅保存光碟本
6、身的光碟盒也是一种好的结构。将这两种结构结合在一起,就是我设想中的智能光碟存取装置结构(如图1.1)。其中,栅格为多层层叠式,每层两组,自动取盘机构设在中间,可以把选择的光碟从两边弹出。图1.1 初步设想中的智能光碟存取装置结构其次,既然要实现智能功能,每个柜子应设计计算机控制系统,本系统考虑用设有触摸屏的计算机控制系统实现其智能功能。光碟随机存储功能-光碟存放时不需按分类和编号进行对号入座和固定存放,哪里有空位就哪里存放。光碟自动搜索与控制功能方便光碟基本信息方便的浏览、搜索和查找。光碟自动弹出功能-应用控制电路驱动执行结构,将选择的光碟自动弹出。考虑到每个柜中可以储存的光碟容量很大(估计5
7、000-8000个),单个光碟设计一个弹出机构是不现实的,可以考虑用计算机控制的X-Y滑块方式来实现,我想这种方式用计算机来控制是应该可以做到的。目前市面上那些光碟管理柜(装置)多半是先人工分类编号,存放的时候一一对号入座,而且也少有自动弹出机构。我设计的这个智能光碟存取装置不仅设有自动弹出机构,而且光碟实现可以随意存放在任意的空闲位置上,装置自动识别出位置,并记录起来以便以后自动寻找,这一点,对图书馆,档案馆,电视台,广播电台,博物馆,资料室等这样需要保存、管理和使用数量巨大的光碟的一些单位相当有用。图书馆一天从借阅者还书时回收上百张书带光碟(现在好多书都配光碟,它们与书分开存放),管理员每
8、天要将它们一一对号入座,将是多大的工作量啊!2.技术路线图带着这个问题,我征询了老师和爸爸的意见,他们全力支持和鼓励我对这个问题进行探讨,并联系了华南理工大学自动化学院老师对我进一步的指导。经过沟通,老师对我的研究方案提出了两点意见和建议:一是方案提出“不需按分类和固定位置存放”解决光碟存放问题符合当前仓库管理理念,是一种新趋势,方案可行,具有广阔的应用前景。支持我以此为目标,为最后形成实际应用产品而努力。但就目前而言,建议分段实施。二是项目涉及计算机、单片机、自动化、机械设计与加工,电路设计、数学、物理等多个学科门类的知识,有些已经大大超出高中学生的要求,提出只要有兴趣和毅力,边学边实现,可
9、以完成预定的目标。老师的意见给予我信心。在老师们的帮助下,我重新调整了方案。简要讲就是设计用一组栅格,先做一个可以存放200个左右光碟的单元柜,实现主要功能进行可行性试验和测试,发现问题,弥补不足并积累经验,待成功后才向前推进。控制系统和计算机数据库系统先采用单片机+普通计算机来实现,待成功后用一体机(老师说是工业计算机,可配触摸屏)转变(图2.1)。图2.1 经咨询讨论后确定的试验样机装置图所拟的技术路线图如下:3.结构设计光电管位置检测方案的选定在整个设计过程中,首先应解决的问题是如何实现随意存储功能。整个方案反反复复修改了几次,是本探究学习的主要难点和重点之一。探究过程如下:首先,我想到
10、了普通的滑动变阻器。根据电阻长度位置的不同而阻值不同的特性,可以通过测量电路中电阻的阻值,就可以将阻值与光碟位置一一对应起来。但是,经过我的实验,我发现每次测量同一位置的电阻值并不是一个定值,而且不同位置的电阻值相差的又不是很大,很难与光碟位置一一对应,数据处理起来非常的困难,所以我选择放弃。图3.1 滑动变阻器的原理图接着,我又想到了触动开关,就是在每个光碟的存放位置安放一个触动弹片来感知光碟的位置。对此,我还去专门的电子市场去寻找相应的材料。回到家中后,我将它们焊接到一块电路板上做可行性实验。虽然电路很简单,元器件比较少,但是线路却非常繁杂,检查电路也成为了一件异常费力的事情。所以为了接通
11、这十六个触动开关组成的电路,整整花了我一天的时间。正当我正高兴于实验的成功时,我发现,仅仅十六个触动开关就占用了很大的面积。因为这是我在市面上找到的最小型号触动开关,而将来要设计出可以存储1000张光碟的装置时,装置的占地面积将会异常巨大,这违背了我结构设计方面的宗旨,况且触动开关的反应并不像想象中的灵敏,所以我决定找寻更佳的方案。图3.2 触动开关示意图再者,通过以前对数字电路学习的基础,我想到了一种可以有效减少数据线数量的方案薄膜开关。也就是说,连接八条数据线,那么就有28256种状态。每个光碟槽放置一个薄膜开关,每个开关对应一种状态,这样就可以识别出光碟的位置,从而实现随意存储的功能。我
12、的这个想法得到了指导老师的高度赞扬,说这是一个很好的想法。但是由于电子市场根本没有这样的开关卖,订做会导致成本很高,而且可靠性不高。无奈之下,只能放弃了这个很好的方案。图3.3薄膜开关示意图最后,通过在网上论坛的讨论,我终于发现了一个目前来说的最佳选择-光电检测管。它有着体积小、反应灵敏和可靠性高优点。我的设想是在每个光碟存放位置的前端安放一对光电检测管,当有光碟存放时,它可以触发信号,送给上层管理系统,使其识别并记忆光碟所处的位置。通过实验发现,开关反应灵敏,工作可靠,而且在市面上可以买到尺寸非常小的此类开关(大约3毫米左右)。因此,最后确定选用光电检测管来实现自动检测光碟位置的功能。光电检
13、测管的排布设计我对于结构方面设计的初衷是:在有限的空间里可以存放尽可能多的光盘。所以,我决定采用栅格结构,因为它的空间利用率是最高的。依照原来的设想,光电检测管是按“一”字型排列的。但是通过观察发现,以这种排列方式的话,光电检测管的两壁会占用较多的空间,我当时就在想能不能把这部分的空间也充分利用起来。通过多种摆放方案的尝试,终于发现通过“品”字型的排布是空间利用率最好的排布。图3.4a “一“字型排布示意图图3.4b “品”字型排布示意图取盘机构的设计根据测量,光碟的厚度是大约是1.25mm,设想中光碟之间的距离是尽可能窄的。要在这么小的距离内自动取出光碟是比较麻烦的事情。开始我想到的是利用机
14、械手臂,但是机械手臂体积太大结构太复杂,同时也涉及到了太复杂的技术,考虑用机械手臂这个方案不现实,放弃。方案的选择陷入了僵局,通过电视我发现实际工程应用中有很多精密控制的例子,我决定去工厂参观来寻找解决方案。通过与那里师傅的交流,我获益匪浅,最终采用了丝杆+螺母结构的双步进电机作为执行机构。双步进电机的一个负责轴向运动,另一个负责推出光碟。4.计算机管理功能的实现我的光盘管理软件设计主要可以分为两个阶段,分别是前期探索,实际设计。前期探索所谓万事起头难,现在想起我刚开始的时候,还真有点苦尽甘来的感觉。当决定要设计一个光盘管理系统后,通过与指导老师商讨和在网上搜索,我决定利用VB和数据库进行开发
15、,选择VB是因为之前我对它曾经有所接触,有一定的基础,而且老师说VB语言入门比较容易,对专业知识要求不高,而且控件资源比较丰富。但对于数据库我的概念就比较模糊,只感觉是一门高深的学问与内容。虽说我有一点VB的基础,可是要开发一个软件还是有所欠缺。老师说我应该循序渐进,所以我第一步是以设计一个简易计算器为目标的,作为一个前期的学习阶段。图4.1我设计的简易计算器不要以为设计计算器很简单,记得那时候我花了整整大半个月的时间,特别是某些细节的地方,例如在VB中的TEXT控件,显示的是从左到右的,但计算器是从右到左的,开始时我也没有注意,但和Windows上附件中自带的做比较后,发现这个问题,通过在网
16、上搜索,知道是需要修改控件的属性。还有就是数据的类型也要特别注意,因为利用TEXT控件来显示数据和结果,他需要的是字符型的数据,而在运算过程中,利用的是数字型的数据,这样在不同的地方就要对数据进行恰当的转换。还有的是中间变量的设置也需要注意它的类型匹配,总之,虽然这个例子对其他人可能比较简单,但通过它我掌握了VB程序开发的过程,基本控件的使用方法还有数据利用的原则。学会使用VB仅仅是个开始,因为我设计的系统中需要用到数据库,而这方面我完全没有学习过的。开始时在网上找了些资料看,但看了很久还是没有头绪。指导老师针对我系统的设计需求,给我有针对性地进行辅导。经过他的讲解,我终于对数据库中,例如关系
17、数据库,表,视图,关键字,搜索等一些概念有了基本了解。老师还为我讲解了数据库中常用的SQL语言,通过学习,我知道了基本的数据库操作语言,例如insert、delete、update、select等命令的使用格式。根据老师给的资料,我开始按着提示,利用Office中自带的Access数据库软件,建立自己的数据库。图4.2练习建立的图书信息表由于系统中需要利用VB对数据库进行操作,从资料上我知道,VB通过ADO可以方便对数据库进行操作的。其实从现在我的理解来说,ADO应该相当于一个桥梁,利用它可以使VB和数据库进行连接,而VB送到数据库的是SQL数据库操作语言,而从数据库回来的是查询的数据。为了练
18、习如何利用ADO对数据库进行操作,对着书本上的例子,我做了一个数据库数据查询器,利用它可以对数据库所建立的表中数据进行查询,并把结果显示出来。图4.3我设计的数据查询器这个例子对与我后面的设计起到了很大的帮助,通过它不但知道了如何在VB中利用ADO控件对数据库中表的数据进行查询,还知道了可以利用DATAGRID控件对数据进行显示。之前的学习主要是了解和熟悉各个控件的使用,对数据库和VB中的一些基本原理更加了解。在正式开始系统设计前,我通过书上例子,设计出了一个简易的图书管理软件。这个软件从包括从数据库的建立,数据表的设计,到VB中界面的设计,各个控件的使用和协调,数据的查询搜索,更新,删除等都
19、用上了,是我之前所学知识的一个综合使用。我对着参考书一个一个语句看,一个部分一个部分地尝试,用了整整一个多月的时间,把书上例子中的主要功能都实现了。通过这个练习,我对自己需要设计的系统有了更多的了解,我知道该如何下手了。我的系统也是在这个例子的基础上建立起来的。图4.4我做的图书管理软件界面实际设计通过前期的准备,我对VB程序设计,数据库使用以及其的二次开发有了更深的了解。在前期的基础上,我开始一部分一部分地设计自己的光盘管理软件。对于整个系统来说,其核心部分应该是数据库,而其中表的建立是基础。表中的数据要设置得合适,数据之间的相互关联性要好,而且要避免冗余。我开始时先把想到的需要保存的信息制
20、作出几个表来,其中包括光盘信息表,用户信息表,针对着这两个表在VB中分别建立连接。可是随着编程中发现,这样的表设置不是很合理,例如光盘信息表中光盘存放位置等信息,这些信息是可以随时更改的,而例如光盘名字,光盘备注等信息不是经常要更新,这样的信息应该有所区别,还有,就是光盘的分类,应该独立来处理比较合理。这样一步一步地尝试,我现在是在整个数据库中建立了几张数据表,分别是光盘基本信息表,光盘分类表,用户资料表,光盘动态信息表等。我设想中的管理系统,它应该具有信息查询、信息浏览、添加、编辑、删除、取盘等功能,并且能够和单片机进行通信,实现对取盘执行机构的控制。根据以上需求,设计VB框架如下:图4.5
21、 VB框架图主窗体设计主窗体是打开软件时的第一个窗体,对于数据库的一切操作都是在它上面完成。利用VB工具中的“菜单栏设计”命令,可以很简单地设计出想要的窗体结构。具体设计见下图:图4.6 主窗体结构效果如下:图4.7 效果 在主窗体中插入两个菜单栏,分别为“基本信息管理”和“系统用户管理”。在“基本信息管理”中各子菜单实现功能如下:CD分类管理:实现光碟类别的添加、修改、删除CD信息管理:实现光碟信息的添加、修改、删除、取盘、浏览、查询“系统用户管理”中各子菜单实现功能如下:用户管理:当用户是管理者时可以对其他用户进行删除修改密码:当前登录用户可以修改自己的登陆密码CD分类管理子窗体设计当存放
22、的光碟数目比较多的时候,对于光碟的快速查找和浏览就有比较高的要求,为了提高管理效率,应该对光碟分类进行管理,而不同用户对于光碟类别的区分不大一样,所以本设计对光碟类别进行动态管理。对于光碟分类设立一个专门的表来储存信息,用户可以根据设计的需求对光碟类别进行添加、修改、删除,这样就能够把各种光碟分门别类地保存起来。 为了更好地显示分类效果,利用VB中的TreView控件,形成树状显示结构,这样就能够清楚地察看分类情况。具体实现效果如下:图4.8 分类对于选定的分类,可以按需要随时添加、修改、删除下一层节点。分类编辑子窗体如下:图4.9 分类编辑子窗体CD信息管理子窗体设计这是本管理软件的核心窗口
23、,要完成对于光碟的主要操作。它能够实现光碟信息的添加、修改、删除、快速查找、取盘等功能。具体设计窗体如下:图4.10 信息管理子窗体对于查找功能,用户可以从两种方法实现。第一是利用光碟分类管理形成的结构,把不同的光碟分门别类地显示出来,用户只需要打开对应的树状分类表就可以浏览对应光碟的信息。第二种方法是快速查找,用户利用红外扫描仪把贴在光碟上的标签号输入到快速查找框,察看对应光碟的信息,可用户还可以选择关键字查找方式,在快速查找框中输入光碟名称的关键字来实现模糊查找。 图4.11 模糊查找管理软件中新光碟信息的输入只需输入一次。有两种途径,第一是用户直接在快速查找框中扫描输入新的条形码编号,软
24、件会自动查询数据库中的信息,当发现为新的信息时会自动调用添加信息窗体。图4.12 新光碟信息输入窗口第二种途径是用户自己在对应分类的图书列表中直接按添加按钮添加新的信息。软件会自动调用新光碟信息输入窗口。用户按要求填写好信息,按保存按钮就可以把新的光碟信息保存下来。当填入的信息不对或者忘记填写时,软件会弹出提示窗口。图4.13 提示窗口用户管理子窗体设计本软件有用户使用限制,用户可以根据需要设计用户密码来防止别人修改数据库中的内容。当登录软件时候,软件会自动弹出登录信息窗体: 图4.14 身份验证只有输入正确的用户名和对应密码才能进入软件。而在软件中用户可以根据实际需要设立和修改用户名和对应密
25、码,编辑子窗口如下:图4.15用户信息按确认后软件会把数据储存到对应的用户管理表中。所设计的数据库界面如下图所示:(a)(b)图4.16 数据库设计界面5.精确定位的实现单片机的学习通过前一段时间的软件设计,我电脑上的管理软件已经有了个基本框架了,而光碟存放的机械结构已经委托机械厂师傅帮我加工,现在的问题是怎么用我电脑上的管理软件来控制光碟存放装置,让它完成我设想中的随意存放光碟和自动取光碟的功能。我设想中是利用电脑直接控制电机和接受信号就可以了。但事实上并不是这样的。那次去工厂参观时,我特意去问了这个问题,工作的师傅说他们设计的那些装置都有自己的控制单元。例如PLC,DSP,单片机等等,这些
26、东西我都没有接触过,我把我的想法同他们交流,他们建议我可以利用单片机作为装置的控制单元。利用它与电脑进行通信,并且控制装置上的其他东西。因为高中课程中没有接触过单片机,所以为了方案的实施,我开始了单片机的学习历程。我因为打算用C语言编写单片机程序,所以首先我先去购书中心买了一本有关C语言入门和单片机教程的书籍来看。我的邻居是一个在校研究生,名叫小何,是自动化控制专业的,我打算向他请教有关方面的知识。他建议我用AVR的单片机来做,因为这款单片机入门资料比较多,而且价格便宜,使用方便,而且他对AVR比较了解。他还说,学习单片机最好的方法是自己动手实践。他先是很系统地教了我一些C语言在单片机开发中的
27、应用,然后他还教我如何利用一个专门的模拟软件来模拟实验效果。在他的帮助下,我可以运用模拟软件中的AVRMEGA16单片机来实现一些比如说走马灯之类的简单的控制功能。经过模拟的训练后,我在小何哥哥的指导下做自己的单片机最小系统板。开始时总觉得最小系统板是一个很深奥的东西,但实际上它所需要的器件不是很多。我做的最小系统板包括几个部分,第一是供电电路,是利用7805芯片实现的;第二是串口通信电路,小何哥哥说我的设计需要用到单片机跟PC机的通信,比较简单而且可行的方法是利用串口,只需要一条串口线和Max232芯片就可以了;第三部分是单片机的复位电路;第四部分是调试口,因为小何哥哥那里有JTAGICE调
28、试工具,只需要把单片机对应端口按顺序引出就可以了。我按照小何哥哥给我提供的原理图,在万用板上一部分一部分地把芯片连接起来。焊接电路真是一个细致活,小何哥哥说假如某个地方短路就很容易把芯片给烧了。虽然需要连接的线不是很多,但我还用了整整一天的时间,而且用万用表反复检查,生怕哪里出了问题。到了最后,小何哥哥给我检查了一遍,确定没有问题后,就开始最重要的时刻,上电。当时我的心真悬着啊,上电的一刻还在默默祈祷着。幸亏一切正常,小何哥哥说利用仿真器能够正常连接到芯片,这表明芯片已经能正常工作了。第二天,我继续完成我的最小系统板。我很快就把电路焊接好了,可是上电后,我把小何哥哥给我的串口调试程序下载到芯片
29、后芯片不能正常和PC机通信,我一下子懵了。小何哥哥让我再仔细检查电路是否连接正确,串口的参数设定是否符合要求等。最后发现原来是有一条线没有连接好。硬件调试远比软件困难,一个错误可能需要很长时间才能发现。最后,小何哥哥让我在板上焊接了8个调试灯,并给了我一些基础的程序,让我参照着它们来控制这些灯。在这个最小系统板上,我完成了很多的实验,比如走马灯、蜂鸣器等。通过这一系列的实验,我对单片机的了解也越来越深,对单片机中断,IO口操作,定时器使用,PWM发生器使用等也有形成了基本认识。电路设计在我学习单片机的时间里,我委托机械厂的陈师傅加工机械部分。因为这装置要求的精度非常高,且运用到了高级的工业加工
30、技术,以我现在的知识面和条件,显然是无法单独开展这样的工作。我把我的思路与设计方案向机械厂的师傅进行了描述,并在他们热心的指导下进行了调整,算是最终定下来了,最后在加工厂师傅的协助下,他们帮助我设计了加工的图纸,并按照我们讨论的方案,帮助我进行了机械加工。按照设计和加工的样式,模型由三部分组成,第一部分是光盘存放架子,光盘可以竖着放到架子上;第二部分是丝杆和螺母组成的运动部分,一个步进电机带动着丝杆转动而让另外一个步进电机横向移动,当到达设定位置时,另外一个步进电机运作,带动一个拨盘把光盘从架子上推出来。接着利用单片机按照预定程序控制这两个步进电机就可以了。为了简化装置,陈师傅向我推荐了几款步
31、进电机驱动器,单片机产生的PWM脉冲信号输入到驱动器后就可以控制步进电机。将驱动器分别与单片机和步进电机连起来后,驱动电路就这样完成了。接下来是光电管的检测电路。据我所知,光电管的特性是当有遮挡物的时候可等效为断路,无遮挡物的时候等效为通路。在之前检测方式选择时,我在网上找到,利用光电管的特性,很容易设计出一个检测电路,当光电管间有遮挡物时输出0V,没有遮挡物时输出5V,电路图如下图所示:图5.1光电管的检测电路但问题是怎么样令单片机检测到这些信号呢?我向小何哥哥请教,他给我说了几个方案,一是可以利用并进串出芯片串联起来,可是这样检测速度就有所限制,二是利用模拟开关对信号一个一个检测,但是这样
32、需要很多IO口,而单片机上只有32个IO口,三是利用锁存器加译码芯片。这样既方便读取信号,而且用的IO口也相对较小。所以我采用了第三种方案。我首先在万用板上焊接16个光电管作为测试,接着利用单片机控制译码器,轮流地开关锁存器的使能端口,八个一组地读取光电管的信号。经过测试和实际调整,基本能够实现我的要求。然后是指示灯的电路设计。在我的设想之中,装置进行取盘操作的随后对应光碟的位置的LED指示灯会亮起来,因为装置对LED指示灯的即时性要求不是很高,小何哥哥提议利用单片机的SPI口串行移位芯片实现来实现指示灯的功能。我上网查了一下,发现了有一个利用八位移位输出芯片在LED大屏幕显示中的应用实例,于
33、是,我就参照了一下他的电路样式,在小何哥哥的指导之下完成了指示灯的万用板电路(如图5.2所示)。经过测试,效果基本满意。图5.2 指示灯的万用板电路为了让整个装置运行更加稳定,更加美观,按照之前设计方案,我委托工厂把光电检测电路和指示灯电路制作成PCB板。整个控制系统结构图如下:图 5.3控制系统结构设置控制命令格式PC作为整个系统的控制中心,在设计中要解决的一个重点是如何利用软件控制整套系统。由于控制部分是以单片机为核心的,那么问题就转变为如何是管理软件与单片机有效通信交流。这部分一开始时我还真没有头绪,因为单片机主要是利用串口与电脑通信的,而该如何处理发送数据才能实现与单片机的沟通呢?经过
34、在网上一些论坛发帖咨询,还有与指导老师的讨论,我才形成了现在的那种以控制标识符,数据内容,命令结束标志为组合的控制信息。例如上文所述,当在软件上按取盘按钮,那么电脑会自动形成控制信息如下“G+Address+E”其中,G表示GET,就是说要取盘,Address是需要取盘的位置信息,E是命令结束标志符。 控制命令地址结束标志设计命令格式开始的时候,我设计的系统只能取一个光盘,那么它的命令只有“G+Address”,可是到了后面,系统具有取多盘的功能,就是说所要去的的光盘个数的不确定的,那么单片机在读取位置信息时就要有一个结束标志才能判断出来。所以要加上一个“E”来坐标标识符。而在实际中,G是用十
35、六进制的0XFA表示,E用十六进制的0XFF表示。下面是利用串口助手接受软件发送数据。利用它可以很方便地对串口发送数据进行监控,这样就可以在没有与单片机控制系统连接下也可以对软件进行调节。图5.4取盘时软件发送的数据精度控制利用我自己的单片机最小系统板和陈师傅介绍的驱动模块,我已经成功地控制步进电机根据我的设想前进和后退,但是步进电机是按照脉冲数目来控制的,而我电脑上保存的是光盘位置,还有因为光盘的间距很小,如何准确的把光碟推出来,这些问题还值得我去思考。精度的调试主要经过了三个阶段。阶段一:光碟槽在加工的时候是按照均匀位置距离来加工的,所以一开始,我按照全程线性化的方法编写单片机控制程序。因
36、为光盘与光盘之间的距离为3mm,每个光盘的厚度为2.1mm,从理论上说,丝杆上步进电机的步角为1.8,每圈需要的脉冲数为200。当知道丝杆每一圈前进的距离,加上光盘厚度与间距,就可以计算出对应光盘位置所需要的脉冲。其表达式为,其中,为光盘厚度,为光盘间距,就是每个光盘间的实际距离。为丝杆每一圈的前进距离,因为我们每一圈需要200个脉冲,那么,就是每个脉冲前进的距离。是当前要取的光盘位置,代入上式就能计算出理论需要的脉冲个数P。当我满怀信心去验证我的实验成果的时候,我发现步进电机并没有到达相应的位置。在咨询了家长后,我明白,在实际的加工过程中,是不可能实现光碟槽位置的均匀分布的。阶段二:通过网络
37、的问询,我采用了一种新方法分段线性化。我首先测量一组光盘位置与对应脉冲个数的数据。可以肯定,要到达这些位置,需要走的脉冲个数是知道的。对于点与点之间的区域,近似认为是按线性变化的。这种方法计算脉冲的表达式为,其中,是当前需要取的光盘所在分段区域中起点位置所对应的脉冲数,是其坐标位置。是光盘所在分段区域中的近似斜率,计算公式为,为当前需要取的光盘位置。每个分段区域中的近似斜率计算表达式为,为分段区域起点与终点坐标,为其对应的脉冲个数。经过实际调试,利用以上方法能够准确的定位到大部分的位置,但在某些地方,还是不能准确定位。阶段三:通过向指导老师的咨询与自己慎重的考虑,我认为出现的问题主要有两点。第
38、一可能是我测量时估计量不准确造成的,第二是这段范围内的光盘存放位置的不均匀比较明显而造成的。我又对我的控制方法进行了改进。我先在这些精度比较差的范围我重新测量了位置与脉冲对应关系,然后对于一个关键的参数K,我修改了计算方法。原来的K在同一段范围内是不变的,现在我把它改为一个动态值,定义脉冲计算公式为,其中为需要取的光盘位置,为目标光盘所在分段区域的起点坐标,为它的斜率,定义为,为当前分段中斜率的变化率,其定义为,为对应分段起始和结束端点坐标,为他们对应的斜率。在实际中,驱动器选择64分频下,测到的位置与对应脉冲关系如下:X1X2X3X4X5X6坐标837.85186.5109130.6脉冲数2
39、0366106588145046246845311927373835利用斜率分段线性化的流程框图如下:图5.5利用斜率分段线性化的流程框图根据斜率分段线性化思路,先把整个区域分成六段,每段的端点位置分别为address_f和address_b,address_f是首端点,所对应测得的脉冲数为pluse_f, address_b为末端点,所对应测得的脉冲数为pluse_b。其实这里对于每个分段来说,它的末端点就是下一分段的首端点。为了简化说明,这里设为每段首端点对应的位置,为其对应的脉冲个数。这样,利用以上定义式,就可以计算出每个光盘位置对应的脉冲数了。利用分段线性化和斜率分段线性化画出曲线如下
40、:图5.6利用以上两种方法画出来的曲线图5.7曲线局部放大(虚线为分段线性化拟合,实线为斜率分段线性化拟合)可以看出,利用斜率分段线性化拟合后,脉冲数量的增加是按端点斜率的变化趋势改变的。经过实际检测,利用以上办法,能够很好解决误差问题,取盘精度基本满意。6.路径算法的优化与创新应用我在原来设计中,装置每次只能取一个光盘,当完成取盘操作后就自动回复到初始零位。若使用者一次要取的盘很多时,这样的操作就很浪费时间。我当时就在想,是否既可以令装置一次性取多盘,而且可以令装置记录当前位置,节省复位时间?这个部分从想法的提出,到实现经过了很漫长的过程。我先利用单片机里的EEPROM存储了每次取盘完成后的
41、当前位置,解决了每次取盘操作后复位的问题,接着我再着力解决取多盘的问题。开始的时候,我是按照用户选择取盘的顺序来实现取盘的,就是说用户先点击1号盘,再点击2号盘,再点击3号盘,那么系统就会按照1,2,3的顺序来取出光盘,但在实际调试过程中发现,很多时候取盘机构都走了重复的路线。我就想能不能设计出一种有效的方法,让取盘机构在最短的时间内把光盘都取出来呢?顺着这个思路,我在网上找了很多资料,包括动态规划,最优设计,贪心算法等等,但是看到这些高深的东西,我真的不知道如何下手。通过和指导老师交流后,老师推荐了我两本书看,包括如何进行思考,算法设计与分析这两本书对于一些基本的算法做了详细的介绍,还有具体
42、的例子。我利用课余时间一点一点地看,老师也把书上的部分内容给我进行讲解,我发现利用书上的算法,可以解决实际中很多难题。例如旅行售货员问题,最大团问题,这对于我思考其他问题带来很大的启发。书本让我理解了什么叫做树,什么是图,如何对树进行遍历,如何寻找最小生成树等。说实话,书上有些内容我还不是很理解,但通过它们,我渐渐发现我需要解决的关于在对短时间内实现取多盘的问题应该属于最优路径问题,与旅行售货员问题有点相似,但又有所区别,它要寻找的是一条回路,而我的问题是一条停止在最优端点的最短路径。这点的不同也使得我对算法的改进提供了思路。我设计的取盘最优路径算法1)取多盘问题的进一步阐述:在电机速度不变的
43、情况下,最短时间内把选定的光盘全部取出的问题实际等效于一个最短路径问题,就是要找出一个最短路径,让取盘机构经过各个目标光盘存放点,并把光盘推出到指定位置。就像下面的示意图(图6.1):图6.1 圆圈表示需要取的光盘,三角形代表当前取盘机构的位置上图表示一个3层的光盘存放机构,每层可以存放10张光盘。其中圆形表示需要取的光盘,三角形表示取盘机构当前的位置,事实上,取盘机构的位置是上一次取盘过程中取最后一张光盘的位置。由排列组合的知识可以算出,当所需要取光盘个数为n时,那么可用的取盘的路径条数为n!,例如,以上所需要取光盘个数为7,那个可选的路径数目为5040条!为了讨论方便,我们减小取盘数目,假
44、设取盘数目为3个,见如下图:图6.2需要取个光盘时表示图(圆圈表示需要取的光盘,三角形代表当前取盘机构的位置)可以算出上图可选的路径数目为3!=6。问题需要求取总距离最短的路径,那么就必须有一个权衡路径的量。在本算法中,定义光盘之间的距离为,其中是以装置一个端点为原点时,第i个光盘的坐标,由于实际中不可能测量每个光盘到原点的位置,我们利用光盘存放的位置信息作为坐标。例如,上图中光盘C的坐标为(9,3),光盘B的坐标为(3,2)。那么光盘B和光盘C的距离L=|9-3|+|3-2|=7。可是在实际中光盘横向与纵向的比例不可能是1:1,在计算纵向坐标时应该把位置信息乘上一个大于零的比例系数K,所以最
45、终的计算公式应该为,因为K是一个任意致,可以假设K=1。利用上图虽然可以表示各个光盘的位置信息,但还不够直观,利用图的概念和以上定义的距离信息,可以得到以上坐标图的等效加权图如下:图6.3 加权图表示光盘位置其中线条之间数据表示两个点之间的距离。1,2,3,4表示需要走过的各个节点,起点规定为1号节点。2)基于回溯法的最短路径探究前面提到,当需要取的光盘个数为n时,可选路径数目为n!,当需要取的光盘数目为10个时,可选路径达到10!=3628800。所以必须采用一个系统的方法来选取最优路径。这里采用回溯法来实现。回溯法有“通用解题法”之称。用它可以系统地搜索问题的所有解。回溯法是一个既带有系统
46、性又带有跳跃性的搜索算法。它在问题的解空间树中,按深度优先策略,从根结点出发搜索解空间树。算法搜索至解空间树的任一结点时,先判断该结点是否包含问题的解。如果肯定不包含,则跳过对以该结点为根的子树的搜索,逐层向其祖先结点回溯;否则,进入该子树,继续按深度优先策略搜索。回溯法求解时,只要搜索到问题的一个解就可结束。3)问题的解空间用回溯法解问题时,应该明确定义问题的解空间。问题的解空间至少应该包含问题的一个(最优)解。例如,对图6.4所示,当需要取3个光盘时,按光盘序号,可选的路径为(1,2,3,4),(1,2,4,3),(1,3,4,2),(1,3,2,4),(1,4,2,3),(1,4,3,2
47、),他们共同构成一个解空间。定义了问题的解空间后,还应该将解空间很好地组织起来,使得能用回溯法方便地搜索整个解空间。通常将解空间组织成树的形式。对于图6.3所示,利用解空间树表示如图6.4所示:图6.4解空间树表示其中,AQ为树的各个结点,结点间数字表示实际经过的光盘编号和到达这个光盘需要的路径长度。例如从分支(A,B,C,F,L)表示遍历顺序为(1,2,3,4),对应路径长度为5,3,7,总共路程为15。4)回溯法的求解思路确定了解空间的组织结构后,回溯法从开始结点(根结点)出发,以深度优先方式搜索整个解空间。这个开始结点成为活结点,同时成为当前的扩展结点。在当前扩展结点出,搜索向纵深方向移动至一个新的结点。这个结点成为新的活结点,并成为当前扩展结点。如果在当前扩展结点处不能再向纵深方向移动,则当前扩展结点就成为死结点。此时,应该往回移动(回溯)至最近的活结点处,并使这个活结点成为当前扩展结点。回溯法以这种工作方式递归地在解空间中搜索,直至找到所需求的解或者解空间中已无活动结点为止。对图6.4所示的解空间树,回溯法找最短路劲时,从解空间树的根节点A出发,搜索至B,C,F,L。在叶结点