Mikrokontrolery - Jak zacząć?

... czyli zbiór praktycznej wiedzy dot. mikrokontrolerów.

środa, 16 marca 2011

HC-05 (Bluetooth) - Informacje podstawowe


Autor: Dondu

Artykuł jest częścią cyklu: Bluetooth + mikrokontroler

W przypadku wykorzystania Bluetooth z mikrokontrolerami bardzo popularnym i tanim jest aktualnie (2014r.) wykorzystanie modułów pracujących w standardzie Bluetooth 2.0 + EDR (Enhanced Data Rate) - więcej na ten temat napisałem w poprzednim artykule. Wśród nich najpopularniejsze (2014 r.) są moduły z rodziny HC-xx, jak HC-05 i HC-06.

W niniejszym artykule i kolejnych omawiam Bluetooth na bazie modułu HC-05 ze względu na to, że moduł ten może być modułem Master lub Slave w zależności od wybranego przez programistę ustawienia.

Pojedynczy moduł HC-05 można kupić za kwotę kilku dolarów (3$-5$ gdy kupujemy w Chinach z darmową dostawą do Polski). Ten sam moduł w polskich sklepach, czy serwisach aukcyjnych kosztuje aktualnie (wrzesień 2014r.) 23-25zł/szt.


Wersje modułu HC-05

Jeżeli korzystasz z płytki stykowej warto by moduł ten posiadał dodatkowo goldpiny umożliwiające bezpośrednie wpięcie go do płytki stykowej. Z pomocą przychodzą różnej maści wersje HC-05 z dodatkowymi adapterami PCB:


HC-05 - wersje modułu z adapterami i bez
HC-05 - wersje


Niektóre wersje z adapterem posiadają dodatkowo regulator napięcia 3,3V i/lub przycisk - takie także mogą być. Generalnie jeśli kupisz dowolną wersję HC-05 będzie to wersja akceptowalna, więc nie ma obawy, że kupisz coś czego nie będzie można na bazie niniejszego cyklu wykorzystać :-)

Podstawowy moduł HC-05 można spotkać w co najmniej dwóch wersjach rozmiarowych, jednak aktualnie zdecydowanie częściej można kupić wersję o wymiarach 26 mm x 13 mm:


HC-05 - Moduł podstawowy
HC-05 - Moduł podstawowy


Tą drugą rzadziej spotykaną jest wersja 28 mm x 15 mm.





Budowa modułu

Na pierwszy rzut oka widać, że składa się on z dwóch układów scalonych. Pierwszy oznaczony jako BC417143B, a drugi może być różny np. EN29LV800CB.

Układ CSR-BC417-datasheet.pdf zawierający w sobie wiele modułów oraz mikrokontroler:


Schemat blokowy układu BC417143B
Schemat blokowy układu BC417143B


Jak widać na tym uproszczonym schemacie blokowym, moduł wykorzystuje zewnętrzną pamięć FLASH w której zapisany jest program, bez którego BC417143B jest nic nieznaczącym kawałkiem dobrej, aczkolwiek zupełnie niepotrzebnej elektroniki :-)

To właśnie zawartość pamięci FLASH stanowi o możliwościach danego urządzenia wykorzystującego układ BC417143B. Ponieważ moduły HC-05 są produkowane w Chinach stąd też często pamięć ta ma oznaczenie kontroli poprawności jej zawartości wykonane ręcznie za pomocą flamastra, co widać na zdjęciu powyżej.

W posiadanych przeze mnie modułach była to pamięć EN29LV800C: EN29LV800C.pdf (kopia)

Jeżeli będziesz zainteresowany dokładniejszym schematem wewnętrznym układu BC417143B znajdziesz go w dalszej części artykułu.

Moduł podstawowy w wersji najtańszej zawiera antenę wykonaną jako ścieżka PCB (patrz zdjęcie powyżej).

Płytka PCB jest wykonana w taki sposób, żeby można było przylutować ją do płytki PCB Twojego rządzenia. Jaki jest efekt końcowy możesz zobaczyć na zdjęciach pozostałych modułów. Takie rozwiązanie pozwala w prosty sposób używać moduł w urządzeniach docelowych.

Nic nie stoi też na przeszkodzie, by do modułu podstawowego dolutowywać przewody. To spartańskie rozwiązanie, ale do testów wystarczające:


Lutowanie przewodów do modułu HC-05
Tak też można :-)
Źródło: mcuoneclipse.com

lub tak:


Przykład lutowania przewodów do modułu RN-42
Źródło: mbed.org





Pinologia modułu podstawowego

W dokumentacji modułów można znaleźć schemat wyprowadzeń HC-05:


HC-05 - Opis wyprowadzeń


Do rysowania schematów wykorzystam znalezioną kiedyś w sieci bibliotekę programu Eagle:
Bluetooth-HC-05.lbr (kopia)


Symbol HC-05 w programie Eagle
Symbol HC-05 w programie Eagle


Znaczenie poszczególnych pinów omówię w kolejnych artykułach w miejscu, w którym będziemy je wykorzystywać.





Zasilanie modułu i pobór prądu

Ustalenie możliwych zakresów napięć zasilania modułów HC-05 może być dość trudne jeżeli chcesz zasilać moduły z napięć innych niż standardowy przedział 3,0V - 3,6V. Jest to szczególnie istotne dla aplikacji wykorzystujących ten moduł i pracujących z baterii, czy akumulatorów.

Wpływa na to szereg czynników:
  • czy jest to moduł podstawowy, czy też wyposażony w adapter,
  • czy moduł z adapterem zawiera regulator napięcia, czy też nie,
  • rodzaj zastosowanych w module podstawowym pamięci FLASH.


Moduły z adapterem

Niektóre wersje modułów znajdujące się w sprzedaży zawierają adaptery, na których umieszczone są różne dodatkowe elementy w zależności od wersji. Wśród nich mogą być regulatory napięcia najczęściej 3,3V, które pozwalają zasilać taką wersję modułu z napięcia wyższego niż 3,3V. W takim przypadku adaptery są dodatkowo oznaczone:


Moduł HC-05 z adapterami i regulatorem napięcia 3,3V
Moduł HC-05 z adapterami i regulatorem napięcia 3,3V


Przykład modułu z regulatorem:

Przykład modułu HC-05 z regulatorem napięcia 3,3V
Moduł HC-05 z adapterem i regulatorem napięcia 3,3V



Szukając w dokumentacji przykładowego modułu podstawowego HC-05 z adapterem można znaleźć na przykład informację, że tolerowany jest przedział 3.0V - 4.2V:


przy czym jeżeli adapter zawiera regulator napięcia (a tak w powyższym przypadku jest), to czasami można znaleźć jego schemat oraz informację, że moduł można zasilać (pin VCC adaptera) napięciem z przedziału 3.1V - 6,5V:




W innej wersji adaptera napięcia te mogą być inne, a to ze względu na zastosowanie innego regulatora napięcia, którego parametry mogą być inne w szczególności Dropout Voltage, który determinuje dolny zakres napięcia zasilania.

W dokumentacji BC417143B można znaleźć standardowy schemat aplikacyjny, w który układ ten zasilany jest napięciem 3,3V. Można więc przypuszczać, że większość modułów HC-05 z adapterem posiadającym regulator napięcia 3,3V tę część schematu ma właśnie tak rozwiązaną:


BC417143B - Podstawowy schemat aplikacyjny.


Na schemacie jest pokazana pamięć FLASH 8Mbit z dostępem równoległym: M29W800DB.pdf (kopia)
czyli inna niż w posiadanych przeze mnie modułach, choć im odpowiadająca.


Moduł podstawowy (bez adaptera)

W przypadku modułu podstawowego HC-05 (bez adaptera) przy braku jego dokumentacji musimy posiłkować się różnymi informacjami dot. układów wykorzystanych w module. Wiemy już, że są tam:
  • układ BC417143B,
  • pamięć FLASH.
co widać na powyższym schemacie.

W dokumentacji CSR-BC417143B-datasheet.pdf znajdujemy szereg informacji, w których można nieco się pogubić dlatego, że układ ten ma wiele pinów zasilających różne jego wewnętrzne moduły. Dodatkowo napięcia te mają różne wymagania dot. minimalnych i maksymalnych wartości:




Jak widać rozbieżności te są na tyle duże, że należy się nad tym głębiej zastanowić, jeżeli chcesz zasilać moduł napięciem innym niż z przedziału 3,0V - 3,6V.

Na pierwszy ogień powinniśmy wziąć pin VREG_IN ponieważ ma on znacząco inne wartości napięć granicznych określonych w powyższej tabeli. Z dokumentacji dowiadujemy się, że jest to wejście wewnętrznego regulatora napięcia, który jest włączany pinem VREG_EN:




Szukając dodatkowych informacji znajdujemy, że wewnętrzny regulator może służyć do zasilania tych pinów, które wymagają 1,8V, i że wyjściem regulatora jest pin VREG_ANA:




W powyższej tabeli znajdujemy także wstępne opisy pozostałych pinów. Zerkamy więc na ten fragment schematu aplikacyjnego:


BC417143B - Standardowe zasilanie.


Dla porządku odnajdujemy wewnętrzny regulator 1,8V na schemacie blokowym układu BC417143B:


Szczegółowy schemat blokowy układu BC417143B.
Szczegółowy schemat blokowy układu BC417143B.


Skoro więc z powyższej tabeli wynika, że VREG_IN (wejście regulatora) może mieć minimalną wartość 2,2V, a VDD_ANA (wyjście regulatora) musi mieć co najmniej 1,7V można więc się domyślić, że różnica tych napięć wynosząca 0,5V,  to parametr Dropout Voltage tego regulatora.

W związku z tym musimy wstępnie przyjąć, że moduł HC-05 nie może być zasilany z napięcia niższego niż:
  • 2,2V - gdy regulator wewnętrzny układu BC417143B jest włączony,
  • 1,7V - gdy regulator wewnętrzny układu BC417143B jest wyłączony.
i nie wyższe niż:
  • 3,6V - gdy regulator wewnętrzny układu BC417143B jest włączony,
  • 1,9V - gdy regulator wewnętrzny układu BC417143B jest wyłączony.
przy czym należy zaznaczyć, że większość modułów HC-05 wykorzystuje wewnętrzny (układu BC417143B) regulator 1,8V.

Super! Ale ....
... no właśnie teraz musimy popatrzeć na wąskie gardło, którym jest pamięć FLASH.

W przypadku obu pamięci, które przedstawiłem w niniejszym artykule napięcie zasilania zawiera się w przedziale 2,7V - 3,6V:






Wąskie gardło okazuje się być bardzo istotnym parametrem ograniczającym zakres napięć pracy modułów podstawowych HC-05. Możemy więc podsumować, że:

Dla większości przypadków moduły podstawowe pracować będą prawidłowo w przedziale napięć 2,7V - 3,6V pod warunkiem, że w ich dokumentacji nie jest wskazane inaczej.

Jeżeli posiadasz moduł z adapterem, który zawiera regulator napięcia przedział napięć zasilania takiego modułu jest oczywiście inny (zgodny z jego dokumentacją).


Podsumowanie

Szukając odpowiedzi na pytanie, jakimi napięciami może być zasilany moduł podstawowy HC-05 (w przypadku, gdy nie ma jasnej informacji w jego dokumentacji) posiłkujemy się ustaleniami na bazie dokumentacji zarówno układu BC417143B jak i zastosowanej pamięci FLASH.

Nie znając jednak dokładnie schematu modułu podstawowego warto dobrze go przetestować w szczególności dla napięć zasilania poniżej 3,0V.



Prądy pracy

W czasie parowania moduł pobiera maksymalnie 40mA. Po zakończeniu parowania prąd pobierany przez moduł spada do około 8mA. Producent podaje także, że średni prąd (brak jednoznacznej definicji) to około 25mA. Podane wartości dotyczą oczywiście tylko modułu podstawowego, a ten nie posiada żadnych dodatkowych elementów jak np. diody LED. Jeżeli więc stosujesz moduł z dodatkowymi elementami pobierany prąd może być odpowiednio większy.

W dokumentacji BC417143B znajdziemy także tabelkę z informacjami o maksymalnym szczytowym poborze prądu (na różnych etapach pracy układu):


BC417143B  - maksymalny szczytowy pobór prądu

Tabelka dotyczy oczywiście tylko układu BC417143B  i nie uwzględnia prądów pamięci FLASH oraz innych elementów modułu HC-05  i adaptera (jeśli takowy moduł posiada), a w szczególności diod LED.






Interfejs UART

Jednym z najważniejszych dla nas interfejsów jest UART. Dzięki niemu oraz profilowi SPP (który pisałem w poprzednim artykule), będziemy komunikować mikrokontroler z innymi urządzeniami. 

W związku z tym powinieneś znać ograniczenia jakie posiada moduł HC-05, a które dotyczą UART


Poziomy napięć pinów sygnałowych

Piny UART_TX (oznaczony jako UART_TXD w HC-05) oraz UART_RX (oznaczony UART_RXD) mają tolerancję napięć zgodną z wcześniej podanymi w niniejszym artykule, ale przyjrzyjmy się dokładniej dokumentacji BC417143B:



Mamy więc informację, że wszystkie piny sygnałowe UART są wykonane w technologii CMOS, a poziomy napięć zawierają się w przedziale od 0V do VDD_USB.

Dlaczego VDD_USB? Ponieważ pin ten jest pinem zasilającym moduły UART i USB:



Sprawdzamy więc jakie ograniczenia ma VDD_USB:




i już mamy pewność, że nie może przekroczyć 3,7V, a właściwie rekomendowanego 3,6V lub napięcia VDD którym jeśli zasilasz moduł podstawowy z napięcia niższego niż 3,6V (patrz opis napięć we wcześniejszej części tego artykułu). W tabeli jest także informacja, że margines bezpieczeństwa to VDD + 0,4V, ale lepiej stosować się do samego VDD.

Zapamiętaj więc:

Linie UART wymagają konwertera napięć, jeżeli mikrokontroler pracuje na napięciu wyższym niż moduł podstawowy HC-05.

Jeżeli ich nie zastosujesz moduł podstawowy może ulec uszkodzeniu!

Postanowiłem to uwypuklić ponieważ na różnych stronach internetowych możesz znaleźć błędne informacje, że moduły HC-05 tolerują napięcia 5V na liniach sygnałowych UART_TXD oraz UART_RXD. Wyjątkiem mogą być moduły z dodatkową płytką PCB (adapterami), na których zamontowano takie konwertery. Ja jednakże nie spotkałem się z takowymi.

W celu dokonania konwersji napięć możesz wykorzystać prosty dwukierunkowy konwerter poziomów (ang. level shifter):


Level shifter (dwukierunkowy konwerter poziomów na tranzystorach MOSFET).
Dwukierunkowy konwerter poziomów.

oparty o tranzystory MOSFET np. BSS138, 2N7000 lub podobne. Taki konwerter będę wykorzystywał w kolejnych częściach o HC-05.

Możesz także wykorzystać wersje wskazane w dokumentacji modułu HC-05:


Konwertery poziomów do modułu HC-05.




Błąd Baud Rate przy transmisji asynchronicznej 

Ponieważ będziemy wykorzystywać HC-05 do asynchronicznej transmisji szeregowej za pomocą interfejsu UART, powinniśmy zwrócić szczególną uwagę na problem rozsynchronizowania się transmisji poprzez błędy ustawień parametrów transmisji zarówno po stronie HC-05 jak i mikrokontrolera.

W tym celu zaglądamy do odpowiedniej tabeli:


gdzie stwierdzamy, że błąd nie mogą przekraczać 1%. Oznacza to, że w skrajnych przypadkach błąd ustawienia baud rate po stronie mikrokontrolera może zsumować się z błędem ustawień po stronie HC-05 i w konsekwencji transmisja danych może nie dojść do skutku lub powodować błędy.

Dlatego warto (na przykład w podstawowych mikrokontrolerach AVR), by mikrokontroler był taktowany poprzez zewnętrzny rezonator kwarcowy. Takie rozwiązanie da pewność działania w każdych warunkach temperaturowych, w których przyjdzie pracować Twojemu urządzeniu.

Zerkamy na kolejną tabelkę ze szczegółami ustawień dla poszczególnych prędkości transmisji:




Do testów możemy oczywiście stosować wewnętrzny generator RC mikrokontrolerów AVR, ale pewności poprawnej pracy mikrokontrolera z modułem HC-05 mieć nie będziemy.





Weak internal pull-up and pull-down

Znaczna części pinów sygnałowych posiada weak internal pull-up lub weak internal pull-down, czyli teoretyczny wewnętrzny rezystor zwierający pin odpowiednio do VDD lub GND. Nie jest to stricte rezystor, ale jest to upływność wewnętrznej struktury pinu, która w niektórych skrajnych przypadkach może być istotna dla projektowanego przez urządzenia.

Na przykładzie pinów UART:



Ale jakie to są wartości? Zerkamy do innej tabeli i znajdujemy:




Dlatego też niektórzy producenci modułów HC-05 zwracają uwagę na fakt, że w zależności od tego jak zaprojektujesz urządzenie czasami należy dodawać rezystory zewnętrzne do niektórych linii sygnałowych.





Ustawienia fabryczne

Istotne jest poznanie ustawień fabrycznych modułu, które umożliwią Ci wykonanie pierwszych testów:
  • Moduł jest ustawiony jako urządzenie Slave.
  • Nazwa modułu (pod którą zgłasza się w eterze) to: HC-05
  • Hasło (keypass, klucz dostępu): 1234

Oceń artykuł.
Wasze opinie są dla nas ważne, gdyż pozwalają dopracować poszczególne artykuły.
Pozdrawiamy, Autorzy
Ten artykuł oceniam na:

10 komentarzy:

  1. Kapitalny artykuł! Tej wiedzy właśnie szukałem. Czekam na kolejne części cyklu. Pozdrawiam i szacun!

    OdpowiedzUsuń
  2. Czy istnieje możliwość sparowania 1 mastera i 31 slaveów, tak, aby uzyskać radiowy odpowiednik sieci RS485?

    Pytam, ponieważ chciałbym zastąpić tor:

    UART <-> MAX485 <-> RS485 <-> skrętka dwu żyłowa <-> RS485 <-> MAX485 <-> UART

    torem:

    UART <-> radio <-> UART

    Połączone 32 hosty, transmisja half duplex (klienty odpowiadają na zapytania mastera), prędkość 4800, 8N1.

    OdpowiedzUsuń
    Odpowiedzi
    1. Bluetooth to komunikacja 1 do 1. Master musiałby się sam przełączać pomiędzy sparowanymi modułami co jest oczywiście możliwe, aczkolwiek nie realizowałem takiego projektu.

      I prośba - nie SPAMUJ tymi samymi pytaniami - resztę kopii usunąłem.

      Usuń
  3. Mam procesor zasilany +5V, w celu konwersji poziomu napięć wykorzystałem maxa3232 i połączyłem następująco: do 7 nożki - Tx procesora, do 8 - Rx procesora, do 9 - Rx HC i do 10 - Tx HC. Niestety na terminalu nic mi się nie pojawia. Przyjrzałem się więc drugiej wersji i zauważyłem połączenia UART_RXD -- RX_TTL. Zamiast UART_RXD nie powinno być UART_TXD? Dlatego podejrzewam, że źle interpretuje te schematy i dlatego mi nie działa.

    OdpowiedzUsuń
  4. Kompetentny człowiek i kompetentna wypowiedź. To lubię.

    OdpowiedzUsuń
  5. Witam,

    Bardzo przydatny artykuł.
    Jak rozróżnić moduły HC-05 i HC-06?

    Pozdrawiam,
    Adam

    OdpowiedzUsuń
  6. Mam problem z modułem HC-05 Chciałem by działał tak że po sparowaniu go z telefonem wykorzystać wyjście "status" do sterowania załączania lampki coś jak przełącznik zbliżeniowy. Wchodzę do pokoju a już wcześniej sparowany z moim telefonem moduł łączy się automatycznie i lampka się zapala. Odchodzę poza zasięg i lampka gaśnie, wracam zapala sie... Problem w tym że mimo że moduł jest sparowany to na wyjściu "Status" sygnał pojawia się dopiero po np uruchomieniu na telefonie konsoli tekstowej lub jakiegoś dedykowanego programu. Czy można jakoś wymusić by to połączenie było realizowane bez dodatkowej aplikacji w telefonie?

    OdpowiedzUsuń
    Odpowiedzi
    1. Wykonałem kiedyś aplikację, która gdy była uruchomiona próbowała się łączyć z konkretnym modułem Bluetooth o znanym adresie MAC. Po prostu co jakiś czas próbowała wykonać połączenie, i robiła to aż do skutku. Jeśli połączenie się zerwało ponownie przechodziła w tryb szukania połączenia. W ten sposób aplikacja mogła odczytywać dane z urządzenia, gdy było w zasięgu.

      Czy da się to zrobić bez aplikacji tego nie wiem, to raczej pytanie do specjalistów od Androida.

      Usuń
  7. To nie jest pytanie do specjalistów od androida ponieważ np stara nokia tez ma bluetooth a nie jest na androidzie. Dlatego napisałem: "Czy można jakoś wymusić by to połączenie było realizowane bez dodatkowej aplikacji w telefonie?" Może inaczej skonstruuje pytanie. Załózmy że ten moduł HC-05 jest zestawem głośnomówiącym, wchodze do auta a on sam sie łączy z dowolnym sparowanym telefonem. W tym wypadku zamysł jest taki: Wchodze do pokoju na liscie urzeadzen bluetooth odnajduje Mój HC-05 nazwany np lampka nocna i po sparowaniu na jego wyjsciu "STATUS" pojawia sie satn wysoki ktory zapala ta lampkę. Wychodzę z pokoju HC-05 traci zasieg i zrywa polaczenie, lampka gaśnie. Wracam do pokoju polaczenie jest nawiazywane lampka sie zapala itd.

    OdpowiedzUsuń
    Odpowiedzi
    1. Moim zdaniem to właśnie jest funkcjonalność systemu Android - to że nasłuchuje i obsługuje takie połączenia (np. zestawy głośnomówiące). Żadne bowiem urządzenie nie może wymusić na systemie podłączenia, gdy nie jest do tego uprawnione, gdyż to podważałoby bezpieczeństwo smartfonu. Gdyby tak było, natychmiast zostałoby to wykorzystane przez hackerów. Jeśli natomiast urządzenia są sprawowane, to właśnie Android obsługuje ich wykrywanie i użytkowanie.

      Nie jestem jednak specjalistą Androida, więc mogę się mylić. Może są jakieś bezpieczne furtki.

      Usuń

Działy
Działy dodatkowe
Inne
O blogu




Dzisiaj
--> za darmo!!! <--
1. USBasp
2. microBOARD M8


Napisz artykuł
--> i wygraj nagrodę. <--


Co nowego na blogu?
Śledź naszego Facebook-a



Co nowego na blogu?
Śledź nas na Google+

/* 20140911 Wyłączona prawa kolumna */
  • 00

    dni

  • 00

    godzin

  • :
  • 00

    minut

  • :
  • 00

    sekund

Nie czekaj do ostatniego dnia!
Jakość opisu projektu także jest istotna (pkt 9.2 regulaminu).

Sponsorzy:

Zapamiętaj ten artykuł w moim prywatnym spisie treści.