匿名
未登录
登录
丢石头百科
搜索
查看“RS485 CAN HAT”的源代码
来自丢石头百科
名字空间
页面
讨论
更多
更多
页面选项
查看
查看源代码
历史
←
RS485 CAN HAT
因为以下原因,您没有权限编辑本页:
您所请求的操作仅限于该用户组的用户使用:
用户
您可以查看与复制此页面的源代码。
<div class="tabber"> {{Product |images=[[File:RS485-CAN-HAT-intro.jpg|360px]] |categories={{Category|树莓派}}{{Category|RS485}}{{Category|CAN}} |brand=Waveshare |features= * 485总线 CAN总线 |interfaces= {{Category|RPi接口}} {{Category|CAN接口}} {{Category|RS485接口}} }} <div class="tabbertab" title="说明"> =产品概述= RS485 CAN HAT 是微雪电子为树莓派开发的一款的带 RS485 和 CAN 通信功能的扩展板,具备 RS485、CAN 通信功能。<br /> ==特点== *基于树莓派接口设计,适用于Raspberry Pi Zero/Zero W/Zero WH/2B/3B/3B+ *具备CAN功能,使用SPI接口CAN控制器MCP2515,搭配收发器SN65HVD230 *具备RS485功能,使用UART控制,半双工通讯,收发器为SP3485 *预留控制接口,方便其他控制器控制 *提供完善的配套资料手册(提供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|900px]]<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|900px]]<br /> ===RS485总线=== SP3485接口芯片是一种RS-485驱动芯片。用于RS-485通信的低功耗收发器。 采用单一电源+3.3 V工作,采用半双工通讯方式。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|900px]]<br /> 其中:SP3485芯片的RE与DE管脚是设置接收与发送;<br /> 本模块默认的出厂设置是采用硬件自动的收发,也可以选择软件上控制管脚来选择发送与接收,可以通过焊接板上的0欧姆电阻来选择控制方式。<br /> 硬件自动控制:<br /> [[file:RS485_CAN_HAT_485SR.png|900px]]<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> ==下载例程== 在树莓派终端运行:<br /> <pre> sudo apt-get install p7zip wget http://wiki.diustou.com/w/upload/d/de/RS485_CAN_HAT_Code.7z 7zr x RS485_CAN_HAT_Code.7z -r -o./RS485_CAN_HAT_Code sudo chmod 777 -R RS485_CAN_HAT_Code/ </pre> ==CAN使用== <font color="#FF0000"> 本演示程序使用了两个树莓派以及两个RS485 CAN HAT模块<br /> 提供python与c语言程序<br /> </font> ===前置工作=== 将模块插在树莓派上,然后修改开机脚本config.txt<br /> <pre> sudo vi /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 /> ===C=== *阻塞接收,树莓派打开终端,运行:<br /> <pre> cd RS485_CAN_HAT_Code/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/RS485_CAN_HAT_Code/CAN/wiringPi/receive/ 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/RS485_CAN_HAT_Code/CAN/python/ #先运行接收: sudo python can_receive.py #发送端: sudo python can_send.py </pre> =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> 然后重启树莓派:<br /> <pre> sudo reboot </pre> 确定好两边树莓派都这样处理了,把两个模块的A与B对应连接<br /> 如果使用的是其他的485设备,确定连线A-A,B-B即可<br /> ===C=== *阻塞接收,树莓派打开终端,运行:<br /> <pre> cd RS485_CAN_HAT_Code/RS485_CAN_HAT_Code/485/WiringPi/send make clean make sudo ./485_receive </pre> 接收程序是阻塞的,直到读取到数据就结束。<br /> [[file:RS485_CAN_HAT_485_receive.png|600px]]<br /> *发送,树莓派打开终端,运行:<br /> <pre> cd RS485_CAN_HAT_Code/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/RS485_CAN_HAT_Code/485/python/ #先运行接收: sudo python receive.py #发送端: sudo python send.py </pre> ===故障排查=== 如果485通信不正常,请分步调试:<br /> #确定树莓派的硬件版本,如果是树莓派ZERO/3B,则程序中的串口需要修改成/dev/ttyAMA0; #确定485的A,B是否与控制的485设备A,B一一对应; #可以先使用USB to 485设备与RS485 CAN HAT通信,保证树莓派的设置没有问题; </div> <div class="tabbertab" title="资料"> ===文档=== *[https://{{SERVERNAME}}/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图纸] ===程序=== *[https://{{SERVERNAME}}/w/upload/d/de/RS485_CAN_HAT_Code.7z 示例程序] ===数据手册=== *[https://{{SERVERNAME}}/w/upload/3/36/SP3481_SP3485.pdf SP3485] *[https://{{SERVERNAME}}/w/upload/8/82/SN65HVD230.pdf SN65HVD230] *[https://{{SERVERNAME}}/w/upload/8/83/MCP2515.pdf MCP2515] 转到:[[#软件]],[[#程序]],[[#文档]] <!--{{Join_us}}--> </div> == FAQ == <div class="tabbertab" title="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|是否带隔离| 这是一款入门级的485和CAN,都是不带隔离的。|||}} {{FAQ|485通信不正常,怎么办?| #确定树莓派的硬件版本,如果是树莓派ZERO/3B,则程序中的串口需要修改成/dev/ttyAMA0; #检查树莓派的串口通信是否开启了流控; #确定485的A,B是否与控制的485设备A,B一一对应; #可以先使用USB to 485设备与RS485 CAN HAT通信,保证树莓派的设置没有问题; #检察串口通信参数的奇数偶数位校验的设置。 |||}} </div> <div class="tabbertab" title="售后"><br />{{Service08}}</div>
该页面使用的模板:
模板:Category
(
查看源代码
)
模板:FAQ
(
查看源代码
)
模板:Product
(
查看源代码
)
模板:RPI C lib
(
查看源代码
)
模板:RPI open uart
(
查看源代码
)
模板:Service00
(
查看源代码
)
模板:Service08
(
查看源代码
)
模板:Tag
(
查看源代码
)
模板:Tipbox
(
查看源代码
)
返回至
RS485 CAN HAT
。
导航
导航
首页
最近更改
随机页面
MediaWiki帮助
首页
首页
树莓派
主机
配件包
外壳
键鼠
电源
扩展板
显示屏
墨水屏
摄像模块
通信模块
继电器
电机驱动板
游戏机
产品分类
树莓派
Arduino
micro:bit
STM32
Espressif
WiFi模块
蓝牙模块
无线模块
LoRa模块
4G模块
GSM
GPRS
以太网
导航模块
北斗卫星
GPS
LCD
墨水屏
OLED
摄像头
USB模块
串口模块
RS232
RS485
CAN
传感器
温度模块
湿度模块
气压模块
继电器
电机模块
指纹模块
电平转换
音频模块
编程器
Wiki工具
Wiki工具
特殊页面
页面工具
页面工具
用户页面工具
更多
链入页面
相关更改
页面信息
页面日志