3.8. Conversão de nível lógico

Um pino GPIO da câmara fornece cerca de 3,3 V quando está em nível alto. Um dispositivo do outro lado pode funcionar a 5 V (microcontroladores mais antigos, muitas placas de sensores) ou a 1,8 V (sensores mais recentes, alguns barramentos chip-a-chip). Ligar os dois diretamente é por vezes seguro e por vezes destrutivo; a conversão de nível lógico é o circuito que estabelece essa ligação de forma fiável.

3.8.1. Por que razão a ligação direta entre tensões diferentes pode danificar um pino

O pad de E/S de cada circuito integrado possui um par de díodos de proteção internos: um do pino para a massa e outro do pino para o barramento de alimentação do circuito. Existem para absorver descargas eletrostáticas (ESD) – um pico breve de alta tensão proveniente de eletricidade estática que pode atingir um pino quando a placa é manuseada. Uma pessoa que tenha caminhado sobre uma alcatifa pode acumular vários quilovolts de carga estática; tocar no pino errado transfere essa carga para o circuito em nanossegundos. O díodo de proteção superior entra em polarização direta e desvia o impulso com segurança para o barramento de alimentação antes de atingir os transístores no interior do circuito.

Quando um sinal de 5 V é aplicado continuamente a um pino de 3,3 V que não é tolerante a 5 V, o díodo de proteção superior conduz indefinidamente. Os díodos são dimensionados para impulsos ESD breves, não para corrente em regime estacionário; o barramento de alimentação começa a subir acima de 3,3 V, o díodo aquece, e o pino ou o regulador de tensão interno falha.

Os pinos tolerantes a 5 V utilizam um andamento de entrada diferente – o díodo superior liga a um barramento mais elevado ou está ausente – pelo que aplicar 5 V não causa dano. Se os pinos de uma placa são tolerantes a 5 V varia consoante a placa; consulte a referência rápida da OpenMV Cam.

A outra direção tem o seu próprio problema. Um GPIO de 3,3 V a conduzir em nível alto produz ~3,3 V no fio. Um recetor de 5 V que necessite de 0.7 × Vcc para reconhecer nível alto tem o seu limiar nos 3,5 V; 3,3 V pode ser lido como baixo ou como ambíguo. Mesmo sem haver dano, o sinal não funciona de forma fiável.

Um conversor de nível lógico resolve ambas as direções.

3.8.2. O N-MOSFET como comutador

Os circuitos abaixo utilizam um único MOSFET de canal N. Tem três pinos – gate, drain e source – e comporta-se como um comutador controlado eletricamente.

A entrada de controlo é a tensão entre a gate e a source, designada Vgs (tensão gate-source):

Vgs = (gate voltage) - (source voltage)

O MOSFET tem em conta esta diferença, não a tensão absoluta em qualquer um dos pinos isoladamente. O seu comportamento decorre de Vgs:

  • Quando Vgs está acima da tensão de limiar do MOSFET (tipicamente cerca de 1 V para um componente lógico de sinal pequeno), o transístor liga on e a corrente flui livremente do drain para o source.

  • Quando Vgs é igual ou inferior a 0, o transístor fica off e praticamente nenhuma corrente flui do drain para o source.

O caminho drain-source é o caminho da corrente comutada; Vgs abre ou fecha esse comutador.

Um N-MOSFET possui também um díodo de corpo entre o drain e o source que conduz quando o drain é puxado abaixo do source em mais de ~0,6 V. O díodo é um efeito secundário do fabrico; o conversor bidirecional descrito abaixo usa-o propositadamente.

3.8.2.1. Regras de ligação

Um N-MOSFET não é um dispositivo simétrico de três terminais. O díodo de corpo aponta do source (ânodo) para o drain (cátodo), e Vgs é o que controla o canal. Daí derivam duas regras que devem ser cumpridas em todos os circuitos comutadores com N-MOSFET:

  • A source vai para a tensão mais baixa; o drain vai para a mais alta. Com o drain no barramento mais elevado, o díodo de corpo está em polarização inversa e não interfere. Trocando-os, o díodo de corpo fica em polarização direta permanentemente: a corrente flui do source (agora mais elevado) através do díodo de corpo para o drain (agora mais baixo), independentemente do que a gate esteja a fazer. O MOSFET deixa de ser um comutador – fica continuamente a deixar passar corrente, o sinal não pode ser desligado e o dispositivo frequentemente aquece em excesso e falha.

  • A gate liga ao barramento de tensão do source. Manter a gate no mesmo barramento em que o source repousa faz com que Vgs = 0 em repouso, bem abaixo do limiar; o MOSFET permanece firmemente desligado até que algo eleve a gate acima do source (o circuito unidirecional abaixo) ou puxe o source abaixo da gate (o circuito bidirecional). Deixar a gate a flutuar noutro ponto faz com que o estado de desligado deixe de estar definido – ruído, fugas ou capacitância parasita podem fazer Vgs subir acima do limiar e ligar o MOSFET aleatoriamente.

Inverter qualquer das regras transforma o conversor de nível lógico num caminho com fugas e não fiável. Ambos os circuitos conversores abaixo seguem estas regras: source no lado mais baixo, drain no mais alto, gate ligada ou comandada a partir do barramento do source.

3.8.3. Unidirecional 3,3 V → 5 V

O conversor de nível lógico mais simples envia um sinal unidirecional do GPIO da câmara para uma entrada de 5 V. Um único N-MOSFET mais dois resistores fazem o trabalho.

An N-channel MOSFET wired as an inverter. The 3.3 V GPIO drives the gate; the source goes to ground; the drain pulls up to 5 V through 10 kΩ; the drain is also tapped as the 5 V output.

Um N-MOSFET converte (e inverte) um sinal de 3,3 V para uma saída de 5 V.

Quando o GPIO conduz em nível alto (3,3 V na gate), Vgs está acima do limiar e o MOSFET liga; o drain é puxado para ~0 V. Quando o GPIO conduz em nível baixo (0 V na gate), o MOSFET está desligado e o pull-up de 10 kΩ leva o drain a 5 V.

A saída é o inverso da entrada. O software pode inverter o sinal de volta (escrever 0 para «saída de 5 V em nível alto»), ou encadear dois andamentos para obter um sinal não invertido com o dobro dos componentes.

3.8.4. Bidirecional com um N-MOSFET

Para uma linha que tem de ser comandada por qualquer um dos lados – um barramento partilhado onde qualquer extremidade pode puxar a linha para baixo – o circuito padrão é um único N-MOSFET por linha, com um pull-up para a alimentação de cada lado.

A bidirectional N-MOSFET level shifter. The MOSFET bridges a 3.3 V signal line on the left and a 5 V signal line on the right; the gate connects to the 3.3 V supply, the source connects to the 3.3 V signal, the drain to the 5 V signal; each signal line has its own pull-up resistor to its supply.

Um único N-MOSFET faz a ligação entre uma linha de 3,3 V e uma de 5 V; cada lado tem o seu próprio pull-up.

A gate está ligada à alimentação de 3,3 V, pelo que o comportamento do MOSFET depende de qual o lado que comanda:

  • Ambos os lados em repouso. O source repousa a 3,3 V através do pull-up esquerdo; a gate está a 3,3 V; Vgs = 0; o MOSFET está desligado. O lado de 5 V flutua para 5 V através do pull-up direito. Ambos os lados leem nível alto.

  • O lado de 3,3 V puxa para baixo. O source desce para 0 V; Vgs sobe acima do limiar; o MOSFET liga e conduz do source para o drain. O lado de 5 V é puxado para baixo através do transístor.

  • O lado de 5 V puxa para baixo. O drain desce para 0 V; o díodo de corpo do MOSFET (drain para source) entra em polarização direta e conduz; o source (lado de 3,3 V) é puxado para cerca de 0,6 V. Vgs excede então o limiar e o MOSFET liga totalmente, puxando ambos os lados para baixo.

O BSS138 é o N-MOSFET padrão para este circuito; N-MOSFETs de sinal pequeno de nível lógico com tensões de limiar de gate semelhantes comportam-se todos da mesma forma aqui.