欢迎光临散文网 会员登陆 & 注册

《十一》canfestival系列教程之canopen中节点保护

2022-01-04 14:01 作者:GXTon_阿通  | 我要投稿

canopen中保护方式分为两种,

一种是心跳

另一种是节点保护

本文介绍节点保护的内容.

原理

假设

单片机是主机.

驱动器是从机.

单片机控制多个驱动器.


在can接线断开的时候,单片机无法控制驱动器,会导致电机跑飞.(会按照最后给定的速度转动)

这样可能会导致意外发生.

所以引入了节点保护(节点守护).

单片机会每隔一段时间,向每个驱动器发送一次请求节点保护的请求帧报文.

驱动器每隔一段时间也会进行检测,如果没有收到请求的报文,就说明掉线了.然后驱动器会停止工作.(这个功能要在驱动器端进行配置好)

单片机也会检测驱动器返回的节点保护报文,如果在规定时间没有收到,就认为驱动器掉线了.

之后的错误处理需要自己编写,比如编写亮红灯,还是串口输出,都可以.

程序流程之上电状态

就是字典里最后的一个代码.


它的作用就是,把配置好的字典参数赋值给一个结构体.最终传给程序使用

跳入里面可以看到:

NMT就是网络管理.

中实际上包含了节点保护部分.

这里NMTable_Initializer的值决定了单片机上电后,节点保护所处的状态.

跳进去,

说明单片机一上电是Unknown_state的状态.

分析到这里,其实只需要知道单片机一上电,实际上是Unknown_state状态的,

这个状态是没有办法发送节点报文的.

程序流程之发送节点保护

回到主函数.

主函数中会有一个切换到操作模式的函数.

它的意思是,把单片机切换到操作模式.

跳进之后,找到

然后再跳进,就会运行到

这里会运行到

也就是到了节点保护初始化函数.

跳进去.可以看到下图,里面有心跳和节点保护.我们用的是节点保护.

然后跳入,就会发现软件定时器的配置.canfestival为节点保护配置了一个软件定时器.

然后,就等中断到了,调用GuardTimeAlarm函数了.GuardTimeAlarm里面就是发送节点保护报文的.


所有这些功能都是在主函数中完成的,然后进入主while中就不需要配置了.只需要等待软件定时器中断了...

我们跳入GuardTimeAlarm函数.

100c和100D的索引配置

还是从这个函数去看.

config.h文件的改动

一般情况下是不需要进行改动的.

整体截图

主函数截图

改写报错函数.

当节点单片机长时间没有收到节点保护报文,就会报错.

然后,我在里面添加了点亮小灯.也就是can节点保护超时,小灯就会点亮.

在单片机can中断接收里面.

(驱动器返回的节点保护报文,会进入到这里)


《十一》canfestival系列教程之canopen中节点保护的评论 (共 条)

分享到微博请遵守国家法律