启用 CAN 的微控制器是否足以驱动 CAN 总线?

电器工程 能够
2022-01-01 03:21:02

如今,微控制器中内置了许多 CAN 模块。PIC18F2480就是一个例子该微控制器(带有内置 CAN)是否能够自行驱动 CAN 总线,还是需要外部 CAN 收发器/控制器?

我相信 CAN 既有软件层也有硬件层,从外观上看,这些支持 CAN 的微控制器似乎只有软件,但它没有说明它可以或不能按原样驱动 CAN 总线。

我希望通过 CAN 总线连接六个以上的微控制器,并且想知道我是否需要一个跨所有微控制器的收发器,或者内置的东西是否可以从软件和硬件的角度处理通信。

假设我将有必要的端接电阻器和其他小型分立元件(电容、电阻器等)

4个回答

这是一个很好的问题。作为一般规则,CAN 要求每个节点都有一个收发器:

在此处输入图像描述

但是,在某些情况下,您实际上可以在没有任何收发器的情况下逃脱!这些情况是:

  • 总线长度短(远小于 1 米)
  • 优选地,所有微控制器都在同一个 PCB 或 PCB 堆栈上。
  • 比特率低
  • 环境不是太嘈杂

这些不是硬性规定。如果您的总线非常短(10cm),您可能会获得最大比特率(1MB/s)。

为此,您需要对收发器的功能有所了解。像大多数收发器一样,它们可以向总线输出高电平或低电平(分别代表 1 和 0),但 0 可以支配 1。 IE 如果两个收发器尝试同时说话,一个说 1,另一个说是说0,那么0会赢。我们可以简单地使用二极管重新创建相同的情况:

简单的 CAN

请参阅 Seimens 应用说明AP2921:通过 CAN 进行板载通信,无需收发器

但这里有一些更有趣的事情:PIC 实际上具有对无收发器 CAN 的硬件支持!

CIOCON 寄存器

您可以配置 CAN TX 引脚,使其行为方式与收发器完全相同。这意味着您可以在没有二极管的情况下连接 CAN 总线。不过,您仍然需要电阻。

更简单的 CAN

LPC11Cxx系列微控制器(基于 ARM Cortex-M0)包括片上 CAN 收发器。

是的,你需要一个收发器。微控制器上的 CAN 引脚用于接收和发送。CAN 总线本身在称为 HIGH 和 LOW 的两条线上使用带有差分信号的双绞线。

收发器的一项工作是获取您在 TX 引脚上显示的逻辑电平并将其转换为 CAN 总线信号:

  • 逻辑“1”表示不驱动总线,因此 HIGH 和 LOW 线“浮动”至 2.5V - 在 CAN 术语中称为“隐性位”。
  • 逻辑“0”通过将 HIGH 线驱动为高电平和将 LOW 线驱动为低电平来表示 - 称为“显性位”,因为它将覆盖任何正在传输的隐性位。

另一种是获取总线上的内容,并将其转回逻辑电平,以从 RX 引脚发送回您的微控制器。

在 CPU 和 CAN 总线之间需要一个 CAN 收发器芯片。查看 MCP2551。

2017 年 8 月 17 日更新:

我现在正在参加 Microchip Masters 会议。Microchip 的工程师直截了当地告诉我,收购 Atmel 产生的新部件之一比 MCP2551 更便宜且更好。