频道栏目
读书频道 > 系统 > 其他综合 > 嵌入式系统原理、设计及开发
2.3.3 I/O子系统
2013-01-09 15:26:02     我来说两句
收藏   我要投稿
本书全面系统地讲解嵌入式系统基础知识,透彻分析嵌入式系统开发的管理方法,并呈现嵌入式硬件及固件的设计、开发和集成步骤。本书脉络清晰,编排精当,每章开头列出学习目标,然后结合大量表格、图例和例题来详...  立即去当当网订购

在嵌入式系统中,I/O子系统是嵌入式系统与外界之间的交互接口。前面已经提到过,交互发生在连接到嵌入式系统输入端口的传感器以及连接到嵌入式系统输出端口的激励器。需要说明的是,在某些应用中,传感器可能并不直接连接到输入端口,而是通过信号处理与转换系统(比如ADC、光耦合器等)连接。本节说明嵌入式系统中经常使用的传感器和激励器,并介绍嵌入式系统与外界交互的I/O子系统。

1. 发光二极管

在任何嵌入式系统中,发光二极管(Light Emitting Diode,LED)都是重要的输出器件,用于可视化信息显示。LED可以用作信号或事件的状态指示器,其典型应用实例是能量状态指示,比如,为基于电池的手持式嵌入式设备指示“设备工作”、“电池电量低”、“电池正在充电”等状态。

发光二极管是p-n结二极管(有关p-n结二极管,请参阅Analog Electronice Fundamentals这一类书籍),包含一个阳极和一个阴极。为了使得LED正常工作,其阳极应该连接到供电电源的“+ve”端,阴极则应该连接到供电电源的“-ve”端。需要对流过LED的电流进行限制,使得该电流小于其击穿电流。为此,可以使用电阻将电源、LED串联连接,从而限制流过LED的电流。理想的LED电路连接如图2-13所示。


 

LED连接到处理器/控制器端口管脚的方式有两种。第一种是将阳极直接连接到端口管脚,并通过该端口管脚驱动LED。此时,当端口管脚处于高电平(逻辑1)的时候,端口管脚会将电流灌入(source)LED。第二种是将LED的阴极连接到处理器/控制器的端口管脚,阳极则通过限流电阻连接到供电电源。此时,当端口管脚处于低电平(逻辑0)的时候,LED导通,端口管脚接收(sink)电流流入。如果把LED直接连接到端口管脚上,那么其亮度将取决于端口管脚允许灌入的最大电流取值,此时LED的亮度也许无法达到所需的程度。如果使用第二种连接方式,那么供电电源直接灌入电流,端口管脚接收电流流入,从而获得所需的LED亮度。

2. 7段LED显示器

7段LED显示器(7-segment LED display)是用于显示字母数字字符的输出器件。该器件包含8段发光二极管,按照特定的方式排列在一起。在8段LED中,7段用于显示字母数字字符,剩下的1段用于表示小数中的小数点。图2-14说明了7段LED显示器中各段LED的排列情形。


 

LED各段的命名从A到G,LED小数点段的命名为DP(Decimal Point)。根据需要显示的数字与字符,可以相应点亮LED的A~G段及DP段。比如,为了显示数字“4”,可以点亮段F、G、B和C;为了显示数字“3”,可以点亮段A、B、C、D、G和DP;为了显示字符“d”,可以点亮段B、C、D、E和G。为了显示字母数字字符,所有的8段LED都需要连接到处理器/控制器的共用端口上。为此,7段LED显示器可以使用两种不同结构的连接方式,即共阳极(Common Anode)结构与共阴极(Common Cathode)结构。在共阳极结构中,8段LED的阳极连接在一起;而在共阴极结构中,8段LED的阴极连接在一起。图2-15显示了共阳极结构和共阴极结构。


 

根据7段LED显示器单元的结构,在LED各段的非共用端,其阳极或阴极可以按顺序连接到处理器/控制器的端口。比如,A段连接到最低位对应的端口管脚,DP段连接到最高位对应的端口管脚。

对于流过各段LED的电流,都应该限制在LED显示器单元允许的最大电流取值以内。典型的电流值是20 mA以内。通过将限流电阻连接到每段LED的阳极或阴极,可以限制流过LED段的电流。使用LED显示器数据手册中列出的电流参数,可以计算出所需的限流电阻取值。

对于共阴极结构来说,每段LED的阳极应该连接到显示器接口对应的端口管脚上。对于共阳极结构来说,所有LED的阳极通过限流电阻连接到5V供电电源上,每段LED的阴极则是连接到各自对应的端口管脚线上。在共阳极结构中,对于需要点亮的LED段,其阴极连接的端口管脚应该设置为逻辑0。

7段LED显示器是低成本嵌入式应用的常用选择,比如公共电话监控设备、POS终端等。

3. 光耦合器

光耦合器(optocoupler)是将电路隔离为两个部分的固态器件。光耦合器将LED和光敏晶体管组合在单个器件内部。图2-16显示了光耦合器件的功能。


 

在电路中,光耦合器常用在数据通信、电路隔离、高电压隔离、同步隔离、信号增强等应用中以抑制干扰。光耦合器既可以用在输入电路中,也可以用在输出电路中。图2-17显示了光耦合器的应用实例,该嵌入式系统使用微控制器作为系统的内核,光耦合器则用作电路的输入和输出。


 

用户可以从多家半导体厂商购买所需的光耦合器IC。Fairchild半导体公司(公司主页http://www.fairchildsemi.com)生产的MCT2M IC就是光耦合器IC的实例。

4. 步进电机

步进电机(stepper motor)是一种电子-机械器件,在运行过程中,它可以响应直流电信号,从而产生不连续的位移运动。它的操作与普通的直流电机不同。外加直流电压的时候,直流电机可以产生连续的转动;与之不同的是,步进电机在外加直流电压的时候,会产生不连续的转动。步进电机广泛用于工业嵌入式应用、消费类电子产品以及机器人控制系统。比如,打印机/传真机的送纸系统就使用了步进电机,从而实现不连续的送纸功能。

根据电机的线圈绕线方式,两相步进电机可以分为以下两类:

(1) 单极型

(2) 双极型

单极型

在单极型(unipolar)步进电机中,每相包含两个线圈绕组。步进电机的转动方向(可以是顺时针方向,也可以是逆时针方向)由电流方向的改变来控制。如果电流沿一个方向流过一个线圈绕组,那么电流就会沿相反的方向流过另一个线圈绕组。通过切换电路所连接的线圈,可以很容易地改变电机的转动方向。图2-18显示了两相单极型步进电机的工作原理。


 

图2-18中,线圈分别表示为A、B、C、D。线圈A和C用于相位1,两组线圈中的电流方向相反(该相位上,任意时刻只有一组线圈上有电流流过)。类似地,线圈B和D用于相位2,两组线圈中的电流方向相反(该相位上,任意时刻只有一组线圈上有电流流过)。

双极型

在双极型(bipolar)步进电机中,每相只包含单个线圈绕组。为了改变电机的转动方向,需要使流过线圈绕组的电流动态反相;这需要复杂的电路来实现电流反相。两相双极型步进电机定子线圈绕组的详细情况参见图2-19所示。


 

通过改变定子线圈绕组的激励顺序,可以使用不同的方法来实现步进电机的步进操作。下面说明步进电机支持的各种步进模式。

全步进

在全步进模式下,电机的两个相位同时加电。线圈A、B、C、D的加电序列如表2-5所示。

表2-5  全步进模式对应的线圈加电序列表


步    骤 线圈A 线圈B 线圈C 线圈D
1 H H L L
2 L H H L
3 L L H H
4 H L L H

需要注意的是,对于每个相位的两个线圈绕组,任何时候都只有一个线圈绕组是加电的。

波动步进

波动步进模式下,每次电机只有一个相位是加电的,各相位的各个线圈轮流加电。线圈A、B、C、D的加电序列如表2-6所示。

表2-6  波动步进模式对应的线圈加电序列表


步    骤 线圈A 线圈B 线圈C 线圈D
1 H L L L
2 L H L L
3 L L H L
4 L L L H

半步进

半步进模式结合了波动步进模式与全步进模式,具有较高的扭矩和稳定性。在半步进模式下,线圈A、B、C、D的加电序列如表2-7所示。

表2-7  半步进模式对应的线圈加电序列表


步    骤 线圈A 线圈B 线圈C 线圈D
1 H L L L
2 H H L L
3 L H L L
4 L H H L
5 L L H L
6 L L H H
7 L L L H
8 H L L H

通过调整各线圈的加电顺序,可以控制步进电机的转动方向。

两相单极型步进电机是嵌入式应用的常用选择。步进电机的电流要求较高,因此微控制器/处理器的端口管脚往往不能直接对电机进行驱动。此外,步进电机运行所需的供电电压范围通常在5V~24V之间。根据电机的电流和电压要求,设计者需要选用特定的驱动电路,从而实现微控制器/处理器与步进电机之间的接口。用户可以在市场上购买商用现货步进电机驱动器IC,并直接连接到微控制器的相应端口。ON半导体公司和ST微电子公司生产的ULN2803,是一款八进制外围设备驱动器阵列,可用于驱动5V步进电机。此外,还可以使用晶体管构建简单的驱动电路。

在下面的电路图(图2-20)中,显示了步进电机的接口。其中,通过驱动电路,将步进电机连接到微控制器/处理器的端口管脚。


 

5. 继电器

继电器(relay)是一种电子-机械器件。在嵌入式应用中,继电器单元用作信号和能量的动态通路选择器。继电器中包含在金属铁芯上缠绕的绝缘导线线圈以及金属电枢(电枢可以具有一个或多个导电触点)。

继电器的工作基于电磁原理。给继电器线圈外加电压的时候,电流流过线圈,从而产生磁场。磁场可以吸引电枢核,使得触点移动。触点的移动会改变能量或信号的通路。继电器具有许多不同的结构。图2-21显示了嵌入式应用中广泛使用的继电器结构。


 

对于信号或能量而言,单刀单掷Single Pole Single Throw(开关)结构只有一条通路。这条通路要么处于常开状态,要么处于常闭状态。在常开型单刀单掷继电器结构中,电路通常处于开路状态;在继电器加电的时候,电路会闭合。在常闭型单刀单掷继电器结构中,电路通常处于闭合状态;在继电器加电的时候,电路会断开。对于单刀双掷继电器而言,存在两条通路;通过给继电器加电/断电,可以选择信息连接的通路。

通过将继电器驱动电路连接到处理器/控制器的端口管脚,可以对继电器进行控制。此外,可以使用晶体管来构建继电器驱动电路,如图2-22所示。


 

图2-22中,整流二极管用于释放继电器线圈断电时产生的反向电压。整流二极管负责保护继电器和晶体管。

大多数工业继电器体积较大,需要使用高电压来驱动继电器工作。对于需要使用低电压直流信号开关的嵌入式应用而言,可以使用Reed型专用继电器。

6. 压电式蜂鸣器

压电式蜂鸣器(piezo buzzer)是压电式器件,为嵌入式系统产生音频输出信号。压电式蜂鸣器中含有压电式振动膜,根据外加的电压,可以产生人耳能够听见的声音。压电式蜂鸣器可以分为两类:自身驱动型和外部驱动型。自身驱动型电路中包含了产生音频信号所需的所有元件,其输出的声音都在预定义的音调上;根据不同的外加电压,可以产生不同的音调。外部驱动型压电式蜂鸣器则能够产生不同的音调。根据压电式蜂鸣器上应用的可变脉冲序列,产生的音调可以是多种多样的。压电式蜂鸣器可以直接连接到处理器/控制器的端口管脚。根据驱动电流的要求,压电式蜂鸣器还可以使用基于晶体管的驱动电路来连接接口,这就类似于继电器的驱动电路。

7. 按钮开关

按钮开关(push button switch)是一种输入设备,可以分为以下两种结构:按下接通型和按下断开型。在按下接通型结构中,开关处于常开状态;当开关按下之后,电路才会接通。在按下断开型结构中,开关处于常闭状态;当开关按下之后,电路才会断开。只要开关保持按下的状态,在按下接通型结构中电路就处于闭合状态,在按下断开型结构中电路就处于断开状态;一旦开关松开之后,在按下接通型结构中电路就处于断开状态,在按下断开型结构中电路就处于接通状态。按钮用于产生瞬时脉冲。在嵌入式应用中,按钮开关通常用作复位、启动开关或者是脉冲产生器。一般说来,按钮开关应该连接到主控处理器/控制器的端口管脚。根据按钮开关连接到控制器上的接口方式,开关可以产生高电平脉冲或低电平脉冲。图2-23分别显示了用于产生低电平脉冲和高电平脉冲的按钮开关。


 

8. 键盘

键盘(keyboard)是一种基于用户界面的输入设备。如果需要的按键数量有限,那么可以使用按钮开关,直接连接到端口管脚进行操作。但是,可能存在用户输入需要使用大量按键的情况(比如具有字母数字按键键盘的PDA器件,用于用户输入数据)。此时,由于处理器/控制器能够使用的通用端口管脚是有限的,因此可能无法将每个按键都连接到端口管脚上;此外,这也是对管脚资源的浪费。对于处理大量按键的需求而言,矩阵键盘是最优的选择——该技术极大地减少了接口连接的数量。比如,假设接口具有16个按键,此时直接连接技术需要使用16个端口管脚,而矩阵键盘技术只需要使用8个。采用矩阵键盘技术,16个按键排列成4行4列的矩阵。图2-24显示了矩阵键盘中按键的连接方式。


 

在矩阵键盘中,按键排列成矩阵的形式(也就是说,按键按照行和列的模式连接)。为了检测按键是否已经按下,键盘使用了扫描技术;其中,矩阵每行在电平拉低的时候,可以读出该行各列的按键状态。读出该行每列按键的状态信息之后,就将该行电平拉高;然后,拉低下一行的电平,继续读出每列的状态。上述过程将会一直重复,直到扫描完矩阵键盘中的所有行。当某行电平拉低的时候,如果连接到该行的某个按键已经按下,那么该按键连接的列将会输出逻辑0。由于按键是机械器件,因此有可能需要注意按键防跳的问题;也就是说,由于按键的机械抖动,用户单次按键可能会导致连续多次按键的效应。为了防止上述情况发生,应该使用正确的按键防跳技术。硬件按键防跳电路和软件按键防跳电路是目前常用的按键防跳技术。其中,软件按键防跳技术不需要使用额外的硬件,实现起来比较容易。在软件按键防跳技术中,当系统再次读取到已按键的状态信息时,该按键状态将会保持为已按下。在矩阵键盘中,每列都会连接相应的上拉电阻,用于限制流过按键所在行的电流。

9. 可编程外设接口

编程外设接口(Programmable Peripheral Interface,PPI)设备用于扩展处理器/控制器的I/O容量。大多数处理器/控制器提供的I/O端口和数据端口数量非常有限;然而在实际应用中,有时可能需要更多的I/O端口,这可能会超出处理器/控制器所支持的端口数量。可编程外设接口设备扩展了处理器/控制器的I/O端口数量。8255A就是一款常用的PPI设备,用于8位的处理器/控制器。8255A支持24个I/O管脚,这些I/O管脚可以组合成为三个8位并行端口(端口A、端口B和端口C),或者是两个8位并行端口(端口A和端口B)外加端口C。端口C可以有以下两种组成结构:

(1) 8个独立的I/O管脚

(2) 2个4位端口,即端口CUPPER(CU)和端口CLOWER(CL)

通过操作8255A控制寄存器,可以实现上述两种配置。该控制寄存器保存着端口A、端口B和端口C的配置参数。控制寄存器的位细节如下:

 

D7 D6 D5 D4 D3 D2 D1 D0

表2-8说明了8255A控制寄存器中各个位的含义和使用方法。

表2-8  8255A控制寄存器各个位的含义


说    明
D0 端口C低端(CL)的I/O模式选择器
D0=1:将CL设置为输入端口
D0=0:将CL设置为输出端口
D1 端口B的I/O模式选择器
D1=1:将端口B设置为输入端口
D1=0:将端口B设置为输出端口
D2 端口C低端与端口B的模式选择器
D2=0:模式0,端口B用作8位I/O端口,端口C低端用作4位端口
D2=1:模式1,握手模式。端口B使用端口C中的3个
位作为握手信号

                                                                                          (续表)  

 

说    明
D3 端口C高端(CU)的I/O模式选择器
D3=1:将CU设置为输入端口
D3=0:将CU设置为输出端口
D4 端口A的I/O模式选择器
D4=1:将端口A设置为输入端口
D4=0:将端口A设置为输出端口
D5, D6 端口C高端与端口A的模式选择器
D6 D5=00:模式0,简单I/O模式
D6 D5=01:模式1,握手模式。端口A使用端口C中的3
个位作为握手信号
D6D5=1X:模式2,X的取值可以是0或1。端口A用作
双向端口
D7 端口C的控制/数据模式选择器
D7=1:I/O模式
D7=0:位置位/复位(Bit Set/Reset,BSR)模式。用作端口A
和端口B的控制线/状态线。端口C的各个位可以
用作输出端口,进行置位或复位

请访问http://www.intersil.com/data/fn/fn2969.pdf,进一步参考8255A数据手册,了解关于8255不同操作模式的更多细节。

图2-25显示了8255A设备连接到8位处理器/控制器的常用连接图,该系统具有16位地址总线,低端地址总线通过多路复用器连接到数据总线上。


 

处理器/控制器可以对8255的各个端口进行配置,从而工作在所需的模式下。

您对本文章有什么意见或着疑问吗?请到论坛讨论您的关注和建议是我们前行的参考和动力  
上一篇:2.3.2 激励器
下一篇:2.4 通信接口
相关文章
图文推荐
排行
热门
最新书评
特别推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站