首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何编写简单的CANopen层

如何编写简单的CANopen层
EN

Stack Overflow用户
提问于 2009-08-05 11:19:21
回答 7查看 34K关注 1票数 20

我们有一个机器人项目,其中电机控制器使用CANopen进行通信。我需要使用主微控制器与这些电机控制器进行通信。问题是,我需要在这个微控制器中开发一个CANopen层,但我只知道如何在低层(CAN)发送和接收。

我不太了解CANopen (PDO、SDO、心跳、对象字典等)。我试图阅读CiA规范,但它非常复杂。如果有人能给我指出正确的方向,或者给我一个很好的教程来编写一个简单的CANopen层,我将不胜感激。

EN

回答 7

Stack Overflow用户

发布于 2013-07-23 21:38:12

由于这似乎是一个普遍感兴趣的话题-我同意理解完整的原始规范可能是一种痛苦的经历。因此,这里有一个关于“让你的驱动前进”的建议,而不是“实现整个事情”:

  • 检查您的CANopen驱动器是否可以通过CiA 402标准对象进行操作,出于性能原因,完全可以不配置和使用PDO,并且您并不真正需要心跳,a.s.o。它通常切换驱动器的状态机(对象6040h,控制字),设置操作模式(对象6060h),并设置其他参数,如“轮廓位置速度”。然后,
  • 只实现加速的SDO传输。(请参阅http://en.wikipedia.org/wiki/CANopen。)SDO download用于在驱动器中写入/更改对象。SDO upload用于读取对象。
  • 我建议带一个可以读写SDO的PC软件,并且有一个can总线监视器。(我们的Kickdrive Zero免费软件可以做到这一点,但实际上,任何其他用于CANopen的PC工具都应该可以工作。)对所需的数据类型和对象执行一些示例读写操作。看看这是如何转化为CAN级别的帧的。对于基本的整数数据类型,总是只有一个帧用于请求,一个帧用于应答。
  • 现在在您的微控制器上构建了一个简单的协议栈,可以发送SDO下载/上传请求并处理应答。

免责声明-上面的声明甚至没有接近“实现CANopen",或”支持CANopen",甚至“符合CANopen”。这是关于“让你的驱动器尽快移动,没有第三方代码”。这有时是正确的做法。

票数 13
EN

Stack Overflow用户

发布于 2012-06-22 06:03:57

我们从头开始为嵌入式ARM和Windows PC设备实现了我们的CANopen层。这并不是不可能的,不像之前的答案可能会让你思考。如果您只需要CANopen的基本功能,并且可以快速了解该协议的概念,那么您可以相当快地启动并运行它。

您将不得不阅读CiA规范,没有办法避免它,但一开始它可能会变得有些不堪重负。我建议你从阅读Pfeiffer,Ayre和Keydel的"Embedded Networking with CAN and CANopen“开始。它很好地解释了基本概念,这反过来有助于更好地理解规范。

票数 4
EN

Stack Overflow用户

发布于 2014-10-04 11:09:42

尝试使用CanFestival堆栈-它是免费的,并且可以很容易地从OSes移植到只有滴答计时器的裸机上。

4-6个月看起来有点牵强--你可能只需要一个主服务器或一个从服务器,我们在3-4周内用C++完成了一个仅主服务器的实现。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1232624

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档