一、 STM32串口通信基本原理

通信接口背景知识

设备之间通信的方式

    一般情况下,设备之间的通信方式可以分成并行通信和串行通信两种。并行与串行通信的区别如下表所示。

51c嵌入式~IO合集2_嵌入式

串行通信的分类

1、按照数据传送方向,分为:

  • 单工:数据传输只支持数据在一个方向上传输;
  • 半双工:允许数据在两个方向上传输。但是,在某一时刻,只允许数据在一个方向上传输,它实际上是一种切换方向的单工通信;它不需要独立的接收端和发送端,两者可以合并一起使用一个端口。
  • 全双工:允许数据同时在两个方向上传输。因此,全双工通信是两个单工通信方式的结合,需要独立的接收端和发送端。

51c嵌入式~IO合集2_嵌入式_02

2、按照通信方式,分为:

  • 同步通信:带时钟同步信号传输。比如:SPI,IIC通信接口。
  • 异步通信:不带时钟同步信号。比如:UART(通用异步收发器),单总线。

    在同步通讯中,收发设备上方会使用一根信号线传输信号,在时钟信号的驱动下双方进行协调,同步数据。例如,通讯中通常双方会统一规定在时钟信号的上升沿或者下降沿对数据线进行采样。

    在异步通讯中不使用时钟信号进行数据同步,它们直接在数据信号中穿插一些用于同步的信号位,或者将主题数据进行打包,以数据帧的格式传输数据。通讯中还需要双方规约好数据的传输速率(也就是波特率)等,以便更好地同步。常用的波特率有4800bps、9600bps、115200bps等。

    在同步通讯中,数据信号所传输的内容绝大部分是有效数据,而异步通讯中会则会包含数据帧的各种标识符,所以同步通讯效率高,但是同步通讯双方的时钟允许误差小,稍稍时钟出错就可能导致数据错乱,异步通讯双方的时钟允许误差较大。

常见的串行通信接口

51c嵌入式~IO合集2_嵌入式_03

STM32串口通信基础

    STM32的串口通信接口有两种,分别是:UART(通用异步收发器)、USART(通用同步异步收发器)。而对于大容量STM32F10x系列芯片,分别有3个USART和2个UART。

UART引脚连接方法

  • RXD:数据输入引脚,数据接受;
  • TXD:数据发送引脚,数据发送。

51c嵌入式~IO合集2_嵌入式_04

    对于两个芯片之间的连接,两个芯片GND共地,同时TXD和RXD交叉连接。这里的交叉连接的意思就是,芯片1的RxD连接芯片2的TXD,芯片2的RXD连接芯片1的TXD。这样,两个芯片之间就可以进行TTL电平通信了。STM32与51单片机串口通信相关实例,请移步此处: STM32与51单片机串口通信实例

51c嵌入式~IO合集2_嵌入式_05

    若是芯片与PC机(或上位机)相连,除了共地之外,就不能这样直接交叉连接了。尽管PC机和芯片都有TXD和RXD引脚,但是通常PC机(或上位机)通常使用的都是RS232接口(通常为DB9封装),因此不能直接交叉连接。RS232接口是9针(或引脚),通常是TxD和RxD经过电平转换得到的。故,要想使得芯片与PC机的RS232接口直接通信,需要也将芯片的输入输出端口也电平转换成RS232类型,再交叉连接。

    经过电平转换后,芯片串口和RS232的电平标准是不一样的:

  • 单片机的电平标准(TTL电平):+5V表示1,0V表示0;
  • RS232的电平标准:+15/+13 V表示0,-15/-13表示1。

    RS-232通讯协议标准串口的设备间通讯结构图如下: 

51c嵌入式~IO合集2_嵌入式_06

    所以单片机串口与PC串口通信就应该遵循下面的连接方式:在单片机串口与上位机给出的RS232口之间,通过电平转换电路(如下面图中的Max232芯片) 实现TTL电平与RS232电平之间的转换。STM32与PC之间通信实例,请移步此处: STM32实例-用按键控制串口发送数据,文末附代码

51c嵌入式~IO合集2_嵌入式_07

RS232串口简介

    台式机电脑后面的9针接口就是com口(串口) 在工业控制 数据采集上应用广泛上图中,最右边的是串口接口统称为RS232接口,是常见的DB9封装。

51c嵌入式~IO合集2_嵌入式_08

通信过程中只有两个脚参与通信。

  • 2脚:电脑的输入RXD
  • 3脚:电脑的输出TXD 通过2 ,3 脚就可以实现全双工(可同时收发)的串行异步 通信
  • 5脚:接地

单片机的P3口是有两个复用接口RXD 和TXD。这是单片机进行串行通信的收发口,连接应该错位的对应到电脑的TDX RDX上。注意:单片机和RS232的电平标准是不一样的。

单片机的电平标准 TTL电平 :+5V表示1 0V表示0。

RS232的电平标准 +15/+13 V表示1 -15/-13 表示0。

所以 单片机与电脑串口通信就应该遵循下面的连接方式:

在单片机与上位机给出的RS232口之间通过电平转换电路(最上面图中的Max232芯片) 实现TTL电平与RS232电平之间的转换,PC串口与单片机串口连接方式图:

51c嵌入式~IO合集2_嵌入式_09

注意这两个DB9:DB91是在电脑上的 DB92是在单片机实验板上焊接着的。

这里的交叉连接的意思是 DB91的RXD连着DB92的TXD。

DB92的RXD连着DB91的TXD这样交叉着连接,如果电脑没有RS232口 只有USB口,可以用串口转接线转出串口,如下图所示。

51c嵌入式~IO合集2_嵌入式_10

这个时候在电脑上位机上需要安装串口驱动程序。

注意,这个驱动程序驱动的是PL2303芯片(在上图的大头里面) 使得RS232信息转换成USB信息。

下图为上图的内部结构:

51c嵌入式~IO合集2_嵌入式_11

用串口通信比USB简单,因为串口通信没有协议,使用方便简单。

STM32的UART特点

  • 全双工异步通信;
  • 分数波特率发生器系统,提供精确的波特率。发送和接受共用的可编程波特率,最高可达4.5Mbits/s;
  • 可编程的数据字长度(8位或者9位);
  • 可配置的停止位(支持1或者2位停止位);
  • 可配置的使用DMA多缓冲器通信;
  • 单独的发送器和接收器使能位;
  • 检测标志:
    ① 接受缓冲器
    ②发送缓冲器空
    ③传输结束标志;
  • 多个带标志的中断源,触发中断;
  • 其他:校验控制,四个错误检测标志。

串口通信过程

51c嵌入式~IO合集2_嵌入式_12

STM32中UART参数

    串口通讯的数据包由发送设备通过自身的TXD接口传输到接收设备的RXD接口,通讯双方的数据包格式要规约一致才能正常收发数据。    

    STM32中串口异步通信需要定义的参数:起始位、数据位(8位或者9位)、奇偶校验位(第9位)、停止位(1,15,2位)、波特率设置。相关文章推荐: 学习STM32单片机,绕不开的串口

    UART串口通信的数据包以帧为单位,常用的帧结构为:1位起始位+8位数据位+1位奇偶校验位(可选)+1位停止位。如下图所示:

51c嵌入式~IO合集2_嵌入式_13

    奇偶校验位分为奇校验和偶校验两种,是一种简单的数据误码校验方法。奇校验是指每帧数据中,包括数据位和奇偶校验位的全部9个位中1的个数必须为奇数;偶校验是指每帧数据中,包括数据位和奇偶校验位的全部9个位中1的个数必须为偶数。

    校验方法除了奇校验(odd)、偶校验(even)之外,还可以有:0 校验(space)、1 校验(mark)以及无校验(noparity)。 0/1校验:不管有效数据中的内容是什么,校验位总为0或者1。

UART(USART)框图

51c嵌入式~IO合集2_嵌入式_14

    这个框图分成上、中、下三个部分。本文大概地讲述一下各个部分的内容,具体的可以看《STM32中文参考手册》中的描述。

    框图的上部分,数据从RX进入到接收移位寄存器,后进入到接收数据寄存器,最终供CPU或者DMA来进行读取;数据从CPU或者DMA传递过来,进入发送数据寄存器,后进入发送移位寄存器,最终通过TX发送出去。

    然而,UART的发送和接收都需要波特率来进行控制的,波特率是怎样控制的呢?

    这就到了框图的下部分,在接收移位寄存器、发送移位寄存器都还有一个进入的箭头,分别连接到接收器控制、发送器控制。而这两者连接的又是接收器时钟、发送器时钟。也就是说,异步通信尽管没有时钟同步信号,但是在串口内部,是提供了时钟信号来进行控制的。而接收器时钟和发送器时钟有是由什么控制的呢?

    可以看到,接收器时钟和发送器时钟又被连接到同一个控制单元,也就是说它们共用一个波特率发生器。同时也可以看到接收器时钟(发生器时钟)的计算方法、USRRTDIV的计算方法。 [付费]STM32嵌入式资料包



二、19个常用的5V转3.3V技巧

01 使用LDO稳压器

    标准三端线性稳压器的压差通常是 2.0-3.0V。要把 5V 可靠地转换为 3.3V,就不能使用它们。压差为几百个毫伏的低压降 (Low Dropout, LDO)稳压器,是此类应用的理想选择。图 1-1 是基本LDO 系统的框图,标注了相应的电流。

    从图中可以看出, LDO 由四个主要部分组成:

  • 导通晶体管
  • 带隙参考源
  • 运算放大器
  • 反馈电阻分压器

    在选择 LDO 时,重要的是要知道如何区分各种LDO。器件的静态电流、封装大小和型号是重要的器件参数。根据具体应用来确定各种参数,将会得到最优的设计。


51c嵌入式~IO合集2_嵌入式_15

    LDO的静态电流IQ是器件空载工作时器件的接地电流 IGND。IGND 是 LDO 用来进行稳压的电流。当IOUT>>IQ 时, LDO 的效率可用输出电压除以输入电压来近似地得到。然而,轻载时,必须将 IQ 计入效率计算中。具有较低 IQ 的 LDO 其轻载效率较高。轻载效率的提高对于 LDO 性能有负面影响。静态电流较高的 LDO 对于线路和负载的突然变化有更快的响应。

02 采用齐纳二极管的低成本方案

    这里详细说明了一个采用齐纳二极管的低成本稳压器方案。

51c嵌入式~IO合集2_嵌入式_16

    可以用齐纳二极管和电阻做成简单的低成本 3.3V稳压器,如图 2-1 所示。在很多应用中,该电路可以替代 LDO 稳压器并具成本效益。但是,这种稳压器对负载敏感的程度要高于 LDO 稳压器。另外,它的能效较低,因为 R1 和 D1 始终有功耗。R1 限制流入D1 和 PICmicro MCU的电流,从而使VDD 保持在允许范围内。由于流经齐纳二极管的电流变化时,二极管的反向电压也将发生改变,所以需要仔细考虑 R1 的值。

    R1 的选择依据是:在最大负载时——通常是在PICmicro MCU 运行且驱动其输出为高电平时——R1上的电压降要足够低从而使PICmicro MCU有足以维持工作所需的电压。同时,在最小负载时——通常是 PICmicro MCU 复位时——VDD 不超过齐纳二极管的额定功率,也不超过 PICmicro MCU的最大 VDD。

03 采用3个整流二极管的更低成本方案

    图 3-1 详细说明了一个采用 3 个整流二极管的更低成本稳压器方案。

51c嵌入式~IO合集2_嵌入式_17

    我们也可以把几个常规开关二极管串联起来,用其正向压降来降低进入的 PICmicro MCU 的电压。这甚至比齐纳二极管稳压器的成本还要低。这种设计的电流消耗通常要比使用齐纳二极管的电路低。

    所需二极管的数量根据所选用二极管的正向电压而变化。二极管 D1-D3 的电压降是流经这些二极管的电流的函数。连接 R1 是为了避免在负载最小时——通常是 PICmicro MCU 处于复位或休眠状态时——PICmicro MCU VDD 引脚上的电压超过PICmicro MCU 的最大 VDD 值。根据其他连接至VDD 的电路,可以提高R1 的阻值,甚至也可能完全不需要 R1。二极管 D1-D3 的选择依据是:在最大负载时——通常是 PICmicro MCU 运行且驱动其输出为高电平时——D1-D3 上的电压降要足够低从而能够满足 PICmicro MCU 的最低 VDD 要求。

04 使用开关稳压器

    如图 4-1 所示,降压开关稳压器是一种基于电感的转换器,用来把输入电压源降低至幅值较低的输出电压。输出稳压是通过控制 MOSFET Q1 的导通(ON)时间来实现的。由于 MOSFET 要么处于低阻状态,要么处于高阻状态(分别为 ON 和OFF),因此高输入源电压能够高效率地转换成较低的输出电压。

    当 Q1 在这两种状态期间时,通过平衡电感的电压- 时间,可以建立输入和输出电压之间的关系。

51c嵌入式~IO合集2_嵌入式_18

    对于 MOSFET Q1,有下式:

51c嵌入式~IO合集2_嵌入式_19

    在选择电感的值时,使电感的最大峰 - 峰纹波电流等于最大负载电流的百分之十的电感值,是个很好的初始选择。

51c嵌入式~IO合集2_嵌入式_20

    在选择输出电容值时,好的初值是:使 LC 滤波器特性阻抗等于负载电阻。这样在满载工作期间如果突然卸掉负载,电压过冲能处于可接受范围之内。

51c嵌入式~IO合集2_嵌入式_21

    在选择二极管 D1 时,应选择额定电流足够大的元件,使之能够承受脉冲周期 (IL)放电期间的电感电流。

51c嵌入式~IO合集2_嵌入式_22

    在连接两个工作电压不同的器件时,必须要知道其各自的输出、输入阈值。知道阈值之后,可根据应用的其他需求选择器件的连接方法。表 4-1 是本文档所使用的输出、输入阈值。在设计连接时,请务必参考制造商的数据手册以获得实际的阈值电平。

51c嵌入式~IO合集2_嵌入式_23

05 3.3V→5V直接连接

    将 3.3V 输出连接到 5V 输入最简单的方法是直接连接,但直接连接需要满足以下 2 点要求:

  • 3.3V输出的 VOH 大于 5V 输入的 VIH
  • 3.3V输出的 VOL 小于 5V 输入的 VIL

    能够使用这种方法的例子之一是将 3.3V LVCMOS输出连接到 5V TTL 输入。从表 4-1 中所给出的值可以清楚地看到上述要求均满足。

  • 3.3V LVCMOS 的 VOH (3.0V)大于5V TTL 的VIH (2.0V)
  • 3.3V LVCMOS 的 VOL (0.5V)小于 5V TTL 的VIL (0.8V)

    如果这两个要求得不到满足,连接两个部分时就需要额外的电路。可能的解决方案请参阅技巧 6、7、 8 和 13。

06 使用MOSFET转换器

    如果 5V 输入的 VIH 比 3.3V CMOS 器件的 VOH 要高,则驱动任何这样的 5V 输入就需要额外的电路。图 6-1 所示为低成本的双元件解决方案。

    在选择 R1 的阻值时,需要考虑两个参数,即:输入的开关速度和 R1 上的电流消耗。当把输入从 0切换到 1 时,需要计入因 R1 形成的 RC 时间常数而导致的输入上升时间、 5V 输入的输入容抗以及电路板上任何的杂散电容。输入开关速度可通过下式计算:

51c嵌入式~IO合集2_嵌入式_24

    由于输入容抗和电路板上的杂散电容是固定的,提高输入开关速度的惟一途径是降低 R1 的阻值。而降低 R1 阻值以获取更短的开关时间,却是以增大5V 输入为低电平时的电流消耗为代价的。通常,切换到 0 要比切换到 1 的速度快得多,因为 N 沟道 MOSFET 的导通电阻要远小于 R1。另外,在选择 N 沟道 FET 时,所选 FET 的VGS 应低于3.3V 输出的 VOH。

51c嵌入式~IO合集2_嵌入式_25

07 使用二极管补偿

    表 7-1 列出了 5V CMOS 的输入电压阈值、 3.3VLVTTL 和 LVCMOS 的输出驱动电压。

51c嵌入式~IO合集2_嵌入式_26

    从上表看出, 5V CMOS 输入的高、低输入电压阈值均比 3.3V 输出的阈值高约一伏。因此,即使来自 3.3V 系统的输出能够被补偿,留给噪声或元件容差的余地也很小或者没有。我们需要的是能够补偿输出并加大高低输出电压差的电路。

51c嵌入式~IO合集2_嵌入式_27

    输出电压规范确定后,就已经假定:高输出驱动的是输出和地之间的负载,而低输出驱动的是 3.3V和输出之间的负载。如果高电压阈值的负载实际上是在输出和 3.3V 之间的话,那么输出电压实际上要高得多,因为拉高输出的机制是负载电阻,而不是输出三极管。

    如果我们设计一个二极管补偿电路 (见图 7-1),二极管 D1 的正向电压 (典型值 0.7V)将会使输出低电压上升,在 5V CMOS 输入得到 1.1V 至1.2V 的低电压。它安全地处于 5V CMOS 输入的低输入电压阈值之下。输出高电压由上拉电阻和连至3.3V 电源的二极管 D2 确定。这使得输出高电压大约比 3.3V 电源高 0.7V,也就是 4.0 到 4.1V,很安全地在 5V CMOS 输入阈值 (3.5V)之上。

    注:为了使电路工作正常,上拉电阻必须显著小于 5V CMOS 输入的输入电阻,从而避免由于输入端电阻分压器效应而导致的输出电压下降。上拉电阻还必须足够大,从而确保加载在 3.3V 输出上的电流在器件规范之内。

08 使用电压比较器

    比较器的基本工作如下:

  • 反相 (-)输入电压大于同相 (+)输入电压时,比较器输出切换到 Vss。
  • 同相 (+)输入端电压大于反相 (-)输入电压时,比较器输出为高电平。

    为了保持 3.3V 输出的极性, 3.3V 输出必须连接到比较器的同相输入端。比较器的反相输入连接到由 R1 和 R2 确定的参考电压处,如图 8-1 所示。

51c嵌入式~IO合集2_嵌入式_28

    R1 和 R2 之比取决于输入信号的逻辑电平。对于3.3V 输出,反相电压应该置于VOL 与VOH之间的中点电压。对于 LVCMOS 输出,中点电压为:

51c嵌入式~IO合集2_嵌入式_29

    如果 R1 和 R2 的逻辑电平关系如下:

51c嵌入式~IO合集2_嵌入式_30

    若 R2 取值为 1K,则 R1 为 1.8K。

    经过适当连接后的运算放大器可以用作比较器,以将 3.3V 输入信号转换为 5V 输出信号。这是利用了比较器的特性,即:根据 “反相”输入与 “同相”输入之间的压差幅值,比较器迫使输出为高(VDD)或低 (Vss)电平。

    注:要使运算放大器在 5V 供电下正常工作,输出必须具有轨到轨驱动能力。

51c嵌入式~IO合集2_嵌入式_31

09 直接连接

    通常 5V 输出的 VOH 为 4.7 伏, VOL 为 0.4 伏;而通常 3.3V LVCMOS 输入的 VIH 为 0.7 x VDD, VIL为 0.2 x VDD。

    当 5V 输出驱动为低时,不会有问题,因为 0.4 伏的输出小于 0.8 伏的输入阈值。当 5V 输出为高时, 4.7 伏的 VOH 大于 2.1 伏 VIH,所以,我们可以直接把两个引脚相连,不会有冲突,前提是3.3V CMOS 输出能够耐受 5 伏电压。

51c嵌入式~IO合集2_嵌入式_32

    如果 3.3V CMOS 输入不能耐受 5 伏电压,则将出现问题,因为超出了输入的最大电压规范。

10 使用二极管钳位

    很多厂商都使用钳位二极管来保护器件的 I/O 引脚,防止引脚上的电压超过最大允许电压规范。钳位二极管使引脚上的电压不会低于 Vss 超过一个二极管压降,也不会高于 VDD 超过一个二极管压降。要使用钳位二极管来保护输入,仍然要关注流经钳位二极管的电流。流经钳位二极管的电流应该始终比较小 (在微安数量级上)。

    如果流经钳位二极管的电流过大,就存在部件闭锁的危险。由于5V 输出的源电阻通常在 10Ω 左右,因此仍需串联一个电阻,限制流经钳位二极管的电流,如图 10-1所示。使用串联电阻的后果是降低了输入开关的速度,因为引脚 (CL)上构成了 RC 时间常数。

51c嵌入式~IO合集2_嵌入式_33

    如果没有钳位二极管,可以在电流中添加一个外部二极管,如图 10-2 所示。

51c嵌入式~IO合集2_嵌入式_34

11 5V→3.3V有源钳位

    使用二极管钳位有一个问题,即它将向 3.3V 电源注入电流。在具有高电流 5V 输出且轻载 3.3V 电源轨的设计中,这种电流注入可能会使 3.3V 电源电压超过 3.3V。

    为了避免这个问题,可以用一个三极管来替代,三极管使过量的输出驱动电流流向地,而不是 3.3V 电源。设计的电路如图 11-1 所示。

51c嵌入式~IO合集2_嵌入式_35

    Q1的基极-发射极结所起的作用与二极管钳位电路中的二极管相同。区别在于,发射极电流只有百分之几流出基极进入 3.3V 轨,绝大部分电流都流向集电极,再从集电极无害地流入地。基极电流与集电极电流之比,由晶体管的电流增益决定,通常为10-400,取决于所使用的晶体管。

12 电阻分压器

    可以使用简单的电阻分压器将 5V 器件的输出降低到适用于 3.3V 器件输入的电平。这种接口的等效电路如图 12-1 所示。

51c嵌入式~IO合集2_嵌入式_36

    通常,源电阻 RS 非常小 (小于 10Ω),如果选择的 R1 远大于RS 的话,那么可以忽略 RS 对 R1 的影响。在接收端,负载电阻 RL 非常大 (大于500 kΩ),如果选择的R2远小于RL的话,那么可以忽略 RL 对 R2 的影响。

    在功耗和瞬态时间之间存在取舍权衡。为了使接口电流的功耗需求最小,串联电阻 R1 和 R2 应尽可能大。但是,负载电容 (由杂散电容 CS 和 3.3V 器件的输入电容 CL 合成)可能会对输入信号的上升和下降时间产生不利影响。如果 R1 和 R2 过大,上升和下降时间可能会过长而无法接受。

    如果忽略 RS 和 RL 的影响,则确定 R1 和 R2 的式子由下面的公式 12-1 给出。

51c嵌入式~IO合集2_嵌入式_37

    公式 12-2 给出了确定上升和下降时间的公式。为便于电路分析,使用戴维宁等效计算来确定外加电压 VA 和串联电阻R。戴维宁等效计算定义为开路电压除以短路电流。根据公式 12-2 所施加的限制,对于图 12-1 所示电路,确定的戴维宁等效电阻 R 应为 0.66*R1,戴维宁等效电压 VA 应为0.66*VS。

51c嵌入式~IO合集2_嵌入式_38

    例如,假设有下列条件存在:

  • 杂散电容 = 30 pF
  • 负载电容 = 5 pF
  • 从 0.3V 至 3V 的最大上升时间 ≤ 1 μs
  • 外加源电压 Vs = 5V

    确定最大电阻的计算如公式 12-3 所示。

51c嵌入式~IO合集2_嵌入式_39

13 电平转换器

    尽管电平转换可以分立地进行,但通常使用集成解决方案较受欢迎。电平转换器的使用范围比较广泛:有单向和双向配置、不同的电压转换和不同的速度,供用户选择最佳的解决方案。

    器件之间的板级通讯 (例如, MCU 至外设)通过 SPI 或 I2C™ 来进行,这是最常见的。对于SPI,使用单向电平转换器比较合适;对于 I2C,就需要使用双向解决方案。下面的图 13-1 显示了这两种解决方案。

51c嵌入式~IO合集2_嵌入式_40

    3.3V 至 5V 接口的最后一项挑战是如何转换模拟信号,使之跨越电源障碍。低电平信号可能不需要外部电路,但在 3.3V 与 5V 之间传送信号的系统则会受到电源变化的影响。例如,在 3.3V 系统中,ADC转换1V峰值的模拟信号,其分辨率要比5V系统中 ADC 转换的高,这是因为在 3.3V ADC 中,ADC 量程中更多的部分用于转换。但另一方面,3.3V 系统中相对较高的信号幅值,与系统较低的共模电压限制可能会发生冲突。

    因此,为了补偿上述差异,可能需要某种接口电路。本节将讨论接口电路,以帮助缓和信号在不同电源之间转换的问题。

14 模拟增益模块

    从 3.3V 电源连接至 5V 时,需要提升模拟电压。33 kΩ 和 17kΩ 电阻设定了运放的增益,从而在两端均使用满量程。11 kΩ 电阻限制了流回 3.3V 电路的电流。

51c嵌入式~IO合集2_嵌入式_41

15 模拟补偿模块

    该模块用于补偿 3.3V 转换到 5V 的模拟电压。下面是将 3.3V 电源供电的模拟电压转换为由 5V电源供电。右上方的 147 kΩ、 30.1 kΩ 电阻以及+5V 电源,等效于串联了 25 kΩ 电阻的 0.85V 电压源。

    这个等效的 25 kΩ 电阻、三个 25 kΩ 电阻以及运放构成了增益为 1 V/V 的差动放大器。0.85V等效电压源将出现在输入端的任何信号向上平移相同的幅度;以 3.3V/2 = 1.65V 为中心的信号将同时以 5.0V/2 = 2.50V 为中心。左上方的电阻限制了来自 5V 电路的电流。

51c嵌入式~IO合集2_嵌入式_42

16 有源模拟衰减器

    此技巧使用运算放大器衰减从 5V 至 3.3V 系统的信号幅值。关于运放的文章,移步此处: 看懂运算放大器原理

    要将 5V 模拟信号转换为 3.3V 模拟信号,最简单的方法是使用 R1:R2 比值为 1.7:3.3 的电阻分压器。

    然而,这种方法存在一些问题:

  • 1)衰减器可能会接至容性负载,构成不期望得到的低通滤波器。
  • 2)衰减器电路可能需要从高阻抗源驱动低阻抗负载。

    无论是哪种情形,都需要运算放大器用以缓冲信号。所需的运放电路是单位增益跟随器 (见图 16-1)。

51c嵌入式~IO合集2_嵌入式_43

    电路输出电压与加在输入的电压相同。

    为了把 5V 信号转换为较低的 3V 信号,我们只要加上电阻衰减器即可。

51c嵌入式~IO合集2_嵌入式_44

    如果电阻分压器位于单位增益跟随器之前,那么将为 3.3V 电路提供最低的阻抗。此外,运放可以从3.3V 供电,这将节省一些功耗。如果选择的 X 非常大的话, 5V 侧的功耗可以最大限度地减小。

    如果衰减器位于单位增益跟随器之后,那么对 5V源而言就有最高的阻抗。运放必须从 5V 供电,3V 侧的阻抗将取决于 R1||R2 的值。

17 模拟限幅器

    在将 5V 信号传送给 3.3V 系统时,有时可以将衰减用作增益。如果期望的信号小于 5V,那么把信号直接送入 3.3V ADC 将产生较大的转换值。当信号接近 5V 时就会出现危险。所以,需要控制电压越限的方法,同时不影响正常范围中的电压。

    这里将讨论三种实现方法:

  • 使用二极管,钳位过电压至 3.3V 供电系统。

  • 使用齐纳二极管,把电压钳位至任何期望的电压限。

  • 使用带二极管的运算放大器,进行精确钳位。

    进行过电压钳位的最简单的方法,与将 5V 数字信号连接至 3.3V 数字信号的简单方法完全相同。使用电阻和二极管,使过量电流流入 3.3V 电源。选用的电阻值必须能够保护二极管和 3.3V 电源,同时还不会对模拟性能造成负面影响。相关推荐: 如何用二极管实现不同电压的输出?如果 3.3V 电源的阻抗太低,那么这种类型的钳位可能致使3.3V 电源电压上升。即使 3.3V 电源有很好的低阻抗,当二极管导通时,以及在频率足够高的情况下,当二极管没有导通时 (由于有跨越二极管的寄生电容),此类钳位都将使输入信号向 3.3V 电源施加噪声。

51c嵌入式~IO合集2_嵌入式_45

    为了防止输入信号对电源造成影响,或者为了使输入应对较大的瞬态电流时更为从容,对前述方法稍加变化,改用齐纳二极管。齐纳二极管的速度通常要比第一个电路中所使用的快速信号二极管慢。不过,齐纳钳位一般来说更为结实,钳位时不依赖于电源的特性参数。钳位的大小取决于流经二极管的电流。这由 R1 的值决定。如果 VIN 源的输出阻抗足够大的话,也可不需要 R1。

51c嵌入式~IO合集2_嵌入式_46

    如果需要不依赖于电源的更为精确的过电压钳位,可以使用运放来得到精密二极管。电路如图 17-3所示。运放补偿了二极管的正向压降,使得电压正好被钳位在运放的同相输入端电源电压上。如果运放是轨到轨的话,可以用 3.3V 供电。

51c嵌入式~IO合集2_嵌入式_47

    由于钳位是通过运放来进行的,不会影响到电源。

    运放不能改善低电压电路中出现的阻抗,阻抗仍为R1 加上源电路阻抗。

18 驱动双极型晶体管

    在驱动双极型晶体管时,基极 “驱动”电流和正向电流增益 (Β/hFE)将决定晶体管将吸纳多少电流。如果晶体管被单片机 I/O 端口驱动,使用端口电压和端口电流上限 (典型值 20 mA)来计算基极驱动电流。如果使用的是 3.3V 技术,应改用阻值较小的基极电流限流电阻,以确保有足够的基极驱动电流使晶体管饱和。

51c嵌入式~IO合集2_嵌入式_48

    RBASE的值取决于单片机电源电压。公式18-1 说明了如何计算 RBASE。

51c嵌入式~IO合集2_嵌入式_49

    如果将双极型晶体管用作开关,开启或关闭由单片机 I/O 端口引脚控制的负载,应使用最小的 hFE规范和裕度,以确保器件完全饱和。

51c嵌入式~IO合集2_嵌入式_50

▶ 3V 技术示例:

51c嵌入式~IO合集2_嵌入式_51

▶ 5V技术示例:

51c嵌入式~IO合集2_嵌入式_52

    对于这两个示例,提高基极电流留出裕度是不错的做法。将 1mA 的基极电流驱动至 2 mA 能确保饱和,但代价是提高了输入功耗。

19 驱动N沟道MOSFET晶体管

    在选择与 3.3V 单片机配合使用的外部 N 沟道MOSFET 时,一定要小心。MOSFET 栅极阈值电压表明了器件完全饱和的能力。相关推荐: MOS管驱动电路设计细节

    对于 3.3V 应用,所选 MOSFET 的额定导通电阻应针对 3V 或更小的栅极驱动电压。例如,对于具有 3.3V 驱动的100 mA负载,额定漏极电流为250 μA的FET在栅极 - 源极施加 1V 电压时,不一定能提供满意的结果。在从 5V 转换到 3V 技术时,应仔细检查栅极- 源极阈值和导通电阻特性参数,如图 19-1所示。稍微减少栅极驱动电压,可以显著减小漏电流。

51c嵌入式~IO合集2_嵌入式_53

    对于 MOSFET,低阈值器件较为常见,其漏-源电压额定值低于 30V。漏-源额定电压大于 30V的 MOSFET,通常具有更高的阈值电压 (VT)。

51c嵌入式~IO合集2_嵌入式_54

    如表 19-1 所示,此 30V N 沟道 MOSFET 开关的阈值电压是 0.6V。栅极施加 2.8V 的电压时,此MOSFET 的额定电阻是 35 mΩ,因此,它非常适用于 3.3V 应用。

51c嵌入式~IO合集2_嵌入式_55

    对于 IRF7201 数据手册中的规范,栅极阈值电压最小值规定为 1.0V。这并不意味着器件可以用来在1.0V 栅 - 源电压时开关电流,因为对于低于 4.5V 的VGS (th),没有说明规范。对于需要低开关电阻的 3.3V 驱动的应用,不建议使用 IRF7201,但它可以用于 5V 驱动应用。嵌入式设备 开发板商城 whaosoft aiot 天皓智联 中找测试设备