首页 > 范文大全 > 正文

步进电机定位控制系统的设计

开篇:润墨网以专业的文秘视角,为您筛选了一篇步进电机定位控制系统的设计范文,如需获取更多写作素材,在线客服老师一对一协助。欢迎您的阅读与分享!

摘 要: 系统基于51单片机控制,以FPGA芯片来实现驱动,步进电机的脉冲分配作为核心电路加以必要的数字模拟辅助电路,形成一个4相8拍步进电机定位控制系统。该系统完成了步进电机的正确脉冲分配并实现了步进电机的方向调节、速度调节及定位控制等功能,由于单片机控制模块的使用使得FPGA驱动模块对步进电机的定位控制更加方便,对步进电机的速度控制精度很高,并且更加准确。关键词:步进电机; 定位控制; FPGA;脉冲分配

中图分类号:TN919-34文献标识码:A

文章编号:1004-373X(2010)18-0205-03

Design of Stepper Motor Positioning Control System

WANG Yan-ping

(Automation Institute, Xi’an University of Posts and Telecommunication, Xi’an 710061, China)

Abstract: A 4-phase 8-step stepper motor positioning control system is established based on 51 MCU, whose driver is achieved by adopting FPGA, and pulse allocating of stepper motor is used as kernel circuit supported with necessary digital analog circuit. This system can implement smoothly correct pulse allocating and can adjust the direction of stepper motor, speed and position, etc. Using the MCU control, the FPGA driven module can advance speed control accuracy.Keywords: stepper motor; positioning control; FPGA; pulse allocating

0 引 言

步进电机是一种将电脉冲转化为角位移的执行机构。可以通过控制脉冲个数来控制步进电机的角位移量,从而达到准确定位的目的,同时可以通过控制脉冲频率来控制电机转动的速度和加速度,从而达到调速的目的。传统的步进电机控制一般都用固定功能的芯片来搭建,电路比较庞大、用户界面友好度差、也不经济。

由于大规模可编程器件(FPGA)具有体积小、改动灵活方便、性能高、功耗低、效率高的特点,完成数控部分的功能采用FPGA芯片是一种理想的解决方案。可以从软件、硬件两方面对任务进行分析,搭建系统的硬件平台以及软件的控制设计,并逐步进行测试,在整个系统运转后,可以对系统的性能进行测试,对不足之处通过软件给予改进。

1 步进电机的工作原理[1-2]

步进电机是将电脉冲信号转变为角位移或线位移的开环控制元件。在非超载的情况下,电机的转速、停止的位置只取决于脉冲信号的频率和脉冲数,而不受负载变化的影响,即给电机加一个脉冲信号,电机则转过一个步距角。这一线性关系的存在,加上步进电机只有周期性的误差而无累积误差等特点。使得在速度、位置等控制领域用步进电机来控制变的非常的简单。下面以三相反应式步进电机为例说明步进电机的工作原理。

电机转子上均匀分布着很多小齿,其几何轴线依次分别与转子齿轴线错开。0,1/3τ,2/3τ,(相邻两转子齿轴线间的距离为齿距以τ表示),即A与齿1相对齐,B与齿2向右错开1/3τ,C与齿3向右错开2/3τ,A′与5相对齐(A′就是A,齿5就是齿1),图1是定转子的展开图。

图1 反应式步进电机的定转子展开图

如图1所示:如A相通电,B,C相不通电时,由于磁场作用,齿1与A对齐,(转子不受任何力,以下均同)。 如B相通电,A,C相不通电时,齿2应与B对齐,此时转子向右移过1/3τ,此时齿3与C偏移为1/3τ,4与A偏移(τ-1/3τ)=2/3τ。如果不断地按A,B,C,A…通电,电机就每步(每脉冲)1/3τ,向右旋转。如按A,C,B,A…通电,电机就反转。由此可见:电机的位置和速度由导电次数(脉冲数)和频率成一一对应关系,方向由导电顺序决定。

2 系统整体设计[3-6]

系统的设计采取模块设计的方法,将整个系统分成若干模块,然后逐个实现各个模块的功能,最后将各个模块的预留接口连接在一起即可实现系统的整体功能。根据各个模块的数据传输途径,系统的整体框图如图2所示。

图2 系统硬件框图

如硬件框图2所示:其中键盘和显示模块采用4个按键、4个七段LED显示,电机驱动模块用FPGA芯片通过编程来实现,电流放大部分采用了集成芯片ULN2803来实现,此芯片的最大输出电流为500 mA,采用此芯片来完成驱动电流模块也是比较适宜的。步进电机模块则采用了4相42BYGH-107型号的步进电机。

FPGA模块是本系统设计的重点,此模块的主要功能是通过VHDL编程利用FPGA芯片来实现对步进电机的控制功能,并能接收由单片机发送来的控制数据,功能包括:步进电机的正向转动、反向转动、步进电机的定位功能以及调速功能。

由步进电机的工作原理,可以得出步进电机的8拍运行模式下的脉冲时序:

A-AB-B-BC-C-CD-D-DA-A 。

转化成二进制代码便是:

DCBA:0001-0011-0010-0110-0100-1100-1000-1001-0001。

下面便基于图3和FPGA要实现的各个功能,给出VHDL语言的描述和理论分析。

2.1 数据接收模块

本模块定义了单片机和FPGA芯片之间的数据通信接口,即dclk, dload和ddata,以及接收到的数据送至输出端给下一个模块,本程序用的是移位寄存语句,把接收到的每一个数据通过移位寄存模式,把所有数据读入后再将其通过输出端给下一个模块。

程序如下:

if dclk′event and dclk = ′1′ then

if dload = ′0′ then

pdata(0) := ddata;

pdata(29 downto 1) := pdata(28 downto 0);

elsif dload = ′1′ then

oangle(9 downto 0)

ovv(19 downto 0)

end if;

end if

其中pdata为移位寄存器,通过不断地分频脉冲进行计数,从而把所需数据不断地移位写到pdata变量中,到所有数据写完(即dload=1 时),将数据分开写入oangle和ovv中,成为下一模块所用到的相位和速度控制字。

2.2 电机转速调节模块[7-10]

本模块实现的功能是调节FPGA芯片来准确地对步进电机的转速进行控制,通过改变2个脉冲之间的延时来改变脉冲的输出频率很显然对于精确调速来说是十分有限的。于是引入了一种在波形合成中的被广泛使用的方法:DDS技术。

DDS技术的核心是相位累加器,它类似一个计数器。每来一个时钟信号,相位累加器的输出就增加一个步长的相位增加量,相位增加量的大小由频率控制字确定。相位累加器进行线性相位累加,累加至满量时产生一次计数溢出,这个溢出的速率即为输出信号的频率。频率控制字的相位增加量越大,相位累加器的溢出率越高,输出信号的频率越高。

FPGA的工作频率为24 MHz,经分频计分频后为4 MHz。而相位累加器的长度为N位即为2N。

电机的转动频率为:

f=4×106×82N×c(1)

因为一个相位溢出为8拍,所以频率值乘了┮桓8,其中N为我们的相位累加器的位数,c为频率控制字。由于步进电机转一圈需要360/0.9=400个脉冲,当选取N=23时,所以电机的转速为:

n=4×106×8223×400×c=104220×c(2)

则频率控制字:

c=22010 000×n=104.857 6×n(3)

式中:n为电机的转速。通过单片机计算好控制字,本模块则是利用接收来的控制字进行累加送出生成步进电机的驱动脉冲。

程序如下,它主要做的就是对相位累加器进行累加:

if clk6′event and clk6 = ′1′ then

phase(22 downto 0) := phase(22 downto 0) + invv(19 downto 0);

cconter

clkcter

end if

其中,phase为相位累加器,它要做的任务只是本身不断的累加,然后将自身的高三位传给cconter计数器,溢出时便将溢出位抛弃,然后继续累加。

invv(19 downto 0)为单片机传过来的频率控制字,cconter为内部计数器,它把计数脉冲送到译码器进行译码输出。

仿真波形如图3、图4所示。

图3 步进电机调速控制仿真时序图(1 000 n/s)

图4 步进电机调速控制仿真时序图(500 n/s)

如上图所示,当改变了图中的单片机送过来的频率控制字,从而改变了步进电机的控制脉冲的输出频率,而且达到了准备定速的目的,当然需要注意的是在本模块中的仿真中使用了较大值的频率控制字,目的是仿真的直观性,而在实际应用中要根据所使用的电机的实际转速进行有效的设置。

2.3 电机转向调节模块

转向控制模块是相对简单的一个模块,要做的只是判断处部的输入控制信号来对输出信号进行设置后译码输出即可,判断外部转向信号,如果是正向那只需简单的译码,如果外部转向信号为反向,只需把计数器的值进行求反后再进行译码输出即可。

程序如下:

if clk6′event and clk6 = ′1′ then

if dir = ′0′ then con

else con

end if;

end if

其中inangle为外部相位定相位信号,当此值为0时,将不进行定位,电机将一直转动。Dir信号为外部转向控制信号,当此信号为0时,转向为正,反之,转向为反向。仿真图如图5、图6所示。

仿真结果如上图所示,当dir信号为0时,得到的con计数信号为正向累加,反之当dir信号为1时,得到的con计数信号为反向递减。

2.4 定位模块

定位模块所要完成的功能是通过编写程序使FPGA芯片来控制步进电机按照想要设定的步数来进行转动。一旦设定的步数到达,那步进电机的动作也就结束了,用一个计数器来实现这一个功能,当然也就是对计数器在给定步数内进行不断的累加,当该计数器到达了设定的步数后,便可通过这个计数器来断开该模块程序的动作。使得驱动输出的停止,以求达到准确定位的目的。

图5 步进电机方向控制仿真时序图(dir = 0正向)

图6 步进电机方向控制仿真时序图(dir = 1反向)

程序段如下:

if clkcter′event and clkcter = ′1′ then

if inangle > 0 then

if conter < inangle then conter

end if;

end if;

end if

其中inangle是设定的步进电机的运动步数,当然这个值也是通过单片机来设定后通过串行通信口由单片机传送过来的,然后由FPGA部分把这个值来设定为计数器计数的个数,当到达计数个数时计数器就停止计数,也就是停止FPGA部分的运行,从而使步进电机停止转动。

仿真时序图如图7所示。

图7 步进电机定位仿真时序图(10个脉冲度数9°)

在上面的2个仿真图中,取了inangle为10的时候,也就是9°的情况来验证这个模块的可行性,通过上图可以清晰的看到在设定了inangle的值之后,FPGA芯片所输出的驱动脉冲只会计数到设定值,而不再全速运行下去了。由图可以很明显地得出,此模块运行良好。

3 结 语

步进电机的使用涉及到工业生产以及日常生活的方方面面,在此介绍的步进电机定位控制系统,放弃了比较传统的利用单片机以实现电机驱动的方案,而是采用时下比较流行的FPGA芯片来实现这一功能,利用FPGA芯片的可编程性能和基于硬件的特性,完全可以将本文所设计的系统很容易的做成集成电路芯片,作为一个专用芯片来用。 由于采用了单片机控制,使得FPGA芯片免去处理大数据的不便,使得FPGA芯片的其他功能得以很好地体现。

参考文献

[1]周宏甫.机电传动控制[M].北京:化学工业出版社,2006.

[2]张邦成.机电一体化控制技术[M].长春:东北师范大学出版社,2006.

[3]赵亮.单片机C语言编程与实例[M].北京:人民邮电出版社,2008.

[4]陈兴文,刘燕.基于FPGA 实现步进电机脉冲信号控制器设计[J].机械设计与制造,2006(2):32-35.

[5]黄任等.AVR单片机与CPLD/FPGA综合应用入门[M].北京:北京航空航天大学出版社,2004.

[6]段颖妮,吕虹.基于FPGA 的仪表用步进电机控制器设计[J].电测与仪表,2006,43(1):72-75.

[7]Analog Devices Inc.. CMOS 125 MHz complete DDS synthesizer[R]. USA: Analog Devices Inc., 2003.

[8]侯伯亨,顾新.VHDL硬件描述语言与数字逻辑电路设计[M].西安:西安电子科技大学出版社,2005.

[9]褚振勇.FPGA设计及应用[M].西安:西安电子科技大学出版社,2003.

[10]任爱锋.基于FPGA的嵌入式系统设计[M].西安:西安电子科技大学出版社,2006.

作者简介: 王雁平 男,1973年出生,云南曲靖人,助教,硕士研究生。主要从事检测技术与智能控制方面的研究。ΚΚ