RS485 CAN HAT (B)

来自Waveshare Wiki
跳转至: 导航搜索
RS485 CAN HAT (B)
RS485 CAN HAT (B)
{{{name2}}}
{{{name3}}}
板载接口
RPi CAN RS485

说明

RS485 CAN HAT (B) 是微雪电子为树莓派开发的一款的带 RS485 和 CAN 通信功能的扩展板,具备 RS485、CAN 通信功能。

特点

  • 基于 Raspberry Pi 40PIN GPIO 接口设计,适用于 Raspberry Pi 系列主板
  • 具备一路 CAN,采用控制器 MCP2515,搭配 CAN 收发器,可实现 SPI 转 CAN
  • 具备两路 RS485,采用 SC16IS752 与 SP3485 双芯片组合方案,可实现 SPI 转 RS485
  • 板载电源转换电路,支持 8~28V 宽电压供电,可同时给树莓派供电
  • 板载一体式电源隔离,可提供稳定的隔离电压,隔离端无须额外供电
  • 板载一体式数字隔离,可进行信号隔离,可靠性高、抗干扰强、功耗低
  • 板载 TVS (瞬态电压抑制管),可有效抑制电路中的浪涌电压和瞬态尖峰电压,防雷防静电
  • 板载自恢复保险丝和保护二极管,可确保电流和电压稳定输出,防过流过压,提高抗冲击能力
  • 板载 120Ω 终端电阻,可通过跳线帽设置使能
  • 板载端子和排针两种接线方式,接线更方便
  • 引出 SPI 控制接口,方便接入其他控制器控制

产品参数

扩展接口 2 路 RS485 + 1 路 CAN
通信接口 SPI
CAN控制器 MCP2515
CAN收发器 SIT65HVD230DR 或 SN65HVD23D
CAN通信速率 1Mbps 以内
串口扩展芯片 SC16IS752
RS485收发器 SP3485
RS485通信速率 300~921600 bps
供电方式 外部供电端子或树莓派
外部供电范围 DC 8~28V
工作电压 3.3V
产品尺寸 - mm

接口说明

RS485-CAN-HAT-B-details-inter.jpg

  • CAN总线(CAN_0,通过SPI0控制)
功能引脚 树莓派接口(BCM) 描述
5V 5V 5V电源正
GND GND 电源地
SCLK_0 11(SCK) SPI时钟输入
MOSI_0 10(MOSI) SPI数据输入
MISO_0 9(MISO) SPI数据输出
CE_0 8(CE0)[1] 数据/命令选择
INT_0 D25[2] 中断输出
  • RS485总线(RS485_0 & RS485_1,通过SPI1控制)
功能引脚 树莓派接口(BCM) 描述
5V 5V 5V电源正
GND GND 电源地
SCLK_1 D21 SPI时钟输入
MOSI_1 D20 SPI数据输入
MISO_1 D19 SPI数据输出
CE_1 D18 数据/命令选择
INT_1 D24[3] 中断输出

默认焊点切换说明

当板子默认引脚跟外接的其他设备引脚有冲突时,可尝试修改背面引脚焊盘,即把对应冲突引脚的0R电阻改焊到其他不冲突的引脚上。
  1. CE_0默认焊接到8(CE0),可通过修改背面0R电阻,改焊到CE1上
  2. 默认焊接到D25,可通过修改背面0R电阻,改焊到D13上
  3. 默认焊接到D24,可通过修改背面0R电阻,改焊到D25/D16/D12上

详见背面焊点,如下图所示:
RS485-CAN-HAT-B-solder.jpg

硬件说明

CAN总线

CAN 模块的功能是处理所有 CAN 总线上的报文接收和发送。报文发送时,首先将报文装载到正确的报文缓冲器和控制寄存器中。通过 SPI 接口设置控制寄存器中的相应位或使用发送使能引脚均可启动发送操作。通过读取相应的寄存器可以检查通讯状态和错误。 会对在 CAN总线上检测到的任何报文进行错误检查,然后与用户定义的滤波器进行匹配,以确定是否将报文移到两个接收缓冲器中的一个。
由于树莓派本身并不支持CAN总线,因此使用SPI接口的CAN控制器,搭配一个收发器完成CAN功能。
Microchip 的 MCP2515 是一款CAN协议控制器,完全支持 CAN V2.0B 技术规范。该器件能发送和接收标准和扩展数据帧以及远程帧。 MCP2515 自带的两个验收屏蔽寄存器和六个验收滤波寄存器可以过滤掉不想要的报文,因此减少了主单片机(MCU)的开销。MCU通过SPI接口与该器件连接,即树莓派通过SPI接口连接芯片,对于树莓派使用该芯片不需要编写驱动,只需要打开设备树中的内核驱动即可使用。
RS485 CAN HAT MCP2515.png
更多详细请参考数据手册;
SN65HVD230 是德州仪器公司生产的 3.3V CAN 收发器,该器件适用于较高通信速率、良好抗干扰 能力和高可靠性 CAN 总线的串行通信。SN65HVD230 具有高速、斜率和等待 3 种不同的工作模式。 其工作模式控制可通过 Rs 控制引脚来实现。CAN 控制器的输出引脚 Tx 接到 SN65HVD230 的数据 输入端 D,可将此 CAN 节点发送的数据传送到 CAN 网络中;而 CAN 控制器的接收引脚 Rx 和 SN65HVD230 的数据输出端 R 相连,用于接收数据。
RS485 CAN HAT SN65HVD230.png

RS485总线

本产品采用SC16IS752作为控制芯片,SC16IS752是双通道高性能的UART扩展芯片,支持SPI和I2C两种接口通信,本模块使用SPI接口。板载电源隔离、ADI磁耦隔离、板载TVS(瞬态电压抑制管)、自恢复保险丝和保护二极管和自动收发转换电路。可有效抑制电路中的浪涌电压和瞬态尖峰电压,防雷防静电,防过流过压,提高抗冲击能力,可进行信号隔离,具有靠性高、抗干扰强、功耗低等优点。 通信协议 RS485 HAT.png
CS:从机片选,当CS为低电平的时候,芯片使能
SCLK: SPI通信时钟
MOSI/SI:SPI通信主机发送,从机接收
MIS0/SO:SPI通信主机接收,从机发送
时序:CPHL=0, CPOL=0 (SPI0)
【备注】具体关于SPI通信的相关信息,可以自行网上搜索资料了解
SP3485接口芯片是一种RS-485驱动芯片。用于RS-485通信的低功耗收发器。 采用单一电源+3.3V工作,采用半双工通讯方式。RO和DI端分别为接收器的输出和驱动器的输入端;(RE) ̅和DE端分别为接收和发送的使能端,当(RE) ̅为逻辑0时,器件处于接收状态;当DE为逻辑1时,器件处于发送状态;A端和B端分别为接收和发送的差分信号端,当A-B>+0.2V时,RO输出逻辑1;当A-B<-0.2V时,RO输出逻辑0。A和B端之间加匹配电阻,一般可选100Ω的电阻。
RS485 CAN HAT 485.png
其中:SP3485芯片的RE与DE管脚是设置接收与发送;
本模块用硬件自动控制的收发:
RS485 CAN HAT B SP3485.png
数据接收:TXD此时为高电平, 为休闲状态。这时候MOS管导通,SP3485芯片的RE引脚为低电平,数据接收使能,RO开始接收数据,将485AB口接受到的数据传到MCU。
数据发送:TXD会有一个下拉的电平,表示开始发送数据,此时MOS管截止,DE引脚为高电平,数据发送使能。此时,如果发送的数据为‘1’的时候,MOS管会处于导通,虽然接收会变为有效状态但由于芯片在发送阶段时是高阻状态,所以还是保持发送状态,正常传输‘1’。


树莓派使用

安装库

如果使用bookworm系统,只能使用lgpio库,bcm2835跟wiringPi无法安装与使用

BCM2835

#打开树莓派终端,并运行以下指令
wget http://www.airspayce.com/mikem/bcm2835/bcm2835-1.71.tar.gz
tar zxvf bcm2835-1.71.tar.gz 
cd bcm2835-1.71/
sudo ./configure && sudo make && sudo make check && sudo make install
# 更多的可以参考官网:http://www.airspayce.com/mikem/bcm2835/

wiringPi

#打开树莓派终端,并运行以下指令
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
gpio -v
# 运行gpio -v会出现2.70版本,如果没有出现说明安装出错

lgpio

#打开树莓派终端,并运行以下指令
wget https://github.com/joan2937/lg/archive/master.zip
unzip master.zip
cd lg-master
sudo make install

# 更多的可以参考官网:https://github.com/gpiozero/lg

python

sudo apt-get update
sudo apt-get install python-serial
sudo pip install python-can

安装python3库

sudo apt-get update
sudo apt-get install python3-pip
sudo pip3 install RPi.GPIO
sudo apt-get install python3-serial

配置驱动

修改配置文件

将模块插在树莓派上,然后修改开机脚本config.txt

sudo nano /boot/config.txt

在最后一行加入如下:

dtparam=spi=on
dtoverlay=mcp2515-can0,oscillator=16000000,interrupt=25,spimaxfrequency=1000000
dtoverlay=sc16is752-spi1,int_pin=24

保存退出后,重启树莓派:

sudo reboot

检查是否正确配置

重启后,SC16IS752和mcp251x的驱动会加载到系统内核中,运行命令查看是否初始化成功:

dmesg | grep -i '\(can\|spi\)'

RS485 CAN HAT B init.png
如果不接上模块可能提示如下:
RS485 CAN HAT B CANinit2.png
请检查是否连接上模块。是否开启SPI并开启MCP2515内核驱动。是否已经进行过重启。

RS485

此时也可以运行

ls /dev

查看RS485总线是否正确配置,如果正确配置将会多出如下设备: Rs485添加驱动.png
在2020-05-27的树莓派系统中gpiochip3没有了变成了gpiochip2

CAN

开启CAN

sudo ip link set can0 up type can bitrate 1000000
sudo ifconfig can0 txqueuelen 65536

更多相关CAN内核指令可以查看:

https://www.kernel.org/doc/Documentation/networking/can.txt

查看ifconfig:

ifconfig

Can ifconfig.png

CAN使用

硬件连接

本演示程序使用了一个树莓派,一个RS485 CAN HAT (B)模块以及一个USB-CAN-A模块
提供python与c语言程序
RS485 CAN HAT B CANtoUSB2.jpg

小工具简单测试

  • 开启CAN:
sudo ip link set can0 up type can bitrate 1000000
sudo ifconfig can0 txqueuelen 65536

更多相关CAN内核指令可以查看:

https://www.kernel.org/doc/Documentation/networking/can.txt

查看ifconfig:

ifconfig

Can ifconfig.png

  • 安装can-utils:
sudo apt-get install can-utils
  • 接收:

终端输入接收数据指令:

candump can0

该接收工具是阻塞的,不加参数时运行该工具会一直处于接收状态,使用Ctrl+C退出。
关于该工具的参数说明可使用:

candump -h
  • 发送

终端输入发送数据指令:

cansend can0 000#11.22.33.44

效果:
RS485 CAN HAT B canutils1.png

  • 自检

终端输入指令:

sudo ip link set can0 down                                      #若之前已开启总线,需要先关闭总线
sudo ip link set can0 up type can bitrate 1000000 loopback on   #以环回模式开启总线
sudo ifconfig can0 txqueuelen 65536
cangen can0 -I i -L 8
#-I 设置设备ID,'i'为递增模式;-L 设置数据长度

此时会向CAN不断发送设备ID递增,长度为8,内容随机的数据。同时该命令默认开启环回模式,可在另一个终端窗口运行:

candump can0

运行后可以也接收到上面发送的数据:
RS485 CAN HAT B canutils2.png
测试结束后可以分别在两个终端使用Ctrl+C结束运行。

sudo ip link set can0 down
sudo ip link set can0 up type can bitrate 1000000 loopback on   #关闭环回模式

下载例程

在树莓派终端运行:

sudo apt-get install unzip
wget https://www.waveshare.net/w/upload/9/92/RS485_CAN_HAT_B.zip
unzip RS485_CAN_HAT_B.zip
sudo chmod 777 -R RS485_CAN_HAT_B/
cd RS485_CAN_HAT_B

C 程序

注意:
1.确保硬件接线是正确的,即H-H,L-L连接
2.确保两边的波特率设置一致的,默认的例程设置的波特率为1Mbps
3.如果长时间发送数据有丢帧现象,可以尝试降低波特率解决

  • 发送,树莓派打开终端,运行:
cd RS485_CAN_HAT_B/CAN/wiringPi/send/
make clean
make
sudo ./can_send
  • 阻塞接收,树莓派打开终端,运行:
cd RS485_CAN_HAT_B/CAN/wiringPi/receive/
make clean
make
sudo ./can_receive

接收程序是阻塞的,直到读取到数据就结束。
注意:该程序仅能接收帧ID为123的数据,如需接收其它ID数据可自行修改程序
RS485 CAN HAT CAN reveive.png
以USB转CAN调试工具为例,效果为:
RS485 CAN HAT B wiringPi.png

python 程序

树莓派打开终端,运行:

#发送端:
sudo python can_send.py
cd RS485_CAN_HAT_B/CAN/python/
#先运行接收程序,再从电脑发送数据:
sudo python can_reveive.py

效果:
RS485 CAN HAT B CANp.png

RS485使用

硬件连接

详细连接:

  • C和python例程运行需要一个额外的RS485转串口模块连接通道1才可以看到效果。
  • Python中test.py需要通道1和通道2连接。
功能引脚 树莓派接口(BCM) 描述
5V 5V 5V电源正
GND GND 电源地
SCLK_1 D21 SPI时钟输入
MOSI_1 D20 SPI数据输入
MISO_1 D19 SPI数据输出
CE_1 D18 数据/命令选择
INT_1 D24 中断输出

测试

  • 下载并运行测试例程
sudo apt-get install p7zip-full
wget https://www.waveshare.net/w/upload/9/92/RS485_CAN_HAT_B.zip
unzip RS485_CAN_HAT_B.zip
sudo chmod 777 -R  RS485_CAN_HAT_B.zip
cd RS485_CAN_HAT_B/

C 程序

cd c
make clean
make
sudo ./main
  • 此处演示的为:RS485_0的通道1与USB TO RS485的A.B连接如下图:

RS485 CAN HAT B 485toUSB.jpg

USB TO RS485连接到电脑,打开串口助手,选择对应的串口,设置波特率115200。

  • 执行C程序,电脑发送任何数据,模块将数据返回执行C程序,如下图:

RS485 CAN HAT B 485C.png
(注意: 需要加回车换行才可以,不然数据不会返回;示例的程序目录以实际为主。)


python 程序

cd python 
cd examples
sudo python3 main.py

该程序与C程序的硬件连接与现象相同:
RS485 CAN HAT B 485python.png

当手上没有USB TO RS485时,可以尝试下面的测试例程:

  • 将通道1的A,B与通道2的A,B连接:

RS485 CAN HAT (B) 1.jpg

  • 运行test.py,可以得到如下效果:
sudo python3 test.py

RS485 CAN HAT B test.png

Modbus应用实例

本实例使用树莓派一个、RS485 CAN HAT扩展板一个、Mobus RTU Relay继电器模块一个。

硬件连接

  • 将扩展板安装到树莓派上,然后按A-A、B-B的顺序将扩展版的RS485接口与Modbus模块的RS485接口对应连接;
  • 分别为树莓派和Modbus模块接通电源。

连接示意图

下载例程

wget https://www.waveshare.net/w/upload/b/ba/RS485_Modbus_RTU_Relay_Code.zip
  • 解压后进入所在路径:
unzip RS485_Modbus_RTU_Relay_Code.zip
cd RS485_Modbus_RTU_Relay_Code/Modbus_RTU_Relay_Code/Python3
  • 运行程序
sudo python main.py
  • 程序运行现象为继电器按编号从CH1到CH8依次开启再从CH1到CH8依次关闭,不断循环。
  • 更多程序可参考Mobus RTU Relay模块wiki界面,注意需要将程序中串口号进行修改。

资料

文档

程序

数据手册


FAQ

  1. 确定两边的波特率一致;
  2. 例程中设置的是固定的帧ID:0X123,请设置好您的CAN另外一端的发送接收CAN ID都是x0123;


  1. 主流的Ubuntu系统config.txt文件通常在/boot/firmware 文件夹
  2. 或者将树莓派的SD卡通过读卡器在电脑下(或者其它能识别SD卡的主机)读取和更改config.txt文件。


0) 考虑是库安装问题,请参考以下步骤安装库
安装python3-venv包,如果还没安装的话
sudo apt install python3-venv
创建一个新的虚拟环境
python3 -m venv myenv &&source myenv/bin/activate
激活虚拟环境
source myenv/bin/activate
现在你可以在虚拟环境中安装requests
pip install requests
1) 此外也可以尝试改用以下指令安装
sudo apt install python3-rpi.gpio
sudo apt-get install pipx
pipx install rpi.gpio



技术支持


联系人:黄工
EMAIL:3005423122@qq.com
电话:0755-83040712
QQ:3005763927
微信:扫下方二维码添加
Hkx-wx.jpg

说明:进行售后服务前,请准备好客户信息(定货单位、定货人等),以供验证