芯片应用:如何为RS-485接口创建自动方向控制?

芯片应用:如何为RS-485接口创建自动方向控制?

本文探讨了通过实现自动方向控制将RS-485功能添加到PC的RS-232串行端口的方法。

多年来RS-232是PC串行通信标准。硬件和软件支持这个简单而有效的接口包含在每台PC上,直到它最终被更快,更复杂的通用串行总线(USB)标准取代。

但是,由于RS-232的简单性和所需的许可证费用,RS-232对于许多串行通信应用而言至今仍然很流行。目前PC的操作系统中仍然提供对RS-232的软件支持,并且可以通过添加许多供应商提供的USB至串行适配器之一来提供硬件支持。

RS-232的一个限制是连接设备之间相对较短的距离。 RS-485标准通过用差分驱动器/接收器代替RS-232输入和输出来解决这个问题。除了少数例外情况,RS-485收发器包括一个方向控制器,用于在发送和接收之间切换驱动器,从而仅使串行接口半双工(一次一个方向)。这对于设计用于处理快速方向改变的设备来说不是问题。

芯片应用:如何为RS-485接口创建自动方向控制?

1.可编程组合逻辑检测PC TX发送起始位并将RS-485方向转换为小于50 ns的发送。

但是,如果您想将RS-485硬件接口添加到RS-232串行输出中,则需要实施自动方向控制来管理数据流中的方向更改。 不幸的是,在PC的RS-232接口中没有任何握手信号的速度足以以串行通信所需的速率来回改变方向。

芯片应用:如何为RS-485接口创建自动方向控制?

2.起始位启动一个内部定时器,以保持发送中的方向控制直到停止位的中间。

诸如PIC10F320的微控制器(MCU)具有适合于轻松解决该问题的独立于核心的外设(CIP)。 CIP减少了对外部组件的需求,从而有助于降低成本。

PIC10F320中的可编程组合逻辑可用于检测PC TX发送起始位。 一旦被检测到,它就能够在不到50ns的时间内切换RS-485方向进行传输(图1),并启动一个内部定时器来保持传输中的方向控制直到停止位的中间位置(图2)。 RS-485线上的上拉电阻和下拉电阻用于在停止时间和任何可能出现的空闲时间内将RS-485传输线保持在空闲状态。

芯片应用:如何为RS-485接口创建自动方向控制?

3.微控制器检测何时不存在发送停止位以扩展信号的发送方向控制。

微控制器也可以被编程为检测何时发送停止位不存在以扩展诸如BREAK(图3)之类的信号的发送方向控制。 内部组合逻辑保持传输中的方向控制,直到PC释放TX线。 当TX线路变高时,组合逻辑从发送切换到接收时间小于50ns(图4)。

芯片应用:如何为RS-485接口创建自动方向控制?

4.当TX线路变高时,组合逻辑在30ns内从发送切换到接收。

典型的硬件配置如图5和图6所示。注意,发送和接收方向控制是分开的,并且接收使能(/ RE)连接到低电平。 随着接收机始终启用,所有传输的数据将被接收。 通过确认收到的每个字符与发送的字符相匹配,可以很容易地检测到RS-485总线冲突。

芯片应用:如何为RS-485接口创建自动方向控制?

5.自动方向控制的RS-485收发器电路图。

芯片应用:如何为RS-485接口创建自动方向控制?

6.自动方向控制的RS-485收发器的印刷电路布局。

配置的PC端显示为与ADM00393 USB转串口适配器的连接。该适配器为RS-485收发器所需的3.3 V或5 V逻辑电平提供PC串行API函数和硬件接口的软件接口。

J3编程器接口显示为编程SOT23-6器件的简便方法。没有必要用连接器填充J3。通过在PICkit 3等编程器上插入引脚进行机械连接就足够了。

代码开发

MPLAB X集成设计环境(IDE)与XC8编译器和MPLAB代码配置器(MCC)插件一起,简化了此应用程序的代码开发过程。所有可从Microchip网站下载(免费)。

打开MPLAB X的文件>新建项目设置向导来创建一个使用C作为编程语言中的PIC10F320项目。如果您尚未这样做,请使用工具>插件下载下载MCC插件。使用工具>嵌入式菜单选项启用MCC,或者单击工具栏中的MCC图标。在“设备资源”窗口中,通过双击它们将NCO1和CLC1添加到项目资源。

芯片应用:如何为RS-485接口创建自动方向控制?

7.封装,引脚,振荡器和看门狗定时器的MCC系统配置选择。

在系统资源窗口中选择系统模块并在管理器选项卡中选择SOT6软件包时,项目窗口应与图7中显示的内容类似。 如图所示使内部振荡器和WDT选择。

点击Registers选项卡显示并选择配置字选择,如图8所示。

芯片应用:如何为RS-485接口创建自动方向控制?

8. MCC系统配置字选择。

选择引脚模块系统资源并配置引脚,如图9所示。请注意,未使用的PORT引脚A2和A3配置为启用弱上拉的输入,因此它们不会悬空。

芯片应用:如何为RS-485接口创建自动方向控制?

9.引脚模块配置选择。

选择中断模块系统资源并进行配置,如图10所示。

芯片应用:如何为RS-485接口创建自动方向控制?

10.中断配置选择。

选择NCO1系统资源并按图11所示进行配置。NCO1输出频率由所需的RS-485波特率除以9.5确定。 这将使NCO1的一个时间段达到9.5位。 该例子显示了38400波特率的NCO1输出频率。

芯片应用:如何为RS-485接口创建自动方向控制?

11.数字控制振荡器配置选择。

最初未启用的NCO1由CLC1中断从0开始,并将在第一个周期结束时置位NCO1中断标志。 中断被轮询,所以NCO1中断未被使能。 这在后面会有更详细的介绍。

选择CLC1系统资源并对其进行配置,如图12所示。置位复位(S-R)锁存由CLCIN1引脚上的下降TX启动位置1。 如果CLCIN1输入的STOP位为高电平(CLCIN1 AND NCO1OUT),则在第一个NCO1周期结束时S-R锁存器复位。 如果不是,则软件将重新配置CLC1,以通过将CLCIN1真实输入启用到Gate4或门来重置上升TX信号上的S-R锁存器。 Gate4或门输出反相,以确保S-R锁存器在初始化期间保持复位状态。 这将在主循环之前作为系统初始化的最后一步被删除。

芯片应用:如何为RS-485接口创建自动方向控制?

12.可配置逻辑单元配置设置。

代码配置器的最后一步是通过单击Project Resources窗口中的Generate按钮来生成代码。 当自动代码完成后,剩下的工作就是对CLC1初始化,中断服务程序和主程序进行微调。

我们需要向位于由MCC创建的clc1.c文件中的CLC1中断服务程序添加一行。 这条线如图13所示,使NCO1成为可能。

芯片应用:如何为RS-485接口创建自动方向控制?

13. CLC1中断服务程序代码添加。

最后,必须在主程序中启用中断,删除CLC1 S-R锁存器复位,并添加主循环代码,如图14所示。

芯片应用:如何为RS-485接口创建自动方向控制?

14.添加到初始化和主循环的代码。

CLC1中断启动NCO1。 在第一个NCO1周期结束时,NCO1IF标志将被置位。 主循环轮询此事件并在发生时停止NCO1。 然后将NCO1累加器和中断清零,以准备下一个起始位事件。

最后一步是确定STOP位是否有效。 如果不是,则S-R锁存器不会被复位,并且CLC1输出将保持高电平。 如果发生这种情况,则当TX线(CLCIN1)变高时,CLC将重新配置为清除S-R锁存器。 然后软件无限期地等待这个事件。 当它最终发生时,重新配置被删除,主循环返回等待NCO1中断。

结论

如果您想将RS-485硬件接口添加到PC的RS-232串行端口,则可以使用带CIP的MCU添加自动方向控制。 本文演示了使用单个6引脚MCU创建自动方向控制的典型硬件配置,并介绍了如何简化此应用的开发代码。 尽管存在其他解决方案,但该方法具有组件更少,成本更低和性能更好的优点。


分享到:


相關文章: