首先熟悉了ds301,搞懂了sdo,Pdo,sync,heart beat,等协议基本知识,使用CAN协议分析仪通过sdo简单的进行修改pdo映射,修改控制模式等操作,然后将开源协议canfestival移植到实验板,设定好pdo的通信参数,包括cobid设置,同步方式等,然后就是映射参数,在这里要注意的是如果是动态映射,流程如下所示:
//动态映射流程,直接写入会出现无法写入的问题
//1) Disable PDO (1400/01 = 80000000h)
//2) Delete PDO mapping (1600/00 = 0)
//3) Set new PDO mapping (1600/01 = XXXX,1600/02 = XXXX....)
//4) Set PDO mapping number (1600/00 = new number)
//5) Enable PDO (1400/01 = 00000XXX(COB-ID))
搞定了ds301的基本通信之后,就可以进行ds402的学习了,可以参考ds402和汇川的canopen说明书和台达canopen使用说明书,相互借鉴参考,先搞定最简单的速度控制模式,然后再搞位置控制模式,其中涉及到一个叫做controlword控制字的设置问题.具体设置根据需要参考如下
index6040 controlword
//1: 判断状态字6041的bit12位是否能接新的位置指令
//2: 将控制字6040bit5设置1
//3: bit10 ,bit12 目标位置是否到达 是否可接收新的指令
//在PP模式下6040 控制字的部分定义
//-------------------------------------------------------------------------------------------------------------------------------------//
//bit0: Switch on
//bit1: enable volatge
//bit2: 快速停机
//bit3: 伺服运行
//bit4:使能新位置指令,0->1表示预使能一段新的位置指令,是否使能成功由伺服状态决定。1->0 表示清零状态字的bit12,是否成功取决与伺服状态。
//bit5: 位置指令更新模式,0 非立刻更新, 1 立刻更新
//bit6: 位置指令类型, 0 目标位置是绝对位置指令 1 目标位置是相对位置指令
//-------------------------------------------------------------------------------------------------------------------------------------//
index6041 statusword 状态字(只读)
//在pp模式下6041 状态字的部分定义
//-------------------------------------------------------------------------------------------------------------------------------------//
//bit10: 目标位置是否到达:0 目标位置未到达 1 目标位置已到达
//bit11: 软件内部设置超限:0 位置指令未到达软件内部位置限制 1 位置指令已到达软件内部位置限制
//bit12: 位置指令是否能够接收: 0 伺服可接受新的位置指令 1 伺服不能接受新的位置指令
//bit13: 位置偏差状态: 0 位置偏差在位置偏差过大阈值 1位置偏差超出位置偏差过大阈值
//bit14: NA
//bit15: 原点回零完成: 0 原点回零未完成 1 原点回零完成
//--------------------------------------------------------------------------------------------------------------------------------------//
搞定了位置模式就是插补模式了,插补模式可以实现多轴的精准同步,对控制字的要求不多,通过pdo发送
控制字为0x0f servo on 之后再每个同步周期通过pdo给index60c1-sub01发送插补值就可以了。
//插补模式控制
//P1-01 = 0x0C,
//Object 60C0h: Interpolation sub mode select
//0:廠商自訂 (線性插值—不須設定
//pos difference[OD-60C1sub2])
//-1:廠商自訂 (台達自訂–-須設定 pos
//difference[OD-60C1sub2])
//Object 60C1h: Interpolation data record
//收到 SYNC message 前, PDO 每 T msec 設定一次此紀錄; T 值是由 60C2h:01h 決定
//Object 60C2h: Interpolation time period