热度 7
2013-12-24 19:19
3394 次阅读|
3 个评论
除了传统 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 容忍V DD )。就是说,外部对 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 就不具备 5 V容忍,在设计电路的时候就要多加注意。