【问题标题】:Is it possible to have CAN on Arduino without extra hardware?是否可以在没有额外硬件的情况下在 Arduino 上安装 CAN?
【发布时间】:2014-02-28 08:14:43
【问题描述】:

我想让 Arduino 在 CAN 网络中运行。 Arduino是否存在提供OSI模型网络层的软件?我想用 GPIO/ADC 检测 HI/LOW 电平并用 DAC 将信号发送到网络。如果没有附加任何额外的硬件,那就太好了。不过我不介意CAN网络需要一个终端电阻。

我所说的 Arduino 是指其中任何一个。我的目的是保持开发环境。

如果不存在这样的软件,是否存在任何技术障碍,例如有限的闪存大小(再次,我不是指具有某些 Atmega 芯片的特定板)。

【问题讨论】:

  • 在想出这样的想法之前,您应该先问问自己是否知道 CAN 总线是什么以及它需要什么……这样做根本没有任何意义软件。第一个带有片上 CAN 控制器的 MCU 至少在 15 年前发布。甚至还有片上控制器+收发器的MCU,比如LPC11C22(ARM Cortex M0)。

标签: embedded arduino can-bus


【解决方案1】:

你可以写一个有点猛的CAN驱动,但它有很多限制。
首先是时序,很难做到位时序和仲裁。

您将能够获得 10kb 甚至 50kb,但这会消耗大量的 CPU 时间。
而且代码本身很痛苦。
您必须即时计算 CRC(容易),但要实现碰撞检测和所有时序参数并不容易。

曾经,我为一家公司做过这件事,但这是一个非常糟糕的主意。

最好花 1 欧元买一个芯片,然后开心。

【讨论】:

  • 谢谢。这就是我的想法——在船上安装真正的 CAN 控制器并具有中断和串行通信以与主控制器(ATMega,在 Arduino 的情况下)进行数据交换,这太实惠了。这可能是没有人这样做的原因。请问您实现它的平台是什么?
  • 绝对+1。如果没有硬件控制器,我不会靠近 CAN。
  • @NikitaVorontsov 我为 msp430 (Texas Instruments) 实现了它
  • @jeb 但是...为什么...贵公司有太多的钱和太多的开发人员?
  • @Lundin 这是一个愚蠢的想法,当我开始在那里工作时我简直不敢相信。是的,它花了很多钱,然后......他们添加了一个 CAN 芯片
【解决方案2】:

有几个 CAN Bus Shield 板可用(例如:thisthis),这将是一个更好的解决方案。这不仅仅是控制器芯片的问题,总线接口、线路驱动器和电源都需要考虑。如果您有资源和技能,您当然可以用更少的钱创建自己的板或面包板。

即使您通过 GPIO 对其进行 bit-bang,您也需要一些硬件模块来处理总线争用检测,而且它会非常慢,并且可能无法与总线上的“真实”CAN 控制器很好地互操作。

如果您的目标是在您自己设计的设备之间进行通信,而不是在现成的 CAN 设备之间进行通信,那么您就不需要 CAN,专有的东西就足够了,并且 UART 的执行速度会快一点-砰砰的 CAN 实现。

【讨论】:

  • 正如我在问题中提到的,我正在寻找现有的东西(我不打算自己开发)。此外,关于所需的硬件 - 我提到我并不反对几个无源组件。但是连接一个功能齐全的 CAN 控制器 - 是不同的。在这种情况下,您的建议更有意义。无论如何感谢您的回答。
【解决方案3】:

我不认为存在这样的软件。 CAN 总线比 I2C 更复杂。基本上,您必须同时实现 CAN 控制器和 CAN 收发器的功能。有关更多详细信息(德语),请参阅此thread

或者,您可以使用CAN shields 之一。另一种选择是使用BeagleBone 和合适的CAN cape

也可以看看AVR-CAN

【讨论】:

  • 最初的想法是在没有实现 CAN 控制器但 GPIO 能够支持 CAN(至少低速)的芯片上实现 CAN。因此,接受的答案证实了我的怀疑,即考虑到可用的低成本硬件,这根本没有意义。无论如何,感谢所有链接。
猜你喜欢
  • 1970-01-01
  • 2021-01-22
  • 1970-01-01
  • 2015-11-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-22
相关资源
最近更新 更多