quinta-feira, 14 de julho de 2011

Conceitos básicos - parte 1 - pull-up / pull-down

Julho chegou e com ele as minhas férias da faculdade, hora de quebrar o jejum de atualizações!

Após algum tempo aprendendo (ou tentando aprender) sobre microcontroladores, alguns conceitos considerados básicos vão sendo absorvidos naturalmente, entre eles os (considerados por mim) principais são a adição de resistores de pull up/down ao projeto, utilização de técnicas de debouncing por hardware ou software e programação baseada em bit masking.

Como eu ainda não falei deles em nenhum post, resolvi que já era hora de deixar "catalogado"


Resistores de pull-up e pull-down

Resistores de pull-up / pull-down são resistores adicionados ao projeto para assegurar um certo nível lógico em um pino de entrada lógica, em outras palavras, eles forçam um estado ( 0 ou 1 ) no pino do microcontrolador caso a via fique em aberto, como por exemplo quando você conecta um botão ou algum outro  circuito que tenha saída aberta (como uma saída open collector)


Exemplificado:


pull-up, quando o botão não está pressionado (A) e quando está pressionado (B)

No caso desse exemplo:
(A) Quando o botão não está pressionado o resistor impõe o nível lógico 1 (5V) ao pino do microcontrolador, uma vez que a entrada do microcontrolador consome muito pouca corrente pode-se considerar que não haverá corrente fluindo pelo resistor e portanto pela lei de ohm a queda de tensão sobre ele será nula.
(B) Já quando o botão é pressionado, o terra é jogado diretamente no pino do microcontrolador levando seu nível lógico para 0 (0V), aterrando também o resistor, que consumirá uma corrente equivalente ao seu valor ôhmico.

Resistores de pull-down possuem praticamente o mesmo modo de operação, diferenciando dos de pull-up apenas pelo fato de serem conectados ao terra para forçar nível zero enquanto um botão (que agora será conectado ao Vcc)  não é pressionado.

Alguns cuidados na escolha do valor do resistor devem ser tomados em um projeto, o seu valor não pode ser baixo o suficiente para consumir uma corrente excessiva da fonte quando ele for aterrado, e nem alto o suficiente para que a corrente consumida pela entrada do microcontrolador (baixa, mas existente) cause uma queda de tensão muito grande sobre o resistor, levando a entrada a ficar em um nível flutuante, outro detalhe importante na análise é a resistividade de contato do botão utilizado, caso o botão apresente uma resistividade alta (contato sujo ou oxidado pelo tempo) e o resistor tenha um valor relativamente baixo, poderá haver na entrada uma tensão baixa o suficiente para causar flutuações, devido ao divisor de tensão formado entre o resistor e o botão. Valores usuais para os resistores são na casa das dezenas ou centenas de Kiloohms, mas dependendo das exigências e propriedades do projeto (tensão de operação, otimização para baixo consumo, etc) os valores podem mudar.

PS: grande parte dos microcontroladores atuais (como os MSP da TI) possuem resistores de pull-up e pull-down internos que podem ser ativados apenas configurando registradores, esse é um recurso simples e importante, pois além de economizar no projeto elétrico é possível desconecta-los apenas pela programação, algo desejado em alguns casos. Por isso, antes de colocar um resistor de pull-up/down em seu projeto, verifique se o microcontrolador utilizado não possui esta opção.

Próxima parte: Debouncing

4 comentários:

  1. Obrigado por dividir o seu conhecimento, foi muito proveitoso !

    ResponderExcluir
  2. muito obrigado pelo post, estou começando a estudar arduino, serviu muito.

    ResponderExcluir
  3. Li algumas páginas sobre o mesmo assunto pra chegar a um entendimento çegaç sbre o assunto, e a sua foi a que fez eu entender de uma vez por todas! PArabens e valeu!

    ResponderExcluir
  4. Muito bom hein, ótima ilustração!

    ResponderExcluir