“RS485 CAN HAT”的版本间的差异

来自Waveshare Wiki
跳转至: 导航搜索
 
(未显示9个用户的106个中间版本)
第1行: 第1行:
 +
<div class="wiki-pages blue-color">
 
<div class="tabber">
 
<div class="tabber">
<!--<div class="tabbertab" title="说明"></div>-->
 
<div class="tabbertab" title="资料">
 
 
{{扩展板|colorscheme=blue
 
{{扩展板|colorscheme=blue
 
|name = RS485 CAN HAT
 
|name = RS485 CAN HAT
|img = [[File:RS485-CAN-HAT-intro.jpg|360px |alt=RS485 CAN HAT|link=http://{{SERVERNAME}}/shop/RS485-CAN-HAT.htm | RS485 CAN HAT]]
+
|img = [[File:RS485-CAN-HAT-intro.jpg|360px |alt=RS485 CAN HAT|link=https://{{SERVERNAME}}/shop/RS485-CAN-HAT.htm | RS485 CAN HAT]]
 
|category1=树莓派
 
|category1=树莓派
 
|brand=Waveshare
 
|brand=Waveshare
第12行: 第11行:
 
|interface3 = RS485
 
|interface3 = RS485
 
}}
 
}}
 +
 +
<div class="tabbertab" title="说明" id="myintro">
 +
 +
=说明=
 +
RS485 CAN HAT 是微雪电子为树莓派开发的一款的带 RS485 和 CAN 通信功能的扩展板,具备 RS485、CAN 通信功能。<br />
 +
 +
==特点==
 +
*基于Raspberry Pi 40pin GPIO接口,适用于Raspberry Pi系列主板
 +
*具备CAN功能,使用SPI接口CAN控制器MCP2515,搭配收发器SN65HVD230
 +
*具备RS485功能,使用UART控制,半双工通讯,收发器为SP3485
 +
*板载TVS(瞬态电压抑制管),RS485通讯可有效抑制电路中的浪涌电压和瞬态尖峰电压,防雷防静电
 +
*预留控制接口,方便其他控制器控制
 +
*提供完善的配套资料手册(提供wiringPi与python例程)
 +
 +
==产品参数==
 +
*工作电压: 3.3V
 +
*CAN控制芯片: MCP2515
 +
*CAN收发器: SN65HVD230
 +
*485收发器: SP3485
 +
*产品尺寸: 65mmx30mm
 +
*固定孔通经: 3.0mm
 +
 +
==接口说明==
 +
*CAN总线
 +
{|border=1; style="width:700px;"
 +
|-style="background:#0000ff; color:white;" align="center"
 +
|功能引脚||树莓派接口(BCM)||描述
 +
|-align="center"
 +
|3V3||3V3||3.3V电源正
 +
|-align="center"
 +
|GND||GND||电源地
 +
|-align="center"
 +
|SCK||SCK||SPI时钟输入
 +
|-align="center"
 +
|MOSI||MOSI||SPI数据输入
 +
|-align="center"
 +
|MISO||MISO||SPI数据输出
 +
|-align="center"
 +
|CS||CE0||数据/命令选择
 +
|-align="center"
 +
|INT||25||中断输出
 +
|}
 +
 +
*RS485总线
 +
{|border=1; style="width:700px;"
 +
|-style="background:#0000ff; color:white;" align="center"
 +
|功能引脚||树莓派接口(BCM)||描述
 +
|-align="center"
 +
|3V3||3V3||3.3V电源正
 +
|-align="center"
 +
|GND||GND||电源地
 +
|-align="center"
 +
|RXD||RXD||串口接收
 +
|-align="center"
 +
|TXD||TXD||串口发送
 +
|-align="center"
 +
|RSE||4||设置收发
 +
|}
 +
对于RSE引脚,可以选择不使用,模块出厂默认使用的是硬件自动接收与发送。<br />
 +
 +
==硬件说明==
 +
===CAN总线===
 +
CAN 模块的功能是处理所有 CAN 总线上的报文接收和发送。报文发送时,首先将报文装载到正确的报文缓冲器和控制寄存器中。通过 SPI 接口设置控制寄存器中的相应位或使用发送使能引脚均可启动发送操作。通过读取相应的寄存器可以检查通讯状态和错误。 会对在 CAN总线上检测到的任何报文进行错误检查,然后与用户定义的滤波器进行匹配,以确定是否将报文移到两个接收缓冲器中的一个。<br />
 +
<font color="#FF0000">
 +
由于树莓派本身并不支持CAN总线,因此使用SPI接口的CAN控制器,搭配一个收发器完成CAN功能。<br />
 +
</font>
 +
Microchip 的 MCP2515 是一款CAN协议控制器,完全支持 CAN V2.0B 技术规范。该器件能发送和接收标准和扩展数据帧以及远程帧。 MCP2515 自带的两个验收屏蔽寄存器和六个验收滤波寄存器可以过滤掉不想要的报文,因此减少了主单片机(MCU)的开销。MCU通过SPI接口与该器件连接,即树莓派通过SPI接口连接芯片,对于树莓派使用该芯片不需要编写驱动,只需要打开设备树中的内核驱动即可使用。<br />
 +
[[file:RS485_CAN_HAT_MCP2515.png]]<br />
 +
更多详细请参考数据手册;<br />
 +
SN65HVD230 是德州仪器公司生产的 3.3V CAN 收发器,该器件适用于较高通信速率、良好抗干扰 能力和高可靠性 CAN 总线的串行通信。SN65HVD230 具有高速、斜率和等待 3 种不同的工作模式。 其工作模式控制可通过 Rs 控制引脚来实现。CAN 控制器的输出引脚 Tx 接到 SN65HVD230 的数据 输入端 D,可将此 CAN 节点发送的数据传送到 CAN 网络中;而 CAN 控制器的接收引脚 Rx 和 SN65HVD230 的数据输出端 R 相连,用于接收数据。<br />
 +
[[file:RS485_CAN_HAT_SN65HVD230.png]]<br />
 +
 +
===RS485总线===
 +
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Ω的电阻。<br />
 +
[[file:RS485_CAN_HAT_485.png]]<br />
 +
其中:SP3485芯片的RE与DE管脚是设置接收与发送;<br />
 +
本模块默认的出厂设置是采用硬件自动的收发,也可以选择软件上控制管脚来选择发送与接收,可以通过焊接板上的0欧姆电阻来选择控制方式。<br />
 +
硬件自动控制:<br />
 +
[[file:RS485_CAN_HAT_485SR.png]]<br />
 +
'''数据接收''':P_TX此时为高电平, 为休闲状态。这时候三级管导通,SP3485芯片的RE引脚为低电平,数据接收使能,RO开始接收数据,将485AB口接受到的数据传到MCU。<br />
 +
'''数据发送''':P_TX会有一个下拉的电平,表示开始发送数据,此时三极管截止,DE引脚为高电平,数据发送使能。此时,如果发送的数据为‘1’的时候,三极管会处于导通,虽然接收会变为有效状态但由于芯片在发送阶段时是高阻状态,所以还是保持发送状态,正常传输‘1’。<br />
 +
<font color="#FF0000">
 +
注意:使用自动收发由于三级管的通断的速度问题,会导致自动收发的波特率无法做到太高,如果需要很高的波特率建议使用手动收发。<br />
 +
</font>
 +
 +
=树莓派使用=
 +
==安装库==
 +
{{RPI_C_lib}}
 +
 +
*python
 +
<pre>
 +
sudo apt-get update
 +
sudo apt-get install python-serial
 +
sudo pip install python-can
 +
</pre>
 +
PI5
 +
<pre>
 +
sudo apt-get update
 +
sudo apt-get install python-serial
 +
sudo apt-get install python-can
 +
</pre>
 +
 +
==CAN使用==
 +
<font color="#FF0000">
 +
本演示程序使用了两个树莓派以及两个RS485 CAN HAT模块<br />
 +
提供python与c语言程序<br />
 +
</font>
 +
 +
===前置工作===
 +
将模块插在树莓派上,然后修改开机脚本config.txt<br />
 +
<pre>
 +
sudo nano /boot/config.txt
 +
</pre>
 +
在最后一行加入如下:
 +
<pre>
 +
dtparam=spi=on
 +
dtoverlay=mcp2515-can0,oscillator=12000000,interrupt=25,spimaxfrequency=2000000
 +
</pre>
 +
其中oscillator=12000000,是板载的晶振大小12M,如下图<br />
 +
[[file:RS485_CAN_HAT_cry12.png]]<br />
 +
 +
<font color="#FF0000">
 +
*如果购买日期早于2019年8月份,请使用下面的:<br />
 +
</font>
 +
如图,红色框内为8M的晶振<br />
 +
[[file:RS485_CAN_HAT_cry.png]]<br />
 +
<pre>
 +
dtparam=spi=on
 +
dtoverlay=mcp2515-can0,oscillator=8000000,interrupt=25,spimaxfrequency=1000000
 +
</pre>
 +
 +
 +
保存退出后,重启树莓派:
 +
<pre>
 +
sudo reboot
 +
</pre>
 +
重启后,运行命令查看是否初始化成功:<br />
 +
<pre>
 +
dmesg | grep -i '\(can\|spi\)'
 +
</pre>
 +
[[file:RS485_CAN_HAT_CAN1.png|600px]]<br />
 +
如果不接上模块可能提示如下:<br />
 +
[[file:RS485_CAN_HAT_CAN2.png|600px]]<br />
 +
请检查是否连接上模块。是否开启SPI并开启MCP2515内核驱动。是否进行重启。<br />
 +
确定好两边树莓派都这样处理了,把两个模块的H与L对应连接<br />
 +
如果使用的是其他的CAN设备,确定连线H-H,L-L即可<br />
 +
 +
*开启CAN:<br />
 +
<pre>
 +
sudo ip link set can0 up type can bitrate 1000000
 +
sudo ifconfig can0 txqueuelen 65536
 +
</pre>
 +
 +
*更多相关CAN内核指令可以查看:<br />
 +
https://www.kernel.org/doc/Documentation/networking/can.txt
 +
 +
*查看ifconfig:<br />
 +
<pre>
 +
ifconfig
 +
</pre>
 +
[[File:can_ifconfig.png|600px]]
 +
 +
==回环模式测试==
 +
 +
*安装can-utils:
 +
sudo apt-get install can-utils
 +
 +
*打开can0和设置回环模式
 +
sudo ip link set can0 down
 +
sudo ip link set can0 type can bitrate 1000000 loopback on
 +
sudo ip link set can0 up type can bitrate 1000000
 +
 +
*打开两个终端窗口,测试can0自发自收:
 +
candump can0
 +
cansend can0  000#11.22.33.44
 +
[[File:can_loopback.png|600px]]
 +
 +
==下载例程==
 +
在树莓派终端运行:<br />
 +
<pre>
 +
sudo apt-get install unzip
 +
wget https://www.waveshare.net/w/upload/4/4e/RS485_CAN_HAT_Code.zip
 +
unzip RS485_CAN_HAT_Code.zip
 +
sudo chmod 777 -R RS485_CAN_HAT_Code/
 +
</pre>
 +
===C===
 +
*阻塞接收,树莓派打开终端,运行:<br />
 +
<pre>
 +
cd RS485_CAN_HAT_Code/CAN/wiringPi/receive/
 +
make clean
 +
make
 +
sudo ./can_receive
 +
</pre>
 +
接收程序是阻塞的,直到读取到数据就结束。<br />
 +
[[file:RS485_CAN_HAT_CAN_reveive.png|600px]]<br />
 +
 +
*发送,树莓派打开终端,运行:<br />
 +
<pre>
 +
cd RS485_CAN_HAT_Code/CAN/wiringPi/send/
 +
make clean
 +
make
 +
sudo ./can_send
 +
</pre>
 +
[[file:RS485_CAN_HAT_CAN_send.png|600px]]<br />
 +
 +
此时接收接收到对应的id的报文:<br />
 +
[[file:RS485_CAN_HAT_CAN_reveive1.png|600px]]<br />
 +
 +
===python===
 +
树莓派打开终端,运行:<br />
 +
<pre>
 +
cd RS485_CAN_HAT_Code/CAN/python/
 +
#先运行接收:
 +
sudo python reveive.py
 +
#发送端:
 +
sudo python send.py
 +
</pre>
 +
 +
===与其他的CAN设备应该如何使用===
 +
1.确保硬件接线是正确的,即H-H,L-L连接<br />
 +
2.确保两边的波特率设置一致的,默认的例程设置的波特率为100K<br />
 +
[[file:RS485_CAN_HAT_CANbitrate.png|600px]]<br />
 +
3.确保两边的CAN ID是一致的,否则无法接收到<br />
 +
[[file:RS485_CAN_HAT_CANid.png|600px]]<br />
 +
4.如果长时间发送数据有丢帧现象,可以尝试降低波特率解决<br />
 +
 +
=RS485使用=
 +
<font color="#FF0000">
 +
本演示程序使用了两个树莓派以及两个RS485 CAN HAT模块<br />
 +
提供python与wiringPi语言程序<br />
 +
</font>
 +
 +
===前置工作===
 +
{{RPI open uart}}
 +
 +
打开/boot/config.txt文件,找到如下配置语句使能串口,如果没有,可添加在文件最后面。<br />
 +
<pre>
 +
enable_uart=1
 +
</pre>
 +
 +
 +
对于树莓派3B用户,串口用于蓝牙,需要注释掉:<br />
 +
<pre>
 +
#dtoverlay=pi3-miniuart-bt
 +
</pre>
 +
 +
树莓派5/2B/zero和部分改过配置的树莓派,用户串口设备号可能为ttyAMA0;可以用以下命令行确认,serial0为选用的串口设备号,如下图:<br>
 +
ls -l /dev/serial*
 +
[[File:RM500U-serial.png|800px]]
 +
 +
 +
然后重启树莓派:<br />
 +
<pre>
 +
sudo reboot
 +
</pre>
 +
 +
 +
 +
确定好两边树莓派都这样处理了,把两个模块的A与B对应连接<br />
 +
如果使用的是其他的485设备,确定连线A-A,B-B即可<br />
 +
 +
===C===
 +
*阻塞接收,树莓派打开终端,运行:<br />
 +
<pre>
 +
cd RS485_CAN_HAT_Code/485/WiringPi/receive
 +
make clean
 +
make
 +
sudo ./485_receive
 +
</pre>
 +
接收程序是阻塞的,直到读取到数据就结束。<br />
 +
[[file:RS485_CAN_HAT_485_receive.png|600px]]<br />
 +
 +
*发送,树莓派打开终端,运行:<br />
 +
<pre>
 +
cd RS485_CAN_HAT_Code/485/WiringPi/send
 +
make clean
 +
make
 +
sudo ./485_send
 +
</pre>
 +
此时接收端接收到程序<br />
 +
[[file:RS485_CAN_HAT_485_receive2.png|600px]]<br />
 +
 +
===python例程===
 +
<pre>
 +
cd RS485_CAN_HAT_Code/485/python/
 +
#先运行接收:
 +
sudo python receive.py
 +
#发送端:
 +
sudo python send.py
 +
</pre>
 +
 +
===故障排查===
 +
如果485通信不正常,请分步调试:<br />
 +
#确认是否禁止了从串行登录树莓派shell;
 +
#确定树莓派的硬件版本,如果是树莓派ZERO/3B,则程序中的串口可能需要修改成/dev/ttyAMA0;
 +
#确定485的A,B是否与控制的485设备A,B一一对应;
 +
#可以先使用USB to 485设备与RS485 CAN HAT通信,保证树莓派的设置没有问题;
 +
 +
</div>
 +
 +
= X3-Pi 使用 =
 +
== 前置操作 ==
 +
使用命令 <br />
 +
sudo srpi-config
 +
开启硬件控制接口界面,打开串口、与SPI;<br />
 +
[[File:RS485_CAN_HAT_x3-0.jpg]]<br />
 +
 +
== 安装包下载 ==
 +
更新 package 列表<br />
 +
sudo apt update
 +
升级所有已安装的软件包到最新版本<br />
 +
sudo apt full-upgrade
 +
安装WiringPi<br />
 +
sudo apt update
 +
sudo apt install git-core
 +
git clone https://gitee.com/study-dp/WiringPi.git
 +
cd WiringPi
 +
./build.sh
 +
 +
== 下载程序 ==
 +
wget https://www.waveshare.net/w/upload/7/7d/RS485_CAN_HAT_X3.zip
 +
unzip -o RS485_CAN_HAT_X3.zip -d RS485_CAN_HAT_X3
 +
 +
== RS485 ==
 +
=== c ===
 +
进入目录 <br />
 +
cd ~/RS485_CAN_HAT_X3/rs485/c/
 +
接收示例<br />
 +
cd receive/
 +
make
 +
./rs485_receive
 +
发送示例<br />
 +
cd send/
 +
make
 +
./rs485_send
 +
 +
=== python ===
 +
进入目录 <br />
 +
cd ~/RS485_CAN_HAT_X3/rs485/python/
 +
接收示例<br />
 +
python3 receive.py
 +
发送示例<br />
 +
python3 send.py
 +
 +
== CAN ==
 +
进入目录 <br />
 +
cd ~/RS485_CAN_HAT_X3/CAN/c/
 +
接收示例<br />
 +
cd receive/
 +
make
 +
./receive
 +
发送示例<br />
 +
cd send/
 +
make
 +
./send
 +
 +
=== python ===
 +
进入目录 <br />
 +
cd ~/RS485_CAN_HAT_X3/CAN/python/
 +
接收示例<br />
 +
python3 receive.py
 +
 +
发送示例<br />
 +
python3 send.py
 +
 +
<div class="tabbertab" title="资料" id="myresources">
 +
 +
=资料=
 +
 +
 
===文档===
 
===文档===
*[http://www.waveshare.net/w/upload/0/0f/RS485-CAN-HAT-user-manual-cn.pdf 用户手册]
+
*[https://{{SERVERNAME}}/w/upload/1/1d/RS485_CAN_HAT_Schematic.pdf 原理图]
*[http://www.waveshare.net/w/upload/1/1d/RS485_CAN_HAT_Schematic.pdf 原理图]
+
 
 +
===3D 图纸===
 +
*[https://{{SERVERNAME}}/w/upload/5/52/RS485_CAN_HAT_3D_Drawing.zip RS485 CAN HAT 3D图纸]
  
 
===程序===
 
===程序===
*[http://www.waveshare.net/w/upload/d/de/RS485_CAN_HAT_Code.7z 示例程序]
+
*[https://www.waveshare.net/w/upload/4/4e/RS485_CAN_HAT_Code.zip 示例程序]
 +
*[https://www.waveshare.net/w/upload/7/7d/RS485_CAN_HAT_X3.zip X3-Pi 示例程序]
 +
<!--
 +
*[https://{{SERVERNAME}}/w/upload/d/de/RS485_CAN_HAT_Code.7z 示例程序]
 +
-->
  
 
===数据手册===
 
===数据手册===
*[http://{{SERVERNAME}}/w/upload/3/36/SP3481_SP3485.pdf SP3485]
+
*[https://{{SERVERNAME}}/w/upload/3/36/SP3481_SP3485.pdf SP3485]
*[http://{{SERVERNAME}}/w/upload/8/82/SN65HVD230.pdf SN65HVD230]
+
*[https://{{SERVERNAME}}/w/upload/8/82/SN65HVD230.pdf SN65HVD230]
*[http://{{SERVERNAME}}/w/upload/8/83/MCP2515.pdf MCP2515]
+
*[https://{{SERVERNAME}}/w/upload/8/83/MCP2515.pdf MCP2515]
<br /><big>批量下载教程——请戳<big><big><big></big></big></big></big>[[File:download-icon.png|link=批量下载教程]]
+
 
 +
 
 +
 
 +
</div>
 +
<div class="tabbertab" title="FAQ" id="myfaq">
 +
 
 +
=FAQ=
 +
<br />
 +
{{FAQ| 版本说明?|
 +
*目前版本是12M的,可以查看模块正面:<br />
 +
[[file:RS485_CAN_HAT_cry12.png]]<br />
 +
那么对应的config.txt中的命令为:
 +
<pre>
 +
dtoverlay=mcp2515-can0,oscillator=12000000,interrupt=25,spimaxfrequency=2000000
 +
</pre>
 +
 
 +
*如果你的是老版本的话,那么此处应该是8M的晶振,如下图:<br />
 +
[[file:RS485_CAN_HAT_cry.png]]<br />
 +
那么对应的config.txt中的命令为:
 +
<pre>
 +
dtoverlay=mcp2515-can0,oscillator=8000000,interrupt=25,spimaxfrequency=1000000
 +
</pre>
 +
|||}}
 +
 
 +
{{FAQ|CAN发送和接收不到数据?|
 +
#确定两边的波特率一致;
 +
#例程中设置的是固定的帧ID:0X123,请设置好您的CAN另外一端的发送接收CAN ID都是x0123;
 +
|||}}
 +
<!--
 +
{{FAQ|CAN和RS485的波特率最高支持多少?|
 +
CAN和RS485的波特率最高支持500Kbps。(一般在500K以内可以稳定工作)
 +
|||}}
 +
-->
 +
{{FAQ|是否带隔离|
 +
这是一款入门级的485和CAN,都是不带隔离的。|||}}
 +
{{FAQ|485通信不正常,怎么办?|
 +
#确定树莓派的硬件版本,如果是树莓派ZERO/3B,则程序中的串口需要修改成/dev/ttyAMA0;
 +
#检查树莓派的串口通信是否开启了流控;
 +
#确定485的A,B是否与控制的485设备A,B一一对应;
 +
#可以先使用USB to 485设备与RS485 CAN HAT通信,保证树莓派的设置没有问题;
 +
#检察串口通信参数的奇数偶数位校验的设置。
 +
|||}}
 +
 
 +
{{FAQ|树莓派装了ubuntu系统怎么配置config.txt文件?|
 +
#主流的Ubuntu系统config.txt文件通常在/boot/firmware 文件夹
 +
sudo nano /boot/firmware  config.txt
 +
在最后一行加入如下:
 +
<pre>
 +
dtparam=spi=on
 +
dtoverlay=mcp2515-can0,oscillator=12000000,interrupt=25,spimaxfrequency=2000000
 +
enable uart=1
 +
</pre>
 +
#或者将树莓派的SD卡通过读卡器在电脑下(或者其它能识别SD卡的主机)读取和更改config.txt文件。
 +
|||}}
 +
 
 +
{{FAQ|为什么在树莓派上无法用UART控制模块,无法通过minicom打开ttyS0,提示没有ttyS0?|
 +
打开树莓派终端,输入以下指令进入配置界面<br />
 +
<pre>
 +
sudo raspi-config
 +
选择Interfacing Options -> Serial,关闭shell访问,打开硬件串口
 +
</pre>
 +
[[file:L76X_GPS_Module_rpi_serial.png|center]]<br />
 +
树莓派5/3B/2B/zero,用户串口设备号为ttyAMA0;可以用以下命令行确认,serial0为选用的串口设备号,如下图:<br>
 +
ls -l /dev/tty*
 +
[[File:serial-pi5.png|600px]]
 +
 
 +
*树莓派3B/2B/zero用户,串口用于蓝牙,注释掉后就是S0, 树莓派4 默认没有该语句:<br />
 +
<pre>
 +
#dtoverlay=pi3-miniuart-bt
 +
</pre>
 +
然后重启树莓派:<br />
 +
<pre>
 +
sudo reboot
 +
</pre>
 +
 
 +
|||}}
 +
 
 +
{{FAQ|将传感器接到RS485后,运行对应程序没有收到数据?|
 +
传感器那边发送过来的可能是hex数据(有时候还需要先发送hex数据给传感器请求数据),按照以下步骤收发hex数据:
 +
wget https://www.waveshare.net/w/upload/0/00/RS485-CAN-HAT-For-Hex.zip
 +
unzip RS485-CAN-HAT-For-Hex.zip
 +
sudo chmod 777 RS485-CAN-HAT-For-Hex.zip
 +
cd RS485-CAN-HAT-For-Hex
 +
#接收Hex
 +
sudo python3 RS485-CAN-HAT-send-hex.py 
 +
#发送Hex
 +
sudo python3 RS485-CAN-HAT-receive-hex.py
 +
|||}}
 
</div>
 
</div>
<div class="tabbertab" title="FAQ"><br />
+
<div class="tabbertab" title="售后" id="mysupport">
{{FAQ| CAN 速度太高通讯不了?|
+
 
答:可以再dtoverlay 设置中将SPI的速度调整大一点,例如spimaxfrequenc设置为8000000。|||}}
+
{{FAQ|CAN通讯会越来越慢,后面就只能经常重新can端口,有时候确实程序的速度挺慢?|
 +
指的是数据处理后输出的部分变慢的话,提高上位机的性能应该有帮助;也可以考虑每次读取前清空缓存只读最新数据进行处理。
 +
|||}}
 +
 
 +
{{FAQ|RS485 通信要接GND吗?|
 +
可以不接GND使用,接GND信号可能会更稳定,连接GND以获得更好的性能、可靠性和抗干扰能力,长距离通信的话,建议还是接上GND。
 +
|||}}
 +
 
 +
{{FAQ|为什么外接USB-CAN盒子通信异常?|
 +
*上位机和下位机的CAN速率要一致
 +
*两端的120欧姆平衡电阻都打开
 +
*发送方的帧ID要和接收方的滤波ID对应
 +
|||}}
 +
 
 +
{{FAQ|用的最新树莓派系统,python库安装失败怎么办?|
 +
进去myenv 后再安装对应的python 库,在myenv环境里所有指令不带sudo
 +
<pre>
 +
sudo apt install python3-venv
 +
python3 -m venv myenv &&source myenv/bin/activate
 +
source myenv/bin/activate
 +
pip install requests
 +
</pre>
 +
|||}}
 +
 
 +
=技术支持=
 +
<br />{{Service18}}</div>
 
</div>
 
</div>
<div class="tabbertab" title="售后"><br />{{Service08}}</div>
 

2024年4月22日 (一) 20:06的最新版本

RS485 CAN HAT
RS485 CAN HAT
{{{name2}}}
{{{name3}}}
板载接口
RPi CAN RS485

说明

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

特点

  • 基于Raspberry Pi 40pin GPIO接口,适用于Raspberry Pi系列主板
  • 具备CAN功能,使用SPI接口CAN控制器MCP2515,搭配收发器SN65HVD230
  • 具备RS485功能,使用UART控制,半双工通讯,收发器为SP3485
  • 板载TVS(瞬态电压抑制管),RS485通讯可有效抑制电路中的浪涌电压和瞬态尖峰电压,防雷防静电
  • 预留控制接口,方便其他控制器控制
  • 提供完善的配套资料手册(提供wiringPi与python例程)

产品参数

  • 工作电压: 3.3V
  • CAN控制芯片: MCP2515
  • CAN收发器: SN65HVD230
  • 485收发器: SP3485
  • 产品尺寸: 65mmx30mm
  • 固定孔通经: 3.0mm

接口说明

  • CAN总线
功能引脚 树莓派接口(BCM) 描述
3V3 3V3 3.3V电源正
GND GND 电源地
SCK SCK SPI时钟输入
MOSI MOSI SPI数据输入
MISO MISO SPI数据输出
CS CE0 数据/命令选择
INT 25 中断输出
  • RS485总线
功能引脚 树莓派接口(BCM) 描述
3V3 3V3 3.3V电源正
GND GND 电源地
RXD RXD 串口接收
TXD TXD 串口发送
RSE 4 设置收发

对于RSE引脚,可以选择不使用,模块出厂默认使用的是硬件自动接收与发送。

硬件说明

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总线

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管脚是设置接收与发送;
本模块默认的出厂设置是采用硬件自动的收发,也可以选择软件上控制管脚来选择发送与接收,可以通过焊接板上的0欧姆电阻来选择控制方式。
硬件自动控制:
RS485 CAN HAT 485SR.png
数据接收:P_TX此时为高电平, 为休闲状态。这时候三级管导通,SP3485芯片的RE引脚为低电平,数据接收使能,RO开始接收数据,将485AB口接受到的数据传到MCU。
数据发送:P_TX会有一个下拉的电平,表示开始发送数据,此时三极管截止,DE引脚为高电平,数据发送使能。此时,如果发送的数据为‘1’的时候,三极管会处于导通,虽然接收会变为有效状态但由于芯片在发送阶段时是高阻状态,所以还是保持发送状态,正常传输‘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

PI5

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

CAN使用

本演示程序使用了两个树莓派以及两个RS485 CAN HAT模块
提供python与c语言程序

前置工作

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

sudo nano /boot/config.txt

在最后一行加入如下:

dtparam=spi=on
dtoverlay=mcp2515-can0,oscillator=12000000,interrupt=25,spimaxfrequency=2000000

其中oscillator=12000000,是板载的晶振大小12M,如下图
RS485 CAN HAT cry12.png

  • 如果购买日期早于2019年8月份,请使用下面的:

如图,红色框内为8M的晶振
RS485 CAN HAT cry.png

dtparam=spi=on
dtoverlay=mcp2515-can0,oscillator=8000000,interrupt=25,spimaxfrequency=1000000


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

sudo reboot

重启后,运行命令查看是否初始化成功:

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

RS485 CAN HAT CAN1.png
如果不接上模块可能提示如下:
RS485 CAN HAT CAN2.png
请检查是否连接上模块。是否开启SPI并开启MCP2515内核驱动。是否进行重启。
确定好两边树莓派都这样处理了,把两个模块的H与L对应连接
如果使用的是其他的CAN设备,确定连线H-H,L-L即可

  • 开启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
  • 打开can0和设置回环模式
sudo ip link set can0 down
sudo ip link set can0 type can bitrate 1000000 loopback on
sudo ip link set can0 up type can bitrate 1000000
  • 打开两个终端窗口,测试can0自发自收:
candump can0
cansend can0  000#11.22.33.44

Can loopback.png

下载例程

在树莓派终端运行:

sudo apt-get install unzip
wget https://www.waveshare.net/w/upload/4/4e/RS485_CAN_HAT_Code.zip
unzip RS485_CAN_HAT_Code.zip
sudo chmod 777 -R RS485_CAN_HAT_Code/

C

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

接收程序是阻塞的,直到读取到数据就结束。
RS485 CAN HAT CAN reveive.png

  • 发送,树莓派打开终端,运行:
cd RS485_CAN_HAT_Code/CAN/wiringPi/send/
make clean
make
sudo ./can_send

RS485 CAN HAT CAN send.png

此时接收接收到对应的id的报文:
RS485 CAN HAT CAN reveive1.png

python

树莓派打开终端,运行:

cd RS485_CAN_HAT_Code/CAN/python/
#先运行接收:
sudo python reveive.py
#发送端:
sudo python send.py

与其他的CAN设备应该如何使用

1.确保硬件接线是正确的,即H-H,L-L连接
2.确保两边的波特率设置一致的,默认的例程设置的波特率为100K
RS485 CAN HAT CANbitrate.png
3.确保两边的CAN ID是一致的,否则无法接收到
RS485 CAN HAT CANid.png
4.如果长时间发送数据有丢帧现象,可以尝试降低波特率解决

RS485使用

本演示程序使用了两个树莓派以及两个RS485 CAN HAT模块
提供python与wiringPi语言程序

前置工作

开启Uart接口

打开树莓派终端,输入以下指令进入配置界面

sudo raspi-config
选择Interfacing Options -> Serial,关闭shell访问,打开硬件串口
L76X GPS Module rpi serial.png

打开/boot/config.txt文件,找到如下配置语句使能串口,如果没有,可添加在文件最后面。

enable_uart=1


对于树莓派3B用户,串口用于蓝牙,需要注释掉:

#dtoverlay=pi3-miniuart-bt

树莓派5/2B/zero和部分改过配置的树莓派,用户串口设备号可能为ttyAMA0;可以用以下命令行确认,serial0为选用的串口设备号,如下图:

ls -l /dev/serial*

RM500U-serial.png


然后重启树莓派:

sudo reboot


确定好两边树莓派都这样处理了,把两个模块的A与B对应连接
如果使用的是其他的485设备,确定连线A-A,B-B即可

C

  • 阻塞接收,树莓派打开终端,运行:
cd RS485_CAN_HAT_Code/485/WiringPi/receive
make clean
make
sudo ./485_receive

接收程序是阻塞的,直到读取到数据就结束。
RS485 CAN HAT 485 receive.png

  • 发送,树莓派打开终端,运行:
cd RS485_CAN_HAT_Code/485/WiringPi/send
make clean
make
sudo ./485_send

此时接收端接收到程序
RS485 CAN HAT 485 receive2.png

python例程

cd RS485_CAN_HAT_Code/485/python/
#先运行接收:
sudo python receive.py
#发送端:
sudo python send.py

故障排查

如果485通信不正常,请分步调试:

  1. 确认是否禁止了从串行登录树莓派shell;
  2. 确定树莓派的硬件版本,如果是树莓派ZERO/3B,则程序中的串口可能需要修改成/dev/ttyAMA0;
  3. 确定485的A,B是否与控制的485设备A,B一一对应;
  4. 可以先使用USB to 485设备与RS485 CAN HAT通信,保证树莓派的设置没有问题;

X3-Pi 使用

前置操作

使用命令

sudo srpi-config

开启硬件控制接口界面,打开串口、与SPI;
RS485 CAN HAT x3-0.jpg

安装包下载

更新 package 列表

sudo apt update

升级所有已安装的软件包到最新版本

sudo apt full-upgrade

安装WiringPi

sudo apt update
sudo apt install git-core
git clone https://gitee.com/study-dp/WiringPi.git
cd WiringPi
./build.sh

下载程序

wget https://www.waveshare.net/w/upload/7/7d/RS485_CAN_HAT_X3.zip
unzip -o RS485_CAN_HAT_X3.zip -d RS485_CAN_HAT_X3

RS485

c

进入目录

cd ~/RS485_CAN_HAT_X3/rs485/c/

接收示例

cd receive/
make
./rs485_receive

发送示例

cd send/
make
./rs485_send

python

进入目录

cd ~/RS485_CAN_HAT_X3/rs485/python/

接收示例

python3 receive.py

发送示例

python3 send.py

CAN

进入目录

cd ~/RS485_CAN_HAT_X3/CAN/c/

接收示例

cd receive/
make
./receive

发送示例

cd send/
make
./send

python

进入目录

cd ~/RS485_CAN_HAT_X3/CAN/python/

接收示例

python3 receive.py

发送示例

python3 send.py

FAQ


  • 目前版本是12M的,可以查看模块正面:

RS485 CAN HAT cry12.png
那么对应的config.txt中的命令为:

dtoverlay=mcp2515-can0,oscillator=12000000,interrupt=25,spimaxfrequency=2000000
  • 如果你的是老版本的话,那么此处应该是8M的晶振,如下图:

RS485 CAN HAT cry.png
那么对应的config.txt中的命令为:

dtoverlay=mcp2515-can0,oscillator=8000000,interrupt=25,spimaxfrequency=1000000


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


这是一款入门级的485和CAN,都是不带隔离的。


  1. 确定树莓派的硬件版本,如果是树莓派ZERO/3B,则程序中的串口需要修改成/dev/ttyAMA0;
  2. 检查树莓派的串口通信是否开启了流控;
  3. 确定485的A,B是否与控制的485设备A,B一一对应;
  4. 可以先使用USB to 485设备与RS485 CAN HAT通信,保证树莓派的设置没有问题;
  5. 检察串口通信参数的奇数偶数位校验的设置。


  1. 主流的Ubuntu系统config.txt文件通常在/boot/firmware 文件夹
sudo nano /boot/firmware  config.txt

在最后一行加入如下:

 dtparam=spi=on
 dtoverlay=mcp2515-can0,oscillator=12000000,interrupt=25,spimaxfrequency=2000000
 enable uart=1
  1. 或者将树莓派的SD卡通过读卡器在电脑下(或者其它能识别SD卡的主机)读取和更改config.txt文件。


打开树莓派终端,输入以下指令进入配置界面

sudo raspi-config
选择Interfacing Options -> Serial,关闭shell访问,打开硬件串口
L76X GPS Module rpi serial.png

树莓派5/3B/2B/zero,用户串口设备号为ttyAMA0;可以用以下命令行确认,serial0为选用的串口设备号,如下图:

ls -l /dev/tty*

Serial-pi5.png

  • 树莓派3B/2B/zero用户,串口用于蓝牙,注释掉后就是S0, 树莓派4 默认没有该语句:
#dtoverlay=pi3-miniuart-bt

然后重启树莓派:

sudo reboot


传感器那边发送过来的可能是hex数据(有时候还需要先发送hex数据给传感器请求数据),按照以下步骤收发hex数据:

wget https://www.waveshare.net/w/upload/0/00/RS485-CAN-HAT-For-Hex.zip
unzip RS485-CAN-HAT-For-Hex.zip 
sudo chmod 777 RS485-CAN-HAT-For-Hex.zip
cd RS485-CAN-HAT-For-Hex
#接收Hex
sudo python3 RS485-CAN-HAT-send-hex.py  
#发送Hex
sudo python3 RS485-CAN-HAT-receive-hex.py 


指的是数据处理后输出的部分变慢的话,提高上位机的性能应该有帮助;也可以考虑每次读取前清空缓存只读最新数据进行处理。


可以不接GND使用,接GND信号可能会更稳定,连接GND以获得更好的性能、可靠性和抗干扰能力,长距离通信的话,建议还是接上GND。


  • 上位机和下位机的CAN速率要一致
  • 两端的120欧姆平衡电阻都打开
  • 发送方的帧ID要和接收方的滤波ID对应


进去myenv 后再安装对应的python 库,在myenv环境里所有指令不带sudo

sudo apt install python3-venv
python3 -m venv myenv &&source myenv/bin/activate
source myenv/bin/activate
pip install requests


技术支持


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

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