精品基于串口通信的步进电机调速系统设计-定 - 图文 下载本文

内蒙古科技大学毕业设计说明书(毕业论文)

表2.2 步进电机绕组通电顺序表

地址 指针 代码 选通信号 步进电机绕组通电顺序 A 0 0 1 1 1 0 B 1 0 0 0 1 1 C 1 1 1 0 0 0 MOTB+1 MOTB+1 MOTB+1 MOTB+1 MOTB+1 MOTB+1 1 2 3 4 5 6 0BH 09H 0DH 0CH 0EH 0AH 1 1 1 1 1 1 步进电机设置一个指针寄存器,初始化时使指针指向分配表的表首。步进电机需要正向运行一步时,指针下移一行,同时输出该行的状态,当指针超出分配表表尾时自动回到表首;步进电机反向运行时,指针上移一行,并输出该行的脉冲值,当指针超出表首时又自动回到表尾。脉冲分配子程序如图2.16所示:

电动机脉冲分配子程序Y正向运转?N指针加1指针减1指针大于表尾地址?NY指针修改到表首指针小于表尾地址?NY指针修改到表尾输出脉冲信号至P口返回

图2.16 脉冲分配子程序流程图

24

内蒙古科技大学毕业设计说明书(毕业论文)

2.5.2.2步进电机的加减速

用微机对步进电机进行加减速控制,实际上就是改变输出脉冲的时间间隔。升速时使脉冲串逐渐加密,减速时使脉冲串逐渐疏稀。微机用定时器中断方式来控制电动机变速时,实际上就是不断改变定时器装载值的大小。为了减少美不计算装载值的时间,系统设计时就把各离散点的速度所需的装载值固化在系统的ROM中,系统运行中用查表方法查出所需的装载值,从而大大减少占用CPU时间,提高系统响应速度。步进电机的加减速程序流程如图2.17所示:

改变P0口状态加速?N减速步数减1N正转?Y加速步数减1Y绝对位置减1绝对位置加1Y越界?NN加速一级计算步数减速一级计算步数N加速步数=0?减速步数=0?停止Y恒速Y恒速 图2.17步进电机的加减速程序流程图

25

内蒙古科技大学毕业设计说明书(毕业论文)

第三章 GUI设计

3.1Visual C++

Visual C++提供了可以用于创建各种应用程序的环境,可以帮助开发满足各种商业需求的应用程,提供了各种功能和工具。 Visual C++特色包括: (1).本机COM支持

可视化的COM编辑,与位置和语言无关的COM浏览,MFC模板,以及编译

器支持简化了基于组件的开发。 (2).Visual Schema Disigner

通过从桌面远程分析Microsoft SQL Server数据库的模式(Schema),提高了数

据库应用程序开发的效率。 (3).Microsoft Transaction Server

Microsoft Transaction Server帮助建立高性能的基于事务的应用程序。 (4).活动文档服务器支持

Visual C++提供了创建活动文档服务器的向导和可编程支持,这些活动文档服

务器可以在任何活动文档服务器中调用。 Visual C++的开发环境包括:

(1).帮助管理工程的工程工作区。 (2).编译工程的工具。

(3).设计用户界面和创建资源的编译器。

(4).共享的开发组件,包括一个优化的编译器,一个增量链接器和一个集成的调试器。

Visual C++有三个版本:

标准版,除了代码优化,性能分析器(Profiler)和与MFC库的静态链接外,标准版包含了专业版的所有其它功能。

专业版,能够开发和发布商用等级的软件产品。其功能包括VFC,Active Template Library(ATL,活动模板库),COM和OLE DB。

企业版,提供了建立和验证企业级COM应用程序的工具和组件。该版本中包含专

26

内蒙古科技大学毕业设计说明书(毕业论文)

业版中的所有功能,另外还包括Microsoft Transaction Server,SQL编辑器和调试器,Microsoft Visual SourceSafe,以及对ActiveX对象(ADO)和远程数据对象(RDO)的支持。

3.2步进电机速度控制界面设计

实现串行通信的两种方法:

方法一:使用VC++提供的串行通信控件MSComm 。

首先,在对话框中创建通信控件,若Control工具栏中缺少该控件,可通过菜单Project --> Add to Project --> Components and Control插入即可,再将该控件从工具箱中拉到对话框中。此时,你只需要关心控件提供的对 Windows 通讯驱动程序的 API 函数的接口。换句话说,只需要设置和监视MSComm控件的属性和事件。打开所需串口后,需要考虑串口通信的时机。在接收或发送数据过程中,可能需要监视并响应一些事件和错误,所以事件驱动是处理串行端口交互作用的一种非常有效的方法。捕捉并检查通讯事件和错误的值。发生通讯事件或错误时,将触发串口事件,串口属性的值将被改变,应用程序检查受到的消息属性值并作出相应的反应。

方法二:在单线程中实现自定义的串口通信类

控件简单易用,但由于必须拿到对话框中使用,在一些需要在线程中实现通信的应用场合,控件的使用显得捉襟见肘。此时,若能够按不同需要定制灵活的串口通信类将弥补控件的不足。实现步骤: (1) 打开串口,获取串口资源句柄 (2)串口设置

(3)串口读写操作,一般采用编写自己的数据I/O C++函数。若对端口数据的响应时间要求较严格,可采用事件驱动I/O读写,Windows定义了9种串口通 信事件,较常用的有:

EV_RXCHAR: 接收到一个字节,并放入输入缓冲区。 EV_RXEMPTY: 输出缓冲区中的最后一个字符发送出去。 EV_RXFLAG: 接收到事件字符,放入输入缓冲区。

程序采用上述第二种方法,编写了基于Windows消息传递与串口操作的基础类,并利用此类编写适合本次毕业设计的功能类。

应用程序送过来的数据作为一个按照通信协议进行分帧,切割后为每帧加上帧头和校验和,放入内部缓冲区准备发送;在接受端,分帧的数据去掉帧头重新归到接受缓冲

27