草庐IT

结合实际聊聊电平转换电路(常用电平转换电路总结)

矜辰所致 2023-04-03 原文
电路小课堂,总结一下常用的电平转换电路。

目录

前言

电路小课堂时间到,今天我们要聊的是 电平转换电路

那么什么是电平转换?为什么需要电平转换?

简单说明一下,在我们设计的电路中,不同芯片的引脚使用的电压不同,比如常见的1.8V、3.3V、5V等,在两种不同电压芯片引脚之间进行通讯时候,我们需要使得两边的电平都符合自身的需求且能够进行正常的通讯,这就叫电平转换。

因为不同电压芯片之间的通讯存在电平不匹配的问题,同时如果通讯的两端压差过大也可能会损坏芯片引脚,所以我们需要进行电平转换。

一般来说,我们进行电平转换,主要考虑的有信号传输的速度以及信号的方向问题。

本文根据博主实际项目经验,总结一些我们常用的电平转换电路。

一、二极管电平转换电路

二极管电平转换电路,其实我自己并不常用,只是以前测试使用过:

使用此电路需要注意转换的方向,高电压端和低电压端不可调换。

电路分析

当输入端 3.3V_IN 为低电平时,D1导通,输出端 1.8V_OUT 为低电平,实现两端都为低电平。

当输入端 3.3V_IN 为高电平时,D1截止,输出端 被 R1 上拉至 1.8V ,为高电平,实现两端都为高电平。

❤️ 因为确实没有实际产品用过,所以不太好评价 = =!。

二、三极管电平转换电路

三极管实现电平转换,有点类似二极管,一样需要注意方向。

2.1 电路一

第一种电路如下:

此例子为博主使用过的4G模块与 STM32 通讯使用过的电路。

上图中上面部分三极管基区的电压 VDD_EXT 没用错,以上图为例,这个基区电压给 VDD_MCU 或者 VDD_EXT 都是可以的。
但是下面部分的电路三极管基区的电压必须是 VDD_EXT 。

电路分析

当输入端为 低电平 0V的时候,三极管导通,输出端 与输入端导通,输出端被拉低到接近0V,实现两端都为低电平。

当输入端为 高电平的时候,三极管截止, 输出端 靠着上拉电阻(上图中的 R17、R19),变成高电平,实现两端都被高电平。

2.2 电路二

三极管电平转换电路第二种方式:

此例子为博主使用过的信号采集电路,外接的信号最高电压为1.8V,为了保证STM32能够稳定的接收到,使用此电路将外接的信号转化为稳定的高低电平。

电路分析

当输入 S_IN 为低电平时,三极管 Q1关断,三极管 Q2 基极为高电平,导致 Q2 导通,输出端 S_OUT被拉低,实现两端都为低电平。

当输入 S_IN 为高电平 (VDD_EXT) 时,三极管 Q1 导通,三极管Q2关断,输出端 S_OUT 被 R4 拉高到 VDD_MCU,实现两端都为高电平。

❤️ 三极管电平转换电路,便宜实用,但是只能单向转化。
而且不适用于波特率过高的应用(大概大于 400Kbps 就不建议用了)。

三、MOS管电平转换电路

讲过二极管,三极管,最后还是有MOS管,不得不说MOS在当下的应用之广泛,而且下面这个电平转换,是博主用得最多的,MOS管双向电平转换电路:

此例子为博主使用过的1.8V单片机与 传感器 I2C 通讯电路。

注意事项:

1、该电路只能用于收发双方都是开集(Open Collector, OC)或开漏(Open Drain, OD)结构输出的双向信号线。比如常见的I2C通讯。

2、VCC_S1 <= VCC_S2

3、MOS管导通电压门限(Vth(GS)里面的最大值)需要小于低电源电压。

电路分析

我们使用上图来简单分一下电路:

从左向右看

当 S1A 为高电平 (VCC_S1) 时候,MOS管 VGS = 0, NM1 不导通,S2A 处电平被 R11 上拉为高电平(VCC_S2),S2A也为高电平。两端都为高电平。
当 S1A 为低电平 时候,MOS管 VGS = VCC_S1, NM1 导通,S2A 的电平与 S1A相等,为低电平。两端都为低电平。

从右向左看

这里说明一下开漏输出,由于有上拉电阻,所以没有外部影响的正常情况下,S1A 和 S2A 默认都会是高电平。

当 S2A 为高电平 (VCC_S2) 时候:

假设左侧 S1A 为高电平(因为是开漏输出,所以左侧一般来说被 R10 上拉至高电平 (VCC_S1),除非线上有低电平拉低,这里我们仍然分两种情况讨论),MOS管 VGS = 0, NM1 不导通,左侧依然被R10 上拉至高电平 (VCC_S1)。两端都为高电平。
假设左侧 S1A 为低电平(正常不会发生,原因就是开漏输出),MOS管 VGS = VCC_S1, NM1 导通,S2A 为高电平,所以会导致 S1A 电压上升,等 S1A 上升到 VCC_S1 的时候,NM1 截止,两端都变成高电平(除非开始使得 S1A 为低电平的外界因数一直存在,这是外部的问题不做过多讨论)。

当 S2A 为低电平时候:

正常情况下左侧 S1A 为高电平(VCC_S1),MOS管 VGS = 0, NM1 不导通,但是由于 MOS 管的寄生二极管,会把 S1A 下拉至低电平(这个低电平不是0V,是比 S2A 高一个二极管压降,比如 0.7V),那么VGS =(VCC_S1 - 0.7V),使得 NM1导通,导通以后,那么 S1A 和 S1B 基本相等,两端都为低电平。

如果 S1A 开始就为低电平(正常不会发生),MOS管 VGS = VCC_S1, NM1 导通,S2A 的电平与 S1A相等,为低电平。两端都为低电平。

❤️ 最经典的电平转换电路,双向电平转换。常用于 I2C通讯。
不能用于推挽输出的IO口,MOS管的选型需要注意 VGS(th)(开启电压) 要小于通讯两端的需要的电源电压。

四、电平转换芯片

电平转换芯片在我一般项目中用得倒不是很多,一般的项目应用上面的MOS管电路已经可以满足需求。但是在一些高速通讯的场合,就需要用到专用的电平转换芯片。
芯片有很多种,单向电平转换、带方向控制的双向电平转换、自动双向电平转换等,一般来说都用上芯片了,肯定会选择自动双向电平转换芯片,然后一些参数在芯片手册都会比较详细的给出,比如 TI 的 TXS0108EPWR:

用法也是比较简单的:

❤️ 成本相对前面较高,但是速度快,双向并且能够自动检测方向,高速低速场合都适用。
如果对成本不敏感,电平转换芯片是最稳定可靠的方式。

结语

本文把单片机系统中常用的电平转换电路总结了一遍,同时对于他们的应用场合也给出了例子。

总的来说,本文还是比较简单!当然,博主的电路小课堂就是要把我们平时常用的一些电路做好总结分析,以便于自己和小伙伴们能够在需要的时候找到自己合适的电路。

推荐阅读:

全面认识MOS管,一篇文章就够了

聊聊电源自动切换电路(常用自动切换电路总结)

结合实际聊聊防反接电路(防反接电路总结)

分享一款实用的太阳能充电电路(室内光照可用)

聊聊实际使用的电源转化电路,分享一些不同场合下的转3.3V电路

有关结合实际聊聊电平转换电路(常用电平转换电路总结)的更多相关文章

  1. ruby-on-rails - 在 Rails 中将文件大小字符串转换为等效千字节 - 2

    我的目标是转换表单输入,例如“100兆字节”或“1GB”,并将其转换为我可以存储在数据库中的文件大小(以千字节为单位)。目前,我有这个:defquota_convert@regex=/([0-9]+)(.*)s/@sizes=%w{kilobytemegabytegigabyte}m=self.quota.match(@regex)if@sizes.include?m[2]eval("self.quota=#{m[1]}.#{m[2]}")endend这有效,但前提是输入是倍数(“gigabytes”,而不是“gigabyte”)并且由于使用了eval看起来疯狂不安全。所以,功能正常,

  2. ruby-on-rails - 如何验证 update_all 是否实际在 Rails 中更新 - 2

    给定这段代码defcreate@upgrades=User.update_all(["role=?","upgraded"],:id=>params[:upgrade])redirect_toadmin_upgrades_path,:notice=>"Successfullyupgradeduser."end我如何在该操作中实际验证它们是否已保存或未重定向到适当的页面和消息? 最佳答案 在Rails3中,update_all不返回任何有意义的信息,除了已更新的记录数(这可能取决于您的DBMS是否返回该信息)。http://ar.ru

  3. ruby-on-rails - 结合 meta_search 与 acts_as_taggable_on - 2

    我在开发的Rails3网站的一些搜索功能上遇到了一个小问题。我有一个简单的Post模型,如下所示:classPost我正在使用acts_as_taggable_on来更轻松地向我的帖子添加标签。当我有一个标记为“rails”的帖子并执行以下操作时,一切正常:@posts=Post.tagged_with("rails")问题是,我还想搜索帖子的标题。当我有一篇标题为“Helloworld”并标记为“rails”的帖子时,我希望能够通过搜索“hello”或“rails”来找到这篇帖子。因此,我希望标题列的LIKE语句与acts_as_taggable_on提供的tagged_with方法

  4. ruby - 使用 ruby​​ 将 HTML 转换为纯文本并维护结构/格式 - 2

    我想将html转换为纯文本。不过,我不想只删除标签,我想智能地保留尽可能多的格式。为插入换行符标签,检测段落并格式化它们等。输入非常简单,通常是格式良好的html(不是整个文档,只是一堆内容,通常没有anchor或图像)。我可以将几个正则表达式放在一起,让我达到80%,但我认为可能有一些现有的解决方案更智能。 最佳答案 首先,不要尝试为此使用正则表达式。很有可能你会想出一个脆弱/脆弱的解决方案,它会随着HTML的变化而崩溃,或者很难管理和维护。您可以使用Nokogiri快速解析HTML并提取文本:require'nokogiri'h

  5. ruby - 将数组的内容转换为 int - 2

    我需要读入一个包含数字列表的文件。此代码读取文件并将其放入二维数组中。现在我需要获取数组中所有数字的平均值,但我需要将数组的内容更改为int。有什么想法可以将to_i方法放在哪里吗?ClassTerraindefinitializefile_name@input=IO.readlines(file_name)#readinfile@size=@input[0].to_i@land=[@size]x=1whilex 最佳答案 只需将数组映射为整数:@land边注如果你想得到一条线的平均值,你可以这样做:values=@input[x]

  6. ruby - 将散列转换为嵌套散列 - 2

    这道题是thisquestion的逆题.给定一个散列,每个键都有一个数组,例如{[:a,:b,:c]=>1,[:a,:b,:d]=>2,[:a,:e]=>3,[:f]=>4,}将其转换为嵌套哈希的最佳方法是什么{:a=>{:b=>{:c=>1,:d=>2},:e=>3,},:f=>4,} 最佳答案 这是一个迭代的解决方案,递归的解决方案留给读者作为练习:defconvert(h={})ret={}h.eachdo|k,v|node=retk[0..-2].each{|x|node[x]||={};node=node[x]}node[

  7. ruby-on-rails - Ruby url 到 html 链接转换 - 2

    我正在使用Rails构建一个简单的聊天应用程序。当用户输入url时,我希望将其输出为html链接(即“url”)。我想知道在Ruby中是否有任何库或众所周知的方法可以做到这一点。如果没有,我有一些不错的正则表达式示例代码可以使用... 最佳答案 查看auto_linkRails提供的辅助方法。这会将所有URL和电子邮件地址变成可点击的链接(htmlanchor标记)。这是文档中的代码示例。auto_link("Gotohttp://www.rubyonrails.organdsayhellotodavid@loudthinking.

  8. ruby-on-rails - 使用 ruby​​ 将多个实例变量转换为散列的更好方法? - 2

    我收到格式为的回复#我需要将其转换为哈希值(针对活跃商家)。目前我正在遍历变量并执行此操作:response.instance_variables.eachdo|r|my_hash.merge!(r.to_s.delete("@").intern=>response.instance_eval(r.to_s.delete("@")))end这有效,它将生成{:first="charlie",:last=>"kelly"},但它似乎有点hacky和不稳定。有更好的方法吗?编辑:我刚刚意识到我可以使用instance_variable_get作为该等式的第二部分,但这仍然是主要问题。

  9. LC滤波器设计学习笔记(一)滤波电路入门 - 2

    目录前言滤波电路科普主要分类实际情况单位的概念常用评价参数函数型滤波器简单分析滤波电路构成低通滤波器RC低通滤波器RL低通滤波器高通滤波器RC高通滤波器RL高通滤波器部分摘自《LC滤波器设计与制作》,侵权删。前言最近需要学习放大电路和滤波电路,但是由于只在之前做音乐频谱分析仪的时候简单了解过一点点运放,所以也是相当从零开始学习了。滤波电路科普主要分类滤波器:主要是从不同频率的成分中提取出特定频率的信号。有源滤波器:由RC元件与运算放大器组成的滤波器。可滤除某一次或多次谐波,最普通易于采用的无源滤波器结构是将电感与电容串联,可对主要次谐波(3、5、7)构成低阻抗旁路。无源滤波器:无源滤波器,又称

  10. SPI接收数据异常问题总结 - 2

    SPI接收数据左移一位问题目录SPI接收数据左移一位问题一、问题描述二、问题分析三、探究原理四、经验总结最近在工作在学习调试SPI的过程中遇到一个问题——接收数据整体向左移了一位(1bit)。SPI数据收发是数据交换,因此接收数据时从第二个字节开始才是有效数据,也就是数据整体向右移一个字节(1byte)。请教前辈之后也没有得到解决,通过在网上查阅前人经验终于解决问题,所以写一个避坑经验总结。实际背景:MCU与一款芯片使用spi通信,MCU作为主机,芯片作为从机。这款芯片采用的是它规定的六线SPI,多了两根线:RDY和INT,这样从机就可以主动请求主机给主机发送数据了。一、问题描述根据从机芯片手

随机推荐