资讯详情

RS485使用注意事项(上下拉电阻)

这两天主要做的就是把Keller 30X工业压力变送器系列RS485接口和STM32单片机联通,数据通过USB口转发到PC上。

我先直接用Keller 30X连接电脑的RS485接口,自然没有问题。Keller自带的小软件可以直接看到结果。

其次让STM32的RS485接口与计算机连接,调试用了一天半,遇到了几个棘手的问题:

因为RS485为半双工模式,发送时需要处理收发转换。发送前将T/NR拉高线,然后用串口发送字节数据。发送后不能立即将其发送T/NR线拉低,需要等一会儿(发送1左右~2位时间取决于视波特率),待接收方确认停止位置后,再进行T/NR降低接收模式。

接收和发送是一样的。当计算机向单片机发送数据时,至少应有两个停止位,以确保单片机接收一个数据中的1将连续发送->0跳变认为起始位,导致传输错误

芯片选择要认清MAX3485和MAX485的区别。MAX3485是CMOS电平的,用3.3V供电。MAX485是TTL电平的,用5V供电。STM32单片机的IO都是CMOS因此,应使用电平MAX3485芯片。假如一定要做TTL和CMOS记住电平转换CMOS可以驱动TTL,而TTL驱动CMOS需要上拉电阻。如果电平错误,最明显的情况是发送正常并接收乱码。

RS不要乱接485终端电阻。RS485的终端电阻连接到总线的末端,以防止电波反射。如果线很短,根本不要连接,否则很容易缩小差异信号,降低信噪比

RS485的AB个人认为没有必要连接线上上下拉电阻。MAX3485内部有上下拉电路,可以自己拉AB线钳位于1上;其次,如果电缆较长,设备的地面电位可能与主板不同。增加上下拉电阻会产生额外的暗电流,降低差分信号,降低信噪比。

STM32的Tx口要配置成推挽输出模式,Rx口应配置为内置上拉模式(当然也可以配置为悬挂模式,在电路板上用电阻上拉)

最后尝试将Keller 30X和STM32单片机连接,悲剧发生。Keller 30X485接口完全是为电脑设计的,(9600,n,8、1)下一帧连续发送20多个字节。正如上面所述,单片机至少需要一个安全时间来处理中断程序Keller当快速连发时,当下一个字节的开始到来时,单片机仍在中断处理程序中,因此直接忽略了它,导致单片机在数据中出现1->0的跳转变认为下一个的起始位置,使后续传输出错。

不幸的是,Keller 30X信芯片不能编程,因此不能添加安全事件。最后,我只能使用模拟信号A/D采集转换方式Keller 30X压力信号。这个故事告诉我们,面向单片机的未来设计UART接口(不管是RS232,rs485还是TTL,CMOS),必须考虑目标单片机的性能。与计算机相比,单片机可以在一瞬间完成串口接收中断。向单片机发送数据时,必须在两个字节之间留出足够的安全时间,以确保目标单片机有足够的时间处理中断并读取寄存器中的数据。STM32单片机已经很快了,处理一个中断需要一个位置。如果是51,相信这个时间会更长。

标签: rx2系列电阻

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台