关键词:串行口;步进电机;运动控制
Abstract: a new method about the two-dimension coordinate contral system by the serial port of the personal-computer is introduced. this method is convenient for changing the motion speed of the step motor through chaning the baud rate of the serial port, and contraling the motion direction and getting the position information of the motor by contraling the input or output signal of the Modem state in the RS232 serial port. This new method using logic circult to realising the contraling function is more simple, so there is no need of programming, and can improve the reliability.
Keywords: serial port、step moter、motion control
1. 引言
步进电机是一种将电脉冲转化为角位移的执行机构。当步进驱动器接收到一个脉冲信号,它就驱动步进电机按设定的方向转动一个固定的角度(称为“步距角”),它的旋转是以固定的角度一步一步运行的。可以通过控制脉冲个数来控制角位移量,从而达到准确定位的目的;同时可以通过控制脉冲频率来控制电机转动的速度和加速度,从而达到调速的目的。步进电机可以作为一种控制用的特种电机,利用其没有积累误差(精度为100%)的特点,广泛应用于各种开环控制。步进电机在数控机床、医疗器械、仪器仪表等自动或半自动设备中得到了广泛应用。用计算机控制步进电机的通常作法是采用步进控制卡, 这种方法不仅成本较高,而且不便于操作。在计算机扩展槽上安装控制卡,必需打开机箱才能操作,而且在小型平板电脑和嵌入式电脑中根本没有安装控制卡的空间和扩展槽。进年来出现了将计算机串行口二次开发,用于控制步进电机的技术,代替控制卡的作用,具有成本低、操作简单、兼容性好等优点。本文介绍了一种通过微机的串行口控制两维坐标定位系统的新方法。
串行口是微机系统的标准配置,在仪器仪表控制系统中得到广泛的应用。计算机串行接口采用RS232标准[1]:规定逻辑1的电平为-3~-15V,逻辑0的电平为+3~+15V,常用的信号有8个(接口为DB9M和DB25M插座时,引脚号如表1所示),其中RXD、TXD为收、发数据,可与RS232串行口设备直接进行通讯,RTS、DTR、CD、DSR、CTS、BELL为控制与检测MODEM的信号,在通讯过程中起联络与控制作用。数据格式有5、6、7、8位几种,1位起始位(逻辑0),1、1.5、或2位停止位 (逻辑1),可以选择奇校验、偶校验和无校验,常用波特率为2400、4800、7200、9600bps等。
表1 标准9针和25针串口的管脚定义
用串行口控制步进电机驱动的运动系统的一般方法是通过单片机或其它嵌入式控制系统,由计算机向单片机系统发送控制信息,单片机系统再直接控制运动系统,从而计算机可以间接的控制系统的行为。这种方法有一些缺点。比如控制缺少灵活性,往往只能按照事先定好的模式运动,不能通过控制软件任意改变。单片机要同时接受计算机命令和发送状态给计算机,又要控制运动系统,多任务并行,给程序编制带来一定麻烦。单片机程序容易跑飞,给系统可靠性带来很大威胁,甚至有时需要人工复位操作。为了克服这些缺点,在实际应用中,我们设计了一个串行口直接控制运动系统的方法。该方法不需要MCU,可以方便的通过改变串口的波特率来改变步进电机的运行速度,可以通过RS232串口中控制Modem状态的输入、输出信号来控制运动的方向和读入不同的位置信息。由于是直接控制,没有中间的处理器系统,克服了上面的缺点,降低了成本。下面介绍这种控制系统实现的方法。
2. 二维运动步进电机驱动的控制方法
步进电机驱动的二维运动定位系统中,每一个维度都是由步进电机驱动丝杠转动,丝杠再把运动转化为直线运动。如图1所示。对该系统的控制,除了要发出步进电机的方向控制和步进脉冲信号外,还要读入绝对定位用的开关信号,这样才能达到绝对坐标控制的目的。图中S1是坐标零点的限位开关,它输出高电平时,表示运动已经到了绝对零点。因为这种机械或光电开关的精度有限,所以由S1输出的零点脉冲精度不高。为了提高零点的位置精度,还设置了开关S0,步进电机每旋转一圈,它输出一个脉冲。虽然S0输出的脉冲宽度和S1比并没有什么改变,但由于丝杠的作用,使S0输出的脉冲相对于线性位置的精度大大提高。因此,零点的判断方法应该是:当向左运动时,首先判断S1是否输出高电平。如果输出高电平,表示已经基本到达零点,只是精度还要继续提高。这时继续驱动步进电机转动,判断S0是否输出高电平。如果S0输出也达到高电平,才表明真正达到了零点。开关S2是坐标最大值的限位开关,它输出高电平表明已经达到了坐标的最大值,不能再向右运动。
图1 步进电机驱动示意图
图1只是画出了一维运动的示意图,另一维的控制完全相同。下面着重讨论具体的实现方法。
3. 步进脉冲的产生和速度计算
每给步进电机的驱动器一个脉冲,步进电机就转动一步,而方向是由另外一个电平信号控制的。对于某种步进电机来说,每转动一周需要的脉冲个数是一个固定的常数n,因此,每发送一个脉冲电机转动的角度也是固定的,称为步距角s。s和n的关系是:s=360/n度。比如,一种四相八拍运行的步进电机每周需要400个脉冲,则步距角s=0.9度。
步进脉冲采用巧妙的利用计算机串行数据的格式经过恰当的设置产生。计算机的串口数据帧一般由起始位、数据位、校验位、停止位组成,如图二所示是传送B10010011的情况,这里起始位设定为1位,下面是8个数据位,奇偶位设置为“Mark”,即为1,停止位为1位,是逻辑1。停止位的作用是如果连续发送数据时,保证一个数据帧的接受完毕和另一个数据帧的起始保持一定的时间间隔。这样,我们设定的一个数据帧有11位。随着发送的数据不同,我们可以在这11个数据帧中得到不同个数、不同时间宽度的脉冲。比如,发送二进制数B11110000,则起始位0后紧接着4位0,后面4位连续的1,再加上奇偶位和停止位两个1,整个数据帧组成由前面5个连续的0和后面6个连续的1组成的1个脉冲信号。如果选择不同的发送数据,还可以得到不同个数的脉冲。比如,发送B10101010可以得到连续4个脉冲。这里,为了得到均匀的占空比,总是采用发送B11110000数据的方式每个数据帧产生一个脉冲。
图二、传送二进制数B10010011的示意图
串行通讯的波特率B定义为每秒发送数据的位数,一个数据帧11位,则需要的时间T位11/B,而每个数据帧只产生一个脉冲,则脉冲频率v可以确定为v=B/11,如果步进电机每周需要的脉冲个数为n,则电机转速ω=60B/11n转/分。例如,如果B取9600b/s,n取400,则ω=131转/分。
4. 位置信号和方向信号的读入和输出
计算机的9针标准RS232串行口信号除了数据发送接受用的TxD/RxD外还有RTS/CTS、DTR/DSR、DCD等信号。这些信号原本定义控制Modem用的,我们这里用来读入位置信号和输出方向信号以及维度选择。具体的说,我们用DTR输出维度选择信号,如为“1”,则表示这时的所有输出和输入都是针对X方向的运动,如为“0”,则选择Y方向。信号RTS用来输出运动的方向,即控制步进电机正传和反转。输入信号CTS、DSR、DCD用来输入限位开关和零位开关的信号。
另外,还要有RS232电平和TTL电平之间的转换电路。RS232电平是负逻辑电平,为了实现RS232电平和5VTTL电平之间的转换,这里我们采用MAX232专用芯片,该芯片核心是一个“电荷泵”,只需要单5V供电即可。
电路的示意图如图三所示,整个电路的逻辑可以用一片可编程逻辑芯片EPM7064实现。在实现上面电路的同时,在可编程逻辑芯片中,我们同时实现了步进电机的脉冲分配逻辑和保护逻辑,在坐标达到最大和最小值后,电机不再允许向右和向左运动。
5. 实际应用和编程
本文提供的方法对计算机控制软件软件的编制给予了极大的方便[2]。以MSVB6为例[3],放置串口控件MSCOMM32后可以方便的通过程序设置DTR、RTS的值来控制运动的维度和方向,通过读取控件属性CTS、DSR、DCD的值来得到运动的情况,通过设置不同的发送波特率来改变步进电机的速度,通过在发送缓冲区中放置字符个数控制步进电机的运动步数。我们也可以在Delphi下方便的编程[4],在其它计算平台上,我们也可以方便的编程,比如,在linux上[5],我们可以通过对ttyS0设备编程方便的控制串口设备。
本文的方法作者已经成功地应用在金相显微镜载物台的自动控制中。
本文作者创新点:
1. 通过串口的波特率、格式设置和输出字符来产生不同频率和占空比的步进电机驱动脉冲。
2. 通过标准串口的输入、输出控制信号,输入和输出两维运动系统的控制信号和位置信号。
参考文献:
1. 《微型计算机接口技术及应用》,刘乐善等,华中理工大学出版社,2000.4。
2. 《Visual C++/Turbo C串口通信编程实践》,龚建伟,熊光明,电子工业出版社,2004.10。
3. 胡庆云,罗飞路,Visual Basical 6.0中通信控件的应用,微计算机信息,2001 Vol.17 No.2,40页。
4. 张立材,Delphi编程中用MSComm控件实现串行通讯,微计算机信息,2001 Vol.17 No.3,26页。
5. 《linux程序设计权威指南》,于明俭等,机械工业出版社,2001.4。