stm32实现CANOpen主机功能,无需canfestival库

前言

我们知道CANOpen协议比较复杂,有对象字典、sdo、pdo等一大堆概念和功能,DS301、DS401等很多协议,CANOpen专门的canfestival库也是代码量巨大,异常复杂。然而实际上,这个复杂是针对实现一个完整的CANOpen从机来说的,CANOpen主机功能较为单一,甚至不需要第三方的类库。而我们日常工作中,经常做的是利用stm32作为主机,去控制CANOpen从机,因此,事情就变得很简单了。

详细说明

我们以常见的福尔哈贝永磁同步电机驱动器为例:
stm32f4控制器作为canopen主机,两个福尔哈贝驱动器作为canopen从机,首先要做的工作是配置从机,从机配置好了工作就完成了一大半,而常用的canopen从机设备都提供了专门的配置工具软件及对应的对象字典。

配置从机节点

1、配置驱动器节点号

在福尔哈贝工具软件配置-- 驱动器通信参数 里面,分别配成1和2
在这里插入图片描述

2、配置驱动器工作模式和can波特率

配置–驱动器功能里面,工作模式设置为转矩周期同步控制模式CST,通信–概要设置,可以设置can总线波特率
在这里插入图片描述

3、(重要)配置PDO通信参数

在can–pdo选项里面,设置 rxpdo和txpdo的canid(注意rxpdo和txpdo都是针对从机定义的,rx表示从机接收,tx表示从机发送,PDO的id号不会随节点号自动变,得手动修改,遵循DS301协议,节点1就是201 301 181 281等,节点2就是202 302 182 282等等类推)
在这里插入图片描述

TxPDO还有个事件定时器,因为其传输类型设置为255(表示异步事件触发类型),这个事件定时器就是canopen从机内部事件的触发频率,单位毫秒,这样就可以分别为四个pdo设置不同的发送频率。

4、(重要)配置PDO具体映射

在 配置–pdo映射里面,可以分别为RxPDO及TxPDO配置实际对应的对象字典内容
在这里插入图片描述
在这里插入图片描述
可以看到TxPDO和RxPDO分别可以设置四组,上图RxPDO四组分别配置为:单独的控制字、控制字+目标位置、控制字+目标速度、控制字+目标转矩,对应不同的控制方式,这其实就是定义了驱动器正常运行时需要定期接收上位机的控制指令
TxPDO此处只设置了3组,第一个是状态字和实际转矩,第二个是实际速度及实际位置,第三个是电机电压及驱动板温度,这其实就是定义驱动器定时反馈给上位机的状态
完成上述内容,从机基本配置完毕了,接下来实现stm32主机的功能。

实现stm32主机功能

主机只要实现少数几个功能即可,分别是NMT主机控制,少量SDO控制指令,以及对应从机配置的RxPDO发送及TxPDO解析。

1、开启从机节点

遵循DS401协议,电机驱动器节点在上电后还是关闭状态,需要从主机发送特定的NMT start node指令,节点才会开启,节点开启后会自动按TxPDO的配置向总线发送can帧
在这里插入图片描述
NMT start node指令帧很简单,标准帧id为0x000,数据长度2字节,数据内容为0x01 0N,其中N为对应节点的节点号。

2、使能驱动器节点

节点开启后,驱动器还是处于闭锁状态,可以看到上图返回的状态字为0x0040,需要给从机对象字典6040的地址发送数据0x0006,使其切换到待机状态,待机状态下返回状态字变为0x0021
分别有两种方式发送,以节点1为例,pdo方式就是直接发送canid为201(节点1的第一组RxPDO,对应内容为状态字设定),数据内容为 0x06 00的两个字节标准帧;sdo方式则是发送 canid为0x601的8字节标准帧,内容为0x2b 40 60 00 06 00 00 00 ,并且将收到从机发回的canid为581的回复。
这里可以看出CANOpen协议SDO和PDO通讯的区别,SDO发送字节更多,从机会回复主机,优点是能确认从机收到指令,适合重要且发送频率较低的指令;而PDO发送字节更少且从机不会回复,优点是占用总线带宽更少,适合需要频繁重复发送的指令。

3、运行驱动器节点

接下来可以将从机从待机状态切换到操作状态,操作状态下状态字将变成0x0027,方法是往状态字对应的0x6040地址写0x000f,同样也可以sdo或者pdo方式
驱动器节点进入操作状态后,就可以发送力矩让电机转起来了。这里就非常适合用pdo方式发送了,因为需要高频重复发送,而且不需要回复,pdo可以节省带宽。我们往rxpdo4发送控制字和转矩。例如,令驱动器1电机转矩100旋转,则向canid 501 发送4字节标准帧,内容为0x0f 00 64 00即可。
发送0转矩可以让电机停下来,或者再次发送控制字0x0006,可以让驱动器直接进入待机状态。

4、其它NMT指令:

1)、主机发送 can id 0x000 2字节数据 02 0N 可以关闭节点号为N的节点
2)、主机发送 can id 0x000 2字节数据 81 0N 可以让节点号为N的节点重启
实现上述内容,再实现对从机TxPDO的数据解析(数据解析比较简单此处就不赘述了),整个上位机功能就全部完成了。

最后附上本文所述源码:上位机关键代码

  • 12
    点赞
  • 61
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值