Pull-up a pull-down rezistory

Page

Stránky / Arduino / Pod kapotou Arduina /

V textoch o Arduine sa s týmito pojmami stretnete veľmi často a akosi sa pritom predpokladá, že viete o čom sa hovorí. Ale pre začiatočníka nie je vôbec jednoduché pochopiť všetky tie drobné informácie, ktoré sa ku týmto pojmom viažu.

Čo je nezapojený vstup?

Vyskúšame si príklad, ktorý nájdete v IDE. AnalogReadSerial zo stránky http://arduino.cc/en/Tutorial/AnalogReadSerial. Dôležité je nedržať sa pokynov o pripojení potenciometra a nechať pin A0 nezapojený. Aby sa s tým trošku lepšie manipulovalo, tak možno ku nemu pripojiť jeden vodič, ale jeho druhý koniec treba nechať voľne (podľa možností ale len tak volne, aby sa nemohol dotknúť niečoho vodivého na Arduine).

// the setup routine runs once when you press reset:
void setup() {
  // initialize serial communication at 9600 bits per second:
  Serial.begin(9600);
}

// the loop routine runs over and over again forever:
void loop() {
  // read the input on analog pin 0:
  int sensorValue = analogRead(A0);
  // print out the value you read:
  Serial.println(sensorValue);
  delay(1);        // delay in between reads for stability
}
A teraz poďme experimentovať. Pustite si monitor sériového portu a sledujte aké hodnoty sa vypisujú. Nie je to ani 0, ani 1023, ale je to hodnota niekde medzi nimi a stále sa mení, pričom osciluje okolo určitej hodnoty. V závislosti na okolitom prostredí bude oscilácia väčšia alebo menšia. Ak sa dotknete prstom vodiča, uvidíte väčšiu zmenu a ak vodič pripojíte na GND alebo +5 V, uvidíte aj vytúženú 0 alebo 1023.
Tomu, že na pine A0 sa mení nameraná hodnota a nikdy nie je v nejakom dobre popísateľnom stave hovoríme nezapojený vstup alebo vysoká impedancia. Na Wikipédii je okolo toho veľa popísaného, ale len v angličtine. http://en.wikipedia.org/wiki/High_impedance
 

Čo zlého sa môže stať?

Už ste sa asi dovtípili, že pull-up a pull-down rezistory slúžia na zabraňovanie tomu nechcenému, teda nedefinovanému stavu.

Poďme na konkrétny príklad. Na ilustračnom obrázku je typické zapojenie pomocou mosfetu, ktoré ovláda motor. Pull-down je v tomto prípade R1. Ak by v danej schéme nebol, motor by ste boli schopní naštartovať aj brnknutím prstov po kontakte 1A. A možno by ste ho ani neboli schopní vypnúť. Už aj z vašich prstov sa vie na gate mosfetu dostať taký náboj, že zopne mosfet. A keďže mosfet potrebuje iba trošku prúdu na zopnutie a cez nezapojený vstup 1A nemá tento náboj kam odtiecť, môže to ostať stále zapnuté.
Preto sa do obvodu pridáva R1, ktorého úlohou je odvádzať takýto nechcený náboj na GND a tým daný vstup držať v nezapojenom stave stále na 0 V.
Môžete si povedať, že ak by bolo na 1A trvalo pripnuté Arduino, nič takého sa stať nemôže. Bohužiaľ môže, pretože aj Arduino, ak vyslovene na pine nepoviete, že sa jedná o výstup a má logickú hodnotu 1 alebo 0, tak sa nachádza vo vysokej impedancii. Ale aj v prípade, že by ste to hneď urobili vo funkcii setup, stále hrozí nebezpečenstvo, že sebou motor aspoň šklbne pri zapínaní. Štart Arduina trvá zlomok času a počas neho neviete zaručiť, že sa na gate mosfetu nenazbiera dostatok náboja na zopnutie.

Pull-up

Pull-up rezistor sa používa na udržanie napätia na danom vstupe na hodnote napájacieho napätia. Wikipédia o tom má veľký článok, ale opäť len v angličtine. http://en.wikipedia.org/wiki/Pull-up_resistor. Ukážku vidíte na obrázku. Presne takto máte zapájať tlačidlá, ktorých hodnotu čítate v Arduine. Funguje to tak, že vďaka rezistoru je na konkrétnom vstupe vždy logická jednotka a len v prípade, že stlačíte tlačidlo, sa na vstupe objaví logická nula.

Ak si kladiete otázku, že prečo to robiť akože nelogicky a mať pri zopnutí nulu, tak si treba uvedomiť, že tento princíp sa používa v mierne pozmenenej podobe na komunikáciu medzi logickými obvodmi a že na to tí tvorcovia obvodov asi mali dobrý dôvod.
Veľkosť hodnoty rezistora nie je kritická, pokiaľ sa hráte takto s tlačidlom a bude obvykle 10k, aby sa nespotrebovalo priveľa prúdu pri zopnutí tlačidla. Pri elektronickej komunikácii medzi obvodmi sa používa aj obľúbená hodnota 4k7. Ak sa ale jedná o komunikáciu vyššími rýchlosťami, niekedy sa používa aj menšia hodnota rezistora na úkor spotrebovaného prúdu, pretože čím je vyššia hodnota rezistora, tým dlhšie trvá, kým cez konkrétny rezistor pretečie dostatok prúdu, aby sa zmenil stav medzi logickou jednotkou a nulou.

Pull-down

Pull-down rezistor sa používa na udržanie napätia na danom vstupe na hodnote GND. Jeho konkrétne použitie sme videli na príklade s motorom.

Interný pull-up v Arduine

Mikrokontrolér ATmega328P a ďalšie z tejto rady umožňujú zapnúť na digitálnom pine pull-up rezistor. Na čo je to dobré? Dá sa tak napríklad ušetriť rezistor na plošnom spoji, ktorý potom nezaberie toľko miesta. Interné rezistory sú s hodnotou približne 50k, presná hodnota nie je známa a dokumentácia iba naznačuje, že je to niekde okolo tejto hodnoty. Pull-up zapnete tak, že použijete nasledovné funkcie:
  • pinMode(5,OUTPUT); - Pin sa prepne ako výstup.
  • digitalWrite(5,HIGH); - Zapíše sa naň logická jednotka.
Že je na pine logická jednotka ľahko zistíte multimetrom.

 


05.07.2015


Menu