我们有一个机器人项目,电机控制器使用CANopen进行通信.我需要使用主微控制器与这些电机控制器进行通信.问题是我需要在这个微控制器中开发CANopen层,但我只知道如何在低级别(CAN)发送和接收.
我不太了解CANopen(PDO,SDO,Heartbeat,对象字典等).我试着阅读CiA规范,但它非常复杂.如果有人能指出我正确的方向,或者给我一个很好的教程来编写一个简单的CANopen层,我将不胜感激.
由于这似乎是一个普遍感兴趣的话题 - 我同意理解完整的原始规格可能是一种有点痛苦的经历.所以这里有一个建议"让你的车开始",而不是"实现整个事情":
检查您的CANopen驱动器是否可以通过CiA 402标准对象进行操作,出于性能原因,完全没有配置和使用PDO,并且您不需要心跳,因为它通常会切换驱动器的状态机(对象6040h) ,控制字),设置操作模式(对象6060h),以及设置其他参数,如"轮廓位置速度".
然后仅实施加速SDO传输.(请参阅http://en.wikipedia.org/wiki/CANopen.)SDO下载用于写入/更改驱动器中的对象.SDO上传用于读取对象.
我建议使用一个可以读写SDO的PC软件,并有一个CAN总线监控器.(我们的Kickdrive Zero免费软件可以做到这一点,但实际上,CANopen的任何其他PC工具都可以工作.)为您需要的数据类型和对象做一些示例读写操作.看看它如何转换为CAN级别的帧.对于基本的整数数据类型,它始终只是请求的一个帧,一个用于答案.
现在在您的微控制器上构建一个简单的协议栈,可以发送SDO下载/上传请求并处理答案.
免责声明 - 上述内容甚至不接近"实施CANopen","支持CANopen",甚至"CANopen兼容".这是关于"让你的驱动器尽快移动,没有第三方代码".有时这是正确的做法.