欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  科技

RS485去接收TTL电平的串口数据,真的可行吗

程序员文章站 2022-06-22 18:58:25
当人家叫我把RS485接口直接接到TTL串口上时,一开始我是拒绝的。但是,看到对方坚定不移的眼神,我抱着试试看的态度(反正打坏了也不是我的板子)还是接上去了。我了个趣,还真收到数据了。一、问题来源:这事情发生在某个1+x的嵌入式考证培训中,但是具体是什么原理,对方老师也没很明白的给我们分析,只是告诉我们开发板的厂家工程师推荐这么去监听数据的。就是上面这张图,用了一个无源的“232转485”模块的485端口,去对接STM32板子上的UART1-TTL串口。当然,数据通讯的场......

当人家叫我把RS485接口直接接到TTL串口上时,一开始我是拒绝的  :>。但是,看到对方坚定不移的眼神,我抱着试试看的态度(反正打坏了板子不用我赔,( ̄▽ ̄)")还是接上去了。我滴天纳~!!,还真收到数据了。

Blog【老杨的开发小站】: http://www.yangchunlei.com/?id=13 同步更新!

一、问题来源:

这事情发生在某个1+x的嵌入式考证培训中,但是具体是什么原理谁都不知道,目前只知道这是开发板厂家公司给出的数据监听方案。

RS485去接收TTL电平的串口数据,真的可行吗

就是上面这张图,用了一个无源的“232转485”模块的485端口,去对接STM32板子上的UART1-TTL串口。当然,数据通讯的场景是仅有TTL口数据发出,485端口不会向TTL端口发送数据。

RS485去接收TTL电平的串口数据,真的可行吗
看到这个图纸时,起初我也是表示怀疑的,难道说我前面这几年开发中,一直用的是假的485…./?由于培训是时间和条件有限,所以没做过多的分析和测试。回来后,我用自己的板子做了些测试,并记录下来。

二、485与TTL知识复习:

RS485去接收TTL电平的串口数据,真的可行吗


接口 电气标准
RS485   (这里的电压差指的是AB端的)

逻辑‘1’ : AB电压差>=200mV

逻辑‘0’  :   AB电压差 <=-200mV(注意前面有个负号

UART-TTL  (这里的电平,是相对于板子GND的)

逻辑‘1'   :  输出电平 > 2.4V

逻辑 '0'  :  输出电平 < 0.4 V

从我们正常的理解,上两个接口电气标准不同,是无法对接的。

RS485去接收TTL电平的串口数据,真的可行吗RS485去接收TTL电平的串口数据,真的可行吗


三、如何让485模块收到1010数据

有上面两图可以知道, 当485接口输出逻辑1的时候,是需要A端口电压高于B端口电压,反之,是A端口电压低于B端口电压。上面表格里所说的-200mV ,负电压是指Ua-Ub的值为负,并不代表其输出值相对于芯片供电电压来说的伏电压,毕竟RS485芯片没有负电压发生器。Ua、Ub的电压存在一定的共模电压,在通讯接收 的时候,只要485芯片只要检测到Ua、Ub管脚电压差值有200mV的变化,就会转换为数字逻辑1或者0。

比如,Ua = 4.3V   Ub=4.0V ; Ua-b = 300mV > 200mV ,则芯片就认为获得逻辑1。当然,在Ua= 2.3V,Ub = 2.0V的时候,也是满足条件的。

但是,TTL串口在发送的时候,是只有一个管脚Tx在变化电平。那么,能否产生所谓的 “负电压”吗?请看下面!


四、最最“敷衍”的TTL转RS485电路。

“敷衍”这词应用于485来自这篇文章:http://bbs.elecfans.com/forum.php?mod=viewthread&tid=924233&extra=page=8

如何让TTL-Tx管脚的变化电平,去驱动485的接收器呢? 在Tx发送数据的时候,我们只有1个IO在电平变化,且变化访问为0—5V。如果要让它和另一管脚产生正负变化的电压差,那么只有一个办法,让另一个管脚的电平固定在0到5V之间,且要满足压差大于200mV的话,那就缩小固定电平值的范围到[0.2V---4.8V]。当然,2.5V是最合适的选择。

所以,可以得到这样一个最敷衍的TTL ---->RS485 单向转换电路

RS485去接收TTL电平的串口数据,真的可行吗


五、实际动手测试。

使用STM32新建了仅带串口输出的项目。main函数内添加了如下发送语句:

 while (1)
  {
	  HAL_UART_Transmit(&huart1,(unsigned char*)"hello world\r\n",13,1000);
	  HAL_Delay(1000);
  }


测试电路如下:


RS485去接收TTL电平的串口数据,真的可行吗


由于我板子上没有固定的2.5V电压,所以利用了一个电位器来调节出2.5V左右电压值。另外一个485A 管脚直接对接TTL-Tx 引脚。

打开串口对应的485转换器引脚,可直接看到板子发出的串口数据了。当我尝试把电位器调节到最大和最小时,485端也就收不到数据了,这也验证了我上面的推理。

RS485去接收TTL电平的串口数据,真的可行吗

但是,我记得在培训现场那边,用无源转换器的时候,将485的B端是直接接到TTL-Rx管脚的。我也尝试着去做了下,但是,我的有源485转换器就没法收到数据。测量下485B端的电压为0V附近,(485内部B端一般都有一个下拉电阻到地,而且STM32的Rx端常态下应该是浮空状态的)。

RS485去接收TTL电平的串口数据,真的可行吗


我在想,难度是有终端电阻的情况下,造成B端电压有一定的上浮?于是我有加上了终端电阻,就像下面这样:

RS485去接收TTL电平的串口数据,真的可行吗

但是,还是没有收到数据。。。


六、总结:

现在来回答标题提出的疑问,RS485转换器去接收TTL电平的串口数据,真的可以吗?

回答是: 是可以的。利用上面第四点里提到的 “最敷衍”的转换电路,是可以收到。

可以说,在临时没有USB转TTL调试器的情况下,确实是一个好办法。想到这一点的工程师确实是啊。当你在客户现场调试,没有TTL转换器,随手可以拿来一个485转换器临时看下数据还不错。  但是它的稳定性,可以说仅限于调试,连接的杜邦线长度也不宜过长。另外,也可能会受不同型号的485转换器的性能而影响。

目前我的有源485模块下,只能在给485B端一个稳定中间电平时,才能正常接收。至于将B端接TTL-Rx为和 无源485不一样,不能收到数据的原因还有待研究。(有小伙伴知道的能告知下)


从教学和考证角度说,不推荐引导学生采用该方法。那样会带坏学生对485和TTL端口的理解,因为他们本来对这些理解的不是很透彻,你再来一个“偏方”应用给他们去调试,在考试或者考证环境下,会让他们一下子打蒙掉。甚至会开始怀疑其以前所学的理论知识。就好比学车,你不可能在它还没学会正常起步的情况下,就教他拉手杀学弹射起步吧!!

考证环境下,还是提供个232转TTL模块吧!

本文地址:https://blog.csdn.net/kimiyang123/article/details/107903681