微机接口课程设计报告

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

利用步进电机模拟小车的运行

1、需求分析及实验目的:

此次实验的需求分析如下:

1.计算每次加电代码输入步进电机以后小车(步进电机)行进的距离(弧度,并

按照一定的比例换算成长度)

2.利用8个开关设计8个档位,其中一个倒档,6个进档,1个静止档,不同档

位设置不同的行进速度,其中出静止档外倒档最低;

3.在屏幕上显示2个窗口,分别显示小车当前的速度与行驶里程,其中行驶里程

与程序运行的次数无关;

4.利用8个led显示当前的档位状况,其中:

a.倒档时,某一个等闪烁

b.静止档是,全部等闪烁

5.另外设计一种小车的自动行驶模式,在这种模式下,小车不通过开关控制档位,

而通过一个窗口的输入小车行进模式(请自行设计行进代码),实现小车在不同

档位下运行的时间、次序。

实验要求同学能够理解8255A的0工作方式下通过时序对步进电机的工作流程的控制,同时将流水灯当作档位的控制开关,能够更好的体现对接口芯片的

控制过程,而自动方式控制步进电机的运转,题目非常的开放,能够充分的发挥

同学们的想象空间,同学们可以通过不同的编码形式来完成这个题目。

2、设计

2.0 8255A芯片简介

由于此次的设计涉及到8255A接口芯片的编程,因此在这里先对8255A 的接口芯片做简要的介绍:8255A是一个具有两个8位和两个4位并行I/O端

口的接口芯片,它为Intle系列的CPU与外部设备之间提供TTL电平兼容的

接口,以及需要同时两位以上信息传送的一切形式的并行接口。在学校的实验

平台上它的命令口的地址为0x0c803,PA,PB,PC口的端口地址分别为

0x0c800,0x0c801,0x0c802。

其引脚图和内部框图分别如下:

2.1流水灯的控制平台的介绍:

在学校的实验平台上LED灯的端口地址是0x0c860,通过控制LED输入电平的高低来控制LED灯的明与暗,而电平的高低是通过想端口写的数据来体现的,例如向端口写1就代表输入的是高电平而0则代表的是低电平。因而要实现需求分析中的流水灯的各种功能,只需要控制各端口的电平的高低,也就是对端口写数据的不同。灯的闪烁的实现就是在LED灯全明与全暗之间设置一个延迟,这样观察的效果就是闪烁,而从左至右和从右至左的变化是通过将初始值(10h和01h)进行向左移位或者向右移位即可。

图3:实验平台简介

2.2设计思想:

在以前的上机实验中我们分别做过流水灯和步进电机的实验,而且都成功的完成了这两次实验,因此此次课程设计算的上是对以前做的实验的一次综合,而创新点就在于在自动控制方式下编码与解码的问题,因此在设计思想中,手动控制这一块我将只做简要介绍,详细介绍的是在自动控制中所采用的方法。

手动控制:因为时间和速度都是按照一定的比例来完成的,所以不同档位的实现也就是LED灯的控制开关在不同状态下时延迟时间不同的控制,同时在不同的延迟时间下给每个档位指定一个速度,延迟长的速度小,延迟短的速度大,这样便能实现对不同档位的控制,而灯的闪烁也只是在灯的明与暗之间加上一个延迟的时间便能完成,总体来说手动控制的大体思想较为简单,而难点主要是在档位切换的问题,开关的拔动和档位的变换以及电机做出的反应这期间的时间差应该越小越好,因而在程序的书写过程中我使用的Switch…Case…语句,电机每走一步就进行一次判断,而不是用For循环来控制,这样能将时间差缩短到很小的范围内。

表1:相序表的设计

绕组与数据线的连接及八拍数据的表示

D C B A

PA7 PA6 PA5 PA4 PA3 PA2 PA1 PA0

0 0 0 0 0 1 0 1

自动控制:档位的切换和LED 灯的明暗控制和手动控制肯定是没有什么区别的,而自动控制的主要难点在于对控制序列的定义及解析,也就是将不同的档位及在该档位下行进的步数进行的定义。我的解决思路是用a b c d e f g h 八个不同的字母来分别表示不同的档位,同时用数字表示在该档位下运行的步骤,在得知档位和数字后,就只需要用循环来控制在当前档位下的行进步数便能完成在自动控制下的工作。控制序列的输入在我的程序中并不是用常用的文本输入(实验后发现文本输入更为简单而不需要进行数字的转换,这里走了弯路,但是还是按照最初自己的设计思路来说明的),我是从编辑框的控件进行输入的,由于编辑框的数据相当与字符串的类型,因而并不能对数字进行识别(即在编辑框中输入123,程序中只能分别识别数字1 2 3 而不是整数123 而文本输入便能解决这个问题,这就是我说的弯路所在),同时在序列输入完毕后我会对该序列进行遍历,如果遇到不是a~h 或者不是0~9中的字符便提示该序列是非法序列,否则用两个数组对字母或者数字分别进行存储,同时用计数器进行计数来判别字母或者数字是否相对应,一个字母应该相对应的对应一个数字,这样才算完整的序列。序列判别完毕后,接下来的工作就是用序列来控制电机的自动运转,即控制在整数步骤内完成相应的电机运转操作,具体的运转操作还是和手动控制一样。

值得注意的是无论是自动测试还是手动测试,都要求用文件来保存小车行驶的里程,以便下次程序运行时开始重新调用,因此在程序中涉及到了读、写文件的操作,我的设计过程中,都是在电机没运转一步时便开始重新将里程写入文件,而读文件是在每次程序开始重新运行时。

2.3基于MFC 的程序具体的设计步骤: (1)主程序框图如下:

主程序的设计框图如下:

0 0 0 1 0 1 0 1 0 0 0 1 0 1 0 0 0 1 0 1 0 1 0 0 0 1 0 1 0 0 0 0 0 1 0 1 0 0 0 1 0 1 0 0 0 0 0 1 0 1

1

1

进入主程序

手动? 进入手动测试部分,用户手动控制测序的测试过程

用户输入运行序列,程序自动运行

相关文档
最新文档