作为一个老不死的老菜鸟写的,多年经验,全是大白话(大实话),可能不对有失偏颇,但绝对值得菜鸟们看,以后你会发现这个家伙说的还真是那么回事。
一、重点聊聊CAN和RS485的区别和应用
CAN和485、422都是两线的串行总线,可以挂多个节点。这种总线的优势就是简单和灵活,简单就意味着成本低,连接节点之间只需要两根线而已,端子可以随便用成本很低的3.96端子,可以说是非常简单了。
从区别来讲,CAN对于485来讲最大的优势是错误处理、多主、仲裁、可靠性方面、CAN控制器的编程也简单,MCU核给它数它自己处理了。
RS485的优势是灵活性,有时候灵活性意味着速度,但是一般单片机用RS485是不会用专门的RS485控制器的,通信过程要全靠软件实现,软件不但要读寄存器还要进行各种判断和跳转,软件处理速度有时限制了通信速度。而CAN是有硬件控制器的,地址的识别、错误处理等都是控制器自动执行的,MCU核的软件只需要读写寄存器就可以了。另外485是一主多从,当多个节点同时发是不被允许的,会导致总线锁死,多个节点都需要主动发数的就不要用485了。但是你说CAN一定快于RS485吗?不一定哦。CAN2.0的速度只能到1M这个限制是芯片限制的,也就是你根本买不到超过1M的CAN2.0芯片好吧?实际上CAN的实施过程中基本750K~800K左右如果做不好信号质量线长节点多那么数据就很容易出错了。RS485的优势是几乎不限制速度,芯片很多支持到5M、10M的,只要硬件做的好,线不长、节点不多,10M也是非常可能的,注意10M已经接近低速以太网了哈。所以速度这块你要从上面说的两个方面综合考量。
CAN除了速度有限制,其传输效率也比RS485低,其中150多位只能传8个字节,多出的位就是为了实现多主、仲裁、错误处理提高可靠性的,所以有一些速度要求高的地方用RS422比CAN快,RS485/RS422一个字节数据只需要增加一个启动位,一个停止位、一个校验位,其他8位全是数据,从这一点上讲数据传输效率比CAN高很多,因为“”浪费的“”位少哈。
RS422简单理解就是收和发分开的RS485,可以全双工通信,其他跟RS485类似。CANFD是改进了CAN2.0发展而来的,它改进了数据效率低的缺点把数据域速率提高到5M然后把每帧最高字节数提高到64字节,然后保留了CAN2.0的多主、可靠性的那些东西。CANFD的数据效率已经提升很多了,应用也很简单,不过目前来讲,CANFD的芯片还是相对来说没有那么多和那么普及,首先支持CANFD的单片机少(不是没有哈,只是比较新,大部分都是20年以后的新片子),如果你想老单片机带CAN的升级成CANFD,外置个CANFD控制器是个可行方案但是,这类芯片也比较少比较难买(外置CANFD控制器比带CANFD的单片机更难买),我感觉可能还需要2年以上的时间CANFD才能达到CAN2.0的普及程度,毕竟CAN2.0对于很多人来说已经够用了。
再提一嘴RS232,RS232是收发全双工的,另外RS232是一对一的,你想1对多,可以搜索一个叫串口服务器的东西。RS232的数据速率和通信距离也不是很有优势。
二、关于以太网Ethernet
数据速度要求高、数据量大、数据实时性要求高的场合,实际上更适用的是Ethernet。因为CAN和485的传输介质的原因,其传输距离和速度和节点数三者总是那么矛盾,要把速度做高距离同时做快节点数做多同时误码率又做低总是很难(这是一个信号完整性问题没有经验的很难做)。而Ethernet轻轻松松在长距离可以做到几十M的速度,真的是轻轻松松。但是Ethernet不是2线制总线式的,需要路由器/交换机等中心设备做数据的中转,加上以太网的接口、硬件、线缆等比RS485和CAN的简单的两根线复杂,复杂意味着贵,所以以太网的实施成本要高一点。不过随着近些年工业设备的数据量越来越大、实时性要求越来越高、以及百兆以太网的器件成本的下降,以太网也成为趋势了。以太网的基于连接的TCP通信方式也能很好的保证数据的完整性(UDP可能容易错失数据)。
EtherCat你可以简单认为是以太网的变种,他是面向工业高速实时性要求而进行改进的。采用的接口跟以太网都是类似的水晶头那种,但是控制器大不相同,它采用了回环设计,每个节点都是一进一出,进来后把自己的数据插进去,然后再发出去,每一帧都是包含每个节点的数据的大帧,还有很多高级特性。其实施的复杂度和难度要高于普通的以太网,成本也高一些。
以太网的实施对于单片机系统来说有个问题就是它的复杂性比RS485/CAN要复杂,尤其TCP协议要基于嵌入式OS(例如FreeRTOS之类)进行移植,这就要求单片机菜鸟们懂点RTOS(这可让很多小白知难而退了)学习RTOS再移植LWIP怎么说也得有一个月吧(其实大部分都不做不到)。当然了也有采用SPI接口的以太网控制器W5500之类就不需要做OS了,但是你去看它文档也是上百页,新手摸索一星期可能才能行,复杂度比RS485要大多了。
但是呢,又来但是了,哈哈。还是建议大家学习RTOS,只会单片机,还是有很多事总是很尴尬。会了OS,不光是RTOS,其他可利用的轮子就多了去了,你会发现不一样的世界。艺多不压身哈。
三、应用场合推荐
最低成本+多节点:RS485。
最低成本+速度要求一般+多节点+要求可靠性:CAN
低成本+1对1:RS232
相对低成本+速度和数据量有要求+多节点+可靠性:CANFD
速度和数据量有要求+低成本+多节点:RS422(可用于系统内部多节点高速低成本数据通信)
速度要求+可靠性+传输距离+大数据量:Ethernet。
高速高可靠高高实时性:EtherCat。