Se você olhar qualquer circuito eletrônico digital, encontrará neles inúmeros resistores de pull-up e pull-down. Eles são usados para polarizar corretamente as entradas das portas digitais para impedi-las de flutuar aleatoriamente quando não há condição/nível de entrada. Para qualquer microcontrolador em um sistema embarcado, como um Arduino, necessitam de resistores de pull-up e pull-down nos GPIOs, pois utilizam sinais de entrada e saída para comunicação com dispositivos e hardwares externos. Com a implementação dos resistores de pull-up e pull-down no circuito, permitirá que os pinos de entrada do microcontrolador recebam níveis de estados ‘alto’ ou ‘baixo’. Se não utilizar estes resistores e não houver nada conectado aos seus pinos GPIO, seu programa lerá um nível de estado “flutuante”, ou seja, nem nível alto, nem nível baixo.
Resistores PULL-UP
Um resistor pull-up é usado para garantir que a tensão no pino do microcontrolador seja bem definida, mesmo quando a chave estiver aberta. Ele é usado para garantir que um pino digital seja mantido em nível lógico alto na ausência de um sinal de entrada. Não é necessário utilizar um tipo especial de resistor. Eles são simples, de valores fixos, conectados entre a fonte de tensão e o pino digital do microcontrolador que receberá a tensão de entrada, ou não, através da chave conectada ao terra. Quando a chave está aberta, o estado lógico da entrada da porta digital se mantém em nível alto. Quando a chave é fechada, o estado lógico da porta digital altera para nível baixo.
Na figura acima, um resistor pull-up com um valor fixo foi usado para conectar a fonte de tensão e um pino digital. O resistor de pull-up é colocado em série com uma chave para garantir que a tensão entre GND e VCC seja controlada ativamente quando a chave estiver aberta. Se não utilizarmos um resistor pull-up, resultará em um curto-circuito. Isso ocorre porque o pino digital não pode ser curto-circuitado diretamente com o terra ou com o VCC, pois isso acabará danificando o circuito.
Resistores PULL-DOWN
O resistor pull-down garante que o pino digital esteja em um nível lógico baixo, mesmo quando não houver conexões ativas com outros dispositivos. O resistor pull-down mantém o sinal lógico próximo a zero volt (0V) quando nenhum outro dispositivo ativo está conectado. Ele estabelece o estado lógico baixo para evitar um estado indefinido na entrada do pino digital. Deve ter uma resistência maior do que a impedância do circuito lógico. Quando a chave está aberta, a tensão da entrada do pino digital fica em estado lógico baixo (nível do GND). Quando a chave é fechada, a tensão de entrada no pino digital vai para o nível de Vin. Sem o resistor, os níveis de tensão virtualmente flutuariam entre as duas tensões.
Assim como o resistor pull-up na Figura 1, os resistores pull-down neste circuito também garantem que a tensão entre o VCC e o pino digital do microcontrolador seja controlada ativamente quando a chave estiver aberta. Ao contrário do resistor pull-up, o resistor pull-down muda o estado lógico do pino digital para um valor baixo em vez de um valor alto. O resistor de pull-down que está conectado ao GND define o estado lógico do pino digital para 0v, até que o interruptor seja pressionado e o pino digital fique em nível alto.
Valores ideais de resistência para resistores de PULL-UP e PULL-DOWN
Para resistores pull-up, você precisa usar um resistor que seja pelo menos 10 vezes menor que o valor da impedância do pino de entrada. Para dispositivos lógicos que operam em 5V, o valor típico do resistor pull-up deve estar entre 1-5 kΩ. Por outro lado, para aplicações de sensores resistivos e comutadores, o valor típico de resistor pull-up deve estar entre 1-10 kΩ.
Para resistores pull-down, deve sempre ter uma resistência maior que a impedância do circuito lógico. Ou então, ele reduzirá muito a tensão, e a tensão de entrada no pino permanecerá com um valor lógico baixo constante, independentemente do interruptor estar ligado ou desligado.