草庐IT

CMOS传输门

知乎衣带渐宽终不悔 2023-04-22 原文

一、什么是CMOS传输门

将MOS管的源极和衬底之间的连线断开,这样MOS管的源极和漏极就能互换使用,利用PMOS管和NMOS管的互补特性,将这俩个异性MOS管对称排列起来,PMOS管的衬底接入高电平,NMOS管的衬底接入0V压降,将俩个MOS管的栅极作为控制端,分别接入一对互为反相的控制信号C与C非,这样通过控制栅极与衬底之间的电位差,就可以控制导电沟道的阻值。

将俩个MOS管的源极直接相连做为输入端子,漏极连接在一起做为输出端子,由于这种MOS管的漏极和源极完全可以互换使用,因而这种电路的输入端与输出端也可以互换,这就是具有信号传输双向特性的CMOS传输门,简称TG门

二、CMOS传输门的工作原理

当C端接入低电平,C非端接入高电平的时候

俩个MOS管栅极与衬底之间的压差为0V压降,因而没有导电沟道产生,NMOS管和PMOS管此时都处于截止状态,传输门的输入与输出端之间呈现高阻态,传输门截止

,当C端接入高电平,C非端接入低电平的时候

NMOS管的栅极与衬底之间的压差高于3V的开启压降,而PMOS管的栅极与衬底之间的压差低于-3V的开启压降,所以俩个MOS管都有导电沟道产生

当输入电压是在0~7V的时候,NMOS管的栅极与源极之间的电位差大于3V开启压降,因此电子型导电沟道不会出现夹断,NMOS管导通

当输入电压是在3~10V的时候,PMOS管的栅极与源极之间的电位差低于-3V开启压降,空穴型导电沟道不会出现夹断,PMOS管导通

由此可知,当输入电压在0~10V变化时,总有一个MOS管会处于导通状态,电路的输入和输出之间呈现低阻状态,传输门相当于导通

CMOS传输门不仅可以传递数字信号,还可以传输连续变化的模拟信号,在工程应用中,一般要求传输端输出门的对地负载阻值要远远大于传输门的导通电阻,这是因为传输门输出的电压,实际上是导通电阻和负载电阻对输入信号的分压值

三、CMOS传输门的开关功能

利用CMOS反相器为传输门的控制端提供一对互补的控制信号,这种电路结构实现了可控单刀单掷开关的功能,因而被称为双向模拟开关,图中符号EN端子称为模拟开关的控制端,当使能端接入高电平的时候,控制开关闭合,使能端接入低电平信号的时候,控制开关处于断开的状态。

四、集成模拟开关

CC4066是集成模拟开关,内部集成了四个独立的可控双向开关,在供电电源VDD=15V的条件下,开关的导通电阻很小,小于240欧姆

CC4051是集成的八路模拟开关,其内部可以等效为,由数字信号控制的单刀多掷的开关电路,具有低导通阻抗以及极低的截止漏电流

集成芯片由三个二进制端子A、B、C组成以及一个禁止输入端,禁止端的控制级别最高,当禁止端接入高电平的时候,所有的通道都处于截止状态,当禁止端接入低电平的时候,开关的状态才会收到A,B,C三个二进制数码的控制,三个二进制数码对应八个最小项,每个最小项控制一路模拟开关,由最小项的性质可知,任意时刻只能有一个最小项控制有效,能够选择八路开关中的一个通道,将这个通道的信号传递到公共输出端子中

CC4051常用于多路数据采集系统的电路设计

五、模拟开关的应用

将多个模拟开关组合,改变开关的连接和控制方式,不仅可以实现可控的单刀单掷开关功能,还可以实现单刀双掷开关,双刀单掷开关,双刀双掷开关

有关CMOS传输门的更多相关文章

  1. ruby - 使用 Ruby 将 HTTP GET 的响应主体流式传输到 HTTP POST - 2

    我正在尝试下载一个大文件,然后使用Ruby将该文件发布到REST端点。该文件可能非常大,即超过可以存储在内存中甚至磁盘上的临时文件中的容量。我一直在用Net::HTTP尝试这个,但我愿意接受任何其他库(rest-client等)的解决方案,只要他们做我想做的事情。这是我尝试过的:require'net/http'source_uri=URI("https://example.org/very_large_file")source_request=Net::HTTP::Get.new(source_uri)source_http=Net::HTTP.start(source_uri.ho

  2. ruby-on-rails - 将 Heroku 环境变量传输到 Docker 实例 - 2

    我在Heroku上构建了一个必须在Docker容器内运行的RoR应用程序。为此,我使用officialDockerfile.因为它在Heroku中很常见,所以我需要一些附加组件才能使这个应用程序完全运行。在生产中,变量DATABASE_URL在我的应用程序中可用。但是,如果我尝试其他一些使用环境变量(在我的例子中是Mailtrap)的加载项,变量不会在运行时复制到实例中。所以我的问题很简单:如何让docker实例在Heroku上执行时知道环境变量?您可能会问,我已经知道我们可以在docker-compose.yml中指定一个environment指令。我想避免这种情况,以便能够通过项目

  3. ruby - Capistrano 3.0 文件传输? - 2

    似乎Capistrano曾经有anextensivefiletransferpackage.但是在3.0版本重写后好像没有了。知道是否还有其他方法可以将文件传输到服务器/从服务器传输文件吗? 最佳答案 下载:desc"downloadfoobar.txtintolocal_dir/"task:foobardodownload!"some_remote_path/foobar.txt","local_dir/"end我知道这从Cap3.2.1开始有效,因为我现在正在使用它。 关于ruby-

  4. ruby-on-rails - 如何将数据从我的生产数据库传输到 heroku 中的登台数据库? - 2

    我正在尝试将数据从我的生产数据库传输到我的登台数据库,但没有成功。我正在关注heroku的相关文档:http://devcenter.heroku.com/articles/pgbackups#transfers这些是我运行的命令...$herokuaddons:addpgbackups--remotestaging$herokuaddons:addpgbackups--remoteproduction$herokupgbackups:capture--remoteproduction$herokupgbackups:restoreDATABASE`herokupgbackups:ur

  5. ruby - Ruby 和 Net::SCP 传输(套接字)的性能问题 - 2

    从命令行scp实用程序的功能来看,SCP上传速度似乎在库中受到很大限制。我知道这是Ruby(1.9.2-p0),但是Net::SCP比Linux实用程序慢大约8倍(使用大文件看到...见下文)。我很好奇知道(我快速查看了代码)这是否是Ruby中套接字的方式,或者是否可以更好地多路复用Net::SCP套接字?我注意到无论我尝试哪种上传方式(串行上传、异步操作channel、使用scp对象的多个实例)我都无法在SCP上传上获得超过9兆字节/秒的传输速度。现在……让我解释一下我调查的细节:1)尝试不同的加密算法我使用了不同类型的加密,速度没有太大变化示例:我可以使用命令行scp(加密算法=a

  6. ruby - 从 Amazon S3 流式传输动态 zip - 2

    我正在寻找一种从AmazonS3动态流式下载zip文件的方法。应用程序托管在EC2上,文件存储在S3上。需要让用户能够从一组文件中进行选择,然后将这些文件打包并下载给他们。听说过一些可能可行的Actionscript库(aszip和fzip),或者可以在Ruby或什至PHP中执行此操作。文件不需要任何压缩,zip只是用于将文件捆绑到一个下载中.... 最佳答案 我使用NginxZipModule流式传输本地文件,但可以选择从远程位置流式传输。否则,您可以将它与VFS安装的S3存储一起用作本地文件系统。支持seek-断点续传和加速下载

  7. ruby-on-rails - Curl::Error::Partial File Error: 传输部分文件错误 - 2

    我正在尝试在Rails控制台中执行以下代码:ce=Curl::Easy.new("http://www.homestolove.com.au/bathroom-profile-fresh-approach-2391")ce.verbose=truece.perform但我收到以下错误。谁能建议如何解决这个问题?看起来这个url返回响应的速度很慢。在文件传输完成之前,我们可以做些什么来阻止连接终止吗?*Addinghandle:conn:0x95f3210*Addinghandle:send:0*Addinghandle:recv:0*Curl_addHandleToPipeline:l

  8. ruby - 使用 ruby​​ 流式传输和解压缩大型 csv 文件 - 2

    我遇到问题,我需要下载、解压缩,然后逐行处理一个非常大的CSV文件。我认为让您了解文件有多大很有用:big_file.zip~700mbbig_file.csv~23gb这是我希望发生的一些事情:解压缩前不必下载整个文件在解析csv行之前不必解压缩整个文件在执行所有这些操作时不要占用太多内存/磁盘我不知道这是否可能。这是我的想法:require'open-uri'require'rubyzip'require'csv'open('http://foo.bar/big_file.zip')do|zipped|Zip::InputStream.open(zipped)do|unzipped

  9. ruby - Sinatra 使用 Puma 进行流式传输? - 2

    我正在尝试在我的应用程序中利用服务器发送的事件。我正在使用Sinatra和sinatra-ssegem。这个gem包装了Sinatrastream:keep_alive调用。在Thin上运行我的应用程序时,我完全没有问题,并且我的事件流按预期工作。但是,当我将我的应用程序切换为与Puma一起运行时,一切正常,除了我的sse_stream什么都不做!它只返回一个空白页。我的流是这样设置的get"/logstream/:server"doifrbcserver=MyApp.servers[params[:server]]sse_streamdo|stream|rbcserver.add_w

  10. ruby - 如何将数据通过管道传输到通过标准输入上的 Net::SSH 启动的进程? - 2

    我正在本地机器上生成数据源,我想通过Net::SSH将其传输到远程进程。有点像echofoosball|sed's/foo/bar/g'只是echofoosball部分将是本地计算机上的数据馈送。我不要找的是:data="foosball"ssh.exec!("echo#{data}|sed's/foo/bar/g'")我真的想要实时将数据流传输到流程中;) 最佳答案 好吧,我明白了:#!/usr/bin/envrubyrequire'rubygems'require'net/ssh'res=""c=Net::SSH.start("

随机推荐