我在PS就职期间,也负责CAN总线芯片的普及推广。因为CAN芯片和消费电子销量不在一个体量上,最大宗应用就是汽车电子和工业电子。从业务角度看,汽车电子售前面向 Bosch/Continental 此类OEM供应商进行销售,认证过程长,销量不高。工业电子方面,产业比较分散,且技术难度比传统RS485高一些,普及度不高。所以内部不是很重视。
再加上当时负责的芯片太多,基本上都没有功夫拿来做什么项目。所以其实对PS公司的82C250/SJA1000/TJA1050等IC缺乏一手经验。
供应商变化
相对于老式的RS485,设备级别的总线中,CAN总线算是比较公开的标准。供应商除了最初的Bosch/Philips(NXP),汽车电子的主流厂家如Renesas/Freescale,还有Microchip/TI等后来加入的供应商。芯片供应商中,NXP/TI/Microchip是三大CAN总线供应商,而CAN控制器也都已经成为MCU/SoC的标准外设,包括STM32F/ESP32/Allwinner A20等常见的品种中大多以及集成了控制器,只需要外接收发器即可。
市场变化
近年来汽车的普及,同时也带动了CAN总线的普及,成为CAN总线最大宗的应用。在工业电子、机器人垂直市场,也成为许多设计的首选。包括开源的消费级飞控中,CAN总线已经开始出现。
可以预见,随着机器人和无人载具(UAV/UGV/USV/UUV)各类设备的普及,在其之上会承载越来越多的任务,模块化需求越来越高,子系统间线束越来越多,采用CAN总线之类的设计会日渐增多。现在可以看得到的首先有:
- UxV,传感器与驾驶控制系统之间,控制系统与应用处理器之间;
- 农业,传感器与本地数据采集器之间(单一节点间可能会有多个子系统组成);
- 船用,传感器与驾驶系统之间;
- 车用,售前ECU设计,售后OBD采集系统;
- 建筑自动化,包括办公室、住宅小区。
- 网关,采用ESP32/Allwinner/SocketCAN/SLCAN进行桥接。
TJA1050 + STM32F103Cx
利用STM32F103RB/STM32F103C8的片内CAN控制器,配合外部TJA1050可以构成一个完整的两片方案,类似的还有LPC11C14。STM32F072C8可以用作USB/CAN总线桥接设备。
我采用了ARM mbed的代码,但是发现init的过程中出现总线初始化超时的现象。
TJA1050 + MCP2515 + Arduino
三片方案由MCU + CAN控制器 + CAN收发器组成。利用5V版本的Arduino可以直接对接外购的MCP2515 breakout,初始化均没有问题,但是接收端工作不算很正常。