Wokół Arduino. Właściwości wejść i wyjść
Już wiemy, że Arduino (konkretnie Arduino Uno) to dość prosty układ elektroniczny z popularnym mikroprocesorem Atmela. Aby uzupełnić podstawową wiedzę, powinieneś przyswoić sobie szereg ważnych informacji dotyczących końcówek wejścia/wyjścia (I/O).
Właściwości wejść i wyjść
Zawsze należy pamiętać, że w przytłaczającej większości układów CMOS na wejściach są wbudowane diody chroniące przed ładunkami statycznymi i że ze względów technologicznych każde wejście ma jakąś niedużą pojemność (rzędu 10pF), co przedstawione jest na rysunku 1.
Wskutek obecności diod ochronnych nie można na wejścia/wyjścia podawać napięć „zewnętrznych” wyższych niż napięcie zasilania i niższych niż potencjał masy, bo przez te diody ochronne popłynie prąd, który może nawet uszkodzić procesor.
Problem ten nabiera szczególnego znaczenia w układach zasilanych dwoma napięciami 5V i 3,3V. Ale wtedy w grę wchodzą też dodatkowe okoliczności i kwestiom tym poświęcimy oddzielny artykuł. A na razie sprawa prostsza, podstawowa: w Arduino Uno na piny nie wolno podawać napięć wyższych niż 5V. Podanie z zewnątrz napięcia wyższego może spowodować przepływ dużego prądu, podwyższenie napięcia zasilania i dosłowne spalenie układów scalonych.
W układach CMOS, a więc także w procesorze Atmega328 w Arduino, piny pracujące jako wejścia mają ogromną rezystancję wejściową. Jest to ogromną zaletą. Rysunek 2 pokazuje obwody obecne w każdym uniwersalnym pinie wejścia/wyjścia mikrokontrolerów Atmel. Niektóre piny mają jeszcze bardziej rozbudowane, dodatkowe obwody współpracujące z różnymi peryferiami procesora. Przykładowo w procesorze ATmega328 piny portu PC0…PC5 (w Arduino oznaczone A0…A5) dodatkowo mogą być dołączone przez multiplekser do wejścia 10-bitowego przetwornika ADC, co jak wiemy, pozwala mierzyć wartość napięcia z rozdzielczością 0,1%.
Wszystkie piny Arduino, także wejścia analogowe A0…A5, mogą być skonfigurowane jako wejścia cyfrowe, rozróżniające stany 0, 1 (LOW, HIGH). Warto wiedzieć, że na każdym „cyfrowym” wejściu pracuje bufor – przerzutnik Schmitta, który zapewnia histerezę. Według katalogu histereza nie jest mniejsza niż 5% napięcia zasilania, co przy Vcc = 5V dawałoby minimum 250mV. Jak jednak wskazuje rysunek 3, przy zasilaniu 5V typowo powinna ona być większa, nieco ponad 0,5V, czyli ponad 10%. Obecność histerezy jest istotną zaletą i warto ją wykorzystywać!
W skomplikowanej scalonej strukturze z rysunku 2 mogą się pojawić szkodliwe prądy upływu. Producent ostrożnie i asekuracyjnie gwarantuje, że będą mniejsze niż 1 mikroamper, ale w praktyce są wielokrotnie mniejsze od tej wartości. Dzięki temu przy pracy w roli wejścia pin ma bardzo dużą rezystancję wejściową, rzędu wielu, nawet setek megaomów. Także gdy piny A0…A5 pracują „analogowo” jako wejścia przetwornika ADC, też mają ogromną rezystancję, typowo 100 megaomów.
Z jednej strony to bardzo dobrze, ale duża rezystancja wejściowa oznacza, że na pinach mogą się łatwo indukować napięcia zakłócające, zwłaszcza o częstotliwości sieci 50Hz, a to może zwiększyć pobór prądu związany z niepotrzebnym przełączaniem tranzystorów w obwodach wejściowych.
Oporność wejść analogowych
Wprawdzie typowa statyczna rezystancja wejściowa przetwornika ADC jest ogromna (100MΩ), ale pracuje tam też kondensator próbkująco-pamiętający (CSH – sample and hold) dołączany przez rezystancję 1…100kΩ. Warto pamiętać, że maksymalna częstotliwość pracy przetwornika ADC wynosi od 15000 do 80000 pomiarów na sekundę. W sumie chodzi o to, że pomiędzy kolejnymi pomiarami ADC kondensator CSH musi się w pełni naładować, dlatego zaleca się, żeby rezystancja wewnętrzna źródła sygnału mierzonego nie była większa niż 10kΩ.
Ponieważ pojemność CSH (14pF) i „zawsze obecna” pojemność wejściowa CI (ok. 10pF) są małe, problem dotyczy często powtarzanych pomiarów ADC, w praktyce głównie sytuacji, gdy chcemy rejestrować wyższe napięcia zmienne i na wejściu analogowym dodajemy dzielnik według rysunku 4. Aby nie stwarzać problemu, dolny rezystor dzielnika (RA) nie powinien być większy niż 10kΩ.
Przy okazji warto podkreślić, że zwykle nie musimy żmudnie dobierać dzielnika o „okrągłej” wartości tłumienia, ponieważ i tak musimy skalibrować taki woltomierz programowo. W bardziej precyzyjnych zastosowaniach należy tylko zadbać, by rezystory miały jak najmniejszy współczynnik cieplny. Popularne rezystory metalizowane często mają współczynnik cieplny 50…100ppm/°C (0,005…0,01%/°C), czyli dużo gorszy niż współczynniki termiczne wielu zewnętrznych źródeł napięcia odniesienia. W wątpliwych przypadkach warto sprawdzić stabilność cieplną dzielnika napięcia, podgrzewając go pomału np. suszarką do włosów.
Właściwości wyjść
Jeżeli chodzi o pracę pinów w roli wyjść, to trzeba pamiętać, że tranzystory w stopniu wyjściowym portu procesora mają niezerową rezystancję w stanie włączenia. Rezystancja RDSon tranzystorów wyjściowych typowo wynosi około 25 omów, więc w pierwszym przybliżeniu końcówkę pracującą jako wyjście można traktować zgodnie z rysunkiem 5.
Jak pokazuje pochodzący z katalogu rysunek 6, „idealnie czyste” stany logiczne, równe potencjałowi masy i napięcia zasilania, wystąpią na wyjściach wtedy, gdy nie będzie płynął tam prąd.
Według katalogu prąd wyjściowy, czy to wpływający, czy wypływający, nie powinien przekraczać 40mA dla pojedynczego pinu, 100mA dla wszystkich pinów danego portu oraz w sumie 200mA dla wszystkich pinów procesora. Należy dążyć do tego, żeby prądy poszczególnych wyjść były mniejsze niż 40mA, najlepiej by nie przekraczały 10mA. W zastosowaniach, gdzie precyzyjnie mierzone mają być wartości analogowe, trzeba jeszcze bardziej minimalizować wszelkie prądy, by zmniejszyć spadki napięć na rezystancjach ścieżek/przewodów oraz by zmniejszyć wzrost temperatury wynikający z grzania się struktury mikroprocesora.
Piotr Górecki