Při výstavbě každé nové ulice musí inženýři zvážit otázku jejího nočního osvětlení. Pouliční světla bývají zpravidla síťově napájena, takže někdo musí u okraje silnice vyhloubit příkopy, položit kabely a také nainstalovat potřebné vybavení. Především v nově zastavěných oblastech začínáme pozorovat trend v podobě solárně napájených světel. V současné době jsou taková světla ve srovnání s klasickými přístupy dražší, ale díky rostoucím cenám energií se vynaložené náklady docela rychle vrátí zpět. Kromě toho ušetříme i za měď, stejně jako za samotnou výstavbu.
Nyní si představte, že máte cestu, která bude osvětlena solárně napájenými lampami, přičemž každá z nich má své vlastní světelné čidlo, které ji po setmění aktivuje. Rozptyl parametrů čidel a také ostatních elektronických součástek způsobí rozsvěcení v různých časech, tzn. bez jakékoli synchronizace. Na to nám přece žádný starosta nekývne! Abychom tedy v dané ulici aktivovali všechna světla ve stejném čase, potřebujeme vhodnou synchronizaci, pokud možno bez jakýchkoli kabelů.
Standardizovaným protokolem pro oblast domácí automatizace (Home Automation), chytrého nakládání s energií (Smart Energy) nebo celou řadu dalších aplikací se stává ZigBee. Nabízí některé užitečné vlastnosti, ze kterých mohou vývojáři, ve věci zmíněné synchronizace, zcela jistě těžit. V prvé řadě zde pracujeme v bezlicenčním pásmu ISM na 2,4 GHz. S touto technologií rovněž jednoduše překleneme obvyklé vzdálenosti mezi jednotlivými lampami – 40 až 60 metrů. Největším přínosem se však stává podpora principů Mesh ze strany ZigBee. V síti typu Mesh bude informace ze zdrojového do cílového uzlu nesena prostřednictvím routerů. V případě pouličního osvětlení mohou být jako routery nakonfigurována jednotlivá světla.
Obr. 1: Zvýšení dosahu prostřednictvím sítě Mesh
Použijeme – li ZigBee Stack od společnosti Texas Instruments, můžeme se zaměřit pouze na samotnou aplikaci, tj. jedno jediné čidlo, implementované v lampě, a světla, která budou signál z takového senzoru přijímat. Vývoj celé aplikace si projdeme a vysvětlíme v tomto článku.
Jak ostatně vidíme na obr. 1, musíme zajistit dvě aplikace:
-
Koordinátor s následujícími úkoly:
-
detekce intenzity osvětlení prostřednictvím rezistoru, citlivého na světlo
-
výstup PWM signálu, odpovídajícího míře zatemnění, pro řízení samotné lampy
-
vyslání PWM signálu tak, aby všechny zbývající lampy obdržely stejnou řídicí informaci
-
Router s následujícími úkoly:
-
příjem PWM signálu
-
výstup přijatého signálu pro řízení jasu lampy
-
do uzlu každé lampy může být naprogramován stejný SW routeru – nemusíme si totiž dělat starosti o adresování, routing, stejně jako všechno ostatní, má totiž na starosti ZigBee Stack
Hardware, použitý k výstavbě této sítě, je dostupný u Texas Instruments:
Obr. 2: SmartRF05 Evaluation Board s CC2530EM
Desky mohou být napájeny a také programovány s využitím USB kabelu; nepotřebujeme žádný přídavný debugger (HW). ZigBee Stack pro CC2530, verze 2.4.0-1.4.0, lze bezplatně stáhnout z webových stránek společnosti Texas Instruments. Celý vývoj byl realizován s využitím IAR Embedded Workbench pro 8051, verze 7.60.1. Abyste si mohli vytvořit své vlastní aplikační prostředí, vřele Vám doporučujeme přečtení a dodržování pokynů v aplikační poznámce Create New Application for SmartRF05 and CC2530 (dokumentu TI č. SWRA231).
V této aplikaci byl příklad „GenericApp“, který v podstatě každých 5 vteřin vysílá bez jakéhokoli veřejného profilu „Hello World“, modifikován způsobem, popsaným níže. Stojí za zmínku, že GenericApp umožňuje přenos oběma způsoby, tj. můžeme poslat zprávu „Hello World“ z koordinátoru do routeru a koncového zařízení a obráceně. Street Light Application však posílá informaci pouze v jednom směru, tj. z koordinátoru do routerů či koncových zařízení.
Krok 1: Světelné čidlo
V této aplikaci budeme intenzitu osvětlení simulovat potenciometrem na eval. boardu SmartRF05. K digitalizaci analogového signálu – napětí z potenciometru využíváme integrovaný A/D převodník (CC2530). Ze schématu eval. boardu vyplývá, že jezdec potenciometru je zapojen na pin 12, což koresponduje s port 0, pin 7 nebo P0.7.
Tento pin, stejně jako všechny zbývající I/O piny, je implicitně nastaven jako vstup. Před konfigurací ADC a periférie – timeru (v této aplikaci použijeme timer 1, ale lze také využít i kterýkoli jiný timer, kromě timeru 2, který je použit ZigBee Stackem jako OSAL timer) potřebujeme správně nastavit výstupní pin pro PWM. Pin 11 (Port 1, Bit 0: P1.0) je připojen k LED – na SmartRF05 EVB to využijeme k výstupu PWM signálu, takže P1DIR nastavíme na 0x01. ZigBee projekty používají naprosto stejné označení jako CC2530 User’s Guide (SWRU191B), popisující všechny registry CC2530.
Podle dokumentace „HAL Driver API“ budeme k přečtení ADC potřebovat dvě funkční volání:
-
HalAdcSetReference ( HAL_ADC_REF_AVDD )
Nastavuje referenční napětí pro ADC; tzn. že použití AVDD jako reference znamená, že ADC převádí 0 V na nulu a max. vstupní napětí 3 V na 255 (v případě 8bitového rozlišení a binárního výstupu).
-
HalAdcRead ( HAL_ADC_CHN_AIN7, HAL_ADC_RESOLUTION_12 )
Čte kanál 7, připojený k jezdci potenciometru, a nastavuje rozlišení na 12 bitů. Je potřeba věnovat pozornost výstupům ADC CC2530, když všechna data budou v doplňkovém formátu 2s, což znamená, že naše konečná data „půjdou“ od 0 do 2047.
Obě funkce si žádají soubor „hal_adc.h“.
Aktuální verze dokumentace „HAL Driver API“ stále uvádí pár Timer Services, které však nejsou platné a nejsou více podporovány Z-Stackem. Protože timer 2 je vyhrazen pro OSAL (Operating System Abstraction Layer), budou pro aplikaci volně k dispozici timer 1 (16bitový timer), resp. timer 3 a 4 (dva 8bitové timery).
Následuje popis, jak konfigurovat timer 1:
-
P1.0 by měl být nastaven na funkci Peripheral (tím propojíme výstup timeru 1 na pin 12, PERCFG |= 0x40;)
-
Peripheral control register by měl být nastaven na „Alternative 2 location“ (P1SEL |= 0x01;)
-
Nastavte Timer 1 Control register k dělení 32 MHz systémových hodin osmi, takže dostaneme 1/4 MHz takty; nastavte timer do režimu Modulo pro počítání od 0 do hodnoty periody, definované níže (T1CTL = 0x06;)
-
Nastavte periodu timeru 1 na 2048 (T1CC0H = 0x08; T1CC0L = 0x00;) což odpovídá periodě T = 2048 · 1/4 MHz = 512 µs (viz obr. níže)
Obr. 3: PWM výstup a pracovní cyklus 50 %
Tyto kroky jsou nezbytné k zajištění PWM výstupu (pin 12). Pracovní cyklus lze řídit nastavením capture / compare registru T1CC2H a T1CC2L (timer 1 kanál 2).
Zbývající část by již neměla představovat žádné problémy. Po čtení analogové hodnoty pomocí HalAdcRead() potřebujeme odpovídajícím způsobem nastavit capture / compare registry. 12bitovou hodnotu lze přiřadit prostřednictvím předdefinovaných maker HI_UINT8 a LO_UINT8 (T1CC2H = HI_UINT8 (čtená hodnota); a T1CC2L = LO_UINT8 (čtená hodnota);).
Rovněž se sluší zdůraznit, že vysílaná hodnota by měla být typu character. Z tohoto důvodu musí být čtená hodnota změněna z typu integer na character a to pomocí funkce _itoa (čtená hodnota z ADC, znak. řetězec, základ). Tato užitečná funkce, stejně jako spousta dalšího, je rovněž součástí Z-Stacku. V rámci IAR IDE musí být koordinátor zkompilován a propojen jako ZigBee PRO Coordinator.
Krok 2: Router
Router nepotřebuje ADC, protože budeme přímo z koordinátoru přijímat skutečnou velikost pracovního cyklu PWM. Z tohoto důvodu lze použít stejná nastavení timeru jako v koordinátoru. Na základě přijetí hodnoty pracovního cyklu by pak mělo dojít k odpovídajícímu nastavení capture / compare registrů T1CC2H a T1CC2L. Router musí být zkompilován a propojen jako ZigBee PRO Router.
Shrnutí:
Zvolený vzorový projekt ukazuje, jak jednoduše lze přizpůsobit softwarové příklady (Z-Stack), dodávané společností Texas Instruments, s ohledem na zákaznickou aplikaci. Vyjdeme – li z popisu toho, jak použít A/D převodník a vytvořit PWM signál, vyřešíme tím i většinu aplikací.
Příklad sítě se sedmi přeskoky (vynuceno propojení sítě v rámci stromové topologie) jsme zachytili na obrázku níže.
Kompletní kód projektu pro IAR Embedded Workbench je k dispozici u autora.
Krátký životopis:
(email: h-kremser@ ti.com) v současné době pracuje jako Senior Analog Field Application Engineer ve společnosti Texas Instruments v Mnichově. Po závěrečných promocích na komunikacích v Kolíně nad Rýnem pracoval v Ulmu (EADS) jako Development Engineer a později spolupracoval se dvěma dalšími dodavateli polovodičů. Do TI nastoupil v červnu 2006.