Miesięczne archiwum: Grudzień 2009

Gdy prądu brakuje

Prędzej czy później w eksperymentach z Arduino będziemy chcieli wysterować jakieś urządzenie, które do pracy potrzebuje więcej niż 40 mA, które może zapewnić cyfrowe wyjście z Arduino. Może to być przekaźnik, żaróweczka czy inne bardziej zachłanne urządzenie.

Co zrobić?

Pozostaje skorzystać z tranzystora jako elementu wzmacniającego. Techniki analogowe, to jest temat rzeka, na którym się na dodatek nie znam :) (każdy kto ze mną studiował wie co mam na myśli :) ), tutaj postaram się przekazać parę informacji, które mogą pozwolić na sterowanie urządzeniami o większym poborze prądu. Niniejszy przykład bazuje na materiałach wchodzących w skład Arduino Starter Kit dostępnego na Nettigo.pl.

Co musisz wiedzieć o tranzystorach.

Rodzaje – ze względu na ich budowę. Podstawowe dwie grupy to bipolarne i unipolarne. My teraz zajmiemy się bipolarnymi. Bipolarne mają dwie podgrupy – tranzystory NPN i PNP. Różnica jest w tym jak poukładany w środku jest materiał półprzewodnikowy, a na zewnątrz różnią się tym jak należy polaryzować poszczególne wyprowadzenie i jak płynie prąd.

Wydaje mi się, że prostszym do zastosowania w przypadku gdy chcemy wysterować z Arduino jest NPN i takim się teraz zajmiemy – bo tranzystor NPN sterujemy napięciem dodatnim a takie Arduino oferuje na swoim wyjściu cyfrowym.

Symbol tranzystora bipolarnego typu NPN

Symbol tranzystora bipolarnego typu NPN

Tranzystory bipolarne mogą pracować w różnych układach i każdy z nich może mieć różne zastosowanie. My potrzebujmy aby mały prąd z wyjścia cyfrowego Arduino włączał i wyłączał przepływ znacznie większego prądu przez tranzystor (gwoli ścisłości układ w jakim będziemy podłączać tranzystor nazywany jest kluczem tranzystorowym).

W tym układzie tranzystor jest przełączany między dwoma stanami: nasycenia i zatkania.

  • stan zatkania: napięcie UBE jest zbyt małe, aby złącze baza-emiter zaczęło przewodzić. W rezultacie żaden prąd nie płynie przez kolektor tranzystora.
  • stan nasycenia: do bazy wpływa tak duży prąd, że zależność IC=hFE*IB nie może być spełniona. Wtedy napięcie UCE spada niemal do zera.

W praktyce prąd kolektora w stanie nasycenia jest ograniczony jedynie obciążeniem, czyli tym, co podłączymy pomiędzy kolektor a zasilanie. Ograniczeniem jest też wydajność zasilacza, którego używamy. Należy również uważać, żeby nie przekroczyć maksymalnego dozwolonego prądu kolektora, który dla obecnie dodawanego do Starter Kitu tranzystora MPS2222A wynosi 600mA.

Jak to wygląda w praktyce?

Zanim zaczniemy szkicować układ – zasady polaryzacji tranzystora NPN tak aby pracował jako przełącznik będą spełnione gdy:

  • emiter podłączymy do masy
  • na bazę podamy napięcie dodatnie (przełącznik przewodzi) lub 0 (przełącznik jest rozwarty)
  • do kolektora podłączymy przez obciążenie zasilanie

Czyli:

Tranzystor NPN - idea wykorzystania

Tranzystor NPN - idea wykorzystania

Gdy zewrzemy przełącznik S1 (odpowiada to ustawieniu wyjścia cyfrowego Arduino w stanie wysokim), do bazy tranzystora zaczyna płynąć prąd. Musi on być na tyle duży, żeby tranzystor wszedł w stan nasycenia, czyli napięcie UCE spadło poniżej UCE(sat) (napięcie nasycenia kolektor-emiter). Według karty katalogowej, wartość UCE(sat) zależy od prądów IC oraz IB i można ją przyjąć mniej więcej jako 0.3V.

W skład Arduino Starter Kit nie wchodzi żaden element, który sam z siebie mógłby służyć jako odbiornik prądu większego niż 40 mA. Ale możemy połączyć równolegle kilka diód LED aby przekroczyć ten próg i zademonstrować całość zagadnienia w praktyce.

Przykład wykorzystania 4 diód do przekroczenia 40 mA obciążenia

Przykład wykorzystania 4 diód do przekroczenia 40 mA obciążenia

Oszacujmy prąd płynący przez jedną diodę – napięcie odkładające się między kolektorem a emiterem w stanie nasycenia to w przybliżeniu 0V. Na diodzie czerwonej odkłada się mniej więcej 1.8V czyli na rezystor zostaje 5-1.8 = 3.2. Przy rezystorach R2-R5 280 ohm prąd przez nie płynący powinien być 3.2/280 = 11.42 mA. Przy 4 diodach powinno to dać nam około 45 mA.

Zanim podłączymy tranzystor musimy wiedzieć która nóżka jest która:

MPS2222A - opis wyprowadzeń

MPS2222A - opis wyprowadzeń

  1. emiter
  2. baza
  3. kolektor

Fizyczne podłączenie elementów zilustrowane we Fritzingu (przyznam szczerze – tym razem nie da się tego łatwo rozczytać – zdjęcia będą chyba lepszą ilustracją):

Fizyczne podłączenie układu

Fizyczne podłączenie układu

I dwa zdjęcia (w lewej części płytki stykowej jest zmontowany inny układ, więc to co widać poniżej rzędu 25 na płytce nie ma żadnego związku z układem tutaj opisywanym):

Fizyczna realizacja - ujęcie pierwsze

Fizyczna realizacja - ujęcie pierwsze

Fizyczna realizacja - ujęcie drugie

Fizyczna realizacja - ujęcie drugie

Uwaga montażowa – obcięte nóżki rezystorów nadają się doskonale do robienia krótkich zworek na płytce stykowej – na zdjęciu widać je bardzo wyraźnie.

Dla kompletu – bill of materials wygenerowany z Fritzinga (wszystkie potrzebne elementy wchodzą w skład Arduino Starter Kit od Nettigo):

Fritzing Bill of Materials

Sketch: 	tranzistor.fz
Date: 	Mon Dec 14 10:30:33 2009

Arduino       Arduino Diecimila
Breadboard1   Generic Breadboard
LED1          Red LED - 5mm
LED2          Red LED - 5mm
LED3          Red LED - 5mm
LED4          Red LED - 5mm
Q1            NPN-Transistor
R1            220Ω Resistor
R2            220Ω Resistor
R3            220Ω Resistor
R4            220Ω Resistor
R5            220Ω Resistor

Shopping List

Quantity	Part

5		220Ω Resistor
1		Arduino Diecimila
1		Generic Bajillion Hole Breadboard
1		NPN-Transistor
4		Red LED

Oczywiście rezystory 220Ω to rezystory dodawane w Arduino Starter Kit do diód LED i mogą mieć inne wartości – z przedziału 200Ω do 280Ω. Niezależnie od wartości niniejszy układ będzie działał.

Szkic do Arduino to klasyczny przykład Blink:

/*
 * Blink
 *
 * The basic Arduino example.  Turns on an LED on for one second,
 * then off for one second, and so on...  We use pin 13 because,
 * depending on your Arduino board, it has either a built-in LED
 * or a built-in resistor so that you need only an LED.
 *
 * http://www.arduino.cc/en/Tutorial/Blink
 */

int ledPin = 02;                // LED connected to digital pin 13

void setup()                    // run once, when the sketch starts
{
  pinMode(ledPin, OUTPUT);      // sets the digital pin as output
}

void loop()                     // run over and over again
{
  digitalWrite(ledPin, HIGH);   // sets the LED on
  delay(4000);                  // waits for a second
  digitalWrite(ledPin, LOW);    // sets the LED off
  delay(2000);                  // waits for a second
}

Jeszcze na koniec jakie wartości zostały uzyskane w rzeczywistym układzie? Dla rezystorów 280Ω:

  • napięcie zasilania – 4.96V
  • napięcie na tranzystorze w stanie aktywnym UCE 0.03 V
  • napięcie na diodach LED podczas świecenia – od 1.86 do 1.93 V
  • prąd płynący przez diody (już nie mierząc rzeczywistej rezystancji R2-R5, bo każdy z nich może mieć rozrzut +-5%) – od 10.7 mA do 10.9 mA

Jako ćwiczenie domowe – można zmienić pin użyty do sterowania tranzystorem na któryś obsługujący PWM i zamiast używać digitalWrite użyć pętli z analogWrite i sterować jasnością świecenie diód. Film ilustrujący działanie takiego podłączenia:

Driving over 40mA of current – PWM version from Starter Kit on Vimeo.

Dziś przydługawy wpis, ale musiałem zmieścić tutaj trochę teorii. Bardzo się starałem, aby nie wprowadzić tutaj nieścisłości, ale przyznaje się, że technika analogowa nie jest moją mocną stroną :)) Jeżeli widzisz w tym tekście jakieś niedokładności – proszę daj mi znać, postaram się uściślić.

Czujnik przyspieszenia

Niniejszy post służy jako podstawa do stworzenia dokumentacji dla czujnika przyspieszenia znajdującego się w ofercie Nettigo od kilku dni.

Płytka jest oparta o układ MMA7341L produkcji Freescale Semiconductor, oferuje on pomiar przyspieszenia w trzech osiach, z wyjściem analogowym oddzielnym dla każdej osi. Dwa zakresy czułości – +-3g lub +-11g, tryb pracy lub tryb sleep o niskim poborze mocy.
Układ pracuje na zasilaniu 3.3V (które to napięcie dostarcza Arduino)

Numeracja wyprowadzeń (patrząc od góry)

Numeracja wyprowadzeń (patrząc od góry)

  1. self test
  2. g select
  3. sleep
  4. Vcc 3,3 V
  5. Z out
  6. Y out
  7. X out
  8. GND

Osie w których dokonywany jest pomiar określa niniejszy rysunek:

Osie pomiaru przyspieszenia

Osie pomiaru przyspieszenia

Skrócony opis podłączenia:

  1. do masy (podanie 3.3 V wywołuje test dodający 1g w osi Z)
  2. do masy aby pracować w trybie 3g, 3.3 V aby pracować w trybie 11g
  3. 3.3 V aby układ pracował, do masy aby przejść w tryb sleep
  4. zasilanie 3.3 V
  5. wynik pomiaru przyspieszenia w osi Z
  6. wynik pomiaru przyspieszenia w osi Y
  7. wynik pomiaru przyspieszenia w osi X
  8. masa

Szczegółowy dokument z danymi układu MMA7341L jest do pobrania ze strony czujnika w zakładce Pliki.

Czujnik przyspieszenia jest do nabycia w cenie 49 PLN netto (59.78 PLN brutto)