Existe algum deslocador de nível bidirecional 5v-3.3v?


27

Existe algum IC que faça a interface de entrada / saída de 3,3V para saída / entrada de 5V? Eu preciso dele principalmente para um Arduino Due, mas se houver algum IC bidirecional que funcione assim, seria ótimo.

Algumas pessoas me aconselharam a usar os CIs SN74AHC125 e CD4050, mas não entendo como eles funcionam ou como fazer interface com eles.


2
Qual é a faixa de frequência pretendida?
alexan_e

11
Por exemplo, suponha que eu queira conectar um dispositivo de 5V a um arduino de 3,3V. Não consegui descobrir onde conectar a saída de 5V e a entrada de 3,3V. E quanto à saída de um 3.3V de um arduino, por exemplo, para um dispositivo de 5V? O que você quer dizer com faixa de frequência?
3bdalla

11
Não tenho certeza de que entendi seu ponto de vista, não lidei com frequências antes, meu objetivo é simples eletrônica: |
3bdalla

3
sparkfun tem uma placa, a sua chamada um 'conversor de nível'
geometrikal

11
Geralmente eu usava CIs da Texas Instruments. Série TXS e TXB têm tradutores tensão bidireccionais (por exemplo TXS0102 tem dois canais)
frarugi87

Respostas:


44

Um tradutor de nível bidirecional muito simples pode ser criado com um único N-mosfet:

insira a descrição da imagem aqui

O mosfet usado deve ser um modelo com um limite baixo de Vgs, para que ele possa ter um Rds-ON (resistência ON) relativamente baixo no nível de tensão de entrada pretendido (3,3v neste caso).
BSS138 em um exemplo, ele tem um Vgs-th de 1,5 V máx e é especificado para ter uma baixa resistência à fonte de dreno com tensões Vgs tão baixas quanto 2,5 V (talvez um pouco menor também).

O exemplo mostrado usa tradução 3.3v <-> 5v, mas também pode funcionar com 2.5v <-> 3.3v ou 2.5v <-> 5v, mesmo entre 2.5v <-> 12v. O alcance é limitado apenas pelas características do mosfet usado.

O circuito mostrado é baseado em uma nota de aplicação do
deslocador de nível bidirecional NXP AN97055 para o barramento I2C e outros sistemas
Nova versão mais curta: AN10441 Técnicas de mudança de nível no projeto do barramento I2C

Quando L1 é alto (3v3) ou R1 flutuante mantém o mosfet desligado, então R2 puxa o lado do dreno alto (para 5v).

Quando L1 é puxado para baixo, o mosfet conduz e o dreno fica baixo.

Quando um nível baixo (0) é aplicado a H1, essa tensão é transferida através do diodo do substrato para o lado da fonte (L1)

Observe que o tamanho da resistência pode afetar a velocidade ( fonte da imagem )

insira a descrição da imagem aqui

Solução alternativa de transistor insira a descrição da imagem aqui


Artigos relevantes que você pode achar úteis:


11

Como a pergunta parece orientada para um IC que fornece mudança de nível bidirecional, considere a família de peças Texas Instruments TXB010x: TXB0102 possui 2 canais, TXB0104 possui 4 canais e TXB0108 possui 8 canais.

O recurso de destaque desta família de ICs é que a direção do sinal é detectada automaticamente, portanto, não é necessário um pino de configuração de direção separado.

Velocidades de comutação de até 10 MHz funcionam de maneira confiável. A velocidade máxima teórica pode ser maior - as folhas de dados não são explícitas sobre isso, pelo que posso determinar.

Eu tenho um TXB0108 trabalhando entre uma barra de ativação do MSP430 de 3,6 volts e um Arduino Nano de 5 volts, portanto, o caso de uso da questão é abordado.

Para fins de teste, a Adafruit oferece um módulo pré - construído que incorpora o TXB0108 , o que poupa o trabalho de soldar uma peça SMD. Pode haver opções semelhantes para os 0102 e 0104 deles ou de outros.

Conversor de nível lógico bidirecional de 8 canais - TXB0108

Se a intenção é mudar o nível de um sinal I2C , que não é ideal para os ICs da série TXB, uma opção que aborda especificamente o resistor de pull-up e a topologia de coletor aberto do I2C é um módulo como esse , vendido novamente pela Adafruit e outros fornecedores.

Deslocador de nível I2C

Este módulo usa o MOSFET BSS138 da maneira descrita na resposta por alexan_e . Embora não seja um único CI, como a pergunta pede, talvez cumpra o objetivo pretendido. Como alternativa, é simples construir você mesmo esse circuito usando MOSFETs.


+1 Boa descoberta! ... O link para o TXB0102 é realmente para o TXS0102. Não determinei a diferença, mas isso é observado na folha de dados do TXS0102: "Seu uso principal do aplicativo de destino é para interface com drivers de dreno aberto nas E / Ss de dados, como I2C ou 1-wire, onde os dados é bidirecional e nenhum sinal de controle está disponível. O TXS0102 também pode ser usado em aplicativos em que um driver push-pull está conectado às E / S de dados, mas o TXB0102 pode ser uma opção melhor para tais aplicativos push-pull. " Aqui está o link real para TXB0102
Tut

@ Put Opa, deslize, obrigado. Minhas próprias necessidades são atendidas pelo TXB0108, para que os outros sejam mais "interessantes de saber" para mim. :-)
Anindo Ghosh

10

Outra coisa que você deve considerar é se você realmente precisa mudar de nível. Muitos chips possuem pinos de entrada tolerantes a 5V, mesmo quando operando a uma tensão mais baixa, como 3.3. A CPU atmega também interpreta qualquer coisa acima de 0,6 * Vcc ou 3V para um arduino como uma lógica alta, de modo que um sinal de 3,3V pode acionar diretamente um pino de arduino sem alteração de nível.

Supondo que você esteja usando um arduino de 5V e precise conversar com uma parte de 3,3V, se a parte tiver entradas tolerantes a 5V (muitas fazem hoje em dia), basta conectá-las e ele funcionará. Se a sua linha bidirecional for um design de coletor aberto, como o i2c, onde os dispositivos puxam apenas a linha para baixo, basta conectar os resistores de pull up a 3,3V em vez de 5V e tudo funcionará.

Caso contrário, tudo o que você precisa fazer é garantir que a linha não ultrapasse os 3,3V, você pode fazer isso com um resistor e um zener, colocar um resistor na linha do arduino e depois um zener para fixar a tensão em 3,3V. (fonte: repetae.net )braçadeira de resistor zener

Você pode ficar tentado a viver perigosamente e apenas usar o resistor de 10k e nada mais. A razão pela qual isso (às vezes!) Funciona é que existe um diodo de aperto dentro do chip de recebimento que desvia o excesso de tensão para vcc ou 3,3V. Esse diodo queimará se você tentar puxar toda a linha de 3,3V até 5V (além de qualquer dano causado ao puxar essa linha para 5V), no entanto, com o resistor, muita corrente não fluirá e assumindo sua linha de 3,3V possui uma carga não trivial, não altera substancialmente o nível da sua linha de energia, mas há muitas ressalvas. Portanto, em geral, não faça isso a menos que você tenha um barramento local isolado de 3,3V e realmente não possa poupar os dois centavos extras para o zener. Eu apenas mencionei isso porque você o verá nos esquemas de painéis baratos baratos que você pega no ebay e pode ficar tentado a copiá-lo, apenas não deixe que ela passe pela tábua de pão em um design de produção. :)

O Edit acabou de notar que você estava usando o arduino 3.3V mais recente, portanto, basta inverter o que eu disse acima, o truque do resistor zener ainda funcionará, embora aparentemente algumas das linhas de E / S no devido possam ser tolerantes a 5V, parece haver algum desacordo nos fóruns. O teensy 3.1 também é uma pequena placa ARM que possui todos os pinos tolerantes a 5V e é menos da metade do custo do IMHO devido e melhor projetado http://www.pjrc.com/store/teensy31.html


3

No departamento de solução barato [er?], O FET (da resposta aceita com base no apêndice NXP) pode ser substituído por um diodo BJT e Schottky, como no Silicon Labs AN883 . O esquema deles é um pouco complicado com outras coisas, então eu extraí o bit essencial aqui e o reorientei para que pareça na resposta aceita para facilitar a comparação dos dois esquemas:

insira a descrição da imagem aqui

O BJT faz translação somente na direção baixa-> alta ... exatamente como discutido no câmbio de nível único do transistor . O Schottky substitui o diodo do corpo do FET pela translação alto> baixo.

Abaixo está a sua ampliação na medição do escopo para um tradutor de 3,3 <-> 1,8V; eles também propõem este esquema para tradução de 5 <-> 1,8 V, etc. Ao fazer uma tradução de 3,3 <-> 1,8 V, um MMBT3904 teve apenas uma queda de 150 mV (saturação). O diodo BAS40 teve uma queda de 350mV na direção oposta. Esses desvios afetam (obviamente) a saída do nível lógico baixo no lado baixo e no lado alto respectivamente do tradutor.

insira a descrição da imagem aqui

Eles tinham bons dispositivos CMOS em ambos os lados, então a impedância de entrada não era um problema. Não houve degradação / deslocamento visível das margens lógicas altas em seu rastreamento de 1V / div, por isso não me preocupei em incluí-lo aqui. A impedância de entrada de seus dispositivos era pelo menos 1Mohm do que posso ver em uma simulação. As margens lógicas altas começam a se degradar abaixo da impedância de entrada de aproximadamente 100K.

Além disso, eles recomendam esse tradutor baseado em BJT apenas até 300KHz.

Não tenho certeza de qual dessas soluções é mais barata na prática, FET ou Schottky + BJT ... mas essa certamente precisa de mais peças ... a menos que você use um desses pacotes de diodo + transistor, que existem, por exemplo, PZMT1101 . Mas você também precisa de 3 resistores.


Qual é o consumo de energia / consumo atual esperado deste método em comparação com o método baseado em FET?
KyranF

@KyranF: Eu não os comparei, mas se você está preocupado com isso, não será cor de rosa por causa das flexões. As versões CMOS de baixa potência se parecem com m.eet.com/media/1103155/Fig2.gif Isso é de eetimes.com/document.asp?doc_id=1231111, que é um bom artigo comparando várias abordagens.
Fizz

Obrigado pelos links. Suspeito que a abordagem BJT seja de alta potência em comparação durante os momentos em que a base estiver saturada. A carga constante de resistores pull-up é realmente preocupante para qualquer projeto, especialmente projetos operados por bateria.
KyranF

@ KyranF: Eu olhei para ele em simulação: o transistor e o diodo dissipam uW de energia enquanto os resistores dissipam mW. Na verdade, o BJT se dissipa em torno de 100uW, o diodo 1uW. FET ou BJT não importam aqui ... resistores com caminho a terra para dissipação estática é o que importa. Isso ocorre com impedâncias de entrada de 1 metro.
Fizz

@KyranF: Tentei usar o modelo BSS138LT1 da ON, mas isso dá uma dissipação de potência média negativa no LTspice (de -63uW) ... então acho que o modelo deles pode ser problemático. Lixo dentro ... Lixo fora. Também começou a oscilar (com uma frequência muito maior que o sinal) quando acionado pelo lado alto. É um modelo subckt, e não um modelo MOS simples, por isso é difícil descobrir o que está acontecendo. [continuação]
Fizz


2

Além disso, se você estiver procurando por um ótimo isolamento elétrico e funcionalidade de mudança de nível bidirecional, eu recomendaria a ISO1541 . É bastante barato e oferece boa proteção através do isolamento.



1

A solução mais simples é executar todos os seus circuitos em 3,3V. Os chips HC funcionarão felizes nesse nível.

Quando isso não for possível, você pode tornar as coisas muito mais simples quando se restringir a uma direção. Um chip HCT a 5V aceita níveis de 3,3V, e um divisor simples de dois resistores pode reduzir 5V a 3,3V. Alguns uC são tolerantes a 5V nos pinos, portanto você não precisa do divisor. E se você colocar pullups de 5V nos pinos e alternar entre terra e aberto (= entrada), você terá uma saída aceitável de 0-5V.

Para o acoplamento de ônibus coletores abertos (I2C, dallas 1-wire), o truque BS138 é um caminho a percorrer. Existem pequenos chips para I2C que colocam os dois FETs em uma caixa. (PCA9306 etc.)

Mas se você realmente deseja uma tradução em nível de bi-drecção: esses chips existem, verifique, por exemplo, TXB0108.


-4

Uma solução simples está usando o SN74LVC244AN. Pode ser alimentado com 3V3 e é 5V tollerant nas entradas.


5
Isso não é bidirecional.
Matt Young

Não, mas o 74LVC4245 é.
Bregalad 28/02
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.