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 = 0speed = 100 '回零速度creep = 10 '反找速度accel = 1000datum(21,2) '驱动器回零模式value=2wait idleif axis_stopreason = 0 then ?回零成功else ?回零失败 ,停止原因:,axis_stopreason,状态字0x,hex(drive_status)endif
2.rtex总线驱动器
此模式下可使用rtex总线驱动器回零功能,此时mode2有效,回零模式查看驱动器手册即可(如下表)。 使用此模式原点和正负限位信号接在驱动器指定io上,等待datum触发回零即可。
初始化模式 11h z相
12h home↑ *2
13h home↓ *3
14h pot↑ *2
15h pot↓ *3
16h not↑ *2
17h not↓ *3
18h ext1↑ *2
19h ext1↓ *3
1ah ext2↑ *2
1bh ext2↓ *3
1ch ext3↑ *2
1dh ext3↓ *3
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(单总线控制器缺省0)global const pul_axisstart = 0 '本地脉冲轴起始轴号global const pul_axisnum = 0 '本地脉冲轴轴数量global const bus_axisstart = 0 '总线轴起始轴号global const bus_nodenum = 1 '总线配置节点数量,用于判断实际检测到的从站数量是否一致global bus_initstatus '总线初始化完成状态bus_initstatus = -1global bus_totalaxisnum '检查扫描的总轴数delay(3000) '延时3s等待驱动器上电,不同驱动器自身上电时间不同,具体根据驱动器调整延时?总线通讯周期:,servo_period,usecat_init() '初始化ecat总线 while (bus_initstatus = 0) ecat_init()wendend'***************************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 endifend sub
2.驱动器回零程序:
?开始回零table(0)=0base(0)units=(8388608/360) '脉冲当量speed=50 '找原点速度creep=10 '反找速度 accel=1000 decel=1000 delay(100)datum(21,19) '开始回零,模式19while 1 wait idle table(0)=drive_status '读取6041h状态字判断回零状态 if read_bit2(15,table(0)) then ?回零完成 exit while endifwendend示波器采用回零成功波形如下:采用模式19,采用op模拟原点信号,驱动器感应到原点后低速反找,离开原点时停止运动,清空位置信息。
回零时碰到限位开关停止运动,axisstatus轴状态显示40h正在回零中,回零完成状态为0h。
本次,正运动技术ethercat与rtex驱动器轴回零的配置与实现,就分享到这里。
光伏业遭遇三面夹击 加快转型成未来趋势
芯和半导体即将亮相IEEE国际微波周
传感器防水膜如何实现IPX7级防水防尘设计
详解翱翔的Facebook无人机:不止空中通信存在挑战
SAP B1如何设置数值的小数点位数
介绍控制器实现EtherCAT与RTEX驱动器的回零及其配置
一种通用的计价器防作弊脉冲的识别与控制方法
比特币质押系统开发数字资产抵押平台搭建
SystemVerilog中bind用法总结+送实验源码和脚本
人工智能的洪荒之力正在吞噬一切
芬兰技术研究中心(VTT)推出的无人驾驶汽车 可在恶劣的天气情况下进行无间断的导航服务
网桥、Hub、交换机、路由器及其它
上海市和阿里、蚂蚁金服达成战略合作,马云透露更多业务将放在沪
链条输送机的常见问题及产生原因
电池品管圈活动的基本概念
信号放大器和中继器的区别以及优劣势
关于FPGA学习过程中的一些理论知识浅析
磁力泵的五项维护保养方法是怎样的
美国政府推“华为禁令”,美国元器件供应商苦不堪言
使用MAX34451进行PWM裕量调节