基于Windows 95的步进电机控制卡实时驱动

   2019-07-03 43
核心提示:[db:简介]

摘要:介绍一种工业用计算机IPC机与步进电机控制卡中的单片机之间通讯接口电路原理,并用动态链接库方法实现Windows 95环境下步进电机控制卡的实时驱动程序。
关键词:Windows 95;步进电机控制卡;动态链接库;实时控制
中图分类号:TP273;TP311.11
文献标识码:B
文章编号:1001-2265(1999)10-0021-03

Real-time drive on step-motor control card based on Windows 95

Li Qihao Wang Jianbing

Abstract:In this paper,a principle of communication interface circuit between IPC and step-motor control card is described,and a real-time driver of step-motor control card programmed with DLL under Windows 95 is presented.
Key words:Windows 95;step-motor control card;DLL;real-time control

1 引言
  Windows 95是Microsoft公司推出的一个彻底的32位的图形环境操作系统。在Windows 95环境下开发实时控制系统可以充分利用Windows 95丰富的资源,缩短产品的开发周期,实现标准统一的Windows 95界面,使研究人员致力于关键控制软件和控制模板的开发。
  如何在Windows 95环境下编写特定硬件的实时驱动程序,是实现控制系统的关键。在Windows 95环境下,虚拟机管理器(VMM)提供内存管理和异常服务管理等服务。虚拟设备驱动程序(VxD)通过对计算机的各种硬件和支撑软件进行管理以实现对设备无关的VMM的支持。用户新增硬件(如控制卡)时必须有相应的设备驱动程序支持,而目前为止我们的控制卡所提供的驱动程序是DOS下用C语言编写的16位应用程序,在Windows 95的32位工作方式下是无法运行此程序的,这样我们必须用Windows 95设备驱动程序工具包DDK (Device Develop Kits)创建设备驱动程序和VxD所需的头文件。本文提出了一种方法,在不采用DDK进行设备驱动程序开发的情况下,我们也可以用步进电机控制卡完成对数控机床的控制。
2 通信接口原理
  我们开发的实时控制系统是铣床数控系统。考虑到本铣床控系统软件包括译码、刀具半径补偿、插补运算和速度控制等模块,为了减轻IPC机进行大量的数据运算和处理工作,在硬件设计方面设计了一个步进电机控制卡(含有8031单片机),构成一个包括上、上拉机的数控系统。上位机负责整个系统的综合管理、人机交换和下位机的通讯等。上位机软件主要实现初始化、加工程序文件管理、数据处理等功能;下位机软件主要实现插补运算和步进电机位置及速度控制等功能。上、下位机通过中断方式或查询方式进行并行通讯。
  如图所示为通信接口电路图。图中左边总线为IPC机的AT总线(80286以上机型),电路板插入IPC机的I/O扩展槽上,两片8255A完成8031和IPC机间的并行通信接口,27512为EPROM,存放8031的程序,74LS373为地址锁存器,74LS138(1)输出8255A(2)的片选信号,74LS138(2)输出8255A(1)的片选信号(图中未画出)。

图 通信电路图

  当下位机要向上位机发送数据时,首先读取8255A(1)的PC4,而PC4连接8255A(2)的IBF,若PC4为1时,说明8255A(2)中的数据还未被IPC机取走,8031继续循环检测PC4。若PC4为0时,则8255A(2)的IBF为0,说明8255A(2)中的数据已被IPC机取走,8031可以发送新数据了。8031写一数据后(有一下跳沿),由8255A的工作原理并结合电路图可知,8255A(1)的变为0,引起8255A(2)的下跳,的下跳会引起IBF上升,从而引起8255A(1)的ACK变为0,这表明8255A(1)中的数据已经传到8255A(2)的寄存器中了,而的下跳又会引起上升,从而引起8255A(2)的上升,会产生INTR的中断请求信号,IPC机接受此中断或查询此引脚,将数据读入内存中(此时有一下跳),引起IBF恢复为0,8255A(1)的PC4也为0,为下次传输数据作好了准备。以上是8031向IPC机发送数据的全过程。由于IPC机和步进电机控制卡之间通信接口电路是对称的,IPC机发给8031数据也经过完全相同的过程,这样,IPC机和步进电机控制卡之间就可以进行双向并行通讯了。
3 软件编制
  动态链接库DLL是包含共享函数库的二进制文件,是一种基于Windows的程序模块,它是在运行时刻被装入和链接的。动态链接库中只包含供应用程序运行时装入该DLL的有关信息,并非是源代码的复制,因此在Windows下使用动态链接库可以使多个应用程序之间共享代码和资源,从而提高运行效率。我们可以借助于VC编译器,编制一个可供铣床数控系统调用的32位DLL模块,以实现对步进电机控制卡的驱动。
  按照图1的地址线接法,8255A(2)的PA、PB、PC和控制寄存器地址分别为320H、321H、322H和323H。软件可以通过对这些I/O地址的读入和写出控制步进电机控制卡,进而实现对步进电机的控制。上、下位机之间的并行通讯可以通过查询方式。
  出于本铣床数控系统是以Windows 95为软件平台,因此,我们在步进电机控制卡的驱动程序设计中,考虑到以下因素:
  (1)遵循由硬件电路设计决定的握手协议,即通过查询PC0和PC4的状态实现上位机接收反馈信息和发送数据;
  (2)既要考虑到数控系统是实时性控制系统,又要考虑到上、下位机之间通讯时有一个时间协调的问题;
  (3)下位机软件包括插补和速度控制模块,工作量较大,同时上位机接收下位机反馈信息的频率远远大于上位机向下位机发送数据的频率,因此,上位机接收下位机反馈信息时,有等待时间;
  (4)Windows 95多任务的操作系统决定了一个任务不能长时间独占系统资源,否则,极易造成系统资源耗尽、系统崩溃。
  综合上述因素,我们在上位机接收下位机数据函数中Recvcha(),用一个次数为500的循环语句查询PC4的状态,既达到通过延时接收数据,又不至于使此任务长时间独占系统资源;而在上位机向下位机发送数据函数Sendcha()中,尽管用了一个无限循环语句查询PC0的状态,由于下位机能及时接收到数据,因此不至于耗尽系统资源。
  下面给出一段用VC和汇编语言混合编程以查询方式实现的步进电机控制卡驱动程序中Recvcha()函数部分。源代码程序如下:
#include <windows.h>
#include <conio.h>
#include <ctype.h>
#define PortA8255A2 0320 ∥PA口地址
#define PortB8255A2 0321 ∥PB口地址
#define PortC8255A2 0322 ∥PC口地址
∥DDL入口函数DllEntryPoint()
BOOL WINAPI DllEntryPoint(HINSTANCE hDLL,DWORD dwReason,LPVOID Reserved)

   
   

unsigned char Recvcha(void) ∥接收数据函数

  unsigned char returnvalue;
  asm{
   mov DX,PortC8255A2 ;送PC口地址
   mov CX 500    ;置循环次数
CHECK:in AL,DX    ;循环检测PC0
test AL,001  ;PC0=1可以跳出循环
jnz GET
loop CHECK
GET:mov DX,PortB8255A2  ;取PB端口数
in AL,DX
mov returnvalue,AL

  return (returnvalue);  ∥返回所取数据

  将生成的动态链接库文件放在Windows 95的系统目录或应用程序所在的目录下,程序就可以使用Recvcha()和Sendcha()这两个函数进行上、下机之间数据传输。
4 结论
  利用以上方法,我们很好地解决了Windows 95环境下IPC机和步进电机控制卡之间的并行通讯问题。实验表明,步进电机控制卡工作稳定,上、下机之间数据传递安全、可靠,解决了在不采用DDK进行设备驱动程序开发的情况下,实现用步进电机控制卡完成对数控机床的控制。

 
举报收藏 0打赏 0
 
更多>同类数控技术
推荐图文
推荐数控技术
点击排行
网站首页  |  关于我们  |  升级会员  |  联系客服  |  广告合作  |  广告位图  |  使用协议  |  隐私政策  |  版权隐私  |  网站地图  |  排名推广  |  广告服务  |  RSS订阅  |  违规举报  |  蜀ICP备2021024440号