支持CAN的微控制器是否足以驱动CAN总线?


45

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

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

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

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

Answers:


55

这是一个非常好的问题。通常,CAN要求每个节点都有一个收发器:

在此处输入图片说明

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

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

这些不是硬性规定。如果总线很短(10厘米),则可能无法获得最大比特率(1MB / s)。

为了实现这一点,您需要对收发器的功能了解一些。像大多数收发器一样,它们可以向总线输出高电平或低电平(分别表示1和0),但是0可以控制1。IE如果两个收发器试图同时讲话,一个在说1,另一个在说说0,那么0将获胜。我们可以使用二极管简单地重新创建相同的情况:

简单的CAN

参见《西门子应用笔记AP2921:通过不带收发器的CAN进行板载通信》

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

CIOCON寄存器

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

更简单的CAN


2
绝对棒的答复。非常感谢您花时间答复。我可能必须与收发器一起使用,因为可能会有很多电气噪声,尽管所有内容都将放在一个“盒子”中,但它们将位于多个pcb上。再次感谢!
efox29 2012年

@ efox29-不用客气。如果可以,最好使用收发器。
Rocketmagnet 2012年

这种无收发器的设置对我来说是新的,对于在更长的距离上建立一个简单的控制器网络来说,这非常有趣。真好!
0x6d64 2012年

@ 0x6d64-如果需要很长时间,请不要忘记使用低比特率,并且压摆率会限制边缘。
Rocketmagnet 2012年

1
请注意,如果总线上的所有设备都使用相同的配置,并且使用单线CAN总线,则这将起作用。如果要与实际上是“真实的” ISO CAN并使用两线总线的其他任何接口连接,则此模式将不起作用。
乔恩·瓦特

10

所述LPC11Cxx系列微控制器(ARM的Cortex-M0为基础)包括片上的CAN收发器。


3
是。对。OP询问有关PIC18的信息。这真的没有帮助。
Federico Russo 2012年

4
@FedericoRusso,他以PIC18为例,timrorr提供了内置驱动程序的解决方案。怎么了
clabacchio

8
@FedericoRusso-不要那么肛门。这个答案很有趣。
Rocketmagnet

1
@Rocketmagnet:那么问:“我怎么做X?” 答:“做吧。” 可以吗?(根据您自己的回答)
Federico Russo

2
@FedericoRusso-如果问题得到了OP的满意答复,并且有人提到了一些有趣的相关信息,那么,为什么不呢?
Rocketmagnet 2012年

9

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

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

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

另一种方法是获取总线上的内容,然后将其转换回逻辑电平,以从RX引脚发送回您的微型计算机。


8

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

2017年8月17日更新:

我现在正在参加Microchip Masters会议。Microchip工程师告诉我,购买Atmel所产生的新零件之一比MCP2551便宜且更好。


1
Microchip现在建议使用2561,而不是2551。恩智浦还有一些有趣的CAN芯片。大多数MCU需要一个收发器。
路德维希·施赖尔

2

模拟设备具有使用差分放大器的示例CAN收发器电路
我没有尝试过,只是意识到这一点。也有兴趣是否可以通过运放实现

模拟电路

使用专用IC CAN收发器的优势在于它们将为您处理仲裁,而您不必担心干扰总线。如果您只是观察总线而又不是关键故障环境,则电路可能很好。尽管mcp2551非常受欢迎,但接口芯片有很多选择。

System Base类型的芯片是一个新的发展,其中包括电压调节,电源模式和总线的ESD保护。

就像上面提到的timorr一样,恩智浦的LCP11C24的独特之处在于该处理器包括CAN收发器。带有此功能的演示板仅售19美元。另一个低成本解决方案是使用9.38美元的赛普拉斯PSoC5演示板CY8CKIT-059。PSoC5没有CAN控制器。更进一步:控制器以类似FPGA的通用模块实现。控制器的寄存器通过IDE的GUI进行配置,从而使过滤和研发变得非常容易。

我在仔细阅读数据表时发现的一个关键方法是将mcu TTL标记为CAN-Tx和CAN-Rx,而到总线的收发器数据线始终标记为CAN-H和CAN-L。我不喜欢另一个答案中的图,其中TxRx显示为连接到总线。这违背了惯例,加剧了混乱。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.