除了传统51单片机之外,一般的MCU都有较强的IO功能,可以设置为几种常见的配置方式:推挽输出、OD输出、浮空输入、上下拉输入等。有时候,我们需要把IO设置为OD输出方式,写“0”时由下拉管主动把电压拉低,写“1”时由外部上拉至特定的电压水平。OD门可用于实现信号的相与,或者直接驱动较高电压等级的电路。
然而,为了实现对IO口的保护,MCU厂家一般都会为每一个IO口对地VSS和电源VDD都并接反向二极管,可作为ESD保护。这样一来,所谓的OD门输出模式,其实是“假”的OD门。
以STM32为例(图1),当IO设置为OD门时,只有下拉管N-MOS工作。向输出寄存器写0,N-MOS管导通,输出低电平;向输出寄存器写1,N-MOS管截止,输出为高阻。在图中我们可以看到,管脚的末端被两个反向二极管并接到VSS和VDD或者VDD_FT(5V容忍VDD)。就是说,外部对IO引脚的上拉电压无法超过VDD或者5V(忽略二极管压降),它们并不是严格意义上的OD门。
图1
图2
看图2,意图是用STM32(供电3.3V)的IO口PB9驱动一个三极管,用12V驱动一个负载,PB9设置为OD输出方式,根据OD门的特性,好像这个电路是可以工作。由以上的分析得知,这个电路是有问题的,当往PB9输出寄存器写1时,IO口的电压被上拉至5V(或5+0.7V),三极管还是导通,无法完成关断操作。
图3
相比于图2,图3这个电路却可以正常工作。首先,驱动负载的电压变成了5V,查阅STM32的数据表得知,PB9这个引脚具有5V容忍能力,看图4,I/O Level一栏有“FT”标记的IO口,都具有5V容忍能力。当这样的IO口设置为OD门时,是可以驱动5V水平的电路的。
图4
要注意的是,STM32只是有一部分的IO口具备5V容忍能力,图4中PB5就不具备5V容忍,在设计电路的时候就要多加注意。
残弈悟恩 2014-4-2 22:01
用户224096 2014-1-17 23:17
用户440820 2014-1-15 11:12