CAN总线的全称是控制器局域网络,主要应用在汽车电子和工业控制领域。
和485总线一样,CAN总线也是一种半双工的通信。

一条CAN总线最多能接110个节点

它最高速率能到1Mbps,最远传输距离能到10KM
CAN总线有两个信号,一个是CANH,还有一个是CANL。

CAN总线中有两个重要的概念,一个是显性,另一个是隐性
显性(Dominant)指的是总线上CANH电压减CANL电压大于等于0.9V,同时显性代表逻辑0。

隐性(Recessive)指的是总线上CANH电压减CANL电压小于等于0.5V,同时隐性代表逻辑1。

常用的5V Can收发器芯片有TJA1014,3.3V的CAN收发器芯片有SN65HVD230,它们的引脚定义都是类似的。
SN65HVD230的引脚定义如下,

D为发射输入;
R为接收输出;
Vref为1/2VCC输出;
CANH和CANL是总线信号;
VCC为供电引脚,接3.3V;
RS为模式选择,可以选择高速模式,slope模式或者低功耗模式,主要根据RS引脚的电压来判定其工作的模式,大家可以看下这张表。

这个是SN65HVD230的发送真值表

这个是SN65HVD230的接收真值表

这个是SN65HVD230典型电路,这个电路比较简单;

数据发送示意图如下:

当发送输入端D输入1时,CAN总线为隐性,CANH和CANL的电压差比较小
当发送输入端D输入0时,CAN总线为显性,CANH和CANL的电压差比较大
数据接收示意图如下

当总线CANH电压减CANL电压小于等于0.5V时,接收端R输出1
当总线CANH电压减CANL电压大于等于0.9V时,接收端R输出0
Rs引脚通过0欧姆接地时,SN65HVD230处于高速模式,

如果需要配置其可以进入低功耗模式,可以将Rs引脚接到MCU的GPIO进行控制

Vref引脚电压是1/2VCC,可以通过两个60欧姆电阻串联,将Vref接到电阻的公共端,这样总线隐性时的电压就为1/2VCC

大家可以看下,左边的是没接VREF的,总线为隐性时电压约为2V,
右边接了Vref的,总线为隐性时电压约为1/2VCC,

CAN总线电路中的120欧电阻为端接电阻,消除总线上的信号反射,

在CAN总线的两端加就可以了
