2-CH CAN FD HAT

来自丢石头百科
Admin讨论 | 贡献2021年6月18日 (五) 17:58的版本 (文本替换 - 替换“http://{{”为“https://{{”)
(差异) ←上一版本 | 最后版本 (差异) | 下一版本→ (差异)
2-CH CAN FD HAT
Sense HAT (B)
{{{name2}}}
{{{name3}}}
基本信息
分类: 模块模块
{{{userDefinedInfo1}}}: {{{userdefinedvalue1}}}
{{{userDefinedInfo2}}}: {{{userdefinedvalue2}}}
{{{userDefinedInfo3}}}: {{{userdefinedvalue3}}}
品牌: Waveshare
功能简介
特性 树莓派传感器扩展
' 无特性,不解释
' 无特性,不解释
' 无特性,不解释
' 无特性,不解释
接口 CAN RPi
相关产品

{{{Product1}}}

{{{Product2}}}

{{{Product3}}}

{{{Product4}}}

{{{Product5}}}

{{{Product6}}}

产品概述

2-CH CAN FD HAT 是微雪电子为树莓派开发的一款隔离式的双通道CAN 通信功能的扩展板,支持CAN FD。最高传输速率可高达8Mbps,具备有多重保护。

特点

  • 基于树莓派设计,适用于Raspberry Pi Zero/Zero W/Zero WH/2B/3B/3B+/4B。
  • 支持8~24V的外部宽电压同时给树莓派和2-CH CAN FD HAT进行供电或者由树莓派直接给2-CH CAN FD HAT进行供电。
  • 支持CAN FD,最高传输速率可高达8Mbps。
  • 预留控制接口,方便其他逻辑电压为3.3V/5V的控制器控制。
  • CAN总线采用电气隔离,隔离电压可达5 kV。
  • 板载多个保护器件,具有短路保护,静电保护,有效抑制闪电和ESD,每通道均提供500W的雷击浪涌保护。
  • 接口带有120Ω终端电阻,可通过跳帽进行切换。
  • 可配置双通道CAN的工作方式,分别是双通道公用一组SPI或两通道分别使用两组独立的SPI。
  • 提供完善的配套资料手册及例程。

产品参数

  • 输入电压: 8~26V
  • 逻辑电压: 3.3V/5V
  • CAN控制芯片: MCP2517FD
  • CAN收发器: MCP2562FD
  • 产品尺寸: 65.0x56.5mm
  • 固定孔通经: 3.0mm

接口说明

CAN接口总线

功能引脚 树莓派接口
(BCM)
树莓派接口
(WPI)
描述
5V 5V 5V 5V电源正
GND GND GND 电源地
MISO_0 9(MISO) 13(MISO) SPI_0时钟输入
MOSI_0 10(MOSI) 12(MOSI) SPI_0数据输入
SCK_0 11(SCLK) 14(SCLK) SPI_0数据输出
CS_0 8(CE0) 10(CE0) CAN_0片选
INT_0 25 6 CAN_0中断输出
MISO_1 9/19(MISO) 13/24(MISO) SPI_1数据输出
MOSI_1 10/20(MOSI) 12/28(MOSI) SPI_1数据输入
SCK_1 11/21(SCLK) 14/29(SCLK) SPI_1时钟输入
CS_1 7(CE1)/26 11(CE1)/25 CAN_1片选
INT_1 16 27 CAN_1中断输出

硬件说明

=CAN总线

CAN 模块的功能是处理所有 CAN 总线上的报文接收和发送。报文发送时,首先将报文装载到正确的报文缓冲器和控制寄存器中。通过 SPI 接口设置控制寄存器中的相应位或使用发送使能引脚均可启动发送操作。通过读取相应的寄存器可以检查通讯状态和错误。 会对在 CAN总线上检测到的任何报文进行错误检查,然后与用户定义的滤波器进行匹配,以确定是否将报文移到两个接收缓冲器中的一个。
由于树莓派本身并不支持CAN总线,因此使用SPI接口的CAN控制器,搭配一个收发器完成CAN功能。
MCP2517FD是Microchip公司生产的一款CAN FD(灵活数据速率)控制器,完全支持经典格式(CAN2.0)和CAN灵活数据速率(CAN FD)格式的CAN成帧。仲裁比特率高达1Mbps,数据比特率高达8Mbps,SPI时钟速度高达20MHz符合ISO11898-1:2015标准。该器件能发送和接收标准和扩展数据帧以及远程帧。 MCP2517FD 自带的32个灵活的滤波器和屏蔽对象可以过滤掉不想要的报文,因此减少了主单片机(MCU)的开销。MCU通过SPI接口与该器件连接,即树莓派通过SPI接口连接芯片,对于树莓派使用该芯片,可以通过已编写好的设备树文件来驱动该器件,更多详细请参考数据手册。

                             Hardware station.png

MCP2562FD是Microchip公司生产的第二代高速CAN收发器,它用于 CAN协议控制器与物理CAN总线之间的接口,支持CAN FD所需的更高数据速率,改善了最大传播延迟以支持更长的总线长度。MCP2562FD符合甚至超过汽车对CAN FD传输速率(5 Mbps)的要求、低静态电流、电磁兼容性(EMC)及静电放电(ESD)的要求,符合ISO-11898-5 物理标准及AEC-Q100 0级的测试标准,最多可连接最多可连接112个节点,更多详细请参考数据手册。

                                                Hardware station-2.png


树莓派使用

在使用树莓派演示该例程时,需注意的是由于树莓派属于3.3V逻辑系统,需改变将2-CH CAN FD HAT的逻辑电压引脚跳帽到3.3V,如下图所示。
Use.png

安装必要的函数库

  • 安装BCM2835, 打开树莓派终端,并运行一下指令
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/
  • 安装wiringPi
sudo apt-get install wiringpi
#对于树莓派4B可能需要进行升级:
cd bcm2835-1.60/
wget https://project-downloads.drogon.net/wiringpi-latest.deb
sudo dpkg -i wiringpi-latest.deb
gpio -v
# 运行gpio -v会出现2.52版本,如果没有出现说明安装出错
  • 安装Python函数库
#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 pip2 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
  • 在官网上找到对应产品,在产品资料打开下载路径,在wiki中下载示例程序:
  • 得到解压包,解压并将程序复制到树莓派中。

前置工作

  • 安装例程依赖的Linux 内核驱动
  • 浏览目录:
ls

Pre-work1.png

  • 运行安装程序
sudo ./install.sh
  • 等待安装完成则会显示:

Pre-work2.png

  • 重启树莓派以应用所有设置:
sudo reboot
  • 待树莓派重启后,查看SPI信息:
dmesg | grep spi

A工作方式:
Pre-work3.png
B工作方式:
Pre-work4.png
注:B工作模式可能会提示CAN重命名提示,不影响使用,可忽视。


配置CAN,设置波特率,工作模式,是否开启FD及配置传输缓冲区大小:

  • 波特率设置:
sudo ip link set can0 up type can bitrate 1000000 dbitrate 8000000 restart-ms 1000 berr-reporting on fd on
sudo ip link set can1 up type can bitrate 1000000 dbitrate 8000000 restart-ms 1000 berr-reporting on fd on
sudo ifconfig can0 txqueuelen 65536
sudo ifconfig can1 txqueuelen 65536

bitrate xxxxxx (bps) dbitrate xxxxxx (bps)

  • 可配置成以下模式:

        [ loopback { on | off } ]

        [ listen-only { on | off } ]

        [ triple-sampling { on | off } ]

        [ one-shot { on | off } ]

        [ berr-reporting { on | off } ]

        FD是开启指令:

        [ fd { on | off } ]

        [ fd-non-iso { on | off } ]

更多相关CAN内核指令可以查看:
https://www.kernel.org/doc/Documentation/networking/can.txt

  • 查看ifconfig:
ifconfig

Pre-work5.png

  • 开始测试:

若手上只有一个2-CH CAN FD HAT,可以将可通过将模块的CAN0_H与CAN1_H,CAN0_L与CAN1_L相连,如下图所示:
Test-1.png

  • 打开两个终端窗口:

其中一个终端输入接收CAN0数据指令:

candump can0

另外一个终端输入发送CAN1数据指令:

cansend can1 000##11.22.33.44
  • 演示效果如下:(左边为接收,右边为发送)
Test-2.png

若手上有两个2-CH CAN FD HAT,可以直接将CAN_H,CAN_L两两相连。效果跟上述一样,需注意匹配好通信速率,识别ID,输出接口序号。

Python例程

  • 浏览目录:
  • 接收端运行receive.py:
sudo python reveive.py
  • 发送端运行send.py:
sudo python send.py

需注意的是这里的发送端是使用CAN1发送,接收端则是CAN0,具体修改可以参照下面的代码分析。

代码分析

本例程是基于python平台,确保以及安装了python-can库在发送之前要先创建一个can设备,因为前面只是启用MCP2517FD内核:
os.system('sudo ip link set can0 up type can bitrate 1000000 dbitrate 8000000 restart-ms 1000 berr-reporting on fd on') 上面这条则是通过对CAN0的配置初始化并启用,且指定CAN0作为发送/接收接口。如需改成CAN1,则代码如下:
os.system('sudo ip link set can1 up type can bitrate 1000000 dbitrate 8000000 restart-ms 1000 berr-reporting on fd on')

  • 第一步:连接到CAN总线

can0 = can.interface.Bus(channel = 'can0', bustype = 'socketcan_ctypes')# socketcan_native

  • 需改成CAN1,则代码如下:

can1 = can.interface.Bus(channel = 'can1', bustype = 'socketcan_ctypes')# socketcan_native

  • 第二步:创建信息

msg = can.Message(arbitration_id=0x123, data=[0, 1, 2, 3, 4, 5, 6, 7], extended_id=False)

  • 第三步:发送信息

can0.send(msg)

  • 需改成CAN1,则代码如下:

can1.send(msg)

  • 最后同样要关闭can设备

os.system('sudo ifconfig can0 down')

  • 需改成CAN1,则代码如下:

os.system('sudo ifconfig can1 down')

  • 接收数据:

msg = can0.recv(10.0) recv()中定义超时接收时间。
更多请参考:https://python-can.readthedocs.io/en/stable/interfaces/socketcan.html

Arduino例程

本例程是基于Pierre Molinaro的MCP2517FD的例程进行改写,以适应2-CH CAN FD HAT,在此对Pierre Molinaro的付出表示感谢。在该例程中需要两个Arduino板子及两个2-CH CAN FD HAT,需注意的是Arduino属于5V逻辑系统,需改变将2-CH CAN FD HAT的逻辑电压引脚跳帽到5V,如下图所示:

Arduino-1.png

  • 将2-CH CAN FD HAT与Arduino相连接,具体接线如下表所示:
功能引脚 开发板
5V 5V
GND GND
MISO_0 D12 (MISO)
MOSI_0 D11 (MOSI)
SCK_0 D13 (SCK)
CS_0 D10
INT_0 D2
  • 将两个2-CH CAN FD HAT 的CAN_0的H、L两两相连,设置波特率为115200,打开两个串口监视器,可看到以下结果(左边为发送次数,右边为接收的数据):
2-CH-Can-hat-ardiuno-2.png

FAQ



问题:
CAN初始化失败??
答复:

如果出现初始化失败,可以重启树莓派或者其他主控平台开发板,确保连线是否正确,及逻辑电压跳帽引脚是否选择正确。


问题:
CAN接口的G引脚是否连接?
答复:

G为信号地,也称隔离地。在工业环境当中,CAN受周围环境多变,为确保稳定性,两通信模块的G需要相连接。


问题:
CAN通信速度达不到最高值8Mbps?
答复:

微芯官方标称MCP2517FD理论上最高通信速度可达8Mbps,但受周围所测环境、通信距离、线材、软件等多因素的影响。在高速通信时,可能达不到所所标称的8Mbps,用户需根据实际测量,确保稳定,选择适合的通信速度。


问题:
CAN不能正常通信?
答复:

若初始化成功,且速度设置合适后,仍不可以正常通信。请检查下两块2-CH CAN FD HAT 的CAN_H是否与另外一块CAN_H相连,CAN_L是否与另外一块CAN_L相连,需注意的是这两条线不能接反,H对应H,L对应L。若没问题,请检查程序配置的CAN口是否正确,比如需要用到CAN0,程序代码却配置CAN1。同时也需要检查硬件是否连接正确且CAN接口存不存在短路问题,如下图所示,CAN接口与树莓派的HDMI接口误触引起短路,使得CAN不能正常通信,这时需要使用购买2-CH CAN FD HAT时配送的配件2×20PIN长排座进行增高处理。2-CH CAN FD HAT-15.png



Icon-mail.png 联系 丢石头

我们的工作时间是: 09:00-18:00 (UTC+8 周一到周六)