MCU 常用的多路复用用采取了什么方式

多微控制器(MCU)/微机组成的分布式、主从式系统是现代复杂通信、控制系统的典型解决方案分布式环境下的多机协同,要求系统状态和控制信息在多机间进行快速传递,这通瑺借助简单有效的串行通信方式。现有的微控制器一般所带的串行接口非常适用于点对点通信的场合;但对于实时性要求高的多机通信场合,這类接口必须在串口数量和功能上进行扩展,才能满足对实时性要求较高的应用场合的需要本文讨论了一种适用于多机实时环境下的、新嘚

多微控制器(MCU)/微机组成的分布式、主从式系统是现代复杂通信、控制系统的典型解决方案。分布式环境下的多机协同,要求系统状态和控淛信息在多机间进行快速传递,这通常借助简单有效的串行通信方式现有的微控制器一般所带的串行接口非常适用于点对点通信的场合;但對于实时性要求高的多机通信场合,这类接口必须在串口数量和功能上进行扩展,才能满足对实时性要求较高的应用场合的需要。

本文讨论了┅种适用于多机实时环境下的、新的可重配置串口扩展方案图1为本方案框图。常用的多路复用用器是本方案的硬件核心方案的要点昰利用Mux动态地将MCU的串口在串行通道间切换,以达到串口扩展的目的。本文中MCU以89C51为例,Mux 以MAX353为例

MAX353 是Maxim公司推出的高性能常用的多路复用用器,实际可構成两对单刀单掷模拟开关,两对开关状态由一个引脚控制。MAX353基本参数为导通电阻小于35Ω;导通时间小于175ns,关断时间小于145ns以上参数完全满足本方案的使用要求。

以下介绍本串口扩展方案的基本工作原理

两串行通道和MAX353、89C51的连接 两串行通道CH1,CH2通过常用的多路复用用器MAX353接到89C51的串口,常用嘚多路复用用器MAX353由89C51的一个I/O引脚控制。其中串行通道CH2的输出TXD2同时接到89C51的外部中断输入请求INT0或INT1上为了适应各种串口通信协议的需要,可在电路Φ加上电平转换器件,如图1所示。

中断源的使用和设置 CH1仍旧使用串口中断,而CH2使用外部中断INT0或INT1(下面以INT0为例)当CH2有信息来时,TXD2上将出现起始标誌:一个下跳沿。应将INT0设置成为边沿触发,该下跳沿将使89C51进入外部中断服务程序,将串口切换到CH2

假定外部中断的优先级比串口中断优先级高,叒假定在默认情况下,89C51通过I/O口控制Max353,将CH1和89C51的串口相连。当CH1有信息来,将引起89C51的串口中断,实时地接收CH1的信息;反之,当CH2发来信息时,即由远端机发来“发送字符”(发送该字符的目的仅仅是要89C51产生外部中断,该字符姑且称之为“发送字符”)以引起外部中断利用该中断,控制MAX353将CH2切到89C51的串口,为接受来自CH2的正规信息作准备;CH2再有信息来时,即可通过89C51串口接收,实现串口扩展。

通过以上步骤,系统已经在硬件上已经完成了串口扩展,尚需编制楿应的支撑软件

如果89C51是发送方,那么端机地址(这里地址指的是通道)显然已知,据此控制MAX353,将串口切换到正确的通道上即可;如果89C51是接收方,89C51不知道信息何时、从何通道来,为此需要建立特定的全局标志。

首先89C51的串口中断服务程序应区分是CH1还是CH2引起的串口中断,检查控制MAX353串口I/O引脚状态可作絀判断;设置全局标志CH1_Abort作为CH1串口中断服务程序提前终止标志;设置全局标志Extern_on以表明外部中断曾发生CH1串口中断服务程序检测该标志,决定是否需偠快速退出并复位Extern_on;为了提供系统的容错能力,用一个定时器检查CH2占用串口的时间。定时器的时间定为通道切换的最长时间(包括软件和硬件所需时间)图2给出了89C51的详细工作流程。在此采用了下面直观的类状态迁移图的形式,特别是对全局性的状态标志(如Extern_on、CH1_Abort等)的设立和复位进荇说明

从图1可以清楚地看出,本方案硬件开销极少;原则上,以此方法可对微控制器的串口作进一步的扩展。串口的扩展为系统提供了实时性强、可靠性高的串行通信能力;可通过改变通道和MAX353连接改变两通道的优先级,达到灵活配置通道优先级的目的■

1. 何立民:《MCS-51系列单片机应鼡系统设计系统配置与接**术》,北京航空航天大学出版社,1996年12月;

3. 刘乐善等:《微型计算机接**术原理及应用》,华中理工大学出版社,1998年1月。

模数转换器(ADC)用于将模拟信号转换荿数字形式NodeMcu内置了10位ADC,只有一个ADC通道即只有一个ADC输入引脚从外部设备读取模拟电压。

Nodemcu内部设计中ADC引脚与外部供电电路进行常用的多蕗复用用。因此我们可以利用它来测量内部电压或外部电压。ADC引脚在读取外部电压时输入电压范围为0-1.0V。

analogRead(A0):该函数用于读取模块ADC引脚上嘚外部电压

注意,在读取VCC电源电压之前应将ADC模式改为读取系统电压。要更改ADC模式要在代码的 #include 行之后使用ADC_MODE(mode)。mode值为:ADC_TOUT表示外部电压值為 ADC_VCC表示系统电压。默认情况下它读取外部电压。

读取NodeMCU的ADC引脚上的模拟电压使用电位器在ADC引脚上提供0-3.3V的可变电压。

注意:上图NodeMCU ADC输入采用叻电阻分压网络从3.3V引脚连接到ADC引脚因此可确保NodeMCU的ADC脚的输入电压在0~3.3V范围,由于ADC的分辨率为10bit所以在ADC输入电压0-3.3V的取值范围为0-1023。

调整电位器串口监视器输出如下:

在这里,我们发现测量值与实际值略有偏差我们得到ADC 值变化为 5-1007,最高达到2790mv即2.8V左右,与3.3V大约存在0.5V的差异

根据Nodemcu的datasheet,通过ADC测量电源电压时必须将ESP8266的ADC引脚悬空。在上面的外部电压测量中为了确保外部电压输入范围(0-3.3V),我们将ADC连接到电阻分压器(100K 或 220K)如下圖所示。

现在如果我们去掉电阻分压器,让ADC引脚(TOUT)悬空那么我们可以得到更好的精度,如下面所示系统电压读数接近3.3V。

清华计算机应用复试内容多媒体技术多媒体试卷1

清华计算机应用复试内容多媒体技术多媒体试卷1

您还没有浏览的资料哦~

快去寻找自己想要的资料吧

您还没有收藏的资料哦~

收藏资料后可随时找到自己喜欢的内容

我要回帖

更多关于 常用的多路复用 的文章

 

随机推荐