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.
integrated-circuit
interface
logic-level
3bdalla
fonte
fonte
Respostas:
Um tradutor de nível bidirecional muito simples pode ser criado com um único N-mosfet:
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 )
Solução alternativa de transistor
Artigos relevantes que você pode achar úteis:
Não pague por tradutores de nível em sistemas que usam várias tensões de fonte de alimentação - EDN
3V Tips 'n Tricks - Microchip
fonte
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.
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.
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.
fonte
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 )
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
fonte
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:
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.
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.
fonte
Bem, existem muitos. Você precisa especificar qual é sua frequência máxima, quantos bits você precisa etc. Em resumo, você pode usar qualquer IC do conversor de nível de tensão. A Texas Instruments possui uma ferramenta de seleção elegante para o mesmo objetivo: http://www.ti.com/logic/docs/translationresults.tsp?sectionId=458&voltageIn=5.0&searchDirection=2&voltageOut=3.3#voltintf
fonte
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.
fonte
Você pode encontrar um bom resumo de todos os métodos aqui
http://playground.arduino.cc/Main/I2CBi-directionalLevelShifter
fonte
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.
fonte
Uma solução simples está usando o SN74LVC244AN. Pode ser alimentado com 3V3 e é 5V tollerant nas entradas.
fonte