自制CAN开发工具的笔记(1)——硬件选择
自制CAN开发工具的笔记(1)——硬件选择
因工作需要,博主自制了一个CAN开发工具。在此把制作过程中的一些经验和心得记录与分享一下。该工具具备以下功能:
1. 汽车故障码清除;
2. 设置某些试验模式,比如转毂模式;
3. 模拟某些节点,发送CAN信号到BUS上;
3. 解锁网关并记录CAN报文保存成标准的asc格式;
4. WIFI方式无线传递数据到PC端。
这是一个系列的文章,会涵盖硬件选择、线路连接、系统设置、软件编写等。
博主在工作中需要频繁使用到CAN(Controller Area Network)开发工具,具体使用场景包括:
1. 读取与记录汽车控制器之间的交互信号;
2. 读取与清除故障码;
3. 设置某些试验模式——通过CAN网络跟某些控制器作交互来让某些控制器进入预设的某种试验模式;
4. 刷写控制器;
5. 篡改进出某个控制器的CAN信号,以模拟某些工况或触发某些故障。
博主自制CAN开发工具的起因主要有2点:
1. 正经的CAN试验设备比如带CANalyzer/CANoe授权的CAN case价格是非常高昂的——跟其它汽车试验工具一样。因此在大部分单位里还算是稀缺工具,很多时候需要共享使用。因此自制一个能在大部分场景下替代CANalyzer/CANoe的工具,有经济性动机。
2. CAN开发工具的使用场景中,有许多操作发生的频率非常高,但步骤有些繁琐。如果能有一个“一键完成”的功能,就可以把人从这样的琐事中解放出来,专注于开发试验本身而不是这些旁枝末节。
硬件选择上,这个CAN工具会需要1个CAN收发芯片,以及1个能跟CAN收发芯片通信、在应用层编程实现一些功能的控制器,另外还有一些开关、LED灯、显示屏之类的可以根据需求选用。
1. CAN收发芯片
在淘宝上找了一个最便宜的Niren MCP2515芯片,集成了CAN控制器与收发器,可以跟上层控制器通过SPI协议交互,最高通讯速率1Mb/S。这已经能完全满足博主的使用需求了。
2. 上层控制器
根据不同的应用需求,可以选择不同的控制器。
2.1 Arduino Nano
跟MCP2515进行SPI通信没有问题,收发速率也满足需求。但“记录所有报文并保存到电脑”这个功能比较难处理。博主尝试过通过串口通信把报文传递到PC,然后在PC端再运行一个程序来记录保存,但这个通信的速率达不到需求——即每0.001秒内保存4帧8个bytes的报文。博主也考虑过让Nano把数据直接保存到SD卡上,但淘宝上大部分易得的SD读写模块都是SPI通信的,有冲突。当然理论是是可以跟2个SPI模块同时通信的,博主没有尝试过。
2.2 Raspberry Pi Zero W
选择树莓派来作主控制器,优点太多了(虽然成本是Arduino Nano的10倍,哈哈哈):
——带GPIO,除了跟MCP2515通信之外,还可以接入大量开关以方便地输入不同的操作,更可以接入LED甚至显示器以输出状态信息;
——带SD卡,可以即时保存数据到本地;
——带Wifi芯片,不但可以通过ssh等方式监控当前的状态,还可以方便地以无线形式把数据传递到PC上;
——带完整的操作系统,还具备数据处理能力,可以把PC端的一部分数据处理功能下放到工具里预先自动完成。
Raspberry Pi Zero W需要稳定的5V电源。这个在大部分时候并不是个问题,因为现在汽车上基本上会带USB插口,另外在试验时一般也会带着笔记本电脑,可以通过USB给树莓派供电。但既然是为了追求便利来制作了这个工具,当然是希望越省事越好。所以博主选择从汽车OBD口——也就是大部分场景中CAN总线的接口——取12V电,转换成5V供工具使用。
树莓派的GPIO是3.3V的,而Niren MCP2515是5V的,所以需要用1个逻辑电平转换模块来相互连接,否则要么会损坏树莓派的GPIO,要么CAN收发芯片无法正常工作。
当然,像OBD口接头、DB9接头、屏蔽护套线之类的都可以方便在网上购买。
在下一篇文章中,我们将会讨论如何使用Arduino Nano来制作一个CAN开发工具。