Uso do resistor pull-up e pull-down nos pinos do MCU de entrada ou saída

18

Os resistores pull-up / down (internos ou externos) são necessários apenas para os pinos de entrada da MCU? Por outro lado, um pino MCU configurado como OUTPUT "sabe em que nível está" porque faz a condução - um pino "flutuante" MCU OUTPUT amarrado a alguma entrada de outro circuito não faz sentido, porque o estado do pino MCU só pode ser alto ou baixo ... eu tenho isso certo? Agora, após a inicialização ou falha do MCU, pode ser benéfico ter um pull-up / down vinculado a esta linha "Saída MCU para entrada de IC" para garantir que a entrada para algum IC nunca esteja flutuando.

Talvez eu tenha respondido minha própria pergunta aqui ... resistores pull-up / down podem ser usados ​​nos pinos de entrada e saída, dependendo da aplicação?

The_Ders
fonte

Respostas:

21

Pull-up e pull-downs são normalmente usados ​​para garantir que uma linha tenha um estado definido enquanto não estiver ativamente acionada. Eles são usados ​​em entradas para evitar linhas flutuantes, alternando rapidamente entre alto e baixo e uma região "indefinida" média. As saídas normalmente não precisam delas.

Mas a maioria dos pinos mcu é GPIO e, às vezes, na inicialização, são definidos como entradas em vez de saídas. Como você disse, às vezes você não deseja uma entrada de pino de IC flutuando na inicialização, especialmente como um pino de redefinição que você normalmente usaria com o GPIO do seu microcontrolador.

É quando você usa um pull-up ou pull-down fraco na linha. Como eles são fracos e você escolhe o estado padrão, eles não interferem com o seu circuito (se a entrada deveria ser baixa o tempo todo, então é puxada para cima, você escolhe um pull-down fraco e vice-versa), mas eles consomem um pouco de corrente. É por isso que você escolhe um resistor fraco (quanto maior o valor, mais fraco) o suficiente para o trabalho.

Outra configuração de saída normal que usa pull-ups (ou pull-downs, mais raros) são as conexões Open Drain ou Open Collector . Eles apenas reduzem a conexão ou liberam a linha, deixando-a flutuante. As pull-ups são usadas para trazer a linha a um estado lógico alto.

Transeunte
fonte
Você mencionou as conexões Open Drain e Open Collector; elas não se aplicam aos microcontroladores, não é? Apenas Mosfets sendo usados ​​para definir um nível lógico? Eu queria esclarecer se um microcontrolador pode ou não conduzir uma linha que possui um resistor pull down alto.
genericpurpleturtle
9

Você está certo; normalmente você não precisa de pullups nas saídas, mas elas podem ser úteis para manter a segurança durante o tempo de inicialização etc.

Um outro motivo para usar um pull-up em uma saída: se várias saídas de vários MPUs estiverem conectadas uma à outra, você realmente não quer uma unidade VCC e outra unidade 0V no mesmo fio! Então você dirige 0V na saída ou a desliga (talvez configurando-a como uma entrada). Quando todas as saídas estão desligadas, o fio é puxado para '1' (Vcc) pela tração. Isso é chamado de sinal "AND com fio". (Você pode fazer o mesmo acionamento '1' ou desligado, com um R suspenso, depois é chamado de OR com fio).

Esse padrão tem vários usos, incluindo permitir que qualquer MPU sinalize um erro ou acenda um LED ou permita que todos revezem o envio de mensagens um para o outro em um único fio.

Brian Drummond
fonte
4

Como você afirmou, o uso de resistores pull-pull / pulldown nos pinos que se espera serem pinos de saída pode estar lá para garantir um estado de entrada.

Isso é feito para reduzir a falha do firmware / MCU, mas funcionará apenas para proteger contra o estado de alta impedância (basicamente o pino é configurado como entrada por acidente).

Na maioria das MCU, eu conheço os pinos de E / S padrão para o estado de entrada de alta impedância na inicialização (mas não há garantia, e não tenho experiência em nenhum lugar perto de todas as famílias de MCU), o que significa que pode levar algum tempo até o código inicializar o pino. estado é executado.

Às vezes isso não importa, outras vezes.

helloworld922
fonte
Obrigado pela resposta, que complementa as outras respostas também! Para sua informação, a série PIC24F padroniza os pinos GPIO para alta impedância (entrada) após a redefinição (folha de dados dos pinos de E / S).
19413 The_Ders
3

A resposta é que depende da família de microcontroladores e o comportamento padrão está no Power On Reset. Se o microcontrolador puder ser configurado apenas para "saída" ou "entrada" em um pino, isso normalmente significa que ele está usando um driver Totem-Pole para saída - ou seja, é essencialmente a saída de uma porta CMOS, nesse caso a a saída é sempre direcionada a um trilho, portanto não há razão para influenciá-lo passivamente. O único caso em que faz sentido usar pull-ups / pull-downs em uma saída é quando ele é configurado como topologia Open Collector / Open Drain. É muito mais comum ver opções internas de pull-up / pull-down que são aplicáveis ​​apenas quando um pino é configurado como entrada. Se você pode garantir que em seu sistema a entrada seja sempre motivada por algo, isso desperdiçará um pouco de energia.

vicatcu
fonte
Ótima explicação no nível do hardware. Obrigado!
The_Ders
2

Você pode ter um pino que é uma saída algumas vezes , como para I2C.

pjc50
fonte
Vou manter isso em mente ao trabalhar com o I2C no futuro. Acredito que, com a série PIC24F, o módulo I2C assume controle total sobre os pinos e as linhas requerem flexões externas. Agora eu sei por que isso ocorre - o módulo I2C está configurando essencialmente o pino de dados como saída de dreno aberto / coletor (exigindo um resistor de pull-up) ou entrada de alta impedância, dependendo se os dados estão sendo enviados / introduzidos de / para o Módulo I2C ... eu tenho isso certo? Eu não estou tão familiarizado com I2C.
19413 The_Ders
Isso é exatamente correto.
Pjc50
I2C é uma instância do padrão AND com fio. O coletor aberto simplifica o máximo possível com um pino GPIO.
Brian Drummond