CANopen | 对象字典OD 05 - 创建对象字典变量,映射到RPDO

文章目录

  • 一、前言
  • 二、实验目的
  • 三、对象字典OD
  • 四、通过RPDO修改变量rx_Value
    • 4.1、NMT指令让CANopen从站进入操作状态
  • 4.2、RPDO修改变量rx_Value

一、前言

该章节的源代码地址:github
在这里插入图片描述

CANopen | 对象字典OD 05 - 创建对象字典变量,映射到RPDO_第1张图片
CANopen | 对象字典OD 05 - 创建对象字典变量,映射到RPDO_第2张图片

以上摘自《CANopen_easy_begin》的第7章。

二、实验目的

CANopen从站有一个变量rx_Value,映射到PDO1上。接着,CANopen主站通过CANopen协议修改CANopen从站的变量rx_Value。

三、对象字典OD

CANopen | 对象字典OD 05 - 创建对象字典变量,映射到RPDO_第3张图片
使用Objdictedit软件打开文件夹/obj_dir/Slave1.od对象字典。
CANopen | 对象字典OD 05 - 创建对象字典变量,映射到RPDO_第4张图片
在0x2000~0x5FFF的地址创建变量rx_Value,类型是uint16_t。
CANopen | 对象字典OD 05 - 创建对象字典变量,映射到RPDO_第5张图片
在0x1600~0x17FF的Receive PDO Mapping里的0x1600是RPDO1,然后在映射对象1那里选择rx_Value变量。
CANopen | 对象字典OD 05 - 创建对象字典变量,映射到RPDO_第6张图片
然后,其他没有被映射的对象全部删除,如上图所示。此时,只有映射对象1,它是rx_Value。
CANopen | 对象字典OD 05 - 创建对象字典变量,映射到RPDO_第7张图片
最后,保存对象字典,建立词典(其实就是将对象字典生成.c代码,给STM32工程使用)。
CANopen | 对象字典OD 05 - 创建对象字典变量,映射到RPDO_第8张图片
打开STM32工程后,可以找到rx_Value变量。
CANopen | 对象字典OD 05 - 创建对象字典变量,映射到RPDO_第9张图片
编译(0 error,0 warning) ,下载代码。
CANopen | 对象字典OD 05 - 创建对象字典变量,映射到RPDO_第10张图片
可以看到,CANopen从站已经上线,在预操作状态。

四、通过RPDO修改变量rx_Value

4.1、NMT指令让CANopen从站进入操作状态

首先,根据CANopen的NMT协议,让CANopen从站进入操作状态。
CANopen | 对象字典OD 05 - 创建对象字典变量,映射到RPDO_第11张图片
CANopen | 对象字典OD 05 - 创建对象字典变量,映射到RPDO_第12张图片
从上图看到,CANopen从站Node-ID=0x01进入了操作状态,此时PDO的功能被打开。

请牢记住这一点,要使用canopen从站的PDO功能,就必须让它先进去操作状态!

4.2、RPDO修改变量rx_Value

CANopen | 对象字典OD 05 - 创建对象字典变量,映射到RPDO_第13张图片
回忆一下,变量rx_Value被映射到RPDO1。
CANopen | 对象字典OD 05 - 创建对象字典变量,映射到RPDO_第14张图片
所以通讯的CAN-ID为0x201。
CANopen | 对象字典OD 05 - 创建对象字典变量,映射到RPDO_第15张图片

从上图可以看到,通过发送CANID:0x201,数据0x77 0x88,接着从MDK观察到变量rx_Value确实变化了。
至于为什么rx_Value的值跟CAN包上的值顺序不一样,是因为CANopen是小端通讯的。

你可能感兴趣的:(CAN总线,单片机,stm32,c语言)