EtherCAT与RTEX驱动器轴回零的配置与实现

news2024/11/19 23:22:25

上节课程,正运动小助手给大家分享了运动控制器提供的回零模式配置与实现。本节课程主要介绍控制器实现EtherCAT与RTEX驱动器的回零及其配置。

01 总线驱动器回零模式

正运动控制器提供自己的回零模式,也支持使用EtherCAT总线驱动器提供的回零模式,或RTEX总线驱动器的提供的回零模式,均可使用DATUM指令实现回零,但采用的回零模式和配置方法与控制器提供的回零方式有所区别。

以上两类总线驱动器回零模式采用21,回零模式由总线驱动器提供,参见驱动器手册说明。

语法:DATUM(21,驱动器提供的回零模式)

总线驱动器回零时,除了模式需要采用驱动器提供的,原点开关、正/负限位开关需要接入驱动器的IO端子上,一般驱动器IO端子有指定的HOME、POT,NOT用于回零,引脚需查看驱动器手册说明。

1.EtherCAT总线驱动器

可使用EtherCAT总线驱动器回零功能,DATUM(21,mode2),此时mode2有效,mode2为EtherCAT总线驱动器6098h提供的原点回归模式。

在这里插入图片描述

使用此模式需要参考驱动器手册的说明,找到手册对应的章节,如上图,配置驱动器回零PDO所需要的功能,按照驱动器手册提供的信号接线方式完成开关信号的接线,将原点和正/负限位信号接在驱动器IO指定的HOME、POT,NOT端子上,等待DATUM触发回零即可。

在这里插入图片描述

示例:初始化完成后再运行驱动器回零程序。

BASE(iAxis)  '按驱动器轴号逐个回零
AXIS_STOPREASON = 0
SPEED = 100 '回零速度
CREEP = 10  '反找速度
ACCEL = 1000
DATUM(21,2) '驱动器回零模式value=2
WAIT IDLE
IF AXIS_STOPREASON = 0 THEN
    ?"回零成功"
ELSE
    ?"回零失败"  ,"停止原因:",AXIS_STOPREASON,"状态字0X",HEX(DRIVE_STATUS)
ENDIF

2.RTEX总线驱动器

此模式下可使用RTEX总线驱动器回零功能,此时mode2有效,回零模式查看驱动器手册即可(如下表)。
使用此模式原点和正负限位信号接在驱动器指定IO上,等待DATUM触发回零即可。
在这里插入图片描述

02 EtherCAT总线驱动器回零方式

使用EtherCAT总线驱动器提供的回零,需要将原点信号接入驱动器指定IO上,不同的厂商的使用要求略有差异,需要阅读驱动器手册之后再进行配置。

参考步骤如下:

1.硬件接线:以下以某个驱动器为例,将原点等信号接入下图指定引脚即可,无需映射,并且按要求给驱动器的IO端子供电。

在这里插入图片描述

使用控制器OP输出模拟IO信号输入,控制器OUT0口接到驱动器控制端子8引脚,模拟原点信号,控制器OUT6口接到驱动器控制端子9引脚,模拟负限位信号,控制器OUT5口接到驱动器控制端子10引脚,模拟正限位信号。

2.驱动器配置要求:根据驱动器手册说明配置回零所需要的功能,例如下方配置说明中,6040h和6041是必须模式,其他模式均为选配,故DRIVE_PROFILE配置驱动器PDO时,需要包含必须模式才可完成回零操作。

在这里插入图片描述

3.总线初始化:运动下方初始化模板程序,合理配置DRIVE_PROFILE,使能总线驱动器。

4.驱动器回零:初始化成功方可执行回零程序,设置合理的总线轴参数,配置回零的找原点速度SPEED和反找速度CREEP,发送DATUM(21,mode2)驱动器开始找原点运动,例程使用模式如下,回零成功停止运动,DPOS和MPOS自动清零。

在这里插入图片描述

程序分为两部分执行,先总线初始化,再回零。

1.总线初始化参考程序

'*******************************************************ECAT总线初始化
global CONST BUS_TYPE = 0        '总线类型。可用于上位机区分当前总线类型
global CONST MAX_AXISNUM = 16      '最大轴数
global CONST Bus_Slot  = 0        '槽位号0(单总线控制器缺省0global CONST PUL_AxisStart   = 0    '本地脉冲轴起始轴号
global CONST PUL_AxisNum   = 0    '本地脉冲轴轴数量
global CONST Bus_AxisStart   = 0      '总线轴起始轴号
global CONST Bus_NodeNum   = 1      '总线配置节点数量,用于判断实际检测到的从站数量是否一致
global Bus_InitStatus      '总线初始化完成状态
Bus_InitStatus = -1
global Bus_TotalAxisnum    '检查扫描的总轴数
delay(3000)        '延时3S等待驱动器上电,不同驱动器自身上电时间不同,具体根据驱动器调整延时
?"总线通讯周期:",SERVO_PERIOD,"us"
Ecat_Init()      '初始化ECAT总线 
while (Bus_InitStatus = 0)
    Ecat_Init()
wend
end
'***************************ECAT总线初始化*****************************
'初始流程: slot_scan(扫描总线) ->   从站节点映射轴/io  ->  SLOT_START(启动总线) -> 初始化成功
'**********************************************************************
global sub Ecat_Init()
    local Node_Num,Temp_Axis,Drive_Vender,Drive_Device,Drive_Alias
    RAPIDSTOP(2)
    for i=0 to MAX_AXISNUM - 1              '初始化还原轴类型
        AXIS_ENABLE(i) = 0
        atype(i)=0  
        AXIS_ADDRESS(i) =0
        DELAY(10)                    '防止所有驱动器全部同时切换使能导致瞬间电流过大
    next
    Bus_InitStatus = -1
    Bus_TotalAxisnum = 0  
    SLOT_STOP(Bus_Slot)        
    delay(200)
    slot_scan(Bus_Slot)                  '扫描总线
    if return then 
        ?"总线扫描成功","连接从站设备数:"NODE_COUNT(Bus_Slot)
        if NODE_COUNT(Bus_Slot) <> Bus_NodeNum then    '判断总线检测数量是否为实际接线数量
            ?""  
            ?"扫描节点数量与程序配置数量不一致!" ,"配置数量:"Bus_NodeNum,"检测数量:"NODE_COUNT(Bus_Slot)
            Bus_InitStatus = 0    '初始化失败。报警提示
            return
        endif   
        '"开始映射轴号"
        for Node_Num=0 to NODE_COUNT(Bus_Slot)-1'遍历扫描到的所有从站节点
            Drive_Vender = NODE_INFO(Bus_Slot,Node_Num,0)  '读取驱动器厂商
            Drive_Device = NODE_INFO(Bus_Slot,Node_Num,1)  '读取设备编号
            Drive_Alias = NODE_INFO(Bus_Slot,Node_Num,3)  '读取设备拨码ID
            if NODE_AXIS_COUNT(Bus_Slot,Node_Num) <> 0  the  '判断当前节点是否有电机
                for j=0 to NODE_AXIS_COUNT(Bus_Slot,Node_Num)-1      '根据节点带的电机数量循环配置轴参数(针对一拖多驱动器)      
                    Temp_Axis = Bus_AxisStart + Bus_TotalAxisnum    '轴号按NODE顺序分配
                    'Temp_Axis = Drive_Alias        '轴号按驱动器设定的拨码分配(一拖多需要特殊处理)          
                    base(Temp_Axis)
                    AXIS_ADDRESS= Bus_TotalAxisnum+1    '映射轴号
                    ATYPE=65                '设置控制模式 65-位置 66-速度 67-转矩 
                    DRIVE_PROFILE = 1
                    disable_group(Temp_Axis)        '每轴单独分组
                    Bus_TotalAxisnum=Bus_TotalAxisnum+1    '总轴数+1
                next      
            endif
        next
        ?"轴号映射完成","连接总轴数:"Bus_TotalAxisnum
        DELAY 200
        SLOT_START(Bus_Slot)        '启动总线
        if return then 
            wdog=1              '使能总开关
            '?"开始清除驱动器错误"
            for i= Bus_AxisStart to Bus_AxisStart + Bus_TotalAxisnum - 1 
                BASE(i)
                DRIVE_CLEAR(0)
                DELAY 50
                '?"驱动器错误清除完成"
                datum(0)            '清除控制器轴状态错误"
                DELAY 100  
                '"轴使能"
                AXIS_ENABLE=1
            next
            Bus_InitStatus  = 1
            ?"轴使能完成"
            '本地脉冲轴配置
            for i = 0 to PUL_AxisNum - 1
                base(PUL_AxisStart + i)
                AXIS_ADDRESS  = (-1<<16) + i
                ATYPE = 4
            next
            ?"总线开启成功"
            run "Basic1",1    '开启回零任务
        else
            ?"总线开启失败"
            Bus_InitStatus = 0
        endif  
    else
        ?"总线扫描失败"
        Bus_InitStatus = 0
    endif
end sub

2.驱动器回零程序

?"开始回零"
TABLE(0)=0
BASE(0)
UNITS=(8388608/360) '脉冲当量
SPEED=50 '找原点速度
CREEP=10 '反找速度 
ACCEL=1000 
DECEL=1000 
DELAY(100)
DATUM(21,19) '开始回零,模式19
WHILE 1
    WAIT IDLE
    TABLE(0)=DRIVE_STATUS    '读取6041h状态字判断回零状态
    IF READ_BIT2(15,TABLE(0)) THEN
        ?"回零完成"
        EXIT WHILE
    ENDIF
WEND
END

示波器采用回零成功波形如下:采用模式19,采用OP模拟原点信号,驱动器感应到原点后低速反找,离开原点时停止运动,清空位置信息。
在这里插入图片描述

回零时碰到限位开关停止运动,AXISSTATUS轴状态显示40h正在回零中,回零完成状态为0h。
在这里插入图片描述

本次,正运动技术EtherCAT与RTEX驱动器轴回零的配置与实现,就分享到这里。

更多精彩内容请关注“正运动小助手”公众号,需要相关开发环境与例程代码,请咨询正运动技术销售工程师。

本文由正运动技术原创,欢迎大家转载,共同学习,一起提高中国智能制造水平。文章版权归正运动技术所有,如有转载请注明文章来源。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/10966.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

学长教你学C-day9-C语言循环结构与选择结构

小刘最近在读《老子》&#xff0c;被道家“一生二&#xff0c;二生三”的哲学思想迷住了&#xff0c;他不禁想代码是谁生的呢&#xff1f;首先代码就是一堆字符&#xff0c;字符不是代码&#xff0c;就像“白马非马”&#xff0c;但是当字符按照一定的顺序组织起来时&#xff0…

《Python编程无师自通》读书笔记

不能越界访问函数内部定义的变量 global不能乱用 啥时候用元组 join连接 小点&#xff0c;但第一次见会觉得蛮有意思。 Hangman 10.1的案例蛮有意思的 一搜才发现是十分经典的文字游戏 过程式编程的缺点以及函数式编程和面向对象编程的解决方法 过程式编程的缺点 函数式编程…

Web学习笔记-中期项目(拳皇)

CONTENTS项目原理一、基础文件二、ac_game_object框架三、游戏地图与玩家模型的创建项目原理 游戏中一个物体运动的原理是浏览器每秒钟刷新60次&#xff0c;每次我们单独计算这个物体新的位置&#xff0c;然后把他刷新出来&#xff0c;这样最终人眼看起来就是移动的效果。 对…

YOLO系列概述(yolov1至yolov7)

YOLO系列概述&#xff08;yolov1至yolov7&#xff09; 参考&#xff1a; 睿智的目标检测53——Pytorch搭建YoloX目标检测平台YoloV7 yolo的发展历史 首先我们来看一下yolo系列的发展历史&#xff0c;yolo v1和yolox是anchor free的方法&#xff0c;yolov2&#xff0c;yolov3…

使用 Vue3 实现锚点组件

目录 1. 需求介绍 2. 实现过程 2.1 表单结构介绍 2.2 确定锚点组件接收的参数及使用方法 2.2.1 form-dom&#xff1a;需要被锚点组件控制的表单实例 2.2.2 active-anchor&#xff1a;默认激活的锚点 2.2.3 title-class&#xff1a;表单标题特有的类名 2.2.4 将 锚点组件…

5-FITC,5-FITC(isomer I),5-异硫氰酸荧光素,5-Flourescein iso-thiocyanate

产品名称&#xff1a;5-FITC&#xff0c;5-异硫氰酸荧光素 英文名称&#xff1a;5-Flourescein iso-thiocyanate 英文别名&#xff1a;5-FITC&#xff1b;5-Flourescein iso-thiocyanate&#xff1b;FITC Isomer I [5-FITC; fluorescein-5-isothiocyanate] CAS#&#xff1a;…

labview 串口通信 modbusRtu

在自动化或测试项目中&#xff0c;上位机软件需要和PLC及仪表通信&#xff0c;本文简单描述这个问题。 1.在程序框图中放置4个图标 &#xff08;1&#xff09;创建modbus 主站实例&#xff08;按如下图标识①,在框图中放Create Master Instance.vi) 图1 放置四个图标 &…

C++ Reference: Standard C++ Library reference: Containers: deque: deque: resize

C官网参考链接&#xff1a;https://cplusplus.com/reference/deque/deque/resize/ 公有成员函数 <deque> std::deque::resize C98 void resize (size_type n, value_type val value_type()); C11 void resize (size_type n); void resize (size_type n, const value_t…

React组件复用

mixins&#xff08;已废弃&#xff09; https://react.docschina.org/blog/2016/07/13/mixins-considered-harmful.html mixin引入了隐式依赖关系 对于组件中的方法和数据的来源不明确&#xff0c;不容易维护 Mixins 导致名称冲突Mixins 导致滚雪球般的复杂性 render-props技术…

C语言学习之路(基础篇)—— 指针(上)

说明&#xff1a;该篇博客是博主一字一码编写的&#xff0c;实属不易&#xff0c;请尊重原创&#xff0c;谢谢大家&#xff01; 概述 1) 内存 内存含义&#xff1a; 存储器&#xff1a; 计算机的组成中&#xff0c;用来存储程序和数据&#xff0c;辅助CPU进行运算处理的重要…

python切分TXT的句子到Excel(复制可用)——以及python切分句子遇到的问题汇总

文章目录完整代码时间转化和提取各种对象类型转换时间序列类属性数据转换完整代码 import jieba.analyseimport jieba.posseg as pseg from wordcloud import WordCloud import xlsxwriter # encodinggbk import xlsxwriterf open(E:/data/xieyangteng/review.txt, r, encodi…

波的相关参数概念整理

频率&#xff08;frequency&#xff09;&#xff0c;符号f&#xff0c;表示单位时间内完成周期性变化的次数。f1/T&#xff0c;单位s-1 角频率&#xff0c;符号ω&#xff0c;表示单位时间内变化的角弧度值。ω 2πf 2π/T,单位rad/s 波长&#xff08;wavelength&#xff0…

<SQL编程工具MySQL、SQLyog安装及环境配置教程>——《SQL》

目录 1.MySQL安装&#xff1a; 1.1 MySQL下载安装&#xff1a; 1.2 MySQL环境变量配置&#xff1a; 2.SQLyog安装&#xff1a; 2.1 SQLyog下载安装&#xff1a; 3.写在最后的话&#xff1a; 后记&#xff1a;●由于作者水平有限&#xff0c;文章难免存在谬误之处&…

力扣刷题day49|647回文子串、516最长回文子序列

文章目录647. 回文子串思路暴力解法动态规划五部曲516. 最长回文子序列思路动态规划五部曲647. 回文子串 力扣题目链接 给你一个字符串 s &#xff0c;请你统计并返回这个字符串中 回文子串 的数目。 回文字符串 是正着读和倒过来读一样的字符串。 子字符串 是字符串中的由…

代码随想录算法训练营第一天|LeetCode704二分查找、LeetCode27移除元素

LeetCode704二分查找 题目链接&#xff1a;704二分查找 思路&#xff1a; 以前刷过不少题&#xff0c;也看过不少题解&#xff0c;就记得区间有不少原则&#xff0c;乍一想有哪些想不起来了&#xff0c;反正我是选择了最简单易懂的左闭右闭原则。 1、区间左闭右闭原则。 2、w…

SpringBoot SpringBoot 开发实用篇 2 配置高级 2.3 常用计量单位应用

SpringBoot 【黑马程序员SpringBoot2全套视频教程&#xff0c;springboot零基础到项目实战&#xff08;spring boot2完整版&#xff09;】 SpringBoot 开发实用篇 文章目录SpringBootSpringBoot 开发实用篇2 配置高级2.3 常用计量单位应用2.3.1 问题引入2.3.2 常用计量单位应…

实验2 存储器设计与实现【计算机组成原理】

实验2 存储器设计与实现【计算机组成原理】实验2 存储器设计与实现一、实验目的二、实验环境三、实验原理四、实验任务五、实验结果&#xff1a;六、心得体会&#xff1a;实验2 存储器设计与实现 一、实验目的 掌握单端口RAM和ROM原理和设计方法。掌握32位数据的读出和写入方…

【LeetCode-中等】343. 整数拆分(详解)

题目 给定一个正整数 n &#xff0c;将其拆分为 k 个 正整数 的和&#xff08; k > 2 &#xff09;&#xff0c;并使这些整数的乘积最大化。 返回 你可以获得的最大乘积 。 力扣&#xff1a;题目链接 方法1&#xff1a;动态规划 完全不了解动态规划&#xff1f; 动态规划…

图像运算和图像增强九

图像运算和图像增强九 图像锐化之 Roberts、Prewitt 算子实现边缘检测 &#xff08;1&#xff09;图像锐化 图像锐化的目的是为了使图像的边缘、轮廓线以及图像的细节变得清晰&#xff0c;经过平滑的图像变得模糊的根本原因是图像受到了平均或积分运算&#xff0c;因此可以对…

LeetCode刷题(python版)——Topic70. 爬楼梯

一、题设 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢&#xff1f; 示例 1&#xff1a; 输入&#xff1a;n 2 输出&#xff1a;2 解释&#xff1a;有两种方法可以爬到楼顶。 1. 1 阶 1 阶 2. 2 阶 示例…