Elmo驱动器:CANopen协议电机PVT模式的PDO映射

0.前言

最近在做Rhex机器人,该机器人的六条腿部每条腿均只有一个电机,对步态的控制完全依赖于一个电机的控制,使用以前用的比较简单的电机位置PTP(Point to Point)模式时由于每两个点之间驱动器均要进行一次加速减速的过程,而实际的控制过程中对每条腿每个周期的规划是一个整体的加速减速过程,PTP导致电机运动噪音很大(每两个点之间从0加速到最大速度再减速到0,存在很大的冲击),而且在整个周期很短又有六条腿的情况下高频控制对通信带宽要求很高,因此决定采用PVT(Position Velocity Time)模式,即对一个周期内每个位置的速度和两个点直接的时间进行控制,这样就能实现整个周期的连续平稳运动。

1.开启PVT模式的PDO映射

Elmo驱动器预设了CANOPEN协议下的高速PVT模式的PDO映射,即直接通过PDO传输数据,不需要通过SDO访问对象字典的方法对数据进行读写,从而实现主机与从机直接的高效数据传递。
PDO的映射通过客户端(此时应为用户采用的CAN发送模块)向服务端(驱动器)发送SDO指令实现,SDO指令结构如下图所示



其中字节0为配置数据,字节123为对象字典index和sub-index,字节4567为数据
现在我们想将PDO映射为PVT模式参数,因此先看看使用PDO映射PVT时要在SDO指令中使用的接受PDO映射对象的ID和子ID


ID0x1600-0x1603分别对应R-PDO1~R-POD4,每一个ID同时具备两个子ID分别用于指明映射到该PDO的对象个数与映射的对象的ID、子ID和Date。
除此之外,对PDO进行映射时还需要对触发模式进行配置,




此处只需对传输模式进行配置,即sub-ID 2

由于我们要讲PVT模式参数映射到PDO,因此还需要知道PVT参数的对象ID

综合以上信息,此处我们将PVT模式的数据映射到RPDO3,将其配置为异步接收,即不需要同步信号,接收到数据后在驱动器空闲循环立即对数据进行处理,具体配置代码如下

/*** @brief SetPVTPDOMapping*      将PVT参数(0x2001)映射到RPDO2,用于快速传递PVT参数。*/void Driver::SetPVTPDOMapping()
{can_frame frame;memset(&frame, 0, sizeof(can_frame));frame.can_id = mCANId - ELMO_CTRL_ID_BASE + 0x600;frame.can_dlc = 8;//0x1602(0)设置为0  Stop all emissions of RPDO2frame.data[0] = 0x23; //Initiate download, expedited, index valid, data validframe.data[1] = 0x02; //Index (LO) to store atframe.data[2] = 0x16; //Index (HI) to store atframe.data[3] = 0x0;  //Sub-index to store at.frame.data[4] = 0x0;  //Data lengthframe.data[5] = 0x0;  //Sub-indexframe.data[6] = 0x0;  //High dataframe.data[7] = 0x0;  //Low dataemit sendCANMsg_sig(frame);//0x1602(1)设置为0x20010040 将PVT映射到RPDO2memset(&frame, 0, sizeof(can_frame));frame.can_id = mCANId - ELMO_CTRL_ID_BASE + 0x600;frame.can_dlc = 8;frame.data[0] = 0x23;frame.data[1] = 0x02;frame.data[2] = 0x16;frame.data[3] = 0x1;frame.data[4] = 0x40;frame.data[5] = 0x0;frame.data[6] = 0x01;frame.data[7] = 0x20;emit sendCANMsg_sig(frame);//0x1401(2)设置为255 异步触发 接收到数据即处理memset(&frame, 0, sizeof(can_frame));frame.can_id = mCANId - ELMO_CTRL_ID_BASE + 0x600;frame.can_dlc = 8;frame.data[0] = 0x23;frame.data[1] = 0x02;frame.data[2] = 0x14;frame.data[3] = 0x02;frame.data[4] = 0xff;emit sendCANMsg_sig(frame);//0x1601(0)设置为1  启动PDO映射的对象(1个)memset(&frame, 0, sizeof(can_frame));frame.can_id = mCANId - ELMO_CTRL_ID_BASE + 0x600;frame.can_dlc = 8;frame.data[0] = 0x23;frame.data[1] = 0x02;frame.data[2] = 0x16;frame.data[3] = 0x0;frame.data[4] = 0x1;frame.data[5] = 0x0;frame.data[6] = 0x0;frame.data[7] = 0x0;emit sendCANMsg_sig(frame);
}

2.使用效果

经过上述配置之后,即可通过RPDO2向驱动器发送PVT参数,用于填充PVT队列,使用PVT队列在队列数据剩余N个时返回的紧急指令作为反馈,通过RPDO2(CANID 0X400+ID)向PVT队列填充数据,从而维持整个PVT模式的持续运动。

Elmo驱动器:CANopen协议电机PVT模式的PDO映射相关推荐

  1. CANopen协议 学习笔记

    大纲 前沿:以问题为导向学习是最高效的,本文主要讲述在学习Canopen协议中的一些疑惑点, 分享一些学习心得,不讲协议本身的内容. 1.主机和从机的概念? 2.PDO和SDO的区别是什么? 3.OD ...

  2. CANopen协议本质

    一.CAN总线协议 CAN总线协议规定了ISO七层通信协议模型的物理层和数据链路层.其具体实现都已经被固化到CAN总线控制芯片中,无需软件实现.理论上,CAN总线在速率小于5K时,距离可达10000m ...

  3. 【转】CAN总线与CANOPEN协议入门

    1. 什么是CAN总线协议 CAN总线协议最早是为了统一汽车车载设备间通信的标准而开发的协议,后来由于其高速.稳定.可靠的特点,已经被ISO标准化并广泛应用于工控.医疗等领域,目前依然是欧洲汽车网络的 ...

  4. CAN总线与CANOPEN协议入门

    1. 什么是CAN总线协议 CAN总线协议最早是为了统一汽车车载设备间通信的标准而开发的协议,后来由于其高速.稳定.可靠的特点,已经被ISO标准化并广泛应用于工控.医疗等领域,目前依然是欧洲汽车网络的 ...

  5. ELMO驱动器用arm板子控制,并工作在 PVT(position-velocity-time)模式

    Elmo驱动器 SimplIQ系列可以结合编码器信息,以多种模式控制伺服电机,常用的模式有速度控制模式,力矩控制模式,微步控制模式.实验室使用的场景基本就是速度模式控制伺服电机的旋转,对于四轮独立驱动 ...

  6. CANopen协议及应用

    文章目录 CANopen协议 CAN总线 CAN报文 CANopen概述 对象字典(Object Dictionary) 概述 通讯对象子协议区 制造商特定子协议 CANopen报文 NMT网络管理 ...

  7. CanOpen协议的伺服驱动控制

    一.CanOpen的基本介绍: 1.基本介绍: CanOpen在CAN网络7层协议中,处于应用层.CANopen协议是在20世纪90年代末,由CIA组织CAN-in-Automation,(http: ...

  8. 基于CANOpen协议驱动直流无刷减速电机

    1.硬件连接 硬件连接没什么复杂的,就连接对应的线即可,下面是我画的一个简单的电气连接图 2.上位机配置 上位机主要配置驱动器节点ID,波特率,心跳,CAN驱动.我用的是科亚的上位机和蓝玖的电机.使用 ...

  9. CANopen协议,上位机开发(C#)

    文件作用:支持CANopen协议的硬件设备的:参数表 例如:伺服驱动器,电视机,洗衣机,手机等硬件都需要设置参数后,才能正常使用. 作用:比如电视机背光亮度太高,晚上看电视刺眼睛,我们需要按自己的喜好 ...

最新文章

  1. cnzz统计代码引起的Bad Request - Request Too Long
  2. python学起来难不难-新手学python数据分析难不难?
  3. 026_CSS内边距
  4. Java Okio-更加高效易用的IO库
  5. 工作流调度系统介绍,常见工作流调度系统对比,azkaban与Oozie对比,Azkaban介绍与特性(来自学习笔记)
  6. nuSVC的使用和解读
  7. 如何在myeclipse中导入jar包?
  8. Linux下查看文件和文件夹大小的df和du命令(链接)
  9. HBase之超时机制
  10. php限制单设备登录,app限制一个账号只能单设备登陆
  11. python空值填充_pandas妙招之 DataFrame基础运算以及空值填充
  12. 看电影“刺客聂隐娘”前必须了解的知识(绝无剧透)
  13. 【PM模块】基础概念简介
  14. CUDA编程1--GPU内存模型
  15. 百世快递财报:净亏损大幅缩窄38%,来之不易
  16. Win7下安装ubuntu14.10系统
  17. S32k Flexcan 手写驱动,不使用SDK
  18. 计算机图像处理知识点复习
  19. 渗透小实战 BSPHP验证系统存在未授权访问漏洞
  20. 02前端入门HTML5 +CSS3+电商网页制作:CSS

热门文章

  1. Java获取当天或者明天等零点时间(00:00:00)0时0分0秒的方法
  2. 计算机二级考试报名发票,从业资格考试报名
  3. 运动跑步耳机哪个牌子好、最受欢迎的跑步耳机
  4. scrcpy投屏工具的在harmonyOS开发上的使用
  5. 未找到 app.json 中的定义的 pages pages/index/index 对应的 WXML 文件
  6. Caffe学习笔记(三)——Matlab接口
  7. 渗透测试学习建议~拿去日站吧
  8. 问题:Xcode8更新之后模拟器找不到了
  9. 关于《北京市安全生产专项整治三年行动计划》的解读
  10. Pix2Pix——基于GAN的图像风格迁移模型