串口单线半双工转换电路

用来把单线半双工模式的串口转换成双线,然后才能连接到普通的双线USB 串口模块,比如CH340 之类的。电路设计来自大佬的博客:AVR half-duplex software UART supporting single pin operation。他在Arduino 上用软件模拟串口功能,利用这个电路,可以进一步减少串口占用的引脚,ARM 单片机一般都有硬件单线半双工模式,就不用折腾软件时序了,不过软件串口可以在所有IO 引脚上实现通信,某些情况下还是方便的。

电路

在这里插入图片描述

左边的RTX 连接到单片机的单线串口引脚,右边TXDRXD 分别连接到另一端的对应引脚,比如,可以按下面这种方式连接:

在这里插入图片描述
这个电路要求:

  1. RXD 引脚固定为输入模式,有内部上拉;
  2. TXD 引脚在空闲时输出高电平;
  3. RTX 引脚在输出和输入模式之间切换,输入模式要有内部上拉;

RTX 端发送数据时,RTX 引脚为推挽输出模式,CH340 端的TXD 引脚必须保持高电平空闲状态。此时三极管基极跟随TXD 引脚保持高电平。如果RTX 输出高电平,三极管不会导通,RXD 内部上拉为高电平;如果RTX 输出低电平,三极管导通,RXD 被拉低。为了避免短路,RTX 引脚上串了个限流电阻。

RTX 端接收数据时,RTX 引脚设为上拉输入模式。当TXD 输出高电平,二极管不导通,RTX 保持高电平,RXD 也保持高电平 ;TXD 输出低电平,就通过二极管把RTX 拉低,此时三极管基极也是低电平,不会导通,所以RXD 仍然是高电平,CH340 的输出不会干扰它自身的输入。

可见,核心逻辑是利用TXD 作为控制RXD 的使能信号,从而阻止回环;引脚利用内部上拉保持默认状态,输出引脚基本上只负责输出低电平。这个电路以及配套的软件串口代码我在Arduino 上测试过,完全OK。不过,稍微有个问题:要是通信双方的信号电平不一致怎么办?

如果电平不一致

比如,RTX 端的单片机是3.3V 电平,CH340 则是5V 电平,1.7V 的压差足以导通二极管和三极管,必须重新考虑一下上面的电路原理。

RTX 为接收状态,TXD 通过二极管输出低电平时,情况和之前一样;TXD 输出的5V 高电平则会通过三极管的BE 节跑到RTX 那边去,因为这时候RTX 电压比较低,于是三极管导通。

一方面,这会让RTX 被输入的5V 电平拉高,有1k + 100 的限流电阻,问题不大,不会冒烟;单片机的3.3V 电源轨可能会收到干扰,但是问题应该也不大,5V 经过两个二极管之后就接近3.3V 了。另一方面,此时三极管导通了,那么RXD 的电压肯定会被略微拉低,应该不足以直接拉到低电平。

RTX 为发送状态,输出低电平时情况没有异常,而高电平时,就如上面所说,TXD 上的5V 会跑过去、RXD 会被三极管略微拉低,总的来说应该是可以兼容的。

可以把三极管换成NMOS,比如SI2300,电路接成这样:

在这里插入图片描述
这样一来,CH340 一侧的5V 就不会再冲到单片机一侧了。SI2300 的GS 阈值电压很低,1.7V 就足以导通,所以RXD 还是会被拉低到3.3V,要是再换成阈值比较高的2N7002,就基本没问题了。用NMOS 的话,1K 限流电阻也可以去掉。

如果单片机是5V,而CH340 是3.3V,这种情况看着倒是更危险一点,因为RTX 的5V 电平会直接冲到TXD,而串联的限流电阻却不能太大,否则波特率就要降低。估计CH340 的引脚是有5V 耐受能力的吧~

要是上面这些估计“问题不大”的地方实际都不行的话,就只能考虑另外附加电平转换电路,呃,这可有点烦人了,不如调整一下CH340 这边的供电,让它和单片机那边一致。

  • 24
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值