什么是CAN通信呢?通俗的讲一讲CAN通信

首先,什么是can呢。
学过散装英语的人,应该都有知道有一个单词叫can 。
那我们要讲的这个can,很多时候,发音可以和can一样。
这么说来,can通信的can,并不是一个单词,而是缩写了。
那这个can是由什么缩写的呢。
controller
area
network
组合起来就是can了。接触过can的读者应该了解,can应用在汽车总线比较多。
一开始我也以为can里的c,指的是car。car area network ,唉,好像也可以哦。
抛开散装英语,这那个can,大意就是一种控制器的局域(区域)网络总线了。
就是支持can通信的设备,通过总线接到一个通信局域网络里。这个局域网和我们说的以太网的局域网不是一回事。
实际上,在控制器通信数据采集领域,其实应该是由以太网,串口和can三分天下的局面。
三者都支持总线。但是我们常见的主要是以太网和串口的控制器居多。高端点的主要是以太网,低端的设备主要就是串口。可能也和易用性,成本等原因,当然也有领域的不同吧。
像can主要在于汽车领域为主。
那些说还有什么spi,iic,iis,1-wire之类的,你出去。此总线非彼总线。
那么can不是以太网,它是什么呢。
请看。
在笔者报名参加了88块学画画培训班之后,画下了如下不是很严谨的can总线图。
为什么说不严谨呢。因为没有画上地线,还在终端电阻之类的。
眼力好的同学呢,很快就发现了,can总线,其实就是由h线和l线组成的。
似乎有一种似曾相识的感觉,却又说不上为什么,这么咋一看,说它是485总线都会有人信。
单纯从线来看,确实和485总线很相似。所以接下来介绍can,会尽量和我们熟悉的485总线类比。
can总线的这两根线呢,一般叫做can-high和can-low。简称嘛就是can-h和can-l .
再简一点就是h和l了。
会有同学问了,可以再简一些嘛。这个问题问得好。
据悉,有些485设备已经可以不区分+和-,也就是485的a和b两根线可以反着接也能自动识别和适应。
但是在can设备上,这个不是很成熟,所以,还是尽量要区分h和l。
同样的,can的通信,也是靠h和l两根线的差分信号进行传输信号的。这点和485很类似了。
(图片来源于网络)
通过不同的电平组合信号,就能传输0和1信号,也就是一个位的信号。
8个位就组成一个字节。n个字节就组成了can协议了。
(图片来源于网络)
(图片来源于网络)
can的通信和485(也就是串口通信)很类似,也是有什么起始位,停止位之类的。
只是can会复杂一些,多了很多段。
其实多出来的内容,无非就是增加can通信的各种稳定性,协议可靠性等等。
对用户来说,那个起始位停止位其实不关心的。
只需要can设备双方通信参数匹配,就可以用来传输应用层数据了。
所以应用层数据才是我们比较关心的,也是我们使用中用到的。
刚才也提到了,can通信双方参数匹配,主要是要适配哪些呢。
像串口通信,要设置的波特率,数据位,停止位,校验位。
但是can呢,很多时候,只需要设置波特率就可以了。
毕竟波特率也是影响传输速度和距离的关键因素,至于什么数据位,校验位,can通信懒得去让用户设置,全都统一多好。省得用户一个个去操心了,是吧。
与其叫波特率,其实叫比特率更为合适。不同的比特率,能支持的通信线长度也不一样。具体根据需要匹配即可。
超过500米的通信线通信,笔者还没有尝试过,有条件的同学,可以去购买繁易支持can通信的fbox网关或者触摸屏去使用。
前面介绍了一大堆,简单用几句话概括就是:
can通信只需要两根线(h,l),双方设置同样的波特率,就可以进行收发数据。
can收发数据,收的是什么,发的又是什么呢。
这应该是can通信关键的内容了。
can通信和串口通信不一样。
串口通信至少要发送一个字节,通信双方需要约定好通信内容格式长度等,比较著名的就是modbus协议,当然还有各种plc协议的串口协议,也都是约定好格式。
而can通信,在这点就稍微好一些,只要是can通信的,都是标准的。
不管是哪一家的can设备,通信双方收发的内容格式,就是统一的。
就像串口通信,都规定使用modbus rtu协议一样。
那我们这个can协议报文,就和modbus 类比一下。
modbus的通信,主要是读取位和字变量。位有0x,1x,字有3x,4x。地址访问都是65535个。
就拿4x地址来说,就是有65535个字。一个字是16个位。
可以把modbus理解为16位数据宽度的协议。modbus就类比于16位系统电脑。
看看can报文。can_id如果类比于4x这样的寄存器地址的话,地址是有536870911个地址,5亿个地址。
然后每个地址能表示的数据是8个字节,也就是4个字。64个位。
那can就是64位系统了。
modbus为6万个字。
can为5亿个4字,10亿个双字,20亿个字。地址表示空间范围远超串口的modbus 。
在can报文里,最前面三个位,主要是标志位。用于表示不同的通信类型。
就刚才的报文格式来看,好像说不上为什么,感觉看得懂,但又哪里不太明白,也不知道怎么问。
学过modbus报文的人都知道,modbus报文呢,有主站发送方和从站回复方的。主站请求数据,从站回复数据。主从站报文不一样的。。
这就对了,从报文上,没有提到谁是主,谁是从哦。难道主从发送的都是同样的报文。
没错,就是这么大胆。
比如0000 0012 08 00 01 02 03 04 05 06 07 这个can报文,
指就是帧id地址为0x12,发送8个数据长度,数据内容是00 01 02 03 04 05 06 07 。
主站可以发送给从站,从站也可以发送给主站。
can报文可以没有主从概念。但是我们从使用上,可以分主从。
从站发这个报文给主站,相当于上报从站的数据给主站,比如温度,湿度等变量。
如果是主站发送这个报文给从站,相当于主站给从站发送写命令或者控制命令。
思维敏捷的同学马上就反应过来了。
我主站都没有问呢,你个从站就给我发内容,你知道我要读什么内容了吗?
刚才提到,can总线的地址负载能力大概在5亿个左右。如果是标准帧,只有0x7ff个。
那么就需要使用can通信设备的人,进行地址规划,什么地址内容代表什么。
话是这么说了,但是一想,好像哪里不对。modbus是可以主动请求数据的。难道can也不行吗?
这就是所谓的远程帧了。
远程帧呢,大概意思就是,主站如果想请求某个帧id(地址)的数据,刚向总线发送一个远程帧。也就是这个报文上,某个标志位置1的事。这时候对方设备向总线发送数据帧,就完成一次主动请求数据了。
补充一下,另一个设备收到远程帧呢,在can里面,并不会要求其它设备一定要回复。回复不回复远程帧,取决于这个can设备的程序,可以回,可以不回,爱回不回。
以上就是通俗的介绍一些can通信的内容了,抛开那些繁琐的细节。毕竟对我们can的使用者来说,不需要深入了解can里的每一个细节。
有时候就是把can设备拿出来,把两根线接好,上电,通信进行通信,看到数据即可。大不了就是设置了一个波特率。
双方再维护一下数据点表,哪个地址代表什么意思。对着数据点表添加数据,调试,通信正常,关机,走人。
can通信只是一个基本的通信接口或者协议。
在can之后,还有canopen之样的二次协议。

如何实现更绿色、经济的NLP预训练模型迁移
Google推出基于AmpereOne处理器的C3A实例
单向可控硅和双向的区别在哪
曝Navi至少有两个版本 最高版本性能超过RTX2070
就因为多投入的240亿美元中国在5G技术方面就可以超越美国了吗?
什么是CAN通信呢?通俗的讲一讲CAN通信
iPhone13预约火爆,不亏是“十三香”
三星控制存储产品价格上涨 中国政府正式介入存储市场干预
深度解析车载摄像头核心技术
人工智能的融入 让新的智能分析在监控业务中取得了重大的突破
基于ADI ADG5421F双路单刀单掷(SPST)低阻开关设计方案介绍
科普一下12种管道过滤器
三元锂电池与磷酸铁锂电池相比哪个成本更低
[图文]频率合成式调频立体声发射IC-BH1417
可穿戴设备+电子病历的APP已然来袭!
工业绝缘监测及故障定位产品的应用案例
睿思芯科携手奎芯科技推进芯片技术产品开发
温度传感器电路的设计方案
共模扼流线圈针对汽车专用设备高频噪声的降噪对策
贴片电容在LED驱动电路焊接中应该注意哪些问题