can 总线入门———can简介&硬件电路

0. 前言

博客内容来自B站上CAN总线入门教程视频讲解,博客中的插图和内容均为视频中的内容。视频链接 CAN总线入门教程

1. CAN简介

在这里插入图片描述
先来看看一它名字的意思,can总线,英文全称是 Controller Area Network Bus, 直译是控制器局域网总线,简称 C A N 总线,一般就读作CAN总线,从名字也可以看出来,CAN总线构建的是一种局域网网络,每个挂载在 CAN 总线的设备都可以利用这个局域网去发送自己的消息,也可以接收局域网的各种消息,每个设备都是平等的,都在共享这个局域网的通信资源。这是CAN总线的设计理念。

CAN 总线是由 BOSCH 公司开发的一种简洁易用、传输速度快、易扩展、可靠性高的串行通讯总线,广泛应用于汽车、嵌入式、工业控制等领域。CAN总线最初就是为了汽车而设计的,所以其对可靠性和稳定性的要求非常高。 待会我们也可以了解到,CAN总线的差分信号、应答机制、 CRC 校验、错误处理等设计无处不体现出其严谨和安全。

在满足这么多功能和性能的同时,CAN 总线仍然能保持一个非常简洁易用的硬件电路,所以说CAN 总线的设计还是非常成功的。现在 CAN 总线已经成为一种通用的通信方式,不仅限于汽车领域,在其他很多领域也都有 CAN 总线的身影。另外近几年新能源汽车的火热发展,也促使了很多人来学习CAN总线。

接下来概括的看一下 CAN 总线的特性:

  1. CAN 总线只有两根通信线,CAN_High和CAN_Low,简称CAN_H 和CAN_L,线路少,且无需共地。也就是说CAN 总线总共就只需要两根线,就能实现任意设备的互相通信了,而且不需要共地,因为它是差分信号,所以CAN 总线的线路非常少。

比如说 I2C 通信,它也只有两根通信线 SCL 、SDA,但是 I2C 是单端信号,必须得共地,所以实际上 I2C 至少得 3 根线。

  1. CAN 总线采用差分信号通信,CAN_H 和CAN_L 就是一对差分线,差分线的好处就是抗干扰能力强。如果线路产生干扰,则一般两根线的电压都会同时出现波动,但是两根线的电压差值仍然是不变的,所以利用这个电压插值来传递数据就能极大地避免干扰。

  2. 目前 CAN 总线分为了两种标准,高速 CAN 和低速 CAN。高速 CAN 在国际标准中叫 ISO 11898,其传输速率为 125k ~ 1Mbps,传输距离 < 40m。低速 CAN 叫 ISO 11519,传输速率为10k ~ 125 kbps, 传输距离 < 1 km。可以看出高速 CAN传出快,但是距离较短,低速CAN传速慢,但是距离很远,这个可以根据应用场景选择。当然本课程侧重学习的是高速 CAN ,这个应用广一些。低速CAN也有涉及,所以着重学习高速 CAN即可。

  3. CAN总线是异步的,无需时钟线,通讯速率由设备各自约定。这点和串口非常类似。

  4. CAN总线是半双工的,不可以同时发送和接收。CAN总线可挂载多设备,每个设备都可以占用CAN总线来发送自己的数据,多设备同时发送数据时会通过仲裁判断先后顺序。也就是让大家排好队,消息都是可以发出去的,这个后续还会详细介绍。

  5. 11位 /29位 报文 ID ,用于区分消息功能,同时决定优先级。CAN总线是通过发送方广播自己的消息来实现多设备互相通信。每个设备都可以广播消息,那自然,每个消息也最好都加一个 ID,用于区分功能。否则谁知道每个消息都什么意思呢,对吧?

    报文 ID 有11位的,叫标准格式,后来又扩增至29位,叫扩展格式。同时,报文 ID 不仅可以区分消息功能,当不同消息想要同时占用总线发送时,报文 ID 还决定优先级, ID 号小的优先发送,这是报文 ID 的作用。

  6. CAN总线的一个数据帧可以配置 1~ 8 字节的有效载荷。这个类比串口,串口一次只能发一个字节,而CAN总线比较强大,它最大一次可以发 8 个字节,并且可以灵活指定数据长度,1~8字节随意配展。

  7. CAN 总线可以实现广播式和请求式两种传输方式。广播式传输方式就是一个设备发送数据,其他所有设备都能收到,然后接收方根据报文 ID, 来决定用不用这个数据。大概的场景就是,发送方说:管你们要不要,我反正把数据发出去了,你们谁要谁拿走,这是广播式,也是CAN总线最常用的方式,我们主要学习广播式即可。

    除了广播式,CAN总线还可以有请求式,请求式的场景是数据发送方不会主动广播自己的数据,而是只有收到接收方发出的请求,发送方才会发数据,这样一个数据的传输就需要先请求再接收,一来一回两个过程,这是请求式。

  8. CAN总线的设计,还包括应答、 CRC 校验、位填充、位同步、错误处理等诸多特性,这里简介大家有个印象就行,接下来再慢慢细说。

2. 主流通讯协议对比

### CAN硬件电路中的气体放电管 在CAN(Controller Area Network)硬件电路设计中,气体放电管(Gas Discharge Tube, GDT)主要用于提供过电压保护功能。当电路遭遇雷击或其他形式的瞬态高电压冲击时,GDT能够迅速导通并泄放大电流,从而保护敏感的电子元件免受损坏。 #### 气体放电管的作用 气体放电管的主要作用是在发生异常高压情况时作为安全阀工作。一旦两端之间的电压超过预定阈值,内部气体会被电离形成低阻抗路径,使多余能量通过接地线释放出去而不是损害其他组件[^1]。 #### 工作原理 具体来说,在正常状态下,GDT呈现非常高阻状态;而当施加在其上的电压达到或超过了其启动电压之后,则会触发内部惰性气体分子间的碰撞游离过程,导致快速转变为接近短路的状态来分流浪涌电流直到威胁解除为止。这种特性使得它非常适合用于通信接口如RS-485/CAN总线上对抗外部干扰源引起的尖峰脉冲问题。 #### 设计注意事项 对于包含有GDT在内的任何防护措施的设计而言: - **选型依据**:应考虑实际应用场景下的最大可能出现峰值功率水平以及响应时间需求等因素; - **安装位置**:通常建议尽可能靠近可能遭受攻击的地方放置以减少寄生参数影响效果; - **配合使用**:往往还需要与其他类型的保护装置比如压敏电阻TVS二极管等组合起来构成多级防御体系才能取得最佳的整体性能表现。 ```c // 示例代码展示如何配置MCU引脚连接至带有GDT保护机制的CAN收发器 void setup_CAN_with_GDT_protection(void){ // 配置GPIO模式为推挽输出 GPIO_InitTypeDef GPIO_InitStruct = {0}; __HAL_RCC_GPIOA_CLK_ENABLE(); GPIO_InitStruct.Pin = GPIO_PIN_12 | GPIO_PIN_13; GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; HAL_GPIO_Init(GPIOA,&amp;GPIO_InitStruct); } ```
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值