willX 发表于 2013-9-16 14:58:14

串口扩展的方案选择

      最近公司在搞一个单片机串口扩展的项目,用3根IO控制地址,将单片机的TXD与RXD扩展成8路串口,用来和8个下位机进行访问通信。
      现在有两个可供选择的方案:
   1:用CD4052双4选1模拟开关,使用两片4052将两路信号分成8路。电路简单,而且有使能控制,在禁能的情况下,输出输入的引脚为高阻态。但是电子开关本身在导通的时候有电阻大约1K欧姆左右,并且没有HC系列芯片那样的驱动能力(等效电路是一个电阻)。
   2:用74HC138做发送线路的选择器,用74HC151做接收线路的选择器。电路稍复杂了点,没有使能控制(芯片本身是带有使能E的,但是74HC151在禁能的情况下,输出为“低”,在串口通信中空闲的电平必须为“高”才行,所以不能使用74HC151的使能引脚进行控制),输入输出没有高阻态。但是HC电路本身具有比较强的带载能力,可以顺利驱动下级电路。

因为上面有两个选择,所以现在我有些迷惑了,该选哪个好呢?在网上见到的都是关于CD4052的串口扩展方案,138+151的很少。现在还没有实际的电路做实验,所以想现在这里问问各位过路的大侠,帮忙看看哪种方案更适合57600bps的工业控制串口扩展。谢谢了。


附:
CD4052的逻辑等效电路:

sync765 发表于 2013-9-16 15:06:01

用74hc4052不行么

.titrwh 发表于 2013-9-16 15:17:12

直接接成1主8从,靠协议和不同下位机通讯不是更好吗?                                                               

ljt80158015 发表于 2013-9-16 15:31:33

为何不采用总线方式呢?

北小斗 发表于 2013-9-16 15:43:00

以前有提出过这种方案,权衡了一下复杂度后来没用

willX 发表于 2013-9-17 10:04:59

sync765 发表于 2013-9-16 15:06 static/image/common/back.gif
用74hc4052不行么

74HC4052和CD4052是同一种逻辑器件啊,都是双4路模拟开关么。就是我上面提到的方案之一啊。

willX 发表于 2013-9-17 10:09:24

本帖最后由 willX 于 2013-9-17 10:19 编辑

.titrwh 发表于 2013-9-16 15:17 static/image/common/back.gif
直接接成1主8从,靠协议和不同下位机通讯不是更好吗?                                                   ...

这样的方案是很好,而且是最理想的方案。但是有个致命的弱点就是,下位机在编地址之前都是等同的,在编址之后才能正常通信。

这样就出现了编址的问题,
1. 串联各个下位机,串口数据先从上位机接收后发送给下位机这样就有串口接收数据延迟的弊端,并且随着数据量的增加和下位机级联数量的增加,
    这样的通信基本是没有办法完成正常通信的;而且必须使用双串口的单片机,在成本上很不占优势。
2. 并行连接各个下位机,又无法利用软件进行编址。考虑到下位机很多,不可能使用人工拨动拨码开关来编址。

willX 发表于 2013-9-17 10:12:56

ljt80158015 发表于 2013-9-16 15:31 static/image/common/back.gif
为何不采用总线方式呢?

总线方式?你的意思是说仿照485通信,利用串行总线挂接各个从机,然后使用广播的方式和下位机通信么?
这样的方式非常好,成本低、通信有保证、从机独立不会相互影响,但是有个非常麻烦的问题,编址的问题该怎样解决?不考虑手动拨动拨码开关进行编址的方式哦。

willX 发表于 2013-9-17 10:13:58

北小斗 发表于 2013-9-16 15:43 static/image/common/back.gif
以前有提出过这种方案,权衡了一下复杂度后来没用

那你是怎么解决这样的需求问题呢?只有一个上位机串口哦,可是下面连接6~8路从机串口。

mhw 发表于 2013-9-17 10:22:31

生产时就自动给每台设备分配好地址(唯一ID)……我们的产品都这样干的。

amazing030 发表于 2013-9-17 10:23:43

模拟开关驱动能力不够吧,传不了多远,还不如改成485

willX 发表于 2013-9-17 10:25:25

mhw 发表于 2013-9-17 10:22 static/image/common/back.gif
生产时就自动给每台设备分配好地址(唯一ID)……我们的产品都这样干的。 ...

那随机使用8个从机,挂接到1个主机串口上,主机怎么知道这8个地址是多少啊?

willX 发表于 2013-9-17 10:29:04

本帖最后由 willX 于 2013-9-17 10:35 编辑

amazing030 发表于 2013-9-17 10:23 static/image/common/back.gif
模拟开关驱动能力不够吧,传不了多远,还不如改成485

嗯,确实是这样,4052模拟电子开关确实可能影响通信线上的信号幅度,进而缩短通信距离。
但是现在暂时先不考虑传输距离的问题,先想办法把1个串口分成8个,然后再考虑接422芯片。呵呵

liansh2002 发表于 2013-9-17 10:42:35

本帖最后由 liansh2002 于 2013-9-17 10:47 编辑

才8个从机就不能用拨码开关了?DMX512设备256个地址都是拨码开关啊
还有一种,主机来分配地址,但是从机有自己独立ID
1.主机发送回报ID指令
2.各从机在随机延迟后发送自己的ID,这里要处理好同一时间仅允许一台机器发送
3.主机收到ID,分配一个地址后连带ID返回数据
4.对应ID的从机记录自己的地址。
关于第二点,这个其实很难做到,所以不建议使用有线链接时使用(如485),很容易烧。使用无线通信就没有问题

mhw 发表于 2013-9-17 11:05:23

我们的做法是用0xFFFFFFFF或0作为公共地址,从机都会应答。安装时时通过搜索工具获得地址,填写到主机……
你可以自定义一种协议:先并一台从机,搜索,获得地址A;再并一台,搜索(指令附带已搜索到的地址列表,已有的从机会自主不应答)……

willX 发表于 2013-9-17 13:25:17

本帖最后由 willX 于 2013-9-17 13:27 编辑

liansh2002 发表于 2013-9-17 10:42 static/image/common/back.gif
才8个从机就不能用拨码开关了?DMX512设备256个地址都是拨码开关啊
还有一种,主机来分配地址,但是从机有 ...

嗯,你说的也有道理,但是总线仲裁确实是比较难于实现的功能,而且用于工业控制,稳定性要求很高。

至于你说拨码开关的观点,我觉得这是一个关于产品模式的问题,就我个人而言我比较倾向于简洁的现场安装。
      如果使用薄码开关在地址编码这里确实是解决了核心问题,但是在现场安装的时候,工人必须区分每一个从机的地址代码,然后按照一定的顺序(比如从小到达)
将整个设备组装起来,这样才能实现点点对应的控制,一旦有一个安装错误,就可能导致控制上的颠倒而造成控制错误。
      这种问题在8个从机这样少量连接的项目里,问题不明显。但是如果从机总量比较大,达到128或者256乃至1024个,这样的数量级,由于从机数量太大,现场的同事
单是给各个从机拨拨码开关就要耗费近半天的时间,而且必须要有专人管理安装的顺序,一旦有一个颠倒了不容易查找错误。这样做成的系统系统调试工作繁重,
现场安装复杂,同事们怨声载道…………   
      这样的设计,还是尽量避免的好。

z421868436 发表于 2013-9-17 14:15:43

成本要求很严格?
不然的话,可以直接用串口扩展芯片做呀

YaoHui 发表于 2013-9-17 14:20:58

{:sweat:}这年头不是有485芯片

modbus 发表于 2013-9-17 17:06:28

如果分机达到256个,用多路开关岂不是更麻烦,还有布线。分机如果带显示就好办多了。

比特 发表于 2013-9-17 18:46:37

假如200个从机,你要扩展200个串口?

william_rain 发表于 2013-9-20 10:33:10

cd4052在4Mhz下,波形有失真!

willX 发表于 2013-9-22 10:03:08

比特 发表于 2013-9-17 18:46 static/image/common/back.gif
假如200个从机,你要扩展200个串口?

那你有没有什么好的方案推荐下呢?

willX 发表于 2013-9-22 10:05:31

william_rain 发表于 2013-9-20 10:33 static/image/common/back.gif
cd4052在4Mhz下,波形有失真!

额…… 4MHz,那个是SPI的速度了。现在考虑串口最高115200,速度不到1MHz。
4MHz速度是不是应该考虑下4051?不知道你测量到的具体数据是什么样啊?
最高在什么频率出现了失真?失真情况是个什么样啊?
页: [1]
查看完整版本: 串口扩展的方案选择