原创 西门子200系列PLC直流步进电机控制方法

2010-10-8 14:33 14697 8 27 分类: 工业电子

     注:本人非PLC专业人士,此文章只是简单介绍直流步进电机控制方法。做此实验仅为单片机内嵌入软PLC做基础,证明PLC可以直接直接用来做步进电机控制。


直流步进电机plc控制方法


系统功能概述:


       本系统采用PLC通过步进电机驱动模块控制步进电机运动。当按下归零按键时,电机1和电机2回到零点(零点由传感器指示)。当按下第一个电机运行按键时,第一个电机开始运行,直到运行完固定步数或到遇到零点停止。当按下第二个电机运行按键时,第二个电机开始运行,运行完固定步数或遇到零点停止。两电机均设置为按一次按键后方向反向。电机运行时有升降速过程。


PLC输入点I0.0为归零按键,I0.1为第一个电机运行按键,I0.2为第二个电机运行按键,I0.3为第一个电机传感器信号反馈按键,I0.4为第二个电机传感器信号反馈按键。


PLC输出点Q0.0为第一个电机脉冲输出点,Q0.1为第二个电机脉冲输出点,Q0.2为第一个电机方向控制点,Q0.3为第二个电机方向控制点,Q0.4为电机使能控制点。


 


所用器材:


PLC:西门子S7-224xpcn及USB下载电缆。编程及仿真用软件为V4.0 STEP 7 MicroWIN SP3。


直流步进电机2个,微步电机驱动模块2个。按键3个。24V开关电源一个。导线若干。


 


各模块连接方法:


PLC与步进电机驱动模块的连接:


       驱动模块中EN+、DIR+、CP+口均先接3k电阻,然后接24V电源。


       第一个驱动模块CP-接PLC的Q0.0,DIR-接PLC的Q0.2,EN-接PLC的Q0.4


       第二个驱动模块CP-接PLC的Q0.1,DIR-接PLC的Q0.3,EN-接PLC的Q0.4


注意:


       1、PLC输出时电压为24V,故和驱动器模块连接时,接了3k电阻限流。


       2、由于PLC处于PTO模式下只有在输出电流大于140mA时,才能正确的输出脉冲,故在输出端和地间接了200欧/2w下拉电阻,来产生此电流。(实验室用的电阻功率不足,用200欧电阻时功率至少在24*24/200=2.88w,即用3w的电阻)


       3、PLC与驱动模块连接时,当PLC输出低电平时不能将驱动模块电平拉低,故在EN-和DIR-上接了200欧/2W下拉电阻


 


驱动模块与电机接法:


       驱动模块的输出端分别与电机4根线连接


 


电机传感器与PLC连接:


       传感器电源接24v,信号线经过240欧电阻(试验中两个470电阻并联得到)与24v电源上拉后,信号线接到PLC的I0.3和I0.4


 


将各模块电源、地线接好。PLC中输入输出各路M对应点均接地,L+对应点均要接24V电源。注意PLC右下角24V DC OUTPUT不要接。


      


 


      



 


PLC程序介绍:


       PLC程序中主要使用向导生成的电机控制函数来控制电机运动。此向导使用方法如下:


首先打开软件,新建工程,选择工具->位置控制向导…,如下图



打开如下界面:选择配置s7-200PLC内置PTO/PWM操作,点击下一步,如下图



根据需要选择Q0.0或Q0.1,点击下一步,如下图



选择线性脉冲串输出(PTO),将下方使用高速计数器HSC0前的勾点上,点击下一步,如下图



输入电机此应用项目中最高电机速度(MAX_SPEED)和电机的启动/停止速度(SS_SPEED),默认是100000和5000,修改好了点击下一步,如下图



输入电机加速和减速时间。默认均为1000ms。点击下一步,如下图



然后出现如下界面,选择新包络。



       选项中可以选择相对位置和单速连续旋转,由于步进电机有加减速过程,故选择相对位置。输入步0的目标速度,即运动时的限速,在下方的框中输入结束位置,由于是相对位置,故此处位置即为所要走的距离。电机绘制包络,右方出现的梯形的图即为速度线。改变左下角的保罗定义符号名为MOTOR1,点击确认,



然后选择V存储区的地址范围,一般默认即可,点击下一步



点击完成。



这样,通过位置控制向导就生成了4个PTO函数,分别是PTOx_CTRL、PTOx_RUN、PTOx_MAN、PTOx_LDPOS。


       PTOx_CTRL子程序(控制)使能和初始化步进电机或伺服电机的PTO输出。在程序中仅能使用该子程序一次,并保证每个扫描周期该子程序都被执行。一直使用SM0.0作为EN输入的输入。


       I_STOP(立即STOP)输入量为一个布尔量输入。当输入为低电平时,PTO功能正常操作。当输入变为高电平时,PTO立即终止脉冲输出。


       D_STOP(减速STOP)输入量为一个布尔量输入。当输入为低电平时,PTO功能正常操作。当输入变为高电平时,PTO产生一个脉冲串将电机减速到停止。


       DONE输出是一个布尔量输出。高电平表示CPU已经执行完子程序。


       当Done位为高电平时,Error字节以一个无错误代码或错误代码来报告是否正常完成。


       若在向导中启用了HSC,则C_Pos参数包含以脉冲数表示的模块当前位置。否则,当前位置将一直为0


       PTOx_RUN子程序(运行包络)命令PLC在一个制定的保罗中执行运动操作,此包络存储在组态/包络表中。


       接通EN位,使能该子程序。确保EN位保持接通,直至Done位指示该子程序完成。


       接通START参数以初始化包络的执行。对于每次扫描,当START参数接通且PTO当前未激活时,指令激活PTO。要保证该命令只发一次,使用边沿检测命令以脉冲触发START参数接通。


       接通参数Abort,命令位控模块停止当前的包络,并减速直至电机停下。


PTOx_MAN子程序(手动模式)使PTO置为手动模式。这可以是电机在向导中制定的范围内以不同的速度启动、停止和运行。如果启用了PTOx_MAN子程序,则不应执行其他任何PTOx_RUN指令。


       允许RUN参数,命令PTO加速到指定速度。即使电机在运行时,也可改变速度参数的值。禁止参数RUN择命令PTO减速,直至电机停止。


 


 


PTOx_LDPOS指令(装载位置)改变PTO脉冲计数器的当前位置值为一个心智。可以通过该指令为一个运动命令建立一个新的零位置。


 


 


 


 


 


 


       本系统将电机1的PTO设置为Q0.0输出,使用高速计数器HSC0,最高电机速度2000HZ,启动/停止速度100HZ,加速500ms,减速500ms,步0的目标速度2000HZ,总位移8000脉冲,分配存储区为VB0到VB69。可得到PTO0的包络表如下所示:


//----------------------------------------------------------------


//输出 Q0.0 的 PTO 包络表


//----------------------------------------------------------------


VB0    'PTOA'                      //


VW4    54                          //FREQ


VD6    204800                      //SS_SPEED


VD10   4096000                     //MAX_SPEED


VD14   16#04000939                 //K_ACC


VD18   16#84FFF6C7                 //K_DEC


VB22   1                           //NUMPROF


VW23   25                          //OFFS_0


VB25   4                           //包络 0 的 NUM_SEGS


VB26   0                           //保留。


VB27   0                           //段 0 的 S_STEP


VB28   16#08                       //S_PROP


VD29   +204800                     //SFREQ


VD33   525                         //加速的脉冲数


VB37   0                           //段 1 的 S_STEP


VB38   16#04                       //S_PROP


VD39   +4098089                    //SFREQ


VD43   6948                        //恒速的脉冲数


VB47   0                           //段 2 的 S_STEP


VB48   16#00                       //S_PROP


VD49   -1                          //SFREQ


VD53   526                         //减速的脉冲数


VB57   0                           //段 3 的 S_STEP


VB58   16#10                       //S_PROP


VD59   +204800                     //SFREQ


VD63   1                           //最终减速的脉冲数


VB67   0                           //保留。


VB68   0                           //保留。


VB69   0                           //保留。 


       由上表可知加速脉冲数为75057,存于VD33中。恒速脉冲为49881,存于VD43中。减速脉冲为75061,存于VD53中。最终的减速的脉冲数为1,存于VD63中。


我们控制步进电机可以通过PTOx_CTRL和PTOx_RUN两个子程序。电机控制过程中,加减速脉冲数不方便修改,因为线性加减速的指令并不清楚,所以只好修改恒速段的脉冲数。唯一的限制是,总的脉冲数,必须大于加减速段+最终减速段脉冲数之和,也即恒速段的脉冲不能小于1。此处总的脉冲数,最小值应为525+526+1+1=1053个脉冲。当然电机加减速时间如果较小,此脉冲数会变小。


电机2的PTO设置为Q0.1输出,使用高速计数器HSC3,最高电机速度20000HZ,启动/停止速度100HZ,加速500ms,减速500ms,步0的目标速度2000HZ,总位移10000脉冲,分配存储区为VB70到VB139。可得到PTO0的包络表如下所示:


//----------------------------------------------------------------


//输出 Q0.1 的 PTO 包络表


//----------------------------------------------------------------


VB70   'PTOA'                      //


VW74   54                          //FREQ


VD76   204800                      //SS_SPEED


VD80   40960000                    //MAX_SPEED


VD84   16#03000C13                 //K_ACC


VD88   16#83FFF3ED                 //K_DEC


VB92   1                           //NUMPROF


VW93   25                          //OFFS_0


VB95   4                           //包络 0 的 NUM_SEGS


VB96   0                           //保留。


VB97   0                           //段 0 的 S_STEP


VB98   16#08                       //S_PROP


VD99   +204800                     //SFREQ


VD103  100                         //加速的脉冲数


VB107  0                           //段 1 的 S_STEP


VB108  16#04                       //S_PROP


VD109  +4111824                    //SFREQ


VD113  9797                        //恒速的脉冲数


VB117  0                           //段 2 的 S_STEP


VB118  16#00                       //S_PROP


VD119  -1                          //SFREQ


VD123  102                         //减速的脉冲数


VB127  0                           //段 3 的 S_STEP


VB128  16#10                       //S_PROP


VD129  +204800                     //SFREQ


VD133  1                           //最终减速的脉冲数


VB137  0                           //保留。


VB138  0                           //保留。


VB139  0                           //保留。


       电机1和电机2参数可根据实际需要修改。


使用步骤:


(1)在启动PTO0_RUN之前,计算出恒速段的脉冲数=目标脉数数-加减速脉冲数之和-1,填入包络表中的恒速位置;此系统中电机1恒速脉冲保存在VD43,电机2恒速脉冲数保存在VD113中。


(2)启动PTO0_RUN。


具体程序见附件中 步进电机PLC控制.xps


程序流程图如下:



 

PARTNER CONTENT

文章评论19条评论)

登录后参与讨论

用户1856281 2016-1-24 15:18

多谢,学习!

用户1854679 2015-9-16 15:22

评论是对思考最好的总结…

用户1837955 2015-5-16 20:07

感激不尽

用户1815178 2014-10-26 21:16

先下下来看看

用户1779574 2014-9-6 13:19

很好啊!现在还能下不?

用户377235 2014-9-5 21:45

好!

用户377235 2014-8-11 23:30

OK

用户377235 2014-8-11 23:30

OK

用户1535762 2014-6-26 16:49

刚好在学习位置控制,有了实例后将更容易理解,谢谢作者的辛勤劳动。
 

用户1742956 2014-3-23 17:42

感谢分享,就是位置控制编程那不太了解
相关推荐阅读
用户282447 2011-01-19 17:05
stm32使用fsmc时地址移位问题
stm32平台使用fsmc时,当操作数据宽度为8位时,HADDR【25:0】与FSMC【25:0】对齐,当操作的数据为16位时,HADDR【25:1】与FSMC【24:0】对齐,HADDR【0】未接。...
用户282447 2011-01-05 19:42
verilog分频
fpga程序里经常会遇见给一个50 MHZ的clk,然后产生一个可变频率的clk‘。尤其是在电机控制中,加减速需要便频率,而fpga中除法又比较耗资源。今天看到一个程序,觉得思想不错,整理如下。   ...
用户282447 2011-01-01 23:47
2011,回顾从前
毕业第一年。    2010很快过去了,大学生活也已经成了历史,貌似很近,又貌似很远。    2011已经来临,是时候该回顾回顾自己大学至今都在做什么了。俗话说,男的把电脑当游戏机,女的把电脑当影碟机...
用户282447 2010-12-24 11:33
sdram verilog程序
sdram芯片用的是hy57v641620hgt-7,fpga用的是EP1C6Q240C8,晶振是50M,经过PLL倍频至125M,系统clk时钟是125M,sdram时钟相移-3ns程序是根据特权的...
用户282447 2010-12-24 11:26
串口verilog程序
发一个自己写的串口程序,波特率115200,一位起始位,8个数据位,一个停止位接收采用8倍过采样。下面有4个module,uart是顶层模块,uart_rx是接收模块,uart_tx是发送模块,uar...
用户282447 2010-11-27 18:58
tft verilog驱动
       使用的TFT为群创7寸液晶屏AT070TN83,分辨率为800*480FPGA为ep1c6q240c8,晶振为50M       首先介绍一下TFT接口       1和2脚VLED,4...
我要评论
19
8
关闭 站长推荐上一条 /3 下一条