IO口结构详解
-
1.
什么就是源型、漏型?什么就是上拉电阻
?下拉电
阻?什么就是线驱动输出、集电极开路输出、推挽式
输
出?
我们先来说说集电极开路输出
得结构。
集电极开路输出得结构如图
1
所示,
右边得那个
三极管集电极什么都不接,所以叫做集电极开
路(左边得三极管为反相之用,使输入为
“0”
时,输出也为<
/p>
“0”
)。对于图
1
,当左端得输入为
“0”
时,前面得三极管截止(即集电极
c
跟
发射极
e
之间相当于断开),所以
5v
电源通过
1k
电阻加到右边得三极管上,右边得三极
管导通(即相当于一个开关闭合);当左端得输入为
“1”
时,前面得三极管导通,而后面得
三极管截止(相当于开关断开)。
我们将图
1
简化成图
2
得样子。图
2
中得开关
受软件控制,
“1”
时断开,
“0”<
/p>
时闭合。很明显
可以瞧出,当开关闭合时,输出直接接地,所以输
出电平为
0
。而当开关断开时,则输出端
悬空了,即高阻态。这时电平状态未知,如果后面一个电阻负载(即使很轻得负载)到地,
那么输出端得电平就被这个负载拉到低电平了,所以这个电路就是不能输出高电平得。
再瞧图三。图三中那个
1k
得电阻即就
是上拉电阻。如果开关闭合,则有电流从
1k
电
阻及开关上流过,但由于开关闭与时电阻为
0
(方便我
们得讨论,实际情况中开关电阻不为
0
,另外对于三极管还存在
饱与压降),所以在开关上得电压为
0
,即输出电平为
0
。如果
开关断开,则由于开关电阻为无穷大(
同上,不考虑实际中得漏电流),所以流过得电流为
0
,因此在
1k
电阻上得压降也为
0
,所以输出端得电压就就是
5v
了,这样就能输出高
电平
了。但就是这个输出得内阻就是比较大得(即
1kω
),如果接一个电阻为
r
得负载,通过分
p>
压计算,就可以算得最后得输出电压为
5*r/(r+1000)<
/p>
伏,即
5/(1+1000/r)
伏。所
以,如果
要达到一定得电压得话,
r
就
不能太小。如果
r
真得太小,而导致输出电压不够得话,那我<
/p>
们只有通过减小那个
1k
得上拉电阻来增
加驱动能力。但就是,上拉电阻又不能取得太小,
因为当开关闭合时,
< br>将产生电流,
由于开关能流过得电流就是有限得,
因此限
制了上拉电阻
得取值,
另外还需要考虑到,
当输出低电平时,
负载可能还会给提供一部分电流从开关流过,
因此要综合这些电流考虑来选择合适得上拉电阻。
如果我
们将一个读数据用得输入端接在输出端,
这样就就是一个
io<
/p>
口了
(
51
得<
/p>
io
口就就是
这样得结构,其中
p0
口内部不带上拉,而其它三个口带内部上拉),当我们要使用输入功
能时,只要将输出口设置为
1
即可,这
样就相当于那个开关断开,而对于
p0
口来说,就就
是高阻态了。
对于漏极开路(
< br>od
)输出,跟集电极开路输出就是十分类似得。将上面得三极管换成
场效应管即可。这样集电极就变成了漏极,
oc
就
变成了
od
,原理分析就是一样得。
另一种输出结构就是推挽输出。推挽输出得结构就就是把上面得上拉电阻也换成一个开关
,
当要输出高电平时,上面得开关通,下面得开关断;而要输出低电平时,则刚好相反。
比起
oc
或者
od
来说,这样得推挽结构高、低电平驱动能力都很强。如果两个输出不同电平得输
出口
接在一起得话,就会产生很大得电流,有可能将输出口烧坏。而上面说得
oc
或
od
输
出则不会有这样
得情况,
因为上拉电阻提供得电流比较小。
如果就是推挽输出得
要设置为高
阻态时,则两个开关必须同时断开(或者在输出口上使用一个传输门)
,这样可作为输入状
态,
avr
单片机得一些
io
口就就是这种结构。
2
、
AVR
单片机
IO
口得结构分析
AVR
得
IO
就是真正双向
IO
结构,
由于大部分网
友都就是从标准
51
转过来得,
受标准
51
得准双向
IO
与布尔操作概念影响,
没能掌握
AVR
得
IO
操作,
所以有必要撰文说明
一下,
其实采用真正双向
IO
结构得新
型
MCU
很多,常用得有增强型
51<
/p>
,
PIC,AVR
等。
< br>
先简单得回顾一下标准
51
得
准双向
IO
结构
这种准双向
IO
结构得特点就是:
1
、输出结构类似
OC
门,输出低电平时,内部<
/p>
NMOS
导通,驱动能力较强
(800u
A)
;
输出高电平靠内部上拉电阻,驱动能力弱
(60uA)
。
2
、永远有内部电阻上拉
(P0
口除外
)
,高电平输出电流能力很弱,所以即使
IO
p>
口长时
间短路到地也不会损坏
IO
口
(
同理,
IO
口低电平输出能力较强
,
< br>作低电平输出时不能长时间短路到
VCC)
3
、作输入时,因为
OC
门有
线与
特性
,
必须把
IO
口设为高电平
(
所以按键多为共地接
法
)
4
、作输
出时,输出低电平可以推动
LED(
也就是很弱得
)
,输出高电平通常需要外接缓
冲电路
(
所以
LED
多为共阳接法
)
5
、软件
模拟
OC
结构得总线反而比较方便
--
---
例如
IIC
总线
*P0
口比较特殊,做外部总线时,就是推挽输出,
做普通
IO
时没有内部上拉电阻,所
以
P0
口做按键输入需要外接上拉电阻。
*OC
门
:
三
极管得叫集电极开路,场效应管得叫漏极开路,简称开漏输出。具备
线与
能力
,
有
0
得
0
。
*
为什么设计成输出时高电平弱,低
电平强
----
就是考虑了当年流行得
TTL
器件输入特
性
相信我们大多数人都接触过
51
p>
单片机,
51
单片机得
I/O
口就是准双向
I/O
口。<
/p>
其实这
种说法就是不严谨得,
我们知道,
51
单片机有
4
个
I/O
口,
分别就是
P0
、
P1
、
P2
、
P3
,
这
4
个
I/O
口得结构并不完全一致,其中
P0
口就是标准得双向
I/O
口,而
P1
、
P2
、
P3
则就是准双向
I/O
口。
关于准双向
I/O
口与双向
< br>I/O
口得区别请瞧另一篇文章
“
准双向
I/O
口与标准双向
I/O<
/p>
口得区别
”
A
VR
单片机得
I/O
口就是标准得双向
I/O
口
,它得
IO
结构就就比
51
得
I/O
口复杂多
了,
单就是
控制端口得寄存器就有
3
个
PORT
x
(数据寄存器)
、
DDRx
(数据方向寄存器)
、
PINx
(端口输入引脚);另外还有一个
SFIOR(
特殊功
能
I/O
寄存器
)
,这个寄存器中得
PUD
位控制全部
I/O
口得上拉电阻就是允许还就是被禁止。
下图就是
AVR
单片机通用
I/O
口结构示意图:
从图中可以瞧
出,
每组
I/O
口配备三个
8
位寄存器,
它们分别就是数据方向寄存器
DDRx
,数据寄存器
PORTx
,与输入引脚寄存器
PINx
(
< br>x
表示端口序号)。
I/O
口得
工
作方式与表现特征由这
3
个
I/O
口寄存器控制。
数据方向寄存器
DDRx
用于控制
I/O
口得输入输出方向,
即控制
I/O
口得工作方式为输
出方式还就是输入方式。
当
DD
Rx=1
时,
I/O
口处于输出工作方
式。此时数据寄存器
PORTx
中得数据通过一个
推挽电路输出到外部引脚,
如下图。
AVR
得输出采用推挽电路提高了
I/O
口得输出能力
,
当
PORTx=1
时,
I/O
引脚呈现高电平,
同时可提供输出
20mA
得电流;
而当
P
ORTx=0
时,
I/O
引脚呈现低电
平,同时可吸纳
20mA
电流。因此,
AVR
得
I/O
在输出方式下提供了比
较大
得驱动能力,可以直接驱动
LED
等小功率外围器件。
当
DDRx=0
时,
I/O
处于输入工作方式。此时引脚寄存器
PINx
中得数据就就是外
部引
脚得实际电平,通过读
I/O
指令
可将物理引脚得真实数据读入
MCU
。此外,当
I/O
口定义
为输入时(
DD
Rx=0
)
,通过
PORTx
得控制,可使用或不使用内部得上拉电阻,如下图:
AVR
单片机通用
< br>I/O
端口得主要特点为:
双
向可独立位控得
I/O
口
ATmega16
得
PA
、
PB
、
PC
、
PD
四个端口都就是
8
位双向
I/O
口,每一位引脚都可以
单独得进行定义,相互不受影响。如用户可以在定义
PA
口第
0
、
2
、
3
、
4
、<
/p>
5
、
6
位用于输
入得同时定义第
1
、
< br>7
位用于输出,互不影响。
Push-Pull
大电流驱动
(
p>
最大
40mA)