20

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

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

4

7 回答 7

13

由于这似乎是一个普遍感兴趣的话题——我同意理解完整的原始规格可能是一种痛苦的经历。所以这里有一个“让你的驱动器继续前进”的建议,而不是“实施整个事情”:

  • 检查您的 CANopen 驱动器是否可以通过 CiA 402 标准对象进行操作,出于性能原因,不配置和使用 PDO 是完全可以的,而且您实际上不需要心跳,因为它通常是切换驱动器的状态机(对象 6040h , 控制字),设置操作模式(对象 6060h),以及设置附加参数,如“轮廓位置速度”。

  • 然后只执行加速 SDO 传输。(参见http://en.wikipedia.org/wiki/CANopen。) SDO 下载用于写入/更改驱动器中的对象。SDO 上传用于读取对象。

  • 我建议使用可以读写 SDO 并具有 CAN 总线监视器的 PC 软件。(我们的Kickdrive Zero免费软件可以做到这一点,但实际上,任何其他适用于 CANopen 的 PC 工具都应该可以工作。)对您需要的数据类型和对象进行一些示例读取和写入。看看这如何转化为 CAN 级别的帧。对于基本的整数数据类型,请求总是只有一帧,答案是一帧。

  • 现在在您的微控制器上构建一个简单的协议栈,可以发送 SDO 下载/上传请求并处理答案。

免责声明 - 上述内容甚至与“实现 CANopen”或“支持 CANopen”甚至“符合 CANopen”都不相近。它是关于“让您的驱动器尽快移动且无需第三方代码”。这有时是正确的做法。

于 2013-07-23T13:38:11.643 回答
4

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

您将不得不阅读 CiA 规范,没有办法避免它,但起初它可能会变得有些不知所措。我建议您先阅读Pfeiffer、Ayre 和 Keydel 的“使用 CAN 和 CANopen 的嵌入式网络”。它很好地解释了基本概念,这反过来又有助于更好地理解规范。

于 2012-06-21T22:03:57.273 回答
3

尝试使用 CanFestival 堆栈——它是免费的,它可以轻松地从 Linux 等操作系统移植到只有一个滴答计时器的裸机。

4-6 个月似乎有点牵强——你可能只需要一个 master 或一个 slave,我们在 3-4 周内用 C++ 完成了一个 master-only 实现。

于 2014-10-04T03:09:41.867 回答
1

不幸的是,没有简单的CANopen 层。要支持 CANopen,您必须实现整个事情。

我建议您从第三方供应商处购买 CANopen 库。通常它们并不便宜,但考虑到您自己实施它所需的时间,它比您当时的工资便宜。

我们一直在使用PORT GmbH 的ANSI-C CANopen 库库,与我们尝试过的其他库相比,它价格适中且错误很少。

于 2009-08-05T11:39:51.157 回答
1

我们正在使用带有 Manager 插件的 MicroCANopen 堆栈,来自这里: http: //www.canopenstore.com/pip/microcanopen.html

与其他堆栈相比,它相对便宜,尽管我们在网络中的所有节点上都使用它,所以我无法提供关于它如何与其他 CANOpen 兼容设备一起运行的证明。

于 2009-12-08T19:52:41.487 回答
0

如果这是商业用途,我不会考虑实施 CANopen。这将带你(即使是一个子集)在四到六个月之间(如果你真的希望它工作的话)。我不知道你每小时的工资是多少,你的上市时间要求是多少。你需要自己做数学。

于 2009-08-05T11:43:50.760 回答
0

我使用的另一个商业解决方案是IXXAT 的 CANopen 软件。他们为许多不同的平台提供端口。

如前所述:您不是免费获得它,也不便宜。但是与几个月的开发时间相比,几千美元算什么?

于 2009-08-24T13:30:43.373 回答