RS232-RS485-CAN-Board 是微雪 (Waveshare) 专为 Raspberry Pi 4B 和 Raspberry Pi 5 设计的一款隔离型工业接口扩展板。这款扩展板提供了多种工业通信接口,包括 2 路 RS485、1 路 RS232、1 路 CAN FD 和 1 路 CAN,每个接口都具备电气隔离保护。它采用了 SC16IS752 与 SP485、MCP2515 与 SN65HVD230 以及 MCP2518FD 与 MCP2562FD 等组合方案,通过 SPI 和 UART 接口轻松扩展多种通信功能。板载的 TVS 管、自恢复保险丝、保护二极管、数字隔离芯片以及一体式电源隔离设计,确保了电路的防雷、防静电、防过流、防过压和抗干扰能力。扩展板支持 7~36V 宽电压供电,配合定制的工业导轨外壳,方便在工业控制应用中集成。同时,预留的 PCIe 扩展接口和充足的内部空间,满足用户未来的功能扩展需求。产品还附带了丰富的配套资料和示例代码,助力用户轻松实现工业通信应用。
产品类型 | 树莓派隔离型工业接口扩展板 | |||
适配主板 | Raspberry Pi 4B、Raspberry Pi 5 | |||
---|---|---|---|---|
通信接口 | SPI + UART | |||
工业接口 | ||||
接口说明 | 芯片方案 | 通信速率 | ||
1路隔离CAN FD | MCP2518FD + MCP2562FD | 5kbps - 8 Mbps | ||
1路隔离CAN | MCP2515 + SN65HVD230 | 5kbps - 1 Mbps | ||
2路隔离RS485 | SC16IS752 + SP485 | 300 bps - 921600 bps | ||
1路隔离RS232 | SP3232EEN | |||
可扩展性 | Pi5 可通过 PCIe 扩展 NVME、ETH、USB、4G/5G 等 | |||
Pi 4B/5 可通过 40PIN GPIO 堆叠部分 HAT 扩展板 (须引脚和尺寸不冲突) | ||||
供电方式 (二选一) | 转接板 Type-C 电源口 5V 供电 | |||
外部接线端子 DC 7-36V 宽电压供电 | ||||
产品尺寸 | 154.6 × 83.7 × 59 mm | |||
外壳 | 环保塑料外壳,支持导轨和挂壁安装 |
CAN 模块的功能是处理所有 CAN 总线上的报文接收和发送。报文发送时,首先将报文装载到正确的报文缓冲器和控制寄存器中。通过 SPI 接口设置控制寄存器中的相应位或使用发送使能引脚均可启动发送操作。通过读取相应的寄存器可以检查通讯状态和错误。 会对在 CAN总线上检测到的任何报文进行错误检查,然后与用户定义的滤波器进行匹配,以确定是否将报文移到两个接收缓冲器中的一个。
由于树莓派本身并不支持CAN总线,因此使用SPI接口的CAN控制器,搭配一个收发器完成CAN功能。
Microchip 的 MCP2515 是一款CAN协议控制器,完全支持 CAN V2.0B 技术规范。该器件能发送和接收标准和扩展数据帧以及远程帧。 MCP2515 自带的两个验收屏蔽寄存器和六个验收滤波寄存器可以过滤掉不想要的报文,因此减少了主单片机(MCU)的开销。MCU通过SPI接口与该器件连接,即树莓派通过SPI接口连接芯片,对于树莓派使用该芯片不需要编写驱动,只需要打开设备树中的内核驱动即可使用。可以与MCP2518FD使用通一通道,只需片选脚不同即可
MCP2518FD是Microchip公司生产的一款CAN FD(灵活数据速率)控制器,完全支持经典格式(CAN2.0)和CAN灵活数据速率(CAN FD)格式的CAN成帧。仲裁比特率高达1Mbps,数据波特率也突破传统CAN2.0的1Mbps限制,SPI时钟速度高达20MHz符合ISO11898-1:2015标准。该器件能发送和接收标准和扩展数据帧以及远程帧。 MCP2518FD 自带的32个灵活的滤波器和屏蔽对象可以过滤掉不想要的报文,因此减少了主单片机(MCU)的开销。MCU通过SPI接口与该器件连接,即树莓派通过SPI接口连接芯片,对于树莓派使用该芯片,可以通过已编写好的设备树文件来驱动该器件。
更多详细请参考数据手册;
本产品采用SC16IS752作为控制芯片,SC16IS752是双通道高性能的UART扩展芯片,支持SPI和I2C两种接口通信,本模块使用SPI接口。板载电源隔离、ADI磁耦隔离、板载TVS(瞬态电压抑制管)、自恢复保险丝和保护二极管和自动收发转换电路。可有效抑制电路中的浪涌电压和瞬态尖峰电压,防雷防静电,防过流过压,提高抗冲击能力,可进行信号隔离,具有靠性高、抗干扰强、功耗低等优点。
CS:从机片选,当CS为低电平的时候,芯片使能
SCLK: SPI通信时钟
MOSI/SI:SPI通信主机发送,从机接收
MIS0/SO:SPI通信主机接收,从机发送
本产品使用SP3232作为收发器使用,SP3232E 系列是一款 RS-232 收发器解决方案,适用于笔记本电脑或掌上电脑等便携式或手持式应用。 SP3232E 系列具有高效电荷泵电源,在 3.3V 工作电压下仅需要 0.1μF 电容器。该电荷泵使 SP3232E 系列能够通过 +3.3V 至 +5.0V 的单电源提供真正的 RS-232 性能。 SP3232E 是 2 个驱动器/2 个接收器设备。关断期间,电源电流降至 1μA 以下。更多详细请参考数据手册;
wget http://www.airspayce.com/mikem/bcm2835/bcm2835-1.60.tar.gz tar zxvf bcm2835-1.60.tar.gz cd bcm2835-1.60/ sudo ./configure sudo make sudo make check sudo make install # 更多的可以参考官网:http://www.airspayce.com/mikem/bcm2835/
#打开树莓派终端,并运行以下指令 cd sudo apt-get install wiringpi #对于树莓派2019年5月之后的系统(早于之前的可不用执行),可能需要进行升级: wget https://project-downloads.drogon.net/wiringpi-latest.deb sudo dpkg -i wiringpi-latest.deb gpio -v # 运行gpio -v会出现2.52版本,如果没有出现说明安装出错 #Bullseye分支系统使用如下命令: git clone https://github.com/WiringPi/WiringPi cd WiringPi ./build sudo gpio -v # 运行gpio -v会出现2.70版本,如果没有出现说明安装出错
使用指令拷贝资源包到树莓派
wget https://www.waveshare.net/w/upload/8/8c/WiringPi-master.zip
(可选,使用过解压指令可跳过这一步)安装解压环境
sudo apt-get install unzip
进入文件位置,执行解压指令
unzip WiringPi-master.zip
进入文件目录(进到“WiringPi-master”文件夹中)
cd WiringPi-master/
执行sudo ./build
sudo ./build
(可选,出现错误参考第4点)如果执行./build不成功就执行“chmod +x ./build”再执行“sudo ./build”
chmod +x ./build
执行示例:
#python2 sudo apt-get update sudo apt-get install python-pip sudo apt-get install python-pil sudo apt-get install python-numpy sudo pip install RPi.GPIO sudo pip install spidev sudo pip install python-can #python3 sudo apt-get update sudo apt-get install python3-pip sudo apt-get install python3-pil sudo apt-get install python3-numpy sudo pip3 install RPi.GPIO sudo pip3 install spidev sudo pip3 install python-can
sudo raspi-config Interfacing Options ->Serial ->no -> yes,关闭串口调试功能
Interfacing Options -> SPI -> Yes 开启SPI接口
然后重启树莓派:
sudo reboot
请确保SPI没有被其他的设备占用,你可以在/boot/config.txt中间检查
将模块插在树莓派上,然后修改开机脚本config.txt
sudo nano /boot/config.txt #pi5 为/boot/firmwave/config.txt
在最后一行加入如下:
dtparam=spi=on dtoverlay=i2c0 dtoverlay=spi1-3cs dtoverlay=sc16is752-spi1,int_pin=25 dtoverlay=mcp2515,spi0-0,oscillator=16000000,interrupt=23 dtoverlay=mcp251xfd,spi0-1,interrupt=24
sudo reboot
dmesg | grep spi1
sudo ip link set can0 up type can bitrate 1000000 sudo ip link set can1 up type can bitrate 1000000 sudo ifconfig can0 txqueuelen 65536 sudo ifconfig can1 txqueuelen 65536
https://www.kernel.org/doc/Documentation/networking/can.txt
ifconfig
sudo ifconfig can0 down sudo ifconfig can1 down
sudo python reveive.py
sudo python send.py
需注意的是这里的发送端是使用CAN1发送,接收端则是CAN0,具体修改可以参照下面的代码分析。
本例程是基于python平台,确保以及安装了python-can库
在发送之前要先创建一个can设备,因为前面只是启用MCP2515内核:
os.system('sudo ip link set can0 type can bitrate 100000') os.system('sudo ifconfig can0 up')
上面这条则是通过对CAN0的配置初始化并启用,且指定CAN0作为发送/接收接口。如需改成CAN1,则代码如下:
os.system('sudo ip link set can1 type can bitrate 100000') os.system('sudo ifconfig can1 up')
can0 = can.interface.Bus(channel = 'can0', bustyp = 'socketcan_ctypes')
can0 = can.interface.Bus(channel = 'can1', bustyp = 'socketcan')
msg = can.Message(arbitration_id=0x123, data=[0, 1, 2, 3, 4, 5, 6, 7], extended_id=False)
can0.send(msg)
can1.send(msg)
os.system('sudo ifconfig can0 down')
os.system('sudo ifconfig can1 down')
msg = can0.recv(10.0)
recv()中定义超时接收时间。
更多请参考:https://python-can.readthedocs.io/en/stable/interfaces/socketcan.html
cd 2-CH_CAN_HAT_Code/wiringPi/receive/ make clean sudo make sudo ./can_receive
cd 2-CH_CAN_HAT_Code/ wiringPi/receive/ make clean sudo make sudo ./can_send
sudo apt-get install p7zip-full wget http://www.waveshare.net/w/upload/4/44/2-CH_RS485_HAT_code.7z 7z x 2-CH_RS485_HAT_code.7z sudo chmod 777 -R 2-CH_RS485_HAT cd 2-CH_RS485_HAT/
sudo git clone https://github.com/waveshare/2-CH-RS485-HAT cd 2-CH-RS485-HAT/
*注意目录稍微有些不一样
cd c make clean make sudo ./main
cd python cd examples sudo python3 main.py #或者 sudo python3 test.py
RS-232使用较为方便,打开树莓派UART功能后可以直接使用/dev/ttyAMA0当做串口通信使用