基于计算机控制的光碟智能存取装置研制论文(编辑修改稿)内容摘要:

用了第三种方案。 我首先在万用板上焊接 16 个光电管作为测试,接着利用单片机控制译码器,轮流地开关锁存器的使能端口,八个一组地读取光电管的信号。 经过测试和实际调整,基本能够实现我的要求。 然后是指示灯的电路设计。 在我的设想之中,装置进行取盘操作的随后对应光碟的位置的 LED指示灯会亮起来, 因为 装置对 LED指示灯 的 即时性 要求不是 很高,小何哥哥提议利用单片机的 SPI 口+串行移位芯片实现 来实现 指示灯的功能。 我上网查了一下,发现了有一个利用 八位移位输出芯片在 LED 大屏幕显示中的应用 实例,于是,我就参照了一下他的电路 样式,在小何哥哥的指导之下完成了指示灯的万 用板电路 (如图 所示)。 经过测试,效果基本满意。 图 指示灯的万用板电路 21 为了让整个装置运行更加稳定,更加美观,按照之前设计方案,我委托工厂把光电检测电路和指示灯电路制作成 PCB 板。 整个 控制系统结构图如下: 图 控制系统结构 设置 控制 命令格式 PC 作为整个系统的控制中心,在设计中要解决的一个重点是如何利用软件控制整套系统。 由于控制部分是以单片机为核心的,那么问题就转变为如何是管理软件与单片机有效通信交流。 这部分一开始时我还真没有头绪,因为单片机主要是利用串口与电脑通信的,而该 如何处理发送数据才能实现与单片机的沟通呢。 经过在网上一些论坛发帖咨询,还有与指导老师的讨论,我才形成了现在的那种以控制标识符,数据内容,命令结束标志为组合的控制信息。 例如上文所述,当在软件上按取盘按钮,那么电脑会自动形成控制信息如下“ G+Address+E”其中, G 表示 GET,就是说要取盘, Address 是需要取盘的位置信息, E 是命令结束标志符。 控制命令 地址 结束标志 设计命令格式 开始的时候,我设计的系统只能取一个光盘,那么它的命令只有 22 “ G+Address”,可是到了后面,系统具有取多盘的功能 ,就是说所要去的的光盘个数的不确定的,那么单片机在读取位置信息时就要有一个结束标志才能判断出来。 所以要加上一个“ E”来坐标标识符。 而在实际中, G 是用十六进制的 0XFA表示, E 用十六进制的 0XFF 表示。 下面是利用串口助手接受软件发送数据。 利用它可以很方便地对串口发送数据进行监控,这样就可以在没有与单片机控制系统连接下也可以对软件进行调节。 图 取盘时软件发送的数据 精度控制 利用我自己的单片机最小系统板和陈师傅介绍的驱动模块,我已经成功地控制步进电机 根据 我的设想前进和后退,但是 步进 电机是按照脉冲数目 来控制的,而我电脑上保存的是光盘位置,还有因为光盘的间距很小,如何准确的把光碟推出来,这些问题 还值得我去思考。 精度的调试主要经过了三个阶段。 阶段一: 光碟槽在加工的时候是按照均匀位置距离来加工的,所以一开始,我按照全 23 程线性化的方法编写单片机控制程序。 因为光盘与光盘之间的距离为 3mm,每个光盘的厚度为 ,从理论上说,丝杆上步进电机的步角为 176。 , 每圈需要的脉冲数为 200。 当知道丝杆每一圈前进的距离,加上光盘厚度与间距,就可以计算出对应光盘位置所需要的脉冲。 其表达式为 120DD/200P n( )l,其中, 1D 为光盘厚度, 2D 为光盘间距, 12DD 就是每个光盘间的实际距离。 0l 为丝杆每一圈的前进距离,因为我们每一圈需要 200 个脉冲,那么, 0/200l 就是每个脉冲前进的距离。 n 是当前要取的光盘位置, 代入上式就能计算出理论需要的脉冲个数 P。 当我满怀信心去验证我的实验成果的时候,我发现步进电机并没有到达相应的位置。 在咨询了家长后,我明白,在实际的加工过程中,是不可能实现光碟槽位置的均匀分布的。 阶段 二: 通过网络的问询,我采用了一种新方法 —— 分段线性化。 我 首先测量一组光盘位置与对应脉冲个数的数据。 可以肯定,要到达这些位置,需要走的脉冲个数是知道的。 对于点与点之间的区域,近似认为是按线性变化的。 这种方法计算脉冲的表达式为 1 ()i i iP P K x x   ,其中, iP 是当前需要取的光盘所在分段区域中起点位置所对应的脉冲数, ix 是其坐标位置。 1iK 是光盘所在分段区域中的近似斜率,计算公式为 iiyi xk, x 为当前需要取的光盘位置。 每个分段区域中的近似斜率计算表达式为 111 iiyyi xxK   , 1,iixx 为分段区域起点与终点坐标, 1,iiyy 为其对应的脉冲个数。 经过实际调试,利用以上方法能够准确的定位到大部分的位置,但在某些地方,还是不能准确定位。 阶段 三: 通过向指导老师的咨询与自己慎重的考虑,我认为出现的问题主要有两点。 第一可能是我测量时估计量不准确造成 的 ,第二是这段范围内的光盘存放位置的不均匀比较明显 而造成的。 我又对我的控制方法进行了改进。 我先 在这些精度比较差的范围我重新测量了位置与脉冲对应关系,然后对于一个关键的参数 K,我修改了计算方法。 原来的 K 在同一段范围内是不变的,现在我把它改为一个动态值, 定义脉冲计算公式为 *( ( ))iiP k k x x x   ,其中 x 为需要取的光盘位置, 24 ix 为目标光盘所在分段区域的起点坐标, ik 为它的斜率,定义为 iiyi xk , *k 为当前分段中斜率的变化率,其定义 为 11* iikkxxk , 1,iixx 为对应分段起始和结束端点坐标, 1,iikk 为他们对应的斜率。 在实际中,驱动器选择 64 分频下,测到的位置与对应脉冲关系如下: X1 X2 X3 X4 X5 X6 坐标 8 51 109 脉冲数 20366 106588 145046 246845 311927 373835 利用斜率分段线性化 的流程框图如下: 图 利用斜率分段线性化 的流程框图 25 根据斜率分段线性化思路,先把整个区域分成六段,每段的端点位置分别为address_f 和 address_b, address_f 是首端点,所对应测得的脉冲数为 pluse_f, address_b 为末端点 ,所对应测得的脉冲数为 pluse_b。 其实这里对于每个分段来说,它的末端点就是下一分段的首端点。 为了简化说明,这里设 ix 为每段首端点对应的位置, iy 为其对应的脉冲个数。 这样, 利用以上定义式*( ( ) )iiP k k x x x   ,就可以计算出每个光盘位置对应的脉冲数了。 利用分段线性化和斜率分段线性化画出曲线如下: 图 利用以上两种方法 画 出来的曲线 图 曲线局部放大(虚线为分段线性化拟合,实线为斜率分段线性化拟合) 可以看出,利用斜率分段线性化拟合后,脉冲数量的增加是按端点斜率的变化趋势改变的。 经过实际检测,利用以上办法,能够很好解决误差问题,取盘精度基本满意。 26 我 在原来设计中, 装置每次只能取一个光盘, 当完成取盘 操作后就自动回复到 初始 零位。 若使用者 一次 要取的盘很多 时 ,这样的操作 就 很浪费时间。 我当时就在想,是否 既可以 令 装置 一次性取多盘,而且 可以 令 装置记录当前位置,节省复位时间。 这个部分从想法的提出,到实现经过了很漫长的过程。 我 先 利用 单片机里的EEPROM 存储了每次取盘完成后的当前位置,解决了每次取盘操作后复位的问题,接着我再着力解决取多盘 的问题。 开始的时候,我是按照用户选择取盘的顺序来实现取盘的,就是说用户先点击 1 号盘,再点击 2 号盘,再点击 3 号盘,那么系统就会按照 1, 2, 3 的顺序来取出光盘,但在实际调试过程中发现,很多时候取盘机构都走了重复的路线。 我就想能不能设计出一种有效的方法,让取盘机构在最短的时间内把光盘都取出来呢。 顺着这个思路,我在网上找了很多资料,包括动态规划,最优设计,贪心算法等等,但是看到这些高深的东西,我真的不知道如何下手。 通过和指导老师交流后,老师推荐了我两本书看,包括《如何进行思考》,《算法设计与分析》这两本书对于一些基本的算法 做了详细的介绍,还有具体的例子。 我利用课余时间一点一点地看,老师也把书上的部分内容给我进行讲解,我发现利用书上的算法,可以解决实际中很多难题。 例如旅行售货员问题,最大团问题,这对于我思考其他问题带来很大的启发。 书本让我理解了什么叫做树,什么是图,如何对树进行遍历,如何寻找最小生成树等。 说实话,书上有些内容我还不是很理解,但通过它们,我渐渐发现我需要解决的关于在对短时间内实现取多盘的问题应该属于最优路径问题,与旅行售货员问题有点相似,但又有所区别,它要寻找的是一条回路,而我的问题是一条停止在最优端点的最短路径。 这点的不同也使得我对算法的改进提供了思路。 我设计的取盘最优路径算法 1)取多盘 问题的进一步阐述: 在电机速度不变的情况下,最短时间内把选定的光盘全部取出的问题 实际 等效于一个最短路径问题,就是要找出一个最短路径,让取盘机构经过各个目标光 27 盘存放点,并把光盘推出到指定位置。 就像下面的示意图 (图 ): 图 圆圈表示需要取的光盘,三角形代表当前取盘机构的位置 上图表示一个 3 层的光盘存放机构,每层可以存放 10 张光盘。 其中圆形表示需要取的光盘,三角形表示取盘机构当前的位置,事实上,取盘机构的位置 是上一次取盘过程中取最后一张光盘的位置。 由排列组合的知识可以算出,当所需要取光盘个数为 n 时,那么可用的取盘的路径条数为 n!,例如,以上所需要取光盘个数为 7,那个可选的路径数目为 5040 条。 为了讨论方便,我们减小取盘数目,假设取盘数目为 3 个,见如下图: 图 需要取3个光盘时表示图 ( 圆圈表示需要取的光盘,三角形代表当前取盘机构的位置 ) 可以算出上图可选的路径数目为 3。 =6。 问题需要求取总距离最短的路径,那么就必须有一个权衡路径的量。 在本 算法中, 定义光盘之间的距离为 28 1 2 1 2L | | | |x x y y   ,其中 ( , )iixy 是以装置一个端点为原点时,第 i 个光盘的坐标,由于实际中不可能测量每 个光盘到原点的位置,我们利用光盘存放的位置信息作为坐标。 例如,上图中光盘 C 的坐标为( 9, 3),光盘 B的坐标为( 3, 2)。 那么光盘 B和光盘 C的距离 L=|93|+|32|=7。 可是在实际中光盘横向与纵向的比例不可能是 1: 1,在计算纵向坐标时应该把位置信息乘上一个 大于零的 比例系数 K,所以最终的计算公式应该为 1 2 1 2L | | | |x x K y y   , 因为 K 是一个任意致,可以假设 K=1。 利用上图虽然可以表示各个光盘的位置信息,但还不够直观,利用图的概念 和 以上定义的距离信息,可以得到以上坐标图的等效加权图如下: 图 加权图表示光盘位置 其中线条之间数据表示两个点之间的距离。 1, 2, 3, 4 表示需要走过的各个节点,起点规定为 1号节点。 2) 基于回溯法的最短路径探究 前面提到, 当需要取的光盘 个数 为 n时,可选路径数目为 n!,当需要取的光盘数目为 10个时,可选路径达到 10。 =3628800。 所以必须采用一个系统的方法来选取最优路径。 这里 采用回溯法来实现。 回溯 法有“通用解题法”之称。 用它可以系统地搜索问题的所有解。 回溯法是一个既带有系统性又带有跳跃性的搜索算法。 它 在问题的解空间树中,按深度优先策略,从根结点出发搜索解空间树。 算法搜索至解空间树的任一结点时,先判断该结点是否包含问题的解。 如果肯定不包含,则跳过对以该结点为根的子树的搜索,逐层向其祖先结点回溯;否则,进入该子树,继续按深度优先策略搜索。 回溯法求解时,只要搜索到问题的一个解就可结束。 29 3) 问题的解空间 用回溯法解问题时,应该明确定义问题的解空间。 问题的解空间至少应该包含问题的一个(最优)解。 例如,对图 所示,当需要取 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),他们共同构成一个解空间。 定义了问题的解空间后,还应该将解空间很好地组织起来,使得能用回溯法方便地搜索整个解空间。 通常将解空间组织成树的形式。 对于图 所示,利用解空间树表示如图 : 图 解空间树表示 其中, A— Q 为树的各个结点,结点间数字表示实际经过的光盘编号和到达这个光盘需要的路径长度。 例如从分支( A, B, C, F, L)表示遍历顺序为( 1, 2,3, 4),对应路径长度为 5, 3, 7,总共路程为 15。 4) 回溯法的求解思路 确定了解空间的组织结构后,回溯法从开始结点(根结点)出发,以深度优先方式搜索整个解空间。 这个开始结点成为活结点,同时成为当前的扩展结点。 在当前扩展结点出,搜索向纵深方向移动至一个新的结点。 这个结点成为新的活结点,并成为当前扩展结点。 如果在当前扩展结点处不能再向纵深方向移动,则当前扩展结点就成为死结点。 此时,应该往回移动(回溯)至最近的活结点处, 30。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。