一种直接采用计算机串行口控制步进电机的新方法

2024-04-25 05:48

本文主要是介绍一种直接采用计算机串行口控制步进电机的新方法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

步进电机在数控机床、医疗器械、仪器仪表等自动或半自动设备中得到了广泛应用。用计算机控制步进电机的通常作法是采用步进控制卡,系统构成如图1所示。其中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串行口设备直接进行通讯,RTS、DTR、CD、DSR、CTS、BELL为控制与检测MODEM的信号,在通讯过程中起联络与控制作用。数据格式有5、6、7、8位几种,1位起始位(逻辑0),1、1.5、或2位停止位 (逻辑1),可以选择奇校验、偶校验和无校验,常用波特率为2400、4800、7200、9600bps等。串行口编程方法主要有三种:硬件编程法、文件操作法、串口控件法。

表1 RS232接口各引脚定义
 

    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进制数3F8,表示法下同)、16#2F8、16#3E8、16#2E8,波特率因子 (DR)计算方法为:DR=1.8432×1000000/16B,8250编程。

    2、文件操作法

    文件操作法是将串行口作为系统的一个文件来处理,通过对这个文件的读、写操作引发串口对数据进行收、发动作。这种方法在DOS、Windows、Windows NT、Windows2000及Windows XP等平台下都能正常工作。例如在BASIC语言中可用语句:OPEN "COM1,1200,n,8,1,rs,cs,ds,cd"AS #1将串行口COM1作为文件#1进行读写操作。在VC++中,可用CreateFile()、BuildCommDCB()、Read()、Write()、EscapeCOMMFunction()等函数将串行口作为文件进行操作。

    3、串口控件法

    用VB及VC++编程时,可用控件对串行口进行编程。这种方法通用性好,在Windows、Windows NT、Windows2000及Windows XP等平台下都能正常工作。在VB中,使用MSCOMM控件;在VC++下使用Microsoft Communication Control这一ActiveX类控件。串口控件使用方法请参考MSDN。

    二、串行口步进电机控制器工作原理

    1、串行口发送数据过程研究

    在串行口发送数据的过程中,串行口先发送起始位(逻辑0)进行同步,接着按规定的波特率(B)从低位到高位依次发送通讯数据的各二进制位,最后发送停止位(逻辑1)。表示每个二进制位的逻辑电平在TXD端的保持时间为1/B秒。如果按8位数据位、1位停止位、无奇偶校验方式发送数据,所发送数据的二进制位是0、1交替的。例如:数据取01010101(即16进制的16#55),其发送过程如图2中5所示,每发送一个字节,在TXD端发出5个脉冲,周期T=2/B,即频率f=B/2。改变发送数据的各二进制位,便可在TXD端得到不同的波形。图2示出欲产生1~5个脉冲时应发出的数据及对应的波形。


图2 产生1~5个脉冲所发数据及对应波形

    2、串行口步进电机控制器工作原理

    通过分析串行口发送数据的过程可知,从TXD端所发出的脉冲完全满足控制步进电机的需要:

    (1)改变发送的字节数及所发送的字节内容,可在TXD端产生任意数量的脉冲;

    (2)改变波特率可动态改变发送脉冲的频率。

    所以,可用TXD作为控制步进电机的脉冲信号(Pulse)。

    串行口的DTR、RTS、CTS、DSR、CD、RI虽然在串行通讯接口中被定义为不同功能的握手信号,但通过对8250的分析可知,它们均可作为一般的I/O量使用,而且不论采用哪种编程方法,都能很方便地对这些信号进行读写操作。若以DTR(或RTS)作为方向控制信号 (Dir),同时分别以CD、DSR、CTS、RI作为状态检测信号(CWL、CCWL、ORG等),则仅用一个串行口就已提供了步进电机控制器需要的所有信号。正是基于此原理,我们开发了串行口步进电机控制器,并成功应用在板材多点成形设备的控制系统中。由于串行口已直接提供了控制步进电机所需的所有信号,只需将各信号由RS232电平变成TTL电平即可。常用的电平转换器件有DS1488、DS1489、MAX232等。用计算机串行口开发的步进电机控制器工作原理如图3所示。


图3 串行口步进电机控制器原理图

 

三、软件设计及计算

    为避免电机失步和提高电机运行速度,将步进电机运行过程分为三个阶段:低速起动并加速、高速运行、减速并停止;相应地控制脉冲也分为:升频、高频、降频三段,如图4所示。


图4 步进电机运行速度曲线

    在用串行口发送数据产生控制脉冲时,虽然通过改变所发字节内容的办法能产生1~5中间任意个数的脉冲,但若发送一个字节所产生的脉冲少于5个,后面接着发送数据产生的脉冲时,两个字节衔接时所产生的脉冲频率和占空比均会产生波动。为使电机运行的三个阶段能平滑过渡,需要对每个阶段的脉冲数量进行调整,使I、II两个阶段的步数均为5的整数倍 (分别为n1×5、n2×5);将非5整数倍的步数安排在减速停车的III阶段,发出脉冲数为n3×5+Δp,其中Δp=(1~4)。这可通过改变III阶段所发送的最后一个字节内容实现任意数量的脉冲输出。产生1~4个脉冲应发送的数据分别为16#FF、16#FB、16#F5、16#D5。

    由图4所示的电机运行过程可知,在电机运行过程中,控制脉冲的频率f应随时变化以满足电机低速起停及高速运行的需要。脉冲频率由发送数据的波特率 (B)决定,每发出一个脉冲需用两个二进制位1和0来构成其高、低电平,所以f=B/2,通过调整发送数据的波特率可改变所发出的控制脉冲的频率。按常规波特率系列发送数据时所产生的控制脉冲频率变化较大,不能满足电机正常起停及调速的要求,为此计算机需按非标准的波特率发送数据以产生任意频率的控制脉冲。一般在电机起动及停止阶段(I、III)每发送一个字节调整一次波特率,以使电机起停得尽量平滑。

    Ⅰ、Ⅲ阶段频率的调整量Δf1、Δf2分别为:

    Δf1=(FH-FL)/n1     (1)

    Δf2=(FH-FL)/n3+1     (2)

    相应的波特率的调整量ΔB1、ΔB2分别为:

    ΔB1=(BH-BL)/n1=(2FH-2FL)/n1     (3)

    ΔB2=(BH-BL)/(n3+1)=(2FH-2FL)/(n3+1)     (4)

    发送第i个字节的波特率Bi为:

    

    用串行口直接控制步进电机的控制软件流程图如图5所示。


图5 步进电机控制软件流程图

   

四、高级控制功能

    对步进电机的高级控制,主要是指自动找零及多机联动差补。

    找零功能是指控制步进电机驱动运动机构,完成定位的过程。在找零时,电机一般以低速运行,当测到ORG信号时电机停止。由于运行速度低,为简化程序设计,每发送一个字节,在TXD端可以只输出一个脉冲,测到ORG信号则停止发送。为保证输出脉冲的占空比为50%,发送字节定为16#F0。找零程序的设计可参照图5进行。

    差补是指控制两台或两台以上电机按规定的速比运行,进而控制执行机构沿规定的轨迹运行。由于一般计算机只有两个串行口,这种方法只适用于二维差补控制。通常两个串行口用相同的波特率进行发送,通过调整发送的字节数及发送每个字节所产生的脉冲个数的不同来调整两个电机的运行速度和位置。

    实际运行证明,用串行口设计的步进电机控制器具有使用方便、性能稳定、成本低、可移植性好、不需安装硬件设备驱动程序等优点。直接采用计算机串行口设计的步进电机控制控制器适用于对全数字式伺服电机进行控制。本文对计算机串行口、并行口等资源的二次开发应用起到了一定的借鉴作用。

这篇关于一种直接采用计算机串行口控制步进电机的新方法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/933832

相关文章

Python列表去重的4种核心方法与实战指南详解

《Python列表去重的4种核心方法与实战指南详解》在Python开发中,处理列表数据时经常需要去除重复元素,本文将详细介绍4种最实用的列表去重方法,有需要的小伙伴可以根据自己的需要进行选择... 目录方法1:集合(set)去重法(最快速)方法2:顺序遍历法(保持顺序)方法3:副本删除法(原地修改)方法4:

Python中判断对象是否为空的方法

《Python中判断对象是否为空的方法》在Python开发中,判断对象是否为“空”是高频操作,但看似简单的需求却暗藏玄机,从None到空容器,从零值到自定义对象的“假值”状态,不同场景下的“空”需要精... 目录一、python中的“空”值体系二、精准判定方法对比三、常见误区解析四、进阶处理技巧五、性能优化

C++中初始化二维数组的几种常见方法

《C++中初始化二维数组的几种常见方法》本文详细介绍了在C++中初始化二维数组的不同方式,包括静态初始化、循环、全部为零、部分初始化、std::array和std::vector,以及std::vec... 目录1. 静态初始化2. 使用循环初始化3. 全部初始化为零4. 部分初始化5. 使用 std::a

如何将Python彻底卸载的三种方法

《如何将Python彻底卸载的三种方法》通常我们在一些软件的使用上有碰壁,第一反应就是卸载重装,所以有小伙伴就问我Python怎么卸载才能彻底卸载干净,今天这篇文章,小编就来教大家如何彻底卸载Pyth... 目录软件卸载①方法:②方法:③方法:清理相关文件夹软件卸载①方法:首先,在安装python时,下

电脑死机无反应怎么强制重启? 一文读懂方法及注意事项

《电脑死机无反应怎么强制重启?一文读懂方法及注意事项》在日常使用电脑的过程中,我们难免会遇到电脑无法正常启动的情况,本文将详细介绍几种常见的电脑强制开机方法,并探讨在强制开机后应注意的事项,以及如何... 在日常生活和工作中,我们经常会遇到电脑突然无反应的情况,这时候强制重启就成了解决问题的“救命稻草”。那

kali linux 无法登录root的问题及解决方法

《kalilinux无法登录root的问题及解决方法》:本文主要介绍kalilinux无法登录root的问题及解决方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,... 目录kali linux 无法登录root1、问题描述1.1、本地登录root1.2、ssh远程登录root2、

SpringMVC获取请求参数的方法

《SpringMVC获取请求参数的方法》:本文主要介绍SpringMVC获取请求参数的方法,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下... 目录1、通过ServletAPI获取2、通过控制器方法的形参获取请求参数3、@RequestParam4、@

Python中的魔术方法__new__详解

《Python中的魔术方法__new__详解》:本文主要介绍Python中的魔术方法__new__的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、核心意义与机制1.1 构造过程原理1.2 与 __init__ 对比二、核心功能解析2.1 核心能力2.2

Python Transformer 库安装配置及使用方法

《PythonTransformer库安装配置及使用方法》HuggingFaceTransformers是自然语言处理(NLP)领域最流行的开源库之一,支持基于Transformer架构的预训练模... 目录python 中的 Transformer 库及使用方法一、库的概述二、安装与配置三、基础使用:Pi

关于pandas的read_csv方法使用解读

《关于pandas的read_csv方法使用解读》:本文主要介绍关于pandas的read_csv方法使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录pandas的read_csv方法解读read_csv中的参数基本参数通用解析参数空值处理相关参数时间处理相关