直接用计算机串行口控制步进电机的方法
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
直接用计算机串行口控制步进电机的方法摘要:介绍了计算机串行口经二次开发,用作步进电机控制器的新方法。
通过向串行口发送数据产生控制脉冲,实现对步进电机的控制。
关键词:串行口再开发;控制脉冲;步进电机控制
中图分类号: tp39 文献标识码: a 文章编号: 1009-8631(2012)08-0065-01
步进电机在数控机床、医疗器械、仪器仪表等自动或半自动设备中得到了广泛应用。
控制步进电机常用步进控制卡,卡中pulse、dir分别为控制电机的转换步数和旋转方向的信号;cwl、ccwl分别为电机顺、逆时针旋转的限位信号;org为定位信号。
这种方法不成本较高,不便于操作,在计算机扩展槽上安装控制卡,也很不方便。
将计算机串行口二次开发,用于控制步进电机,具有成本低、操作简单、兼容性好等优点。
1 rs232串行口及编程
计算机串行接口采用rs232标准,常用信号有8个(为db9m插座时,引脚号如表1所示),其中rxd、txd为收、发数据,可与rs232串行口设备直接进行通讯,rts、dtr、cd、dsr、cts、bell为控制与检测modem的信号,在通讯过程中起联络与控制作用。
数据格式有5、6、7、8位几种,1位起始位(逻辑0),1、1.5或2位停止位(逻辑1),可以选择奇校验、偶校验和无校验,串行口编程方法主要有三种:硬件编程法、文件操作法。
1.1 硬件编程法
直接使用端口的输入、输出(i/o)函数对串行口的控制电路进行编程。
适用于dos及windows平台,但在基于nt技术构建的操作系统中因不允许用户程序直接操作硬件而不适用。
常用的端口输入、输出函数(指令)有:汇编语言的in、out指令及软中断调用,c语言的inport()、outport()、inportb()、outportb(),c++的_inp()、_outp()等。
计算机串行口采用intel 8250异步串行通讯组件构成,com1、com2、com3、com4的基地址分别为03f8h、02f8h、03e8h、02e8h,波特率因子(dr)计算方法为:dr=1.8432×1000000/16b,
1.2 文件操作法
文件操作法是将串行口作为系统的一个文件来处理,通过对这个文件的读、写操作引发串口对数据进行收、发动作。
这种方法在dos、windows、windows nt、windows 2000及windows xp等平台下都能正常工作。
例如在basic语言中可用语句:open “com1,1200,n,8,1,rs,cs,ds,cd”as #1将串行口com1作为文件#1进行读写操作。
在vc++中,可用createfile()、buildcommdcb ()、read()、write()、escapecommfunction()等函数将串行口作为文件进行操作。
2 串行口步进电机控制器工作原理
2.1 串行口发送数据过程研究
在串行口发送数据的过程中,串行口先发送起始位(逻辑0)进
行同步,接着按规定的波特率(b)从低位到高位依次发送通讯数据的各二进制位,最后发送停止位(逻辑1)。
表示每个二进制位的逻辑电平在txd端的保持时间为1/b秒。
如果按8位数据位、1位停止位、无奇偶校验方式发送数据,所发送数据的二进制位是0、1交替的。
例如:数据取01010101(即55h),每发送一个字节,在txd端发出5个脉冲,周期t=2/b,即频率f=b/2。
改变发送数据的各二进制位,便可在txd端得到不同的波形。
2.2 串行口步进电机控制器工作原理
通过分析串行口发送数据的过程可知,从txd端所发出的脉冲完全满足控制步进电机的需要:
①改变发送的字节数及所发送的字节内容,可在txd端产生任意数量的脉冲;
②改变波特率可动态改变发送脉冲的频率。
所以,可用txd作为控制步进电机的脉冲信号(pulse)。
串行口的dtr、rts、cts、dsr、cd、ri虽然在串行通讯接口中被定义为不同功能的握手信号,但通过对8520/1的分析可知,它们均可作为一般的i/o量使用,而且不论采用哪种编程方法,都能很方便地对这些信号进行读写操作。
若以dtr(或rts)作为方向控制信号(dir),同时分别以cd、dsr、cts、ri作为状态检测信号(cwl、ccwl、org等),则仅用一个串行口就已提供了步进电机控制器需要的所有信号。
由于串行口已直接提供了控制步进电电机所需的所有信号,只需将各信号由rs232电平变成ttl电平即可。
常用的电平转换器件有ds1488、ds1489。
3 软件设计及计算
为避免电机失步和提高电机运行速度,将步进电机运行过程为分三个阶段:低速起动并加速、高速运行、减速并停止;相应地控制脉冲也分为:升频、高频、降频三段。
在用串行口发送数据产生控制脉冲时,虽然通过改变所发字节内容的办法能产生1~5中间任意个数的脉冲,但若发送一个字节所字节的脉冲少于5个,后面接着发送数据产生的脉冲时,两个字节衔接时所产生的脉冲频率和占空比均会产生波动。
为使电机运行的三个阶段能平滑过滤,需要对每个阶段的脉冲数量进行调整,使ⅰ、ⅱ两个阶段的步数均为5的整数倍(分别为n1×5、n2×5);将非5整数倍的步数安排在减速停车的ⅲ阶段,发出脉冲数为n3×5+δp,其中δp=(1~4)。
这可通过改变ⅲ阶段发送的最后一个字节内容实现任意数量的脉冲输出。
产生1~4个脉冲应发送的数据分别为0ffh、0fbh、0f5h、0d5h。
在电机运行过程中,控制脉冲的频率f应随时变化以满足电机低速起停及高速运行的需要。
脉冲频率由发送数据的波特率(b)决定,每发出一个脉冲需用两个二进制位1和0来构成其高、低电平,所以f=b/2,通过调整发送数据的波特率可改变所发出的控制脉冲的频率。
按常规则波特率系列发送数据时所产生的控制脉冲频率变化较大,不能满足电机正常起停及调速的要求,为此计算机需按非标准的滤特率发送数据以产生任意频率的控制脉冲。
一般在电
机起动及停止阶段(ⅰ、ⅲ)每发送一个字节调整一次波特率,以使电机起停得尽量平滑。
ⅰ、ⅲ阶段频率的调整量δ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为:
4 高级控制功能
对步进电机的高级控制,主要是指自动找零及多机联动差补。
找零功能是指控制步进电机驱动运行机构,完成定位的过程。
在找零时,电机一般以低速运行,当测到org信号进电机停止。
由于运行速度低,为简化程序设计,每发送一个字节,在txd端可以只输出一个脉冲,测到org信号则停止发送。
为保证输出脉冲的占空比为50%,发送字节定为0f0h。
差补是指控制两台或两台以上电机按规定的速比运行,进而控制执行机构沿规定的轨迹运行。
由于一般计算机只有两个串行口,这种方法只适用于二维差补控制。
通常两个串行口用相同的波特率进行发送,通过调整发送的字节数及发送每个字节所产生的脉冲个数的不同来调整两个电机的运行速度和位置。