DIY编程器网

 找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 3286|回复: 2
打印 上一主题 下一主题

[cnc控制] 步进电机控制器的FPGA实现

[复制链接]
跳转到指定楼层
楼主
发表于 2012-1-17 14:58:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
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所示。
                          
                       
                          
                               

2.1 步进电机定位控制器整体架构的VHDL语言设计及仿真??? (1)根据步进电机定位控制器的系统组成框图可以定义输入和输出端口:



(3)步进电机定位控制器顶层电路的VHDL程序代码:??? 在下面的程序中只考虑逆时针操作模式即(dir=0)。


                          
                       
                          
                               

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 编码输出模块
                          
                       
                          
                                ??? 该模块的主要功能是将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程序的参数,实现不同型号步进电机的控制,在实际应用中有利于步进电机的广泛应用。
                          
                       
                          
                               
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏1 分享分享 支持支持 反对反对
沙发
发表于 2015-1-5 16:54:01 | 只看该作者
资料不错,图显不出来的
板凳
发表于 2015-10-9 20:35:48 | 只看该作者
这个很好,感谢楼主
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|文字版|手机版|DIY编程器网 ( 桂ICP备14005565号-1 )

GMT+8, 2024-4-27 00:40 , 耗时 0.089243 秒, 17 个查询请求 , Gzip 开启.

各位嘉宾言论仅代表个人观点,非属DIY编程器网立场。

桂公网安备 45031202000115号

DIY编程器群(超员):41210778 DIY编程器

DIY编程器群1(满员):3044634 DIY编程器1

diy编程器群2:551025008 diy编程器群2

QQ:28000622;Email:libyoufer@sina.com

本站由桂林市临桂区技兴电子商务经营部独家赞助。旨在技术交流,请自觉遵守国家法律法规,一旦发现将做封号删号处理。

快速回复 返回顶部 返回列表