步进电机在数控机床、医疗器械、仪器仪表等自动或半自动设备中得到了广泛应用。用计算机控制步进电机的通常作法是采用步进控制卡,系统构成如图1所示[1][2]。其中Pulse、Dir分别为控制电机的转换步数和旋转方向的信号;CWL(Clock Wise Limit)、CCWL(Counter Clock Wise Limit)分别为电机顺、逆时针旋转的限位信号;ORG为定位信号。
这种方法不仅成本较高,而且不便于操作。在计算机扩展槽上安装控制卡,必需打开机箱才能操作,而且在小型平板电脑和嵌入式电脑中根本没有安装控制卡的空间和扩展槽。将计算机串行口二次开发,用于控制步进电机,代替控制卡的作用,具有成本低、操作简单、兼容性好等优点。
1 RS232串行口及编程
计算机串行接口采用RS232标准:规定逻辑1的电平为-3~-15V,逻辑0的电平为+3~+15V,常用的信号有8个(接口为DB9M插座时,引脚号如表1所示),其中RXD、TXD为收、发数据,可与RS232串行
1.1 硬件编程法
直接使用端口的输入、输出(I/O)函数对串行口的控制电路进行编程。适用于DOS及Windows平台(Windows Me以前的各版本),但在基于NT技术构建的操作系统(Windows NT、Windows 2000、Windows XP等)中因不允许用户程序直接操作硬件而不适用。常用的端口输入、输出函数(指令)有:汇编语言的IN、OUT指令及软中断调用控制工程网版权所有,C语言的inport()、outport()、inportb()、outportb(),C++的_inp()、_outp()等。
计算机串行口采用Intel 8250异步串行通讯组件构成,COM1、COM2、COM3、COM4的基地址分别为16#3F8(16进制数3F8www.cechina.cn,表示法下同)、16#2F8、16#3E8、16E2E8www.cechina.cn,波特率因子(DR)计算方法为:DR=1.8432×1000000/16B,8250编程请见参考文献[3]。
1.2 文件操作法[4]
文件操作法是将串行口作为系统的一个文件来处理,通过对这个文件的读、写操作引发串口对数据进行收、发动作。这种方法在DOS、Windows、Windows NT、Windows 2000及Windows XP等平台下都能正常工作。例如在BASIC语言中可用语句:OPEN “COM1,1200,n,8www.cechina.cn,1,rs,cs,ds,cd”AS #1将串行口COM1作为文件#1进行读写操作。在VC++中,可用CreateFile()、BuildCommDCB()、Read()、Write()、EscapeCOMMFunction()等函数将串行口作为文件进行操作。
1.3 串口控件法
用VB及VC++编程时,可用控件对串行口进行编程。这种方法通用性好,在Windows、Windows NT、Windows2000及Windows XP等平台下都能正常工作。在VB中CONTROL ENGINEERING China版权所有,使用MSCOMM控件;在VC++下使用Microsoft Communication Control这一ActiveX类控件。串口控制使用方法请参考MSDN。
2 串行口步进电机控制器工作原理
2.1 串行口发送数据过程研究
在串行口发送数据的过程中,串行口先发送起始位(逻辑0)进行同步,接着按规定的波特率(B)从低位到高位依次发送通讯数据的各二进制位,最后发送停止位(逻辑1)。表示每个二进制位的逻辑电平在TXD端的保持时间为1/B秒。如果按8位数据位、1位停止位、无奇偶校验方式发送数据,所发送数据的二进制位是0、1交替的。例如:数据取01010101(即16进制的16#55),其发送过程如图2中5所示,每发送一个字节CONTROL ENGINEERING China版权所有,在TXD端发出5个脉冲,周期T=2/B,即频率f=B/2。改变发送数据的各二进制位,便可在TXD端得到不同的波形。图2示出欲产生1~5个脉冲时应发出的数据