点击蓝字 关注伺服与运动控制
一:引言
通过前几篇有趣应用教程的学习,相信大家对雷赛SMC606控制器已经产生了兴趣(《用BASIC控制SMC606实现机械手码垛》《如何用C#控制机械写毛笔字》点击文章标题进行回顾)。本次教程将学习SMC606运动控制器的基本运动功能,通过完成一个简单运动项目,来学习并掌握运动控制的技术。
教程将使用SMC606运动控制器、三轴运动平台以及BASIC程序实现回原点运动、定长运动、直线插补运动、圆弧插补运动、恒速运动和输入输出信号的控制,希望能对运动控制技术感兴趣的初学者有所帮助。
二.硬件原理
2.1 运动控制器 SMC606运动控制器外观如图2.1所示,图中方框部分为本项目所需要使用的各个接口。 下面按标号顺序介绍SMC606运动控制器接口功能: (1)电源接口:接入24V直流电源,为SMC606运动控制器提供电源。 (2)Ethernet接口:通过此接口实现控制器与PC机的以太网通信。 (3)轴信号接口:通过轴信号接口与电机驱动器连接。 (4)原点限位接口:与原点传感器相连接,为控制器提供原点信号。 (5)通用输入接口:用于接入按钮、开关量传感器等开关量信号。 (6)通用输出接口:用于控制指示灯、继电器、电磁阀等开关量元件。 2.2运动控制器输入输出电路 SMC606控制器的数字输入电路原理图如图2.2所示,输入信号IN由外部按钮提供,SMC606内部中的小框为光耦,作光电隔离,起到抗干扰作用。 当按钮处于断开状态时,光耦里面的发光二极管处于截止状态,不发光,则光敏三极管处于截止状态,所以给CPU输入的IN0信号为高电平。 当按钮处于闭合状态时,发光二极管导通后发光,使光敏三极管处于导通状态,则输入给CPU的IN0信号为低电平。 SMC606控制器的原点输入电路原理图如图2.3所示,输入信号ORG由光电开关提供,SMC606内部中的小框为光耦,作光电隔离,起到抗干扰作用。 当运动平台不在原点位置时,挡片未遮挡光电开关,光电开关内光敏三极管处于导通状态,控制器内光耦的发光二极管导通发光后,使光敏三极管处于导通状态,则输入给CPU的ORG0信号为低电平。 运动平台回到原点位置时,挡片遮挡光电开关,光电开关内光敏三极管处于截止状态,光耦中发光二极管处于截止状态不发光,使光敏三极管处于截止状态,则输入给CPU的ORG0信号为高电平。即原点信号的有效电平为高电平。 SMC606控制器的输出电路原理图如图2.4所示,SMC606内部中的小框为光耦,作光电隔离,起到抗干扰作用。 输出信号OUT由IO指令从CPU发出。当CPU输出信号OUT0为高电平时,光耦里面的发光二极管处于截止状态,不发光,使光敏三极管处于截止状态,没有电流流过三极管的基极,所以三极管也处于截止状态,指示灯LED灯不亮。 同理当CPU输出信号OUT0为低电平时,发光二极管导通发光,光敏三极管导通提供电流给三极管的基极,所以三极管导通使指示灯LED亮。 2.3 步进电机驱动器 以雷赛产品DM542步进电机驱动器为例,其外观如图2.5所示。驱动器外部接口有控制信号接口和电机及电源接口,还有一个拨码开关。 (1)控制信号接口:接收控制器传输的控制信号,其中PUL+、PUL-为脉冲信号,DIR+、DIR-为方向信号,ENA+、ENA-为使能信号。 (2)拨码开关:采用八位拨码开关为电机调整细分数、工作电流、静态半流。SW1、SW2、SW3为最大工作电流设定。SW4为半流/全流模式设定,默认为半流模式。SW5、SW6、SW7、SW8为细分模式设定。 (3)电机及电源接口:GND为直流电源地,+V为直流电源正极,A+和A-为电机的A相线圈的连线,B+和B-为电机的B相线圈的连线。 2.4控制器与驱动器连接 SMC606控制器与步进电机驱动器的有两种连接方式,分别是差分连接和单端连接,取决于步进电机驱动器的类型。 如图2.6所示,DM542步进电机驱动器采用的是差分信号连接方式。驱动器中小框为光耦,作光电隔离,起到抗干扰作用。 控制器内26LS31输出端PUL+与步进电机驱动器内光耦的发光二极管的正极连接,输出端PUL-与发光二极管的负极连接,输出端DIR同理。 如图2.7所示,DM422步进电机驱动器采用的是单端信号连接方式。 控制器内26LS31输出端PUL+悬空,输出端PUL-与步进电机驱动器内光耦的发光二极管的负极连接,发光二极管正极与5V电源连接,输出端DIR同理。 相比较而言,脉冲信号采用差分信号传输方式不仅抵消了干扰噪声,提高了抗干扰能力,而且两条信号线形成回路,信号地无关,避免了电平转移。 2.5三轴运动平台 本项目使用的三轴平台的外观如图2.8所示,三个轴信号接口分别连接三个驱动器,控制三台步进电机;同时它还提供了输入输出接口(控制按钮、LED指示灯等)、原点和限位接口、和24V直流电源。 运动平台的三个轴均是由步距角为1.8°的步进电机、滚珠丝杆、导轨、滑块组成。平台最大负载为5Kg,定位精度为0.03mm。其参数为: X轴: (1)有效行程: 0~200mm (2)丝杆导程: 10mm (3)驱动器细分数: 32 Y轴: (1)有效行程:0~100mm (2)丝杆导程:10mm (3)驱动器细分数:32 Z轴: (1)有效行程: 0~50mm (2)丝杆导程: 4 mm (3)驱动器细分数: 32 由三个电机的步距角为1.8°可知,电机转一圈需要200个脉冲。设置驱动器的细分数为32时,也就是将步距角1.8°再细分为32个角度,此时电机转一圈需要6400个脉冲。 已知X、Y轴的丝杠导程为10mm,即电机转一圈滑块移动10mm,所以滑块移动1mm时需要640个脉冲,设置X轴、Y轴的脉冲当量为640pulse/mm。 同理Z轴丝杠导程为4mm,即电机转一圈滑块移动4mm,所以滑块移动1mm时需要1600个脉冲,设置Z轴的脉冲当量为1600pulse/mm。三.程序设计
3.1 功能介绍 本次项目要实现三个功能:回原点、手动调节位置、自动执行轨迹运动。 本次设计的构想图如图3.1所示。按照构想实现以下功能: (1)按钮1按下:控制三轴回原点。按下按钮1后,Z轴滑块先进行定长运动向上抬升一段距离,X轴与Y轴同时进行回原点运动。当X轴、Y轴都回原点完毕后,Z轴再进行回原点运动,直到Z轴回原点完毕。 (2)按钮3按下:三轴先回原点,再执行轨迹运动。三轴回原点动作与按钮1实现的动作一致。三轴回原点完成后,三轴同时进行定长运动,即X轴滑块向左,Y轴滑块向后,Z轴滑块向上同时进行定长运动到一定的距离,接着Z轴滑块进行反方向的定长运动下降致笔尖触碰纸面,如图3.1所示的落笔位置,然后X轴Y轴进行直线插补运动画等腰直角三角形的两斜边;之后,顺时针圆弧插补运动开始画半圆;与此同时LED灯5亮,动作执行完毕后,笔尖停留在落笔位置,LED灯5灭。 (3)按钮2按下:按下按钮2且按住不放,可实现Y轴滑块向前的恒速运动,松开按钮即停止恒速运动。 (4)按下其他几个按钮(4~9)也是与按钮2功能一致的恒速运动,但是运动轴与方向有区别。 (5)LED灯0、1、2亮分别表示X轴、Y轴、Z轴正在运动,灯灭表示停止运动。 3.2程序框图 3.2.1 主程序框图设计 根据上一节的功能构想,可以绘制出主程序框图如图3.2所示。主程序由一个大循环构成。在大循环中设置了从按钮1到按钮9的功能执行流程,与上一节的功能构想一一对应。 3.2.2 多任务程序框图设计 多任务程序对应为3.1节的(5)功能,其程序框图如图3.3所示。多任务程序也是一个由大循环构成,循环内为判断X轴、Y轴、Z轴是否正在运动,正在运动对应LED灯亮,否则灯灭。 3.2.3回零与画图子程序框图设计 回原点子程序与画图子程序框图如图3.4所示。在回零子程序中,Z轴滑块做定长运动,向上抬升一小段距离,使笔抬起。在画图子程序中,X轴、Y轴、Z轴滑块同时做定长运动,将笔移动至平台中的指定位置(落笔点),Z轴滑块做定长运动,向下移动一小段距离至笔尖触碰纸面,后开始做插补运动画图。 3.2.4恒速运动与停止子程序框图设计 恒速运动子程序包括了所有需要恒速运动的按钮的流程,其程序框图如图3.5所示。松开按钮表示恒速运动结束,调用停止恒速运动子程序。其程序框图如图3.6所示。 3.3程序设计 按照程序框图的流程,编写BASIC程序。 主程序代码如下: SMCSetEquiv(0,640) '设置 X 轴脉冲当量为 640 pulse/mmSMCSetEquiv(1,640) '设置 Y 轴脉冲当量为 640 pulse/mm
SMCSetEquiv(2,1600) '设置 Z 轴脉冲当量为 1600 pulse/mm'函数括号内第一个数字表示轴号,第二个数字表示脉冲当量
Run1,LED '启动多任务程序1,LED
WhileTrue '主程序死循环
IfSMCCheckDone(MyaxisX)=1
AndSMCCheckDone(MyaxisY)=1
AndSMCCheckDone(MyaxisZ)=1Then '当三个轴的运动状态都为停止时
IfSMCReadInBit(0)=0Then '按下按钮1时 '函数括号内的数字为通用输入IO号,'等号后面的数字为设置电平,0为低电平,1为高电平
Gosub goHome '调用回零子程序
EndIf
IfSMCReadInBit(2)=0Then '按下按钮3时
Gosub goHome '调用回零子程序
WhileSMCCheckDone(MyaxisX)=0
OrSMCCheckDone(MyaxisY)=0
OrSMCCheckDone(MyaxisZ)=0
Wend '等待所有轴回零完毕
Gosub goPmoveAndArc '调用定长+画图子程序
EndIf IfSMCReadInBit(1)=0Then '按下按钮2时
Gosub goVmove '调用 恒速运动子程序
WhileSMCReadInBit(1)=0
Wend '等待 按钮2 松开
IfSMCReadInBit(1)=1Then '松开 按钮2 时
Gosub goStop '调用 松开按钮 子程序
EndIf
EndIf
EndIf
Wend 主程序主要有以下内容: 先使用函数SMCSetEquiv()设置三个轴的脉冲当量,其后设置速度和位置参数时,位移单位均为mm。 启动多任务程序LED, 接着在While True大循环中编写主程序的所有代码。 使用函数SMCCheckDone()判断轴是否都为停止状态,当函数返回值为1表示运动状态为停止。 使用函数SMCReadInBit()判断按钮是否按下。按钮1按下调用回零子程序goHome;按钮3按下,调用定长+画图子程序goPmoveAndArc;按钮2按下调用恒速运动子程序goVmove以及松开按钮时的停止子程序goStop。 完整程序代码见附录。 多任务程序代码如下: LED:
WhileTrue
IfSMCCheckDone(MyaxisX)=0Then'如果X轴正在运动
SMCWriteOutBit(0,0) '指示灯LED0亮。
'函数括号内第一个数字为通用输出IO的编号,
'第二个数字为设置电平,0为低电平,1为高电平。
Else
SMCWriteOutBit(0,1) '否则灯灭
EndIf Wend 多任务程序也使用While True循环,点亮LED灯使用SMCWriteOutBit()函数来表达。 回原点子程序代码如下: MyLogicX=1 'X轴ORG有效电平为1高有效
MyHome_dirX=0'X轴回零方向为0负向
MyModeX=1 'X轴回原点模式为1一次回零反找
MyLow_VelX=0.1 'X轴回原点起始速度为0.1mm/s
MyHigh_VelX=8 'X轴回原点运行速度为8mm/s
MyHome_TaccX=0.5 'X轴回原点加速时间为0.5s
MyHome_TdecX=0.5 'X轴回原点减速时间为0.5s
MyEnableX=2 'X轴回原点使能参数为2先运动到指定位置再清零
MyPositionX=0.1 'X轴计数偏移位置值为0.1
SMCSetHomePinLogic(MyaxisX,MyLogicX,0) '调用函数设置X轴ORG原点有效电平
SMCSetHomemode(MyaxisX,MyHome_dirX,1,MyModeX,0) '调用函数设置X轴回原点模式
SMCSetHomeProfileUnit(MyaxisX,MyLow_VelX,MyHigh_VelX,MyHome_TaccX,MyHome_TdecX)'调用函数设置X轴回原点速度参数 SMCSetHomePositionUnit(MyaxisX,MyEnableX,MyPositionX) '调用函数设置X轴回零完成后位置计数值SMCHomeMove(MyaxisX) '启动X轴回零运动 定长运动程序代码如下: MyMin_VelX=0.1 'X轴最小速度为0.1
MyMax_VelX=15 'X轴最大速度为15
MyTaccX=0.2 'X轴加速时间为0.2s
MyTdecX=0.2 'X轴减速时间为0.2s
MyStop_VelX=0.1 'X轴停止速度为0.1
Mys_modeX=0 'X轴保留参数为0
Mys_paraX=0.05 'X轴S段时间为0.05
MyDistX=25 'X轴目标位置为20
Myposi_modeX=0 'X轴运动模式为0相对坐标模式
SMCSetProfileUnit(MyaxisX,MyMin_VelX,MyMax_VelX,MyTaccX,MyTdecX,MyStop_VelX) '调用函数设置X轴运动速度曲线 SMCSetsprofile(MyaxisX,Mys_modeX,Mys_paraX) '调用函数设置X轴S段参数值
SMCPMoveUnit(MyaxisX,MyDistX,Myposi_modeX) '启动X轴点位运动 为了使X轴在运动时速度平稳变化,采用S形速度曲线控制,即在程序中使用SMCSetsprofile()函数来设置S段时间。S形速度曲线与加速度曲线如图3.7所示。可见,速度曲线是一条平滑曲线,图中Tacc为加速时间,Tdec为减速时间,Spara为S段时间。 直线插补程序代码如下:
Dim Line_dist1(2) '定义直线插补运动终点数组1
Line_Crd = 0 '参与直线插补运动的坐标系 0
Line_Min_Vel = 1 '起始速度为 1mm/s
Line_Max_Vel = 15 '最大速度为 15mm/s
Line_Tacc = 0.1 '加速时间为 0.1s
Line_Tdec = 0.1 '减速时间为 0.1s
Line_Stop_Vel = 1 '停止速度为 1mm/s
Line_Smode = 0 '保留参数,固定值为 0
Line_Spara = 0.05 '平滑时间为 0.05s Line_axisNum = 2 '参与插补运动轴数为 2Line_Dist1(0) = 25 '定义 X 轴运动距离为 25mmLine_Dist1(1) = 25 'Y 轴运动距离为 25mmLine_Dist2(0) = 25 '定义 X 轴运动距离为 25mmLine_Dist2(1) =-25 'Y 轴运动距离为 -25mmLine_posi_mode = 0'插补运动模式为相对坐标模式SMCSetVectorProfileUnit(Line_Crd,Line_Min_Vel,Line_Max_Vel,Line_Tacc,Line_Tdec,Line_Stop_Vel)'设置直线插补速度参数SMCSetVectorSprofile(Line_Crd,Line_Smode,Line_Spara) '设置速度曲线S段时间SMCLineUnit(Line_Crd,Line_axisNum,AxisArray(0),Line_Dist1(0),Line_posi_mode) '启动直线插补运动 直线插补与定长运动指令的区别为,定长运动只能设置单轴,例如定义X轴的定长运动函数只能驱动X轴,Y轴同理。当定义的X轴速度与Y轴速度一致,但目标距离不同时,其运动轨迹是一条折线。直线插补函数则可以设置多轴,其运动曲线是一条直线。如图3.1所示。 圆弧插补程序代码如下: Dim AxisArray(2) '定义轴数组
Dim Dist(2) '定义圆弧运动终点数组
Dim cen(2) '定义圆弧圆心数组
Arc_Crd = 0 '参与插补运动的坐标系0
AxisArray(0) = 0 '定义插补0轴为 X 轴
AxisArray(1) = 1 '定义插补1轴为 Y 轴
Arc_Min_Vel = 1 '起始速度为 1mm/s
Arc_Max_Vel= 10'最大速度为10 mm/s
Arc_Tacc = 0.3 '加速时间为0.3s
Arc_Tdec = 0.3 '减速时间为0.3s
Arc_Stop_Vel = 1'停止速度为 1mm/s
Arc_Smode = 0 '保留参数,固定值为0
Arc_Spara = 0.1 '平滑时间为 0.1s
Arc_axisNum = 2'参与插补运动轴数为2
Dist(0) = -50 '定义X轴运动终点位置
Dist(1) = 0 '定义Y轴运动终点位置
Cen(0)=-25 '定义圆心的X轴坐标
Cen(1)=0 '定义圆心的Y轴坐标
Arc_posi_mode = 0 '插补运动模式为相对坐标模式
Arc_Circle=0 '设置圆弧圈数为1
Arc_Dir = 0 '设置圆弧方向为顺时针 SMCSetVectorProfileUnit(Arc_Crd,Arc_Min_Vel,Arc_Max_Vel,Arc_Tacc,Arc_Tdec,Arc_Stop_Vel)'调用函数圆弧插补速度参数
SMCSetVectorSprofile(Arc_Crd,Arc_Smode,Arc_Spara) '调用函数圆弧插补速度曲线S段时间
SMCArcMoveCenterUnit(Arc_Crd,Arc_axisNum,AxisArray(0),Dist(0),Cen(0),Arc_Dir,Arc_Circle,Arc_posi_mode) '令X轴Y轴做圆心+圆弧终点模式圆弧插补运动
恒速运动程序代码如下:
SMCSetProfileUnit(MyaxisX,MyMin_VelX,MyMax_VelX,MyTaccX,MyTdecX,MyStop_VelX) '调用函数设置X轴运动速度曲线
SMCSetsprofile(MyaxisX,Mys_modeX,Mys_paraX) '调用函数设置X轴S段参数值
SMCVMove(MyaxisX,0) '启动X轴负方向恒速运动
停止恒速运动程序代码如下:
SMCStop(MyaxisX,0) '停止X轴负方向恒速运动
四.小结
使用雷赛Motion软件观察运动轨迹,当按钮3按下后,其运动轨迹如图4.1所示,和图3.1所设计的运动轨迹完全一样。其中OAB为调用定长运动函数得出来的轨迹,BC、CD为调用直线插补函数得出来的轨迹,DB为调用圆弧插补函数得出来的轨迹。由于设置定长运动X轴和Y轴运行速度一致,但目标距离不一致,所以会出现一段折线轨迹。而直线插补无论如何设置速度参数以及目标位置,其运动轨迹始终都为一条直线。想要获取完整文章内容及“附录例程代码”可点击文末“阅读原文”
- END -热门文章