步进电机控制器的FPGA实现
扫描二维码
随时随地手机看文章
O 引 言
随着步进电机广泛地应用于数字控制系统中作为伺服元件,步进电机在实时性和灵活性等性能上的要求越来越高。那么如何灵活、有效地控制步进电机的运转成为研究的主要方向。这里采用现场可编程逻辑门阵列(Field Programmable Gate Array,FPGA),通过VHDL语言编程来实现四相步进电机的控制。利用FPGA设计具有以下优点:
硬件设计软件化 FPGA的开发在功能层面上可以脱离硬件在EDA软件上做软仿真。当功能确定无误后可以进行硬件电路板的设计。最后将设计好的,由EDA软件生成的烧写文件下载到配置设备中去,进行在线调试,如果这时的结果与要求不一致,可以立即更改设计软件,并再次烧写到配置芯片中而不必改动外接硬件电路。进行分层模块设汁后系统设计变得更加简单,在实时性和灵活性等性能上都有很大的提高,有利于步进电机的运动控制。
高度集成化,高工作频率 一般的FPGA内部都集成有上百万的逻辑门,可以在其内部规划出多个与传统小规模集成器件功能相当的模块。另外,一般的FPGA内部都有PLL倍频和分频电路模块,这样可以在外部采用较低频率的晶振而在内部获得较高频率的时钟,进一步解决了电磁干扰和电磁兼容问题。
1 步进电机的工作原理
步进电动机是一种自动化执行部件,和数字系统结合可把脉冲数转换成角位移,实现其正转、反转、手动和自动控制。四相步进电机有两组线圈A和B。A,B两组垂直摆放线圈的电流方向的排列组合,最多可以产生8种磁场方向,分别是O°,45°,90°,135°,180°,225°,270°,315°。表1给出了四相步进电机的8个方向和电流以及电压信号的关系。
四相电动机有3种激磁方式:
一相激磁法:当目标角度是90°的整数倍时,采用这种方法。
二相激磁法:当目标角度是45°,135°,225°,315°的整数倍时,采用这种方法。
一、二相激磁法:即完全按照表1所列的信号顺序。
2 步进电机定位控制器的整体设计
步进电机定位控制器的系统主要由步进电机方向设定电路模块、步进电机步进移动与定位控制模块以及编码输出模块构成。前两个模块完成电机旋转方向设定、激磁方式和定位角度的换算等工作,后一模块用于对换算后的角度量编码输出。系统框图如图1所示。[!--empirenews.page--]
2.1 步进电机定位控制器整体架构的VHDL语言设计及仿真
(1)根据步进电机定位控制器的系统组成框图可以定义输入和输出端口:
(3)步进电机定位控制器顶层电路的VHDL程序代码:
在下面的程序中只考虑逆时针操作模式即(dir=0)。
[!--empirenews.page--]
2.2 步进电机方向电路模块设计
该模块的功能是设定步进电机的旋转方向(顺/逆时针转动),并设定电动机在顺/逆时针时所需的初值与累加/减值。给出逆时针操作模式的技术规则和仿真输出(ini=0赋初值,ini=1时开始计数)。
如果manner=00,这时进行自动判断,若angle步进角为偶数(角度设定可以被90整除)电路使用一相激磁法,则count的初始值为000(cntini<=0),每次加2;否则电路使用二相激磁法,count的初始值为111(cntini<=111),每次加2;angleDnCntDec每次减2。得到的仿真结果如图2所示。
表2是模块按不同励磁方式输出时各个初值以及累加/减值的设定真值表。
2.3 步进电机移动与定位控制模块设计
该模块的主要功能是利用赋初值ini将数值传到该模块中并配合输入的clk作为同步控制信号,进行步进电机的步进移动与定位控制。步进电机定位功能通过一个减法器实现:在每个clk脉冲上升沿,设定步进角倍数,angleDnCount减去不同激磁方式下设定的累加器计数值angleDnCntDec,判断差值小于设定的累减计数时,步进电机旋转到预定角度停止输出驱动端口信号,来实现定位功能。
2.4 编码输出模块[!--empirenews.page--]
该模块的主要功能是将count与angleDnCount产生的数值经过编码,再通过baBA输出到步进电机,来对电机进行控制。模块仿真图见图2。
假设resel=1,则将count和angleDnCount设置成0。
假设reset=O,clk为上升沿触发且ini=0时,就将设定的初值(cntini与angle)赋给count和angleDn—Count两个信号端,也就是(count<=O+cntini)与(an—gleDnCount<=angle)。
假设reset=O,clk为上升沿触发且ini=1时,则将count与cntini相加,再将结果存为count。然后判断angleDnCount的值是否大于angleDnCntDec。如果大于,则用angleDnCount减angleDnCntDec,将结果存为angleDnCount;否则,将angleDnCount设为0(因为此时angleDnCount的值小于angleDnCntDec,表示电机已经到达设定位置,故不需要继续转动了)。BaBA[3..O]是将count与angleDnCount产生的数值经过编码后输出到四相步进电机的端口的。
3 QuartusⅡ仿真结果
上述程序在ALTERA公司免费提供的QuartusⅡ环境下编译通过,适配的FPGA器件为FLEXlOKlO。最后得到的系统仿真图及生成的系统模块符号图分别如图3,图4所示。
reset是系统内部自复位信号;dir是步进电机正反转的方向控制;clk是由外部提供的时钟信号;ini是赋初值的使能开关;manner[1..O]是激磁方式的选择开关(00:自动检测角度输入,决定激磁方式;01:一相激磁;10:二相激磁;11:一、二相激磁);angle[7..0]是步进角的倍数设定数如引脚;baBA[3..0]是系统输出信号引脚,是内部计数器的count[3..O]数值编码的结果。
4 结 语
步进电机作为一种数字伺服执行元件,具有结构简单,运行可靠,控制方便,控制性能好等优点,但现实中步进电机的控制比较复杂。
这里设计的步进电机控制器方法简单,支持四相步进电机的三种励磁方式、正反转运行,这种基于FPGA的设计方法,可以加速同类型产品的开发速度,节约投资。并且可以根据步进电机的不同,改变分层模块的VHDL程序的参数,实现不同型号步进电机的控制,在实际应用中有利于步进电机的广泛应用。