GPIO: Por que ligar o fio ao terra em vez de + 3.3v?

13

Na maioria dos exemplos que eu vi dos botões de fiação nas entradas GPIO, o botão é conectado para que, quando fechado, um circuito seja concluído entre o pino e o terra, produzindo uma entrada baixa no pino. Um resistor de pull-up é usado para padronizar o valor de entrada para alto. O código no Pi pode então detectar baixo com o pressionar de um botão.

Eu conectei os botões a + 3.3v, então o sinal é alto, pois isso parece fazer mais sentido e mantém o código mais lógico, mas deve haver uma razão para a maioria das pessoas preferir a conexão ao terra. Quais são as vantagens?

howard10
fonte
Nota: Quando digo 'resistor de pull-up', quis dizer um resistor externo físico ou o resistor de pull-up interno, configurado no código.
howard10

Respostas:

17

Uma das principais razões pelas quais os botões de fiação e a lógica do GND são favorecidos (e copiados em toda a Internet) é devido à otimização da energia.

  • Puxar um pino LOW com resistor para GND custa 0 watts.
  • Puxar um pino ALTO com resistor para + Vcc custa energia.

Em circuitos complexos ou que dependem de baterias, esse poder é muito precioso.

Outras razões incluem baixa geração de campos eletromagnéticos. Em dispositivos sem fio, a extração lógica alta causará interferência desnecessária em receptores de RF extremamente sensíveis. Nesses transceptores, existe um plano GND usado para filtrar o ruído e é para onde toda a lógica é reduzida. O processador usa o plano GND para filtrar os ruídos de comutação.

Piotr Kula
fonte
3
Como puxar para cima ou para baixo com um resistor custa alguma energia? A corrente está fluindo para uma entrada de impedância muito alta no Pi, que reduzirá qualquer corrente para sub-microAmps, que é microWatts de potência.
stefandz
OK, mas me diga se estou errado. puxar um alfinete para baixo, que é o 0v = 0wattsuso, mas puxar um alfinete para cima >0watts- qualquer tipo, micro, milli, nano, não importa. Como mencionado, na energia da bateria, cada nano watt ajuda. Mas, como já respondemos aqui ... no USB, isso não significa nada. Estou enganado?
Piotr Kula
1
Não é necessariamente verdade. As entradas digitais são de alta impedância à terra. Mas eles não são apenas resistores. Eles são portas de entrada, normalmente para FETs e essas portas não são ideais. Eles têm correntes de vazamento, e essas correntes podem estar na direção, dentro ou fora. Portanto, seu pulldown pode consumir um microwatt ou dois, tanto quanto um pullup.
stefandz
Se você tivesse que projetar um dispositivo incorporado que funcionasse com baterias 2AA e o cliente exigir, ele funcionará por pelo menos 12 meses. E você precisa reduzir / aumentar um GPIO. Qual você usaria para economizar mais energia. (Nós falar micro gestão aqui)
Piotr Kula
4
Pelo que vale a pena, fiz algumas medições sobre isso - e o pulldown ganha (para consumo de energia), mas apenas apenas. 10k pullup para 3.3V = 9fW (sim femtowatts) - 10k pulldown para o solo = 5fW. Isso certamente não é nem mesmo para economizar um pouco do território da bateria.
stefandz
9

Existem razões históricas complexas pelas quais os engenheiros elétricos geralmente puxam as entradas para o alto com resistores e usaram interruptores para aterrá-las.

No entanto, esses motivos não são particularmente relevantes para o uso do Raspberry Pi no hobby. Use o que fizer sentido para você.

Se você estiver produzindo um produto comercial ou quiser que seu design seja um pouco melhor, você escolherá pull-ups com uma chave de aterramento pelos seguintes motivos práticos:

  • Um fio terra longo apresenta menos risco de radiação EMI / EMC do que aquele conectado à energia
  • Aterrar algo e encontrar um ponto de aterramento para se conectar é mais fácil do que uma linha de energia
  • Se o interruptor ou a fiação, normalmente afastada do circuito, ficar danificada e colocar o fio ou as peças internas do interruptor no gabinete ou no usuário, nenhum dano será causado - está tudo no chão
Adam Davis
fonte
2

Estritamente não há necessidade de um resistor de pull-up, o BMC GPIO possui resistores de pull-up internos que são ativados quando programados como uma entrada, embora não causem danos.

Não é recomendável conectar um pino GPIO diretamente ao 3V3 ou ao GND. O GPIO é bidirecional e, se programado como uma entrada, isso não causaria problemas. Por outro lado, se programado como uma saída fará com que a corrente excessiva seja consumida.

Um bom projeto (seguro) usaria um resistor em série (1 kΩ) em série com o botão para limitar a corrente. Pelas razões apresentadas por Adam Davis, é preferível conectar o botão ao terra e localizar o resistor de proteção próximo ao pino GPIO.

Milliways
fonte
O único problema é que, durante as fases de inicialização 1-3, esses pinos estão flutuando (transferência de GPU para CPU) e, na Fase 4, durante a inicialização do Kernel Linux, os PINs são definidos no estado correto. Isso pode causar problemas sérios com portas aguardando lógica. Portanto, é aconselhável puxá-los para baixo de qualquer maneira, para que o período flutuante durante a inicialização não faça seus circuitos ficarem mentais!
Piotr Kula
1

Eu não acho que há uma razão para preferir um sobre o outro no RPi. A maioria das pessoas provavelmente está apenas copiando ou portando os circuitos que já viu em outros lugares.

Ao conectar o circuito (com fios ou PCB), basta escolher o que for mais conveniente e traduzi-lo para o significado correto no seu software.

John La Rooy
fonte
0

Nos velhos tempos do TTL, era muito mais atual puxar um pino para baixo do que puxá-lo para cima. Portanto, um resistor de pullup pode ter uma resistência mais alta (e, portanto, menos desperdício de energia) do que um resistor de pulldown. Não importa com o CMOS moderno, mas os velhos hábitos são difíceis.

Peter Green
fonte
-1

Conectar o pino ao terra com um resistor de pullup interno significa que você usa menos peças. Tudo que você precisa é de um botão; não precisa de um resistor externo para limitar a corrente.

tavis
fonte