本文磋商了通过实现自动方向掌握将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收发器包括一个方向掌握器,用于在发送和吸收之间切换驱动器,从而仅使串行接口半双工(一次一个方向)。这对付设计用于处理快速方向改变的设备来说不是问题。
1.可编程组合逻辑检测PC TX发送起始位并将RS-485方向转换为小于50 ns的发送。
但是,如果您想将RS-485硬件接口添加到RS-232串行输出中,则须要履行自动方向掌握来管理数据流中的方向变动。 不幸的是,在PC的RS-232接口中没有任何握手旗子暗记的速率足以以串行通信所需的速率来回改变方向。
2.起始位启动一个内部定时器,以保持发送中的方向掌握直到停滞位的中间。
诸如PIC10F320的微掌握器(MCU)具有适宜于轻松办理该问题的独立于核心的外设(CIP)。 CIP减少了对外部组件的需求,从而有助于降落本钱。
PIC10F320中的可编程组合逻辑可用于检测PC TX发送起始位。 一旦被检测到,它就能够在不到50ns的韶光内切换RS-485方向进行传输(图1),并启动一个内部定时器来保持传输中的方向掌握直到停滞位的中间位置(图2)。 RS-485线上的上拉电阻和下拉电阻用于在停滞韶光和任何可能涌现的空闲韶光内将RS-485传输线保持在空闲状态。
3.微掌握器检测何时不存在发送停滞位以扩展旗子暗记的发送方向掌握。
微掌握器也可以被编程为检测何时发送停滞位不存在以扩展诸如BREAK(图3)之类的旗子暗记的发送方向掌握。 内部组合逻辑保持传输中的方向掌握,直到PC开释TX线。 当TX线路变高时,组合逻辑从发送切换到吸收韶光小于50ns(图4)。
4.当TX线路变高时,组合逻辑在30ns内从发送切换到吸收。
范例的硬件配置如图5和图6所示。把稳,发送和吸收方向掌握是分开的,并且吸收使能(/ RE)连接到低电平。 随着吸收机始终启用,所有传输的数据将被吸收。 通过确认收到的每个字符与发送的字符相匹配,可以很随意马虎地检测到RS-485总线冲突。
5.自动方向掌握的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添加到项目资源。
7.封装,引脚,振荡器和看门狗定时器的MCC系统配置选择。
在系统资源窗口中选择系统模块并在管理器选项卡中选择SOT6软件包时,项目窗口应与图7中显示的内容类似。 如图所示使内部振荡器和WDT选择。
点击Registers选项卡显示并选择配置字选择,如图8所示。
8. MCC系统配置字选择。
选择引脚模块系统资源并配置引脚,如图9所示。请把稳,未利用的PORT引脚A2和A3配置为启用弱上拉的输入,因此它们不会悬空。
9.引脚模块配置选择。
选择中断模块系统资源并进行配置,如图10所示。
10.中断配置选择。
选择NCO1系统资源并按图11所示进行配置。NCO1输出频率由所需的RS-485波特率除以9.5确定。 这将使NCO1的一个韶光段达到9.5位。 该例子显示了38400波特率的NCO1输出频率。
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锁存器在初始化期间保持复位状态。 这将在主循环之前作为系统初始化的末了一步被删除。
12.可配置逻辑单元配置设置。
代码配置器的末了一步是通过单击Project Resources窗口中的Generate按钮来天生代码。 当自动代码完成后,剩下的事情便是对CLC1初始化,中断做事程序和主程序进行微调。
我们须要向位于由MCC创建的clc1.c文件中的CLC1中断做事程序添加一行。 这条线如图13所示,使NCO1成为可能。
13. CLC1中断做事程序代码添加。
末了,必须在主程序中启用中断,删除CLC1 S-R锁存器复位,并添加主循环代码,如图14所示。
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创建自动方向掌握的范例硬件配置,并先容了如何简化此运用的开拓代码。 只管存在其他办理方案,但该方法具有组件更少,本钱更低和性能更好的优点。