CANopen对象字典

什么是对象字典(Object Dictionary)

想象CANopen的应用场景之一——电机控制
在这里插入图片描述
控制器通过CAN总线控制电机1和电机2。同时需要,电机1和电机2把实时的状态参数返回给控制器,两者之间大概有以下通信内容:
在这里插入图片描述

要完成这些通信项目,控制器和电机之间,必然要规定一个通信协议。比如,什么报文是控制启动/停止的,怎样的报文是调节速度的,怎样的报文是编码器信息等等。这个协议就是对象字典要描述的,有了一个电机(驱动器)的对象字典,控制器才能知道怎么控制一个电机,并获取电机的各种运行状态,就像两者沟通的桥梁(不好意思,我只能解释成这样了😂,具体可以看CiA301协议原文)

对一个有11位ID和8个字节数据的标准帧。如果说11位的ID分类规定了CANopen一个大的报文类型,那么对象字典对8个字节数据的意义作了具体描述。对象字典规定,在服务数据对象(SDO)中8个字节的数据框架是这样的

字节0字节1字节2字节3字节4字节5字节6字节7
csindex_lowindex_highsub_indexd0d1d2d3
  • cs 功能码,一个字节,比如,在SDOtx中0x2f,0x2b, 0x27, 0x23分别表示跟在字索引后面的数据长度为1个字节,2个字节,3个字节,4个字节。在SDOrx中,0x60表示收到了正确的回复,0x80表示错误
  • index(索引) , 主索引占两个字节,子索引占一个字节,对象字典就是对,每个索引对应的对象,及对象的属性(长度,类型,是否可映射PDO等)的说明
    比如,CiA402中 索引0x6040对应的对象是控制字
    在这里插入图片描述
  • 数据,最大占4个字节,低位字节在前

具体例子:

6040h这个对象简述之。
之前用过鸣志的电机 ,官方的CANopen手册中,截取一段看看:
在这里插入图片描述
再来看看6040h控制字这个对象每一个位的具体含义,CiA402协议中是这样定义的
在这里插入图片描述
M Mandatory表示强制执行,O Optional表示可选,按我的理解,标记为M的位,电机厂家在制订协议时必须按CiA402执行, 标记为O的位,厂家可以自定义,鸣志的控制字定义如下
在这里插入图片描述
可以看出,16位控制字中,标记为M7,3,2,1,0位确实是按CiA402执行的,根据实际使用经验:位3,2,1,0是控制电机使能/去使能; 位81是停止电机,位71是清除错误

向控制字,即6040h0x000f,那么8个字节的数据是这样的:

0x2b // 写两个字节,所以这里是2b
0x40 0x60  // 索引
0x00 // 子索引 6040没有子索引
0x0f 0x00 // 16位的数据
0x00 0x00  // 最后两个是不关心的,直接写00
// 完整字节序
0x2b 0x40 0x60 0x00 0x0f 0x00 0x00 0x00

比如这个电机nodeid为3,把这个数据通过SDO发出,则加上11位ID的话:

0x06 0x03 0x2b 0x40 0x60 0x00 0x0f 0x00 0x00 0x00

鸣声驱动器的CANopen手册示例是这样说的:
在这里插入图片描述
实际上,发这些报文就是使能并启动电机了。再往设置转速的对象(60FFh)里写设定值 ,电机就会按这个转速旋转。

  • 15
    点赞
  • 55
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值