Funcionamento Resistores Pull-Up e Pull-Down

resistores-pull-up-e-pull-down
Font Size

Olá, tudo bem? Hoje iremos estudar sobre o funcionamento dos resistores de pull-up e pull-down. Muito importante na utilização de chaves no circuito. Quer saber qual a sua importância e o seu funcionamento? Então me acompanhe!

O que são resistores de pull-up e pull-down? 

Vamos lá, esse nome “Pull” up ou down é devido a uma configuração de ligação com interruptores onde um resistor, conectado ao interruptor, vai ser ligado ao terra (down) ou ao vcc do circuito (up). Observe a imagem a abaixo:

Esquema de Ligação Pull-Up e Pull-Down Fonte: AutoCore Robótica

Ao observar a imagem acima, perceba que na primeira configuração, a de pull-up, temos um botão (Button A) e um resistor de 10K ligados em série entre si. Contudo, por ser uma configuração pull-up, temos que o resistor vai estar ligado ao vcc (+5V) do circuito, enquanto que o botão vai estar conectado ao terra (GND).

De forma análoga, quando estamos falando da configuração de ligação pull-down temos o inverso, onde o botão (Button B) vai estar ligado ao vcc (+5V) e será o resistor de 10K do circuito que vai ser ligado ao terra (GND).

Funcionamento dos resistores de Pull-up e Pull-down

Agora que já aprendemos sobre a configuração de cada tipo de ligação, temos que aprender sobre o seu funcionamento para poder entender o tamanho da sua importância nos circuitos com interruptores tudo bem?

Resistores de Pull-Up

O funcionamento desse circuito ocorre da seguinte maneira: Vamos supor que na saída do circuito (I/O pin) temos uma porta do Arduino, por exemplo, porta digital 7. Dessa forma, ao energizar o circuito vamos ter na porta do Arduino, um sinal alto (1 ou true).

Isso ocorre porque na configuração inicial, temos apenas o caminho do resistor (já que o botão está aberto), e como o resistor está ligado ao vcc (+5V) então teremos um sinal alto na saída.

Mas o que ocorre quando eu aperto o botão? 👀

Boa pergunta! Nessa hora, temos que lembrar sobre o caminho da corrente, você lembra como é? Basicamente funciona assim: Qual o caminho mais fácil de seguir? Respondendo essa pergunta, temos que a corrente vai fluir através do botão já que temos uma resistência no vcc (que é o resistor no meio do caminho). Dessa forma, como o botão está ligado ao GND, então teremos um nível baixo na porta 7.

Resistores de Pull-Down

Como vimos, a diferença entre pull-up e pull-down é que uma ligação é inversa da outra, assim, na saída do Arduino terá o mesmo efeito. Então na posição inicial do circuito, teremos o nível lógico baixo (0 ou false) já que o resistor está conectado ao terra.

Entretanto, quando pressionarmos o botão, o sinal na saída será nível lógico alto. Isso porque como já vimos, a corrente vai fluir através do botão o qual, nesta configuração, está ligado ao vcc do circuito.

Qual a importância disso então? 🤷

Bom, aqui chegamos no grande foco do post de hoje que é compreender a funcionalidade dessa configuração, então vamos lá, para facilitar a compreensão vamos imaginar a seguinte situação: Digamos que ligamos um botão qualquer sozinho em uma porta do Arduino, vou escolher a porta 5, e ligamos esse botão no vcc do Arduino também, até aqui maravilha, agora vou pressionar esse botão e utilizar o comando

digitalRead(5)     //realiza a leitura do pino 5

Para ler o sinal dessa porta ok? Sendo assim que sinal vai ter nessa porta quando eu pressionar o botão? Se você disse nível alto você acertou ✅. Mas agora que sinal vai ter nessa porta quando eu soltar o botão? Se você disse nível baixo você errou ❌

Você sabe o por quê?

Isso acontece porque ao soltar o botão não temos nenhuma corrente passando pelo botão e indo para o pino 5 correto? Sendo assim é como se não tivéssemos nada ligado no pino 5, ele está vazio! Instintivamente achamos que vai ter nível lógico baixo, maaas isso só vai acontecer se a porta estiver ligada diretamente no GND, o que não ocorre de verdade.

Mas então não aparece nada naquela porta? 🤷

Sim! Aparece algo, mas é algo desconhecido. Pode ser 0 ou 1, não sabemos o que vai sair nesse pino, isso pode ser resultado de diversas coisas que estejam acontecendo no circuito naquele momento. Mas sabe esse efeito de aparecer 0 ou 1 na porta? Ele tem um nome e se chama: floating, o que nada mais é que flutuação.

Floating: Efeito de Flutuação

Nos circuitos lógicos digitais, como no caso do Arduino, eles reconhecem somente 3 estados lógicos, que são: HIGH, LOW e Floating. O Floating ocorre porque o microprocessador não está recebendo nem HIGH (Vcc) ou LOW (GND).

Então como vimos, se um dos níveis lógicos forem interrompidos, a leitura ficará flutuando, pois não ter nenhum sinal, não é igual a ZERO. Porque ZERO é o estar ligado ao GND. Para testarmos toda essa teoria, vamos montar um circuito base.

Componentes Utilizados:

Montagem do Circuito

Agora realize as seguintes ligações como mostra a imagem abaixo:

Ligação do Circuito no Arduino

Fonte: AutoCore Robótica

Perceba que o botão não está ligado a nenhuma porta no nosso Arduino, e com esse circuito, vamos carregar o seguinte código:

Código do Arduino Comentado

/*
     Projeto: Circuito com resistores de PullDown e PullUp
     Autor: Danilo Nogueira - Blog AutoCore Robótica
     Data: 14/08/2018
*/

int ButtonA = 5;   // Pino onde iremos testar com e sem botão
int sinal;         // Variável para armazenar que sinal tem no pino 

//----------------------------------

void setup() {

 pinMode(ButtonA, INPUT);
 Serial.begin(9600);
 Serial.println (" ---- AutoCore Robótica ---- ");
 Serial.println ("");
}

//----------------------------------

void loop() {

 sinal = digitalRead(ButtonA);           // Vamos ler que saída tem no pino 5
 Serial.print ("A Leitura atual é : ");  // O valor lido será mostrado ao usuário

 Serial.print(sinal);
 Serial.println (" ");

 delay(1);
}

Como no programa definimos o pino 5 como entrada do botão, só que o botão não está conectado nesse pino (aliás, em nenhum pino) então esse pino vai sofrer o efeito de floating, como mostra a imagem abaixo:

Efeito de Floating na porta do Arduino

Fonte: AutoCore Robótica

Testando o Pull-Up e Pull-Down

Agora que vimos como o efeito floating ocorre, vamos vamos montar as duas configurações e testar como o botão vai se comportar combinado?

Resistor de Pull-Up

Montando o circuito de pull-up e conectando a saída (I/O pin) no pino digital 5 do Arduino, vamos ter a seguinte saída:

Botão Solto // Botão Pressionado

Fonte: AutoCore Robótica

Resistor de Pull-Down

Agora montando o circuito de pull-down e conectando a saída (I/O pin) no pino digital 5 do Arduino, vamos ter a seguinte saída:

Botão Solto // Botão Pressionado

Fonte: AutoCore Robótica

Conclusão

Conseguiu compreender a importância dessas duas configurações nos circuitos com interruptores? Vale destacar que eles são MUITO importantes! Agora para fechar tudo o que nós vimos, logo abaixo está um vídeo do nosso canal mostrando o resultado!

Caso tenha ficado algo incompleto para você, comente abaixo 📝 que irei te responder rapidão, pode confiar!
Dicas? 😯 Dúvidas? 🤔 Idéias de post?💭 Críticas? 😱 Só comentar ok? 😉
Forte abraço!

Posts relacionados

Realizando efeito Scroll no display LCD

por Danilo Nogueira
6 anos ago

Controle Remoto de Ventilador com Arduino

por autocore
5 anos ago

Conhecendo o Watchdog no Arduino

por Danilo Nogueira
5 anos ago
Sair da versão mobile