您现在所在的是:

现场总线

回帖:5个,阅读:496 [上一页] [1] [下一页]
1083
dukedz
文章数:16
年度积分:139
历史总积分:1083
注册时间:2009/12/6
发站内信
发表于:2023/12/25 11:52:30
#0楼
我们知道,RS485 物理层是半双工,即便总线上只有两个节点,譬如一台 PC 和一个设备,设备也不能主动发数据给 PC,因为可能会和 PC 下发的数据冲突。

这也是为什么 RS232 始终不能被 RS485 所取代的主要原因,除了不能全双工,其它方面 RS485 都要比 RS232 优秀很多,譬如更远的距离、更高的速度、可以连接更多节点、更加抗干扰。

然而,现在可以通过这个小芯片,在半双工的 RS485 总线上,为任意两两节点之间,虚拟出全双工专线。
譬如总线上有 A B C D 四个节点,A B 之间可以随意互发数据,C D 之间也可以,A C 之间也可以,不会出现数据冲突的问题。
而且支持组播通讯:A 同时发数据给 C 和 D. 以及支持广播:譬如 A 同时发送数据给 B C D, 然后 B C D 还可以同时回复数据给 A.

附件 cdctl01a.jpg


芯片的原理其实很简单,它是一个 SPI 转 UART 控制器,UART 端是有指定的数据包格式的(原地址、目标地址、数据长度共 3 字节头 + 用户数据 + 2 字节 CRC 结尾),芯片 UART 口可连接 RS485 接口芯片,控制 RS485 的收发,SPI 口则连接用户 MCU。

附件 072708qdkafn1xbk1i4pnq.jpg

此 UART 控制器引入了 CAN 总线的仲裁功能,只不过收发是按照标准的串口 8N1 格式(一个启始位,8 个数据位,一个停止位,无校验位)。

在 RS485 上进行收发的时候,会通过包头第一个字节进行仲裁(第一个字节是发送方的地址),按位回读进行非破坏性仲裁,让优先级最高的节点优先使用总线,而低优先级的节点,数据会延后自动重传。

发送首字节时 RS485 是半驱输出,因为回读有延迟,速率建议不超过 1Mbps。
由于 RS485 支持全驱输出,所以从第二个字节开始,可以用更高的传输速率,此芯片速率可以达到 50Mbps(类似 CAN FD 的双速率,但由于 CAN FD 的高速部分依然是半驱输出,所以速率比较受限)。
在需要兼容传统串口的场合,使用仲裁模式时,需要让高速部分的速率和低速部分保持相同。

此芯片同时还支持另一种模式,可以全程使用高速波特率,同样可以把 RS485 当全双工使用 - Break Sync 模式。

原理也不复杂,总线空闲一段时间后,若某个节点想发送数据,需要先发送一个 break 字符(连续 10 个 bit 为 0 的特殊串口字符)。
break 字符在这里的功能是让总线退出空闲状态,而且若有多个节点同时发送 break 字符,也不会有不良影响。

等总线重新进入空闲后,每个节点等待不同的时间发送数据,优先级越高的节点等待的时间越短。由于各节点等待时间不同,所以不会发生数据冲突。
此模式适合节点数相对较少的总线,节点数多了,最大等待时间就会变长,影响效率。

除了以上两种对等通讯模式,还支持传统全双工和传统半双工模式,可以当作普通的串口扩展芯片使用。

芯片源码和细节说明:https://cdbus.org (中文版可参见附件中文数据手册)
CDBUS 的 IP 核 FPGA 用户可以免费商用。


芯片手册:

附件:
[本地下载]

附件:
[本地下载]


相关的开源项目摘选:

半自动桌面视觉贴片机 CDPNP: https://github.com/dukelec/cdpnp
(开源贴片机视频: https://www.bilibili.com/video/BV1cj411Y7qQ/

CDFOC 无刷电机 FOC 控制器: https://github.com/dukelec/cdfoc

CDSTEP 步进电机控制器: https://github.com/dukelec/cdstep

CDCAM 串口摄像头: https://github.com/dukelec/cdcam

CDBUS-BRIDGE(USB 转高速 RS485): https://github.com/dukelec/cdbus_bridge

CDBUS-GUI 开源串口上位机,支持参数配置、波形显示、IAP 升级: https://github.com/dukelec/cdbus_gui

附件 Screenshot_2023-12-25_11-13-46.jpg
[此贴子已经被作者于2023/12/26 15:46:16编辑过]
810
微鑫科技
文章数:1233
年度积分:810
历史总积分:810
注册时间:2019/11/26
发站内信
发表于:2023/12/27 11:31:11
#1楼
搞那么麻烦,不如直接用CAN总线好了。
遇到SB,请不要和他争辩,认同他所有的观点,让他变成一个大SB。
1083
dukedz
文章数:16
年度积分:139
历史总积分:1083
注册时间:2009/12/6
发站内信
发表于:2023/12/27 15:36:56
#2楼
回复 #1楼 微鑫科技
看产品需求

譬如我手边的数显直流电源,以及桌面小回流焊箱,对外都是 rs232

电脑端的软件只需要打开对应的串口号就可以控制对应设备,因为串口比较简单通用,不同操作系统都有一样的串口接口
用户想二次开发的话,串口协议也非常简单(而让用户对接 can 协议,会相当麻烦)

如果这些设备使用的是 can 接口,估计会让绝大多数用户抓瞎,首先一个 usb 转 can 的工具就五花八门、不太通用,linux 有通用的 can 网络接口,但其它系统却又没有
设备厂家想写一个上位机软件,也不知道要兼容多少工具,跨平台支持多操作系统更是要命

can 的高端市场已经被工业以太网抢差不多了,低端又有 485、lin 等瓜分市场,又没有串口那么简单通用,速率又不高、历史包袱又很重(譬如搞 can fd 的时候还要考虑协议是否要兼容 can2.0),除非是特定行业指定,否则我倾向于使用永不会过时的串口,且让串口变的更强更好用
38134
知道一点
文章数:22595
年度积分:2553
历史总积分:38134
注册时间:2004/6/12
发站内信
工控人谈电商
2013国庆活动
2011国庆活动
发表于:2023/12/27 20:27:00
#3楼
http://bbs.gkong.com/archive.aspx?id=499433
不知道和这里说的网桥是不是同类
快乐 幸福 自由 比什么都重要
1083
dukedz
文章数:16
年度积分:139
历史总积分:1083
注册时间:2009/12/6
发站内信
发表于:2023/12/29 16:14:07
#4楼
回复 #3楼 知道一点
不同的

由于传统 rs485 只支持单个主机,所以在需要多主机的场合,譬如多个主机操作一个设备,需要使用一个你所说的网桥,当两个主机一起发数据的时候,网桥负责给它们排序,防止多主机冲突

而此帖提到的 cdbus 总线,可以让 rs485 直接支持多主机:

一条 rs485 总线即可连接 N 个主机 + M 个从机,数据不会冲突,也不用网桥中转
[此贴子已经被作者于2023/12/29 16:14:54编辑过]
8580
chengzheng
文章数:1655
年度积分:402
历史总积分:8580
注册时间:2006/7/24
发站内信
发表于:2023/12/30 8:19:58
#5楼
这个有点意思,

这个元件应该是做了很多工作,所以一开始不习惯。

关于我们 | 联系我们 | 广告服务 | 本站动态 | 友情链接 | 法律声明 | 非法和不良信息举报

工控网客服热线:0755-86369299
版权所有 工控网 Copyright©2024 Gkong.com, All Rights Reserved

78.0005