ˇ ´ vysoke ´ uc ˇen´ı technicke ´ v Praze Cesk e ´ Fakulta elektrotechnicka
´ RSK ˇ ´ PRACE ´ BAKALA A Programov´ e vybaven´ı pro s´ıt’ ZigBee
Praha, 2010
Autor: Ivan Fridrich
Prohl´ aˇ sen´ı Prohlaˇsuji, ˇze jsem svou bakal´aˇrskou pr´aci vypracoval samostatnˇe a pouˇzil jsem pouze podklady ( literaturu, projekty, SW atd.) uveden´e v pˇriloˇzen´em seznamu.
V Praze dne podpis
i
Podˇ ekov´ an´ı Velmi r´ad bych podˇekoval a vyslovil uzn´an´ı vˇsem, kteˇr´ı mi pom´ahali pˇri vzniku t´eto pr´ace. Dˇekuji pˇredevˇs´ım vedouc´ımu pr´ace Ing. Jiˇr´ımu Nov´akovi, Ph.D.
ii
Abstrakt Tato pr´ace spoˇc´ıv´a v implementaci softwarov´eho vybaven´ı k ˇr´ızen´ı bezdr´atov´e senzorov´e s´ıtˇe s protokolem ZigBee, kter´a je ˇr´ızen´a pomoc´ı aplikace na PC, kter´e je pˇripojeno ke koordin´atorovi s´ıtˇe pomoc´ı USB sbˇernice. Softwarov´e vybaven´ı zahrnuje moˇznost volby senzoru, nastaven´ı jeho vzorkovac´ı frekvence, pˇripojen´ı ˇc´ıslicov´eho filtru, kter´ y si uˇzivatel s´am vybere a nadefinuje, a logov´an´ı pˇrijat´ ych dat s moˇznost´ı uloˇzen´ı do souboru ve form´atu XML. Programov´e vybaven´ı je navrˇzen´e tak, aby se dalo pouˇz´ıt i pro zcela obecn´ y pˇrenos dat.
iii
Abstract This work is about software equipment for control wireless sensors network with ZigBee protocol. This network is controlled by an application in a PC, which is written in C# and uses USB bus to control the coordinator of the sensors network. The software gives us choice which sensors (or sensors) do we wont to use, we can set the sampling period of the current sensor and also we can set a type of a filter which will the current sensor use. PC application logs all data incoming to the coordinator and can save it to a file in XML format.
iv
Obsah Seznam obr´ azk˚ u
vii
Seznam tabulek
viii
´ 1 Uvod
1
2 ZigBee
2
3 .NET Framework
5
3.1
Historie v´ yvojov´ ych prostˇredk˚ u . . . . . . . . . . . . . . . . . . . . . . .
5
3.2
Architektura .NET . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6
4 V´ yvojov´ e prostˇ redky
9
5 Pouˇ zit´ y hardware
12
5.1
MSP430FG4618 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
12
5.2
CC2420 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
13
5.3
FT232RL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
14
6 Implementace
15
6.1
Koordin´ator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
15
6.2
Koncov´e zaˇr´ızen´ı . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
16
6.3
PC aplikace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
18
6.4
Probl´emy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
22
7 R´ adiov´ e moduly od TI
23
7.1
CC2430 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
23
7.2
CC2431 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
23
7.3
CC2480 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
24
v
7.4
CC2520 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
24
7.5
CC2530 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
25
ˇ ıslicov´ 8 C´ e filtry ´ 8.1 Uvod do ˇc´ıslicov´ ych filtr˚ u. . . . . . . . . . . . . . . . . . . . . . . . . . .
27 27
8.2
Rozdˇelen´ı ˇc´ıslicov´ ych filtr˚ u . . . . . . . . . . . . . . . . . . . . . . . . . .
28
8.3
Filtry s koneˇcnou impulsn´ı odezvou - FIR . . . . . . . . . . . . . . . . .
30
8.3.1
Matematick´ y popis . . . . . . . . . . . . . . . . . . . . . . . . . .
30
8.3.2
Charakteristick´e vlastnosti . . . . . . . . . . . . . . . . . . . . . .
30
8.3.3
Realizace filtru . . . . . . . . . . . . . . . . . . . . . . . . . . . .
31
8.3.4
Klouzav´ y pr˚ umˇer (moving average) . . . . . . . . . . . . . . . . .
32
Filtry s nekoneˇcnou impulsn´ı odezvou - IIR . . . . . . . . . . . . . . . . .
34
8.4.1
Popis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
34
8.4.2
Charakteristick´e vlastnosti . . . . . . . . . . . . . . . . . . . . . .
35
8.4.3
Realizace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
35
8.5
Neline´arn´ı filtry . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
39
8.6
Porovn´an´ı filtr˚ u s filtry z prostˇred´ı MATLAB . . . . . . . . . . . . . . .
42
8.4
9 Z´ avˇ er
44
Literatura
47
vi
Seznam obr´ azk˚ u 2.1
Logo ZigBee Alliance
. . . . . . . . . . . . . . . . . . . . . . . . . . . .
2
2.2
Topologie ZigBee s´ıt´ı . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3
3.1
Blokov´e sch´ema architektury .NET . . . . . . . . . . . . . . . . . . . . .
6
4.1
MSP-FET430UIF . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
10
5.1
Koncov´e zaˇr´ızen´ı, bez USB modulu . . . . . . . . . . . . . . . . . . . . .
12
5.2
Moduly s ˇcipem CC2420EMK . . . . . . . . . . . . . . . . . . . . . . . .
13
5.3
Modul s ˇcipem FT232RL . . . . . . . . . . . . . . . . . . . . . . . . . . .
14
6.1
Vlastn´ı aplikace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
19
6.2
Sekvenˇcn´ı diagram komunikace mezi zaˇr´ızen´ımi . . . . . . . . . . . . . .
21
7.1
Sch´ema pˇripojen´ı ant´eny . . . . . . . . . . . . . . . . . . . . . . . . . . .
25
7.2
Maska ploˇsn´eho spoje pro pˇripojen´ı ant´eny . . . . . . . . . . . . . . . . .
26
8.1
Impulsn´ı odezva FIR filtru . . . . . . . . . . . . . . . . . . . . . . . . . .
29
8.2
Impulsn´ı odezva IIR filtru . . . . . . . . . . . . . . . . . . . . . . . . . .
29
8.3
Blokov´e sch´ema algoritmu filtru typu FIR . . . . . . . . . . . . . . . . .
31
8.4
Frekvenˇcn´ı charakteristika filtru typu plovouc´ı pr˚ umˇer . . . . . . . . . . .
33
8.5
Blokov´e sch´ema IIR filtru v prvn´ı pˇr´ım´e formˇe . . . . . . . . . . . . . . .
36
8.6
Blokov´e sch´ema IIR filtru v druh´e pˇr´ım´e formˇe . . . . . . . . . . . . . . .
36
8.7
Vliv nepˇresnosti aritmetiky na funkci IIR filtru . . . . . . . . . . . . . . .
39
8.8
Aplikace medi´anov´eho filtru pro odstranˇen´ı ruˇsiv´ ych impuls˚ u ze sign´alu .
40
8.9
Porovn´an´ı FIR filtr˚ u (Doln´ı propust ˇr´adu 20)) . . . . . . . . . . . . . . .
42
8.10 Porovn´an´ı IIR filtr˚ u (Doln´ı propust, Butterworth ˇr´adu 4)) . . . . . . . .
43
vii
Seznam tabulek 6.1
Tabulka ˇcasov´e n´aroˇcnosti filtr˚ u . . . . . . . . . . . . . . . . . . . . . . .
20
8.1
Tabulka IIR filtr˚ u . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
35
viii
Kapitola 1 ´ Uvod Tato aplikace pˇredstavuje konfigurovatelnou senzorovou s´ıt’ postavenou na bezdr´atov´em protokolu ZigBee. Pr´ace se skl´ad´a ze tˇr´ı ˇc´ast´ı. Prvn´ı ˇc´ast´ı je koordin´ator. Koordin´ator je v cel´em syst´emu vˇzdy jenom jeden a je to centr´aln´ı uzel cel´e s´ıtˇe. M´a za u ´ kol komunikovat s PC aplikac´ı, nastavovat koncov´a zaˇr´ızen´ı a sb´ırat od nich data. Koncov´e zaˇr´ızen´ı pˇredstavuje vlastn´ı senzor. M´a za u ´kol pravidelnˇe dˇelat odmˇery dan´e veliˇciny a data pos´ılat koordin´atorovi, kter´ y je n´aslednˇe pˇrepoˇsle do PC. Tato zaˇr´ızen´ı jsou vybaven´a digit´aln´ımi filtry, kter´e je moˇzno vyuˇz´ıt k real-time filtraci namˇeˇren´e veliˇciny. PC aplikace realizuje rozhran´ı mezi uˇzivatelem a s´ıt´ı. Pomoc´ı n´ı se vyb´ıraj´ı zaˇr´ızen´ı, se kter´ ymi chceme komunikovat, a nastavuj´ı se filtry. PC aplikace nav´ıc umoˇzn ˇuje uloˇzen´ı namˇeˇren´ ych dat do souboru v XML form´atu.
1
Kapitola 2 ZigBee ZigBee je komunikaˇcn´ı protokol pro bezdr´atov´e s´ıtˇe, patˇr´ıc´ı do skupiny PAN s´ıt´ı (Personal Area Network) stejnˇe jako napˇr´ıklad IEEE 802.15.1 – Bluetooth. V ˇradˇe aplikac´ı vˇsak nen´ı Bluetooth zcela vhodn´ ym ˇreˇsen´ım, jako je napˇr´ıklad pr˚ umyslov´a automatizace nebo n´ızkospotˇrebov´a zaˇr´ızen´ı. Z t´eto potˇreby vznikl pr´avˇe protokol ZigBee, kter´ y nadefinovala ZigBee Aliance za podpory mnoha dalˇs´ıch firem (asi 65 firem, jako napˇr´ıklad Honeywell, Motorola, Philips, Samsung, Omron, ABB, Siemens). ZigBee je velmi flexibiln´ı technologie, kter´a umoˇzn ˇuje tvorbu velmi rozs´ahl´ ych s´ıt´ı, kter´e mohou m´ıt r˚ uzn´e topologie a z´aroveˇ n jednotliv´e koncov´e body mohou i mˇenit svoji roli. Technologie je to urˇcen´a pˇredevˇs´ım k n´ızk´ ym pˇrenosov´ ym rychlostem s dlouhou periodou opakov´an´ı datov´ ych pˇrenos˚ u. Je velmi spolehliv´a a nen´aroˇcn´a na implementaci, protoˇze se zpravidla implementuje do 8/16bitov´ ych mikrokontrol´er˚ u, kter´e nedisponuj´ı velkou ych ˇreˇsen´ı. D´ıky tomuto pamˇet´ı programu. Umoˇzn ˇuje tak´e n´ızkou spotˇrebu a tvorbu levn´ nal´ez´a ˇsirokou ˇsk´alu aplikac´ı. Tato technologie je vhodn´a pro r˚ uzn´e typy pˇrenosu dat – periodick´e (pravideln´e zpr´avy od senzor˚ u) i neperiodick´e (data napˇr´ıklad od vyp´ınaˇc˚ u osvˇetlen´ı), nebo pro pˇrenosy s n´ızk´ ym zpoˇzdˇen´ım.
Obr´azek 2.1: Logo ZigBee Alliance
2
KAPITOLA 2. ZIGBEE
3
Obr´azek 2.2: Topologie ZigBee s´ıt´ı
Vlastnosti ZigBee pˇredurˇcuj´ı jeho pouˇzit´ı v tˇechto oblastech: X Pr˚ umyslov´a automatizace, automatizace budov (ˇr´ızen´ı osvˇetlen´ı, mˇeˇren´ı teploty a
vlhkosti, zabezpeˇcovac´ı syst´emy). X Spotˇrebn´ı elektronika (d´ alkov´e ovl´ad´an´ı elektrospotˇrebiˇc˚ u). X Poˇc´ıtaˇcov´ a elektronika (bezdr´atov´e myˇsi a kl´avesnice s n´ızkou spotˇrebou).
Dosah ZigBee je asi do 100 m, fyzick´a vrstva je definovan´a podle standartu IEEE 802.15.4. Vys´ıl´a se v ISM (Industrial Scientific Medical) p´asmech v okol´ı kmitoˇct˚ u 868 MHz (Evropa), 915 MHz (USA) a 2,4 GHz. V moj´ı aplikaci je vyuˇzito pouze p´asmo 2,4 GHz. Sign´al se moduluje pomoc´ı modulace OQPSK (Offset Quadrature Phase Shift Keying), pˇrenos v tomto kmitoˇctov´em p´asmu se dˇel´ı metodou rozprostˇren´eho spektra DSSS (Direct Sequence Spread Spectrum) pro vˇetˇs´ı odolnost proti ruˇsen´ı. Pˇr´ıstup do s´ıtˇe je ˇreˇsen metodou CSMA/CA (Carrier Sense Multiple Access with Collision Avoidance). Na linkov´e vrstvˇe se pouˇz´ıvaj´ı 4 typy r´amc˚ u: X Datov´ y r´ amec (Data Frame) - r´amec pro pˇrenos dat. X Potvrzovac´ı r´ amec (Acknowledgement Frame) - slouˇz´ı k potvrzov´an´ı
pˇrijat´ ych dat.
KAPITOLA 2. ZIGBEE
4
X Pˇ r´ıkazov´ y r´ amec (Command frame) - slouˇz´ı k pˇrenosu konfiguraˇcn´ıch dat. X Signalizaˇ cn´ı r´ amec (Beacon frame) - tento r´amec pouˇz´ıv´a koordin´ator na
probouzen´ı a synchronizaci koncov´ ych zaˇr´ızen´ı. Koordin´ator vyˇsle beacon frame“, ” probud´ı koncov´a zaˇr´ızen´ı ze sp´ankov´ ych reˇzim˚ u, zaˇr´ızen´ı odeˇslou sv´a data a zase se pˇrepnou do sp´ankov´eho reˇzimu, ˇc´ımˇz velmi v´ yraznˇe sn´ıˇz´ı svoji spotˇrebu, coˇz je velmi uˇziteˇcn´e pˇri nap´ajen´ı bateriemi.
Kapitola 3 .NET Framework Jelikoˇz souˇc´ast´ı t´eto pr´ace je PC aplikace vyuˇz´ıvaj´ıc´ı rozhran´ı .NET Framework, je tu kr´atce shrnuto co toto rozhran´ı obsahuje.
3.1
Historie v´ yvojov´ ych prostˇ redk˚ u
Prvn´ım rozhran´ım pro v´ yvoj aplikac´ı na operaˇcn´ım syst´emu MS Windows bylo tzv. Win32API. Toto rozhran´ı se zaˇcalo hojnˇe pouˇz´ıvat na operaˇcn´ım syt´emu Windows NT. Jedn´a se o soubor funkc´ı a struktur jazyka C, takˇze nen´ı zcela v˚ ubec objektov´e. V´ yhodou je pˇr´ım´ y (nativn´ı) pˇr´ıstup k funkc´ım operaˇcn´ıho syst´emu, coˇz je velmi v´ ykonn´e, ale na druhou stranu je zase nev´ yhodn´e v tom, ˇze v´ yvoj aplikace je pak velmi sloˇzit´ y a ˇcasov´e n´aroˇcn´ y. Toto rozhran´ı je moˇzn´e vyuˇz´ıvat v kombinaci s jin´ ymi technologiemi a to i v dneˇsn´ıch verz´ıch MS Windows. Kr´atce na to se objevila nov´a technologie, kter´a doplnila Win32API o objektov´e prvky. Tato technologie byla oznaˇcena jako MFC (Microsoft Foundation Classes) a zaloˇzena je na objektov´em jazyce C++. Tato knihovna obsahuje nejenom z´akladn´ı objekty uˇzivatelsk´eho rozhran´ı, ale i mnoho tˇr´ıd zajiˇst’uj´ıc´ı funkcionalitu programu, ˇc´ımˇz doˇslo k v´ yrazn´emu zjednoduˇsen´ı. Jak Win32API tak MFC se neust´ale vyv´ıj´ı. Zcela z´asadn´ı zmˇenu do v´ yvoje aplikac´ı vneslo rozhran´ı .NET Framework, kterou pˇrinesl Microsoft v roce 2002. Je to zcela objektov´ y model, kter´ y pˇrinesl velik´e zjednoduˇsen´ı ve v´ yvoji aplikac´ı pro operaˇcn´ı syst´emy Windows. .NET Framework je, na rozd´ıl od pˇredchoz´ıch rozhran´ı, samostatn´e rozhran´ı, kter´e bˇeˇz´ı nad operaˇcn´ım syst´emem a na ˇz´adosti aplikace vol´a sluˇzby operaˇcn´ıho syst´emu.
5
KAPITOLA 3. .NET FRAMEWORK
3.2
6
Architektura .NET
.NET Framework v´ yraznˇe zjednoduˇsuje v´ yvoj aplikac´ı pro MS Windows. Aplikace vytvoˇren´a pro .NET Framework bˇeˇz´ı na jak´emsi virtu´aln´ım stroji, kde jsou programy pˇrekl´ad´any za bˇehu pro danou hardwarovou platformu. V souˇcasn´e dobˇe .NET Framework existuje ve verzi 3.5 a jiˇz se chyst´a verze 4. Obr´azek 3.1 n´am popisuje, z ˇceho se skl´ad´a cel´ y tento bal´ık.
Obr´azek 3.1: Blokov´e sch´ema architektury .NET
.NET Framework se skl´ad´a ze tˇrech hlavn´ıch ˇc´ast´ı: X Programovac´ı jazyky. X J´ adro .NET Framework. X V´ yvojov´e studio Visual Studio .NET.
Programovac´ı jazyky K dispozici je mnoho programovac´ıch jazyk˚ u. Lze pouˇz´ıvat z´akladn´ı programovac´ı jazyky pro .NET Framework (Visual Basic, C++, C# , JScript), ale tak´e jazyky tˇret´ıch stran napˇr´ıklad IronPython (jazyk Python pro .NET). Vˇsechny jazyky maj´ı nadefinovanou
KAPITOLA 3. .NET FRAMEWORK
7
spoleˇcnou vrstvu - takzvanou Common Language Specification (CLS), kter´a specifikuje z´akladn´ı pravidla pro programovac´ı jazyky, ve kter´ ych se vytv´aˇrej´ı aplikace zaloˇzen´e na technologii .NET. V t´eto specifikaci jsou definov´any mimo jin´e z´akladn´ı datov´e typy nebo tˇr´ıdy. T´ım je doc´ıleno, ˇze napˇr´ıklad datov´ y typ Byte definuje osmibitov´e cel´e ˇc´ıslo ve vˇsech jazyc´ıch.
J´ adro .NET Frameworku J´adro technologie .NET se skl´ad´a z tˇechto ˇca´st´ı: X Common Language Runtime (CLR) – bˇehov´e prostˇred´ı a sada knihoven, kter´e mus´ı
b´ yt nainstalov´any na poˇc´ıtaˇci, aby mohl b´ yt program spuˇstˇen. X Base Class Library & Data a XML – obsahuje z´ akladn´ı definice tˇr´ıd .NET
Frameworku a tˇr´ıd pro pr´aci s daty (collections, diagnostics, XML, IO, text, threading, security atd.) za pomoci kter´ ych se pak mohou vyv´ıjet programy. X Uˇzivatelsk´e rozhran´ı – definuje ovl´ adac´ı prvky, tˇr´ıdy pro kreslen´ı a dalˇs´ı sluˇzby
vztahuj´ıc´ı se pˇr´ımo k aplikac´ım pro OS Windows. X Webov´e sluˇzby – obsahuje tˇr´ıdy a sluˇzby pro v´ yvoj WWW str´anek zaloˇzen´ ych na
technologii ASP (Active Server Pages).
V´ yvojov´ e prostˇ red´ı Microsoft Visual Studio Visual Studio poskytuje tyto z´akladn´ı sluˇzby: X Textov´ y editor - zv´ yrazˇ nov´an´ı syntaxe pro vˇsechny jazyky, ve kter´ ych .NET
Framework umoˇzn ˇuje ps´at zdrojov´ y k´od. X IntelliSense – interaktivn´ı n´ apovˇeda (zobrazen´ı seznamu n´azv˚ u tˇr´ıd, promˇenn´ ych,
pol´ı a metod, kter´e jsou zahrnuty v dan´em projektu, dle poˇc´ateˇcn´ıch znak˚ u) X Editor vizu´ aln´ıho n´avrhu - umoˇzn ˇuje navrhov´an´ı formul´aˇr˚ u a rozm´ıstˇen´ı objekt˚ u
uˇzivatelsk´eho rozhran´ı X Integrovan´ y pˇrekladaˇc X Integrovan´ y debugger X Integrovan´ a n´apovˇeda MSDN (Microsoft Developers Network)
KAPITOLA 3. .NET FRAMEWORK
8
Pˇ reklad zdrojov´ ych k´ od˚ u Vˇsechny programy, kter´e jsou napsan´e v libovoln´em programovac´ım jazyce z rodiny .NET, kompil´ator pˇreloˇz´ı do jednotn´eho jazyka – Microsoft Intermediate Language (MSIL). MSIL je procesorovˇe nez´avisl´ y k´od podobn´ y assembleru. Takto pˇreloˇzen´ y program je pˇrenositeln´ y mezi r˚ uzn´ ymi hardwarov´ ymi platformami a aˇz pˇri spuˇstˇen´ı na dan´e platformˇe je program pˇreloˇzen tzv. Just-in-time kompil´atorem do nativn´ıho k´odu, kter´ y m˚ uˇze b´ yt spuˇstˇen, popˇr´ıpadˇe se jiˇz m˚ uˇze pˇreloˇzit dopˇredu pomoc´ı instal´atoru.
Jazyk C# Jazyk C# vznikl kombinac´ı a doplnˇen´ım jazyka C++ a Java a je v souˇcasnosti povaˇzov´an za nejmodernˇejˇs´ı jazyk, kter´ y st´ale vyv´ıj´ı firma Microsoft. Tento jazyk byl pouˇzit na v´ yvoj PC aplikace. P´ar z´akladn´ıch charakteristick´ ych vlastnost´ı jazyka C#. ˇ e objektovˇe orientovan´ X Cistˇ y jazyk. X Je case-sensitive, tj. rozliˇsuje mal´a a velk´ a p´ısmena. X Pouˇz´ıv´ a jednoduchou dˇediˇcnost s moˇznost´ı n´asobn´e implementace rozhran´ı (stejnˇe
jako Java). X Vedle ˇclensk´ ych dat a metod vyuˇz´ıv´a vlastnosti a ud´alosti. X Vyuˇz´ıv´ a Garbage collection“ (automatick´e uvolˇ nov´an´ı pamˇeti - stejnˇe jako Java). ” X Podporuje zpracov´ an´ı chyb formou v´ yjimek – exceptions. X Podporuje atributov´e programov´ an´ı.
Kapitola 4 V´ yvojov´ e prostˇ redky IAR workbench Pro v´ yvoj a ladˇen´ı aplikac´ı pro mikroprocesory z rodiny MSP430 (v naˇsem pˇr´ıpadˇe konkr´etnˇe MSP430FG4618) bylo pouˇzito integrovan´e v´ yvojov´e prostˇred´ı IAR Embedded Workbanch (EW430) zahrnuj´ıc´ı kompil´ator C/C++, debugger, program´ator a simul´ator.
IAR workbanch Pro JTAG (Joint Test Action Group) ladˇen´ı a nahr´av´an´ı program˚ u do mikrokontrol´er˚ u bylo pouˇzito extern´ı zaˇr´ızen´ı MSP-FET430UIF pˇripojen´e k poˇc´ıtaˇci pˇres rozhran´ı USB.
9
´ ´ PROSTREDKY ˇ KAPITOLA 4. VYVOJOV E
10
Obr´azek 4.1: MSP-FET430UIF
Z-Stack - ZigBee Protocol Stack Z-Stack je programov´e vybaven´ı vyvynut´e firmou Texas Instruments, kter´e vyuˇz´ıvaji moduly. Tento softwarov´ y bal´ık je postaven na jazyce C a zahrnuje nˇekolik ˇc´ast´ı. Jsou to knihovny: X HAL (Hardware Abstraction Layer) – knihovna na obsluhu vnitˇrn´ıch periferi´ı
procesoru (A/D pˇrevodn´ık, LCD, v´ ystupn´ı br´any, vstupn´ı br´any, sleep modes, ˇc´ıtaˇce/ˇcasovaˇce). X OSAL (Operating System Abstraction Layer) – implementuje kooperativn´ı operaˇcn´ı
syst´em umoˇzn ˇuj´ıc´ı vytv´aˇret vl´akna (threads), komunikaci mezi vl´akny pomoc´ı zpr´av s ukl´ad´an´ım do front, ud´alosti, synchronizace vl´aken, obsluhu pˇreruˇsen´ı, ˇcasov´an´ı pomoc´ı ˇcasovaˇce urˇcen´eho pro tento syst´em. (n´ızk´a pˇresnost), spr´ava dynamick´e pamˇeti. X ZigBee Stack + IEEE 802.15.4 MAC – software pro obsluhu radiov´eho ZigBee
modulu a ˇcipem CC2420 pˇres rozhran´ı SPI. X MT (Monitor Test) – softwarov´ y n´astroj na komunikaci s PC pˇres USART urˇcen´ y
pro ladˇen´ı aplikac´ı.
´ ´ PROSTREDKY ˇ KAPITOLA 4. VYVOJOV E
11
PC aplikace Pro v´ yvoj PC aplikace bylo pouˇzito prostˇred´ı Microsoft Visual Studio verze 2008, programovac´ı jazyk C# a platforma .NET Framework 3.5.
Kapitola 5 Pouˇ zit´ y hardware Senzorov´a s´ıt’ je tvoˇrena moduly sloˇzen´ ych ze tˇr´ı ˇc´ast´ı - z´akladn´ı deska s procesorem MSP430FG4618 a podp˚ urn´ ymi souˇc´astkami, ZigBee modul s ˇcipem CC2420 a modul s FT232RL pro komunikaci s PC.
Obr´azek 5.1: Koncov´e zaˇr´ızen´ı, bez USB modulu
5.1
MSP430FG4618
Tento mikrokontrol´er je z rodiny 16-ti bitov´ ych mikrokontrol´eru s oznaˇcen´ım MSP430 vyvinut´ ych firmou Texas Instruments. Jedn´a se o ultra-nizkopˇr´ıkonov´ y procesor s architekturou RICS (Reduced Instruction Set Computer). Z´akladn´ı vlastnosti procesoru: X Spotˇreba 400 uA aktivn´ı, stand-by m´ od 1.3 uA, off m´od 0.22 uA X RAM 8 kB, FLASH 116 kB. X Nap´ ajec´ı napˇet´ı 1.8 V aˇz 3 V.
12
ˇ Y ´ HARDWARE KAPITOLA 5. POUZIT
13
X 3x DMA. X 12-bit A/D pˇrevodn´ık. X 3x konfigurovatel´ y operaˇcn´ı zesilovaˇc, 1x kompar´ator, 2x DAC. X 5x power saving mode. X USART, IrDA, SPI, I2C. X 3x ˇc´ıtaˇc/ˇcasovaˇc. X Integrovan´ y LCD driver s n´abojovou pumpou. X Aˇz 8 MHz taktov´an´ı. X Pouzdro 100LQFP.
5.2
CC2420
Tento ˇcip pracuje jako transiever na kmitoˇctu 2,4 GHz s fyzickou vrstvou definovanou normou IEEE 802.15.4. Disponuje velmi n´ızkou spotˇrebou a to 18.8 mA na pˇr´ıjem a 17,4 mA na vys´ıl´an´ı. Nap´ajec´ı napˇet´ı je t´eˇz velmi n´ızk´e (1,6 V - 3,6 V), a tak je zaˇr´ızen´ı ˇ nab´ız´ı mnoho dalˇs´ıch podp˚ velmi vhodn´e pro bateriov´e nap´ajen´ı. Cip urn´ ych funkc´ı jako napˇr´ıklad monitor napˇet´ı baterie, hardwarov´ y v´ ypoˇcet AES ˇsifrov´an´ı, vyˇzaduje pomˇernˇe m´alo extern´ıch komponent.Cena se pohybuje okolo 3,3 dolaru za 1000 kus˚ u.
Obr´azek 5.2: Moduly s ˇcipem CC2420EMK
ˇ Y ´ HARDWARE KAPITOLA 5. POUZIT
5.3
14
FT232RL
ˇ Tento obvod slouˇz´ı k pˇrevodu UART protokolu na USB, za u ´ˇcelem pˇripojen´ı k PC. Cip dok´aˇze zcela samostatnˇe komunikovat s PC pˇres USB, bez nutnosti jak´ehokoliv ovl´ad´an´ı za chodu ze strany modulu. PC mus´ı b´ yt vybaveno ovladaˇci pro komunikaci s t´ımto ˇcipem, kter´e jsou volnˇe staˇziteln´e na str´ank´ach firmy FTDI Chip. Pˇripojen´e zaˇr´ızen´ı se z pohledu PC chov´a jako virtu´aln´ı virtu´aln´ı s´eriov´e rozhran´ı. Firma FTDI Chip poskytuje nˇekolik softwarov´ ych projekt˚ u se zdrojov´ ymi k´ody, pomoc´ı kter´ ych se d´a pˇristupovat k ˇcipu. Tyto projekty jsou k dispozici v jazyc´ıch C++, C#, Delphi, LabVIEW, Visual Basic, Java, Perl a Python. Tyto projekty n´am umoˇzn ˇuj´ı komunikovat s obvodem a nastavovat ho (napˇr´ıklad jmenovku nebo s´eriov´e ˇc´ıslo v pamˇeti EEPROM). Z´akladn´ı vlastnosti obvodu FTDI: X Kompatibilita Windows 98, 98SE, ME, 2000, Server 2003, XP, Vista, XP 64bit,
MAC OS 8 / 9, OS-X, Linux 2.4 a vyˇsˇs´ı. X N´ızk´e nap´ ajec´ı napˇet´ı 3.3 V - 5.25 V. X Proudov´ a spotˇreba 15 mA. X Intern´ı 12 MHz oscil´ator + PLL (nen´ı potˇreba extern´ı krystal).
u. X Vstupn´ı FIFO (data od USB) 128 bajt˚ X V´ ystupn´ı FIFO (data do USB) 256 bajt˚ u. X Pˇrenosov´ a rychlost 300 Bd aˇz 1 MBd.
Obr´azek 5.3: Modul s ˇcipem FT232RL
Kapitola 6 Implementace Programov´e vybaven´ı do koordin´atora a koncov´eho zaˇr´ızen´ı vzniklo u ´ pravou k´od˚ u, kter´e vytvoˇril Mario Naval Escart´ın ve sv´e diplomov´e pr´aci s n´azvem INTRA-VEHICULAR SENSOR ZIGBEE NETWORK.
6.1
Koordin´ ator
Programov´e vybaven´ı vyuˇz´ıv´a knihovnu s n´azvem SAPI (Simple Application Programming Interface), kter´a velmi zjednoduˇsuje pr´aci se ZigBee, nebot’ umoˇzn ˇuje ovl´ad´an´ı nˇekolika funkcemi. Programov´e vybaven´ı koordin´atora jsem doplnil o tˇri nov´a vl´akna. Prvn´ı vl´akno m´a na starosti ˇc´ıst pˇrijat´a data od s´eriov´e linky (PC aplikace), a pˇrepos´ılat je hlavn´ımu konfiguraˇcn´ımu vl´aknu formou zpr´av. Velmi jednoduch´ y protokol, kter´ y se vyuˇz´ıv´a pro obousmˇern´ y pˇrenos dat, spoˇc´ıv´a v tom, ˇze nejprve se odeˇsle jeden bajt, ve kter´em je uvedeno kolik bajt˚ u celkovˇe zpr´ava obsahuje, za n´ım n´asleduje n bajt˚ u, kter´e definuj´ı typ zpr´avy a pot´e n´asleduj´ı data k t´eto dan´e zpr´avˇe pˇridruˇzen´a (pokud nˇejak´a jsou). V hlavn´ım konfiguraˇcn´ım vl´aknu se vyhodnocuj´ı zpr´avy od vl´akna, kter´e ˇcte data od s´eriov´e linky a d´ale od SAPI, kter´e bˇeˇz´ı tak´e ve sv´em vlastn´ım vl´aknˇe. Zpr´avy od SAPI mohou n´est informace – o u ´spˇeˇsn´em ˇci ne´ uspˇeˇsn´em vytvoˇren´ı s´ıtˇe po zavol´an´ı funkce zb StartRequest, o pˇripojen´ı koncov´eho zaˇr´ızen´ı po povolen´ı pˇripojen´ı ych datech po zavol´an´ı pomoc´ı funkce zb AllowBind, uvˇedomˇen´ı o dobˇre ˇci ˇspatnˇe odeslan´ ych datech ze strany koncov´eho zaˇr´ızen´ı. funkce zb SendDataRequest, popˇr´ıpadˇe o pˇrijat´ Aby SAPI odes´ılalo tyto zpr´avy hlavn´ımu vl´aknu, bylo nutn´e ho trochu upravit – pˇripsat do callback˚ u jednotliv´ ych ud´alost´ı vytvoˇren´ı nov´e zpr´avy a odesl´an´ı do hlavn´ıho vl´akna.
15
KAPITOLA 6. IMPLEMENTACE
16
Hlavn´ı konfiguraˇcn´ı vl´akno tedy zajiˇst’uje celou funkcionalitu aplikace. Aby koordin´ator mohl jeˇstˇe plnit nˇejakou dalˇs´ı funkci mimo funkce komunik´atoru s PC a ˇr´ıdic´ıho uzlu s´ıtˇe ZigBee, je zaimplementov´ano jeˇstˇe dalˇs´ı vl´akno v souboru taskCOLLdevice.c, do kter´eho si m˚ uˇze program´ator napsat svoji dalˇs´ı aplikaci. Hlavn´ı tˇelo toho vl´akna se nach´az´ı ve funkci APP Task, inicializaˇcn´ı funkce k tomuto vl´aknu je APP Task Init. Jakmile PC aplikace poˇsle pˇr´ıkaz, ˇze se m´a zah´ajit aplikace, nastav´ı se v aplikaˇcn´ım vl´aknˇe ud´alost (event) START APPLICATION EVENT, kterou vyvol´a hlavn´ı konfiguraˇcn´ı vl´akno.
6.2
Koncov´ e zaˇ r´ızen´ı
Projekt koncov´eho zaˇr´ızen´ı obsahuje tyto soubory:
endDConfigTask.c V tomto souboru je zaimplementov´ano hlavn´ı konfiguraˇcn´ı vl´akno, toto vl´akno se spouˇst´ı jeˇstˇe pˇred aplikaˇcn´ım vl´aknem a m´a za u ´kol nav´azat komunikaci s koordin´atorem, odeslat mu informace o zaˇr´ızen´ı, pˇrijmout nastaven´ı filtr˚ u od koordin´atora, a v momentˇe kdy obdrˇz´ı od koordin´atora pˇr´ıkaz na spuˇstˇen´ı, nastavuje v aplikaˇcn´ım vl´aknu ud´alost informuj´ıc´ı o zaˇc´atku aplikace. V inicializaˇcn´ı funkci ConfigTaskInit tohoto vl´akna, kter´a se vol´a po zapnut´ı nap´ajen´ı, se inicializuje a zap´ın´a ZigBee, USART (pro pˇr´ıpadn´ y debugging) a vol´a se odsud funkce k inicializaci senzoru initializeSensor (pokud je pˇripojen´ y). Tˇelo vl´akna se nach´az´ı ve funkci ConfigTask.
endDConfigTask.h V tomto hlaviˇckov´em souboru jsou nadefinov´any vˇsechny d˚ uleˇzit´e struktury a definice pro funkˇcnost hlavn´ıho konfiguraˇcn´ıho vl´akna. Uˇzivatel by mˇel v tomto hlaviˇckov´em souboru nadefinovat definici DEVICE DESCRIPTION ve form´atu ˇretˇezce jazyka C. Tento ˇretˇezec popisuje slovnˇe, o jak´e zaˇr´ızen´ı se jedn´a. Odes´ıl´a se na vyˇz´ad´an´ı koordin´atora, kter´ y jej pˇrepoˇsle do PC, kde se zobraz´ı v seznamu pˇripojen´ ych zaˇr´ızen´ı. Pˇr´ıklad definice: # define DEVICE DESCRIPTION ”Teplomer s Pt100”
KAPITOLA 6. IMPLEMENTACE
17
filters.c V tomto souboru jsou napsan´a tˇela funkc´ı filtr˚ u - plovouc´ı pr˚ umˇer (Moving Average), FIR, IIR a medi´anov´ y filtr.
filters.h V tomto hlaviˇckov´em souboru jsou d˚ uleˇzit´e definice, kter´ ym by program´ator uˇz´ıvaj´ıc´ı tento software mˇel vˇenovat pozornost. Jsou zde definice: #define NO_FILTER_ENABLED #define AVERAGING_ENABLED #define FIR_ENABLED #define IIR_ENABLED #define MEDIAN_ENABLED Jejich definov´an´ım (ˇci zakomentov´an´ım) program´ator nastavuje, kter´e filtry bude moˇzno si vybrat v nab´ıdce filtr˚ u v PC aplikaci. D´ale je nutn´e nadefinovat maxim´aln´ı a minim´aln´ı periodu mˇeˇren´ı ve stovk´ach mikrosekund pomoc´ı tˇechto definic: #define MIN_MEASURING_PERIOD_100US 100 #define MAX_MEASURING_PERIOD_100US 1000000
measurement.c Obsahuje zdrojov´e k´ody funkc´ı na inicializaci periodick´eho pˇreruˇsov´an´ı od ˇc´ıtaˇce, kter´a slouˇz´ı k vzorkov´an´ı.
measurement.h Obsahuje pouze hlaviˇcky funkc´ı z measurement.c
mySensorRoutines.c Obsahuje tˇelo funkce initializeSensor, kter´a inicializuje senzor, a funkci MeasureRoutine, kter´a se zavol´a vˇzdy, kdyˇz pˇrijde okamˇzik odmˇeru.
KAPITOLA 6. IMPLEMENTACE
18
taskENDdevice.c Obsahuje tˇelo aplikaˇcn´ıho vl´akna, kter´e se vyuˇz´ıv´a v pˇr´ıpadˇe, ˇze zvol´ıme, ˇze nechceme ˇz´adn´e periodick´e mˇeˇren´ı s filtrac´ı, ale zcela obecn´ y pˇrenos dat (nap. Bezdr´atov´a kl´avesnice).
6.3
PC aplikace
Aplikace slouˇz´ı nejprve k tomu, ˇze n´am uk´aˇze pˇripojen´a zaˇr´ızen´ı, vyb´ır´ame Ukazuje n´am aktu´alnˇe pˇripojen´a zaˇr´ızen´ı. Vyb´ır´ame pomoc´ı n´ı, kter´a zaˇr´ızen´ı budou spuˇstˇena, nastavujeme filtry, spouˇst´ı aplikaci, ukl´ad´a do XML, hled´a zaˇr´ızen´ı pˇripojen´a k USB. Aplikace je tvoˇrena dvˇema hlavn´ımi tˇr´ıdami. Prvn´ı je tˇr´ıda Form, kter´a m´a na pr´aci vykreslen´ı formul´aˇre, odchyt´av´an´ı ud´alost´ı (kliknut´ı na tlaˇc´ıtko, zmˇena vybran´eho pˇredmˇetu v listu atd.) naˇc´ıt´an´ı zˇr´ızen´ı pˇripojen´ ych k USB. Druh´a d˚ uleˇzit´a tˇr´ıda je tˇr´ıda Comunicator. Tato tˇr´ıda m´a za u ´kol otevˇr´ıt COM port, jehoˇz ˇc´ıslo mu pˇred´a hlavn´ı tˇr´ıda Form v konstruktoru. D´ale m´a za u ´kol komunikovat se zaˇr´ızen´ım pˇripojen´ ym na druh´e stranˇe (v´ yhradnˇe koordin´atorem). Tyto operace jsou um´ıstˇeny v jedn´e metodˇe s n´azvem Routine. Vol´an´ı t´eto metody je um´ıstˇeno do zvl´aˇstn´ıho vl´akna, a to z toho d˚ uvodu, ˇze obsahuje mnoho ˇcekac´ıch smyˇcek a nav´ıc obsluha s´eriov´eho portu je pomˇernˇe zdlouhav´a. Pokud bychom implementovali obsluˇznou rutinu pro seriov´ y port do hlavn´ıho vl´akna, aplikace by byla velmi pomal´a a komponenty by nereagovaly okamˇzitˇe napˇr´ıklad na kliknut´ı. D´ale programov´an´ı takov´ehoto softwaru by bylo velmi sloˇzit´e, pokud bychom chtˇeli br´at ohled na plynulost aplikace. D´ale jsou zdrojov´e k´ody doplnˇeny o mnoho dalˇs´ıch doplˇ nkov´ ych tˇr´ıd, kter´e slouˇz´ı v´ıcem´enˇe jen k sjednocen´ı v´ıce promˇenn´ ych do jedn´e. Cel´a aplikace je postaven´a na z´akladn´ıch knihovn´ach, kter´e nab´ız´ı bal´ık .NET Framework verze 3.5, a na knihovnˇe FTD2XX NET od firmy FTDI chip, kter´a slouˇz´ı ke komunikaci s ˇcipem FTD232RL. Z t´eto knihovny jsou vˇsak vyuˇzity pouze metody pro detekci zaˇr´ızen´ı. Pro komunikaci z konkr´etn´ım zaˇr´ızen´ım jsem radˇeji vyuˇzil komponentu SerialPort z knihovny Sytem.IO z bal´ıku .NET Frameworku, kter´a je velmi uˇzivatelsky pˇr´ıvˇetiv´a a tak´e velmi v´ ykonn´a. Obsluha s´eriov´eho portu je vykon´av´ana v jin´em vl´aknˇe a nen´ı moˇzn´e pˇr´ımo z tohoto vl´akna mˇenit vlastnosti komponent. Pˇri pokusu o toto by ze zavolala v´yjimka - nesyn. K ˇreˇsen´ı probl´emu jsem vyuˇzil metodu tˇr´ıdy Form z n´azvem Invoke“, kter´a ” zaˇr´ıd´ı vykon´an´ı urˇcit´e funkce aˇz v momentˇe, kdy je hlavn´ı vl´akno aktivn´ı, a t´ım se zajist´ı synchronnost s hlavn´ım vl´aknem. K synchronizaci pˇr´ıstupu k promˇenn´ ym byly vyuˇzity
KAPITOLA 6. IMPLEMENTACE
19
tak´e mutexy. Sekvenˇcn´ı diagram (obr 6.2) zn´azorˇ nuje, jak´e informaˇcn´ı toky prob´ıhaj´ı v cel´em syst´emu. Obr´azek 6.1 ukazuje vlastn´ı aplikaci.
Obr´azek 6.1: Vlastn´ı aplikace
Vysvˇetlivky k obr´azku 1.1: 1. Seznam pˇripojen´ ych zaˇr´ızen´ı s FTD232RL ˇcipem. V tomto seznamu mus´ı vybrat uˇzivatel to zaˇr´ızen´ı, ve kter´em je program koordin´atora, a pot´e kliknout na tlaˇc´ıtko Connect. 2. Scan tlaˇc´ıtko slouˇz´ı k zah´ajen´ı ˇcinnosti koordin´atora. Ten povol´ı pˇripojen´ı koncov´ ych zaˇr´ızen´ı. 3. Start application tlaˇc´ıtko slouˇz´ı ke spuˇstˇen´ı mˇeˇren´ı ihned po t´e, co uˇzivatel vybere zaˇr´ızen´ı a nastav´ı filtry. 4. Stop tlaˇc´ıtko zastavuje veˇsker´a mˇeˇren´ı. 5. Save to XML tlaˇc´ıtko zajist´ı uloˇzen´ı namˇeˇren´ ych dat do souboru ve form´atu XML. 6. Pomoc´ı tˇechto tlaˇc´ıtek se vyb´ır´a druh filtru pro dan´e koncov´e zaˇr´ızen´ı. 7. Measurement period urˇcuje vzorkovac´ı periodu pro dan´e koncov´e zaˇr´ızen´ı.
KAPITOLA 6. IMPLEMENTACE
20
8. Samples urˇcuje jak´eho ˇr´adu m´a filtr b´ yt (pˇr´ıstupn´e pouze pro filtry moving average a median). 9. Do kolonek koeficients vkl´ad´a uˇzivatel koeficienty filtru FIR nebo IIR ve form´atu ˇc´ısla double. Jednotliv´a ˇc´ısla mus´ı b´ yt oddˇelena tabul´atorem. Koeficienty se daj´ı rovnou kop´ırovat z prostˇred´ı MATLAB, kde si je uˇzivatel vygeneruje pomoc´ı pˇr´ıkaz˚ u (butter, fir1, fir2 atd.). 10. V tomto seznamu jsou vypsan´a jednotliv´a koncov´a zaˇr´ızen´ı. Uˇzivatel zaˇskrtnut´ım vol´ı, kter´a z nich chce pouˇz´ıt. 11. V tomto oknˇe se zobrazuj´ı namˇeˇren´a data. Sloupec vlevo ukazuje s´ıt’ovou adresu zaˇr´ızen´ı, od nˇehoˇz data pˇriˇsly. Druh´ y sloupec zleva ukazuje kvalitu pˇrenosov´e cesty. Tento u ´ daj slouˇz´ı jenom pro orientaˇcn´ı urˇcen´ı kvality pˇrenosu. Tˇret´ı sloupec zleva ukazuje syst´emov´ y ˇcas koordin´atora, kter´ y je mˇeˇren ve stovk´ach mikrosekund. Posledn´ı sloupec ukazuje namˇeˇren´a data. 12. Zde si uˇzivatel vyb´ır´a, v jak´em form´atu chce namˇeˇren´a data zobrazit. Hex - vyp´ıˇse jednotliv´e bajty ve dvouznakov´em hexadecim´aln´ım tvaru. String - vyp´ıˇse ASCII reprezentaci kaˇzd´eho bajtu. 13. Zde si uˇzivatel m˚ uˇze vybrat, kter´e informace se maj´ı zobrazovat v oknˇe ˇc. 11. 14. Zde se vypisuj´ı informace o tom, co zrovna program dˇel´a. V´ ypoˇcetn´ı v´ ykon koncov´eho zaˇr´ızen´ı je velmi omezen´ y, takˇze je nutn´e, aby nebyla nastavena perioda mˇeˇren´ı a ˇr´ad a typ filtru tak, ˇze procesor nebude schopen spoˇc´ıtat a odeslat v´ ysledek dˇr´ıve neˇz pˇrijde ˇcas nov´eho mˇeˇren´ı. Nesm´ı se zapomenout tak´e na to, ˇze i odmˇeˇren´ı hodnoty ˇcidla zabere urˇcit´ y ˇcas. V tabulce je uvedeno, jak zpracov´an´ı jednotliv´ ymi filtry trv´a dlouho. Tabulka 6.1: Tabulka ˇcasov´e n´aroˇcnosti filtr˚ u
Typ filtru
Doba jednoho v´ ypoˇctu v z´avislosti na ˇr´ad filtru [us]
Plovouc´ı pr˚ umˇer 2052 + 3,430*N Medi´anov´ y filtr
2032+ 7,600*N
FIR
1826 + 79,23*N
IIR
1862 + 113,1*N
Z tabulky vid´ıme, ˇze vˇsechny typy filtr˚ u maj´ı line´arn´ı sloˇzitost.
KAPITOLA 6. IMPLEMENTACE
Obr´azek 6.2: Sekvenˇcn´ı diagram komunikace mezi zaˇr´ızen´ımi
21
KAPITOLA 6. IMPLEMENTACE
6.4
22
Probl´ emy
Hned na zaˇc´atku v´ yvoje jsem narazil na probl´em, ˇze je chyba v implementaci driveru s´eriov´e linky v bal´ıku Z-Stack. S´eriov´a linka odes´ıl´a asynchronnˇe data a zcela u ´plnˇe zde chybˇela synchronizace pˇr´ıstupu k promˇenn´e (index bufferu). To jsem odstranil t´ım, ˇze jsem v urˇcit´ ych pas´aˇz´ıch doplnil zdrojov´e k´ody o vypnut´ı a zapnut´ı pˇreruˇsen´ı. V novˇejˇs´ıch verz´ıch softwaru Z-Stack je tato chyba odstranˇena.
Kapitola 7 R´ adiov´ e moduly od TI Souˇc´ast´ı t´eto pr´ace je tak´e prozkoum´an´ı moˇznost´ı n´ahrad RF ZigBee modulu s ˇcipem CC2420, kter´ y je v nab´ıdce TI nejstarˇs´ım.
7.1
CC2430
Tento ˇcip je vlastnˇe ˇcip CC2420 doplnˇen´ y o n´ızkospotˇrebov´ y mikroprocesor s architekturou 8051 maj´ıc´ı 32/64/128 KB programovateln´e pamˇeti FLASH a 8 KB pamˇeti RAM. Pro tento mikrokontrol´er je samozˇrejmˇe tak´e od firmy Texas Instruments k dispozici softwarov´ y bal´ık Z-Stack stejnˇe jako tomu bylo u naˇseho ˇreˇsen´ı. Mikrokontrol´er je t´eˇz vybaven mnoha periferiemi, jako maj´ı mikrokontrol´ery standartˇe (DMA, watchdog, ˇcasovaˇce atd.). T´ım, ˇze r´adiov´ y modul a mikrokontrol´er byly spojeny do jednoho, se dos´ahlo zmenˇsen´ı rozmˇer˚ u a sn´ıˇzen´ı spotˇreby. Takov´ yto modul m˚ uˇze b´ yt pak velice vhodn´ y napˇr´ıklad do d´alkov´ ych ovl´ad´an´ı nebo napˇr´ıklad do bezdr´atov´e myˇsi. Pr˚ umˇern´a aktivn´ı spotˇreba se pohybuje okolo 27 mA v aktivn´ım stavu a cena se pohybuje okolo 3,30 dolaru za 1000 kus˚ u.
7.2
CC2431
Tento ˇcip je v z´akladu stejnˇe vybaven´ y jako ˇcip CC2430, nav´ıc doplnˇen´ y o hardwarov´ y poziˇcn´ı lok´ator, pomoc´ı kter´eho se d´a sledovat pozice jednotliv´ ych koncov´ ych zaˇr´ızen´ı. Cena se pohybuje kolem 3,60 dolaru za 1000 kus˚ u. 23
´ ´ MODULY OD TI KAPITOLA 7. RADIOV E
24
Vlastnosti poziˇcn´ıho lok´atoru: X Pˇresnost cca 0,25 m (z´ avis´ı na mnoha faktorech). X Doba zjiˇstˇen´ı pozice 50 us aˇz 13 ms. X Lokaˇcn´ı prostor 64 m x 64 unitm.
ˇ seno pˇrev´aˇznˇe hardwarovˇe – nutnost minim´aln´ıho z´asahu procesoru. X Reˇ X M˚ uˇze b´ yt pouˇzito 3 - 16 referenˇcn´ıch uzl˚ u.
7.3
CC2480
Tento nejdraˇzˇs´ı ˇcip z nab´ıdky Texas Instruments se obsahuje r´adiov´ y vys´ılaˇc a z´aroveˇ n obsahuje ˇradiˇc se softwarem Z-Stack. Tento ˇcip nen´ı programovateln´ y, tud´ıˇz mus´ı b´ yt doplnˇen jeˇstˇe o extern´ı mikrokontrol´er, ve kter´em bude aplikace. Toto oddˇelen´ı pˇrin´aˇs´ı znaˇcn´e zjednoduˇsen´ı pro v´ yvoj´aˇre, protoˇze nemus´ı zaimplementov´avat Z-Stack do aplikace, a tak se mohou soustˇredit pouze na ni. S CC2480 je moˇzno komunikovat ˇ ıd´ı se na stejn´e u bud’ pˇres SPI, nebo pomoc´ı USARTu. R´ ´rovni jako je SAPI (10 funkc´ı). Pr˚ umˇern´a spotˇreba se pohybuje okolo 27mA. Cena se v pr˚ umˇeru pohybuje okolo 8,10 dolaru za 1000 kus˚ u.
7.4
CC2520
Tento obvod je obdoba n´ami pouˇzit´eho obvodu CC2420 a je oznaˇcov´an firmou Texas Instruments jako obvod druh´e generace. Je to samostatn´ y transceiver s velmi n´ızkou spotˇrebou, umoˇzn ˇuje vyˇsˇs´ı vys´ılac´ı v´ ykon a pˇrij´ımaˇc je tak´e v´ıce citliv´ y oproti CC2420. Cena je tak´e pˇr´ıznivˇejˇs´ı, ˇcinn´ı 1,95 dolaru za 1000 kus˚ u.
´ ´ MODULY OD TI KAPITOLA 7. RADIOV E
7.5
25
CC2530
Tento obvod je obdoba obvodu CC2430 a je t´eˇz oznaˇcov´an firmou Texas Instruments jako obvod druh´e generace. Je to spojen´ı r´adiov´eho modulu a n´ızkopˇr´ıkonov´eho mikroprocesoru s j´adrem 8051 vybaven´ ym vˇsemi moˇzn´ ymi periferiemi jak´ y standardn´ı mikrokontrol´er m˚ uˇze m´ıt. Tento ˇcip je velmi vhodn´ y pro d´alkov´a ovl´ad´an´ı, miniaturn´ı senzory a PC komponenty zejm´ena pro svoji n´ızkou spotˇrebu, malou velikost a n´ızkou cenu. Cena je 3,5 dolaru za 1000 kus˚ u. Zaj´ımav´e je, ˇze ani jeden novˇejˇs´ı ˇcip nepˇrinesl ˇz´adn´e zmˇeny ve zp˚ usobu pˇripojen´ı ant´eny. Vˇsechny r´adiov´e moduly se pˇrizp˚ usobuj´ı k 50 ohmov´e ant´enˇe pomoc´ı pomˇernˇe sloˇzit´eho balunu, kter´ y je naznaˇcen na obr´azc´ıch.
Obr´azek 7.1: Sch´ema pˇripojen´ı ant´eny
´ ´ MODULY OD TI KAPITOLA 7. RADIOV E
Obr´azek 7.2: Maska ploˇsn´eho spoje pro pˇripojen´ı ant´eny
26
Kapitola 8 ˇ ıslicov´ C´ e filtry Souˇc´ast´ı bakal´aˇrsk´e pr´ace je implementace ˇc´ıslicov´ ych filtr˚ u do koncov´ ych zaˇr´ızen´ı, a tak je zde kr´atce shrnuto, co jsou ˇc´ıslicov´e filtry, jak´e maj´ı vlastnosti a jak se softwarovˇe implementuj´ı.
8.1
´ Uvod do ˇ c´ıslicov´ ych filtr˚ u
ˇ ıslicov´e filtry patˇr´ı k z´akladn´ım zp˚ C´ usob˚ um zpracov´an´ı sign´al˚ u vedle DFT (event. FFT), korelace atd. Jsou to line´arn´ı ˇcasovˇe invariantn´ı (LTDI) obvody nebo algoritmy s jedn´ım vstupem a jedn´ım v´ ystupem. Jejich vlastnosti (koeficienty, ˇr´ad atd.) se v ˇcase nemˇen´ı, takˇze pokud na vstup pˇrivedeme sign´al a ten sam´ y pˇrivedeme se zpoˇzdˇen´ım, odezva bude vˇzdy stejn´a. Lze je popsat mnoha zp˚ usoby - pˇrenosem H(z) v z oblasti, impulsn´ı odezvou h(z), frekvenˇcn´ı charakteristikou nebo pˇr´ımo diferenˇcn´ı rovnic´ı v ˇcasov´e oblasti. V´ ystupn´ı odezvu filtru na vstup z´ısk´ame jako konvoluci vstupu s impulsn´ı odezvou filtru viz rovnice 8.1. Z{f(t)∗h(t)} =
n
f (k)h(n − k) = F (z)H(z)
(8.1)
k=0
ˇ ıslicov´ C´ y filtr je algoritmus, kter´ y poˇzadovan´ ym zp˚ usobem mˇen´ı spektrum vstupn´ıho sign´alu podle sv´e frekvenˇcn´ı charakteristiky. Tyto filtry mohou b´ yt vyuˇzity napˇr´ıklad, pro odstranˇen´ı vlastn´ıch ˇsum˚ u senzor˚ u, ruˇsen´ı (napˇr´ıklad 50 Hz ze s´ıtˇe), vibrac´ı (napˇr´ıklad u tenzometr˚ u), stejnosmˇern´ ych offset˚ u akcelerometr˚ u atd. V´ yhody ˇc´ıslicov´ ych filtr˚ u oproti analogov´ ym protˇejˇsk˚ um jsou: lze s nimi filtrovat sign´aly s niˇzˇs´ı frekvenc´ı neˇz je 1 Hz (u analogov´ ych filtr˚ u to nen´ı dost dobˇre moˇzn´e, protoˇze indukˇcnosti a kapacity vych´azej´ı
27
ˇ ´ISLICOVE ´ FILTRY KAPITOLA 8. C
28
velmi rozmˇern´e, tˇeˇzk´e a drah´e), ˇc´ıslicov´e filtry nest´arnou, takˇze se jejich parametry v dlouhodob´em ˇcase s teplotou ani jin´ ymi vlivy zpravidla nemˇen´ı. Pˇresnost z´aleˇz´ı pˇredevˇs´ım na pˇresnosti A/D pˇrevodn´ıku a na pˇresnosti aritmetiky v´ ypoˇcetn´ıho procesoru. Jdou realizovat filtry vysok´ ych ˇr´ad˚ u (t´ım i strmost´ı frekvenˇcn´ıch charakteristik), daj´ı se jednoduˇse implementovat i neline´arn´ı filtry (kupˇr´ıkladu medi´anov´ y filtr), daj´ı se implementovat i adaptivn´ı filtry (mˇen´ıc´ı koeficienty v ˇcase). Filtry lze navrhovat nˇekolika zp˚ usoby, bud’ rovnou navrhovat ˇc´ıslicov´ y filtr, nebo nejprve navrhnout analogov´ y a pot´e ho pˇrev´est pomoc´ı transformace na ˇc´ıslicov´ y. K n´avrhu filtr˚ u at’ prvn´ım nebo druh´ ym zp˚ usobem zpravidla vyuˇz´ıv´ame software, napˇr´ıklad pro testov´an´ı n´avrhu filtr˚ u byl pouˇzit MATLAB a Signal Processing Toolbox, kter´ y je vybaven celou ˇradou funkc´ı pro takov´e n´avrhy. Pokud chceme filtrovat v re´aln´em ˇcase (n´aˇs pˇr´ıpad), tak je zapotˇreb´ı, aby reakce na vstup byla spoˇc´ıt´ana dˇr´ıve, neˇz pˇrijde dalˇs´ı vzorek. K takov´ ymto operac´ım se zpravidla vyuˇz´ıvaj´ı sign´alov´e procesory (DSP – z anglick´eho Digital Signaling Processor). Tyto procesory jsou optimalizovan´e pro zpracov´an´ı ˇc´ıslicov´ ych sign´al˚ u, maj´ı jiˇz bloky obvod˚ u speci´alnˇe pˇripraven´e pro filtry, zvl´adaj´ı operace zpravidla i bˇehem jednoho taktu a tak jim v´ ypoˇcet zabere zpravidla p´ar ns. Jelikoˇz my v naˇs´ı aplikaci nepouˇz´ıv´ame DSP, ale n´ızkospotˇrebov´ y 16ti bitov´ y procesor s taktem 6.2 MHz, tak naˇse filtry mus´ı b´ yt jednoduch´e (n´ızk´ y ˇr´ad) a jen pro n´ızk´e vzorkovac´ı frekvence, aby procesor mohl z´aroveˇ n jeˇstˇe dˇelat jin´e vˇeci – obsluha s´ıtˇe, spr´ava operaˇcn´ıho syst´emu.
8.2
Rozdˇ elen´ı ˇ c´ıslicov´ ych filtr˚ u
ˇ ıslicov´e filtry dˇel´ıme do dvou z´akladn´ıch kategori´ı. Jsou to na filtry s koneˇcnou impulsn´ı C´ odezvou a nekoneˇcnou impulsn´ı odezvou. Filtry s koneˇcnou impulsn´ı odezvou maj´ı impulsn´ı charakteristiku tvoˇrenou koneˇcnou posloupnost´ı impuls˚ u (oznaˇcujeme jako filtry typu FIR), zat´ımco filtry s nekoneˇcnou impulsn´ı odezvou, uˇz jak s´am n´azev napov´ıd´a, maj´ı nekoneˇcnˇe dlouhou odezvu (oznaˇcujeme je jako filtry typu IIR). Oba dva tyto typy jsou souˇc´ast´ı programov´eho vybaven´ı koncov´ ych zaˇr´ızen´ı, a proto se jimi budu d´ale zab´ yvat.
ˇ ´ISLICOVE ´ FILTRY KAPITOLA 8. C
29 Impulse Response
0.07
0.06
0.05
Amplitude
0.04
0.03
0.02
0.01
0
−0.01
−0.02
0
5
10
15
20
25 30 Time (samples)
35
40
45
50
Obr´azek 8.1: Impulsn´ı odezva FIR filtru
Impulse Response 0.06
0.05
0.04
Amplitude
0.03
0.02
0.01
0
−0.01
−0.02
0
50
100
150 Time (samples)
200
Obr´azek 8.2: Impulsn´ı odezva IIR filtru
250
300
ˇ ´ISLICOVE ´ FILTRY KAPITOLA 8. C
8.3 8.3.1
30
Filtry s koneˇ cnou impulsn´ı odezvou - FIR Matematick´ y popis
FIR (finite impulse response) je pops´an v z oblasti rovnic´ı 8.2. H(z) = b0 + b1 z
−1
+ b2 z
−2
+ . . . bM z
−M
=
M
bn z −n
(8.2)
n=0
Pokud uprav´ıme rovnici do tvaru s kladn´ ymi mocninami, dostaneme rovnici 8.3. M M −n z H(z) = n=0M (8.3) z V rovnici 8. 3. vid´ıme, ˇze pˇrenos vyj´adˇren´ y v kladn´ ych mocnin´ach m´a ve jmenovateli M n´asobn´ y koˇren (p´ol) roven nule, a protoˇze podm´ınka stability u ˇc´ıslicov´eho syst´emu je, ˇze vˇsechny p´oly mus´ı leˇzet uvnitˇr jednotkov´eho kruhu, tento filtr je vˇzdy stabiln´ı (on je dokonce maxim´alnˇe stabiln´ı, protoˇze poˇc´atek je nejstabilnˇejˇs´ı poloha, ve kter´e se p´ol m˚ uˇze nach´azet). V ˇcasov´e oblasti bude diferenˇcn´ı rovnice m´ıt tvar viz rovnice 8.4. y(n) = b0 x(n) + b1 x(n − 1) + . . . bM x(n − M )
8.3.2
(8.4)
Charakteristick´ e vlastnosti
Tyto filtry se vyznaˇcuj´ı mnoha charakteristick´ ymi vlastnostmi, kter´e rekurzivn´ı filtr IIR nem´a. Tento filtr m´a takˇrka vˇzdy (v praxi u ´plnˇe vˇzdy) line´arn´ı frekvenˇcn´ı f´azovou charakteristiku (se z´aporn´ ym sklonem), a to znamen´a, ˇze jeho skupinov´e zpoˇzdˇen´ı (zmˇena f´aze se zmˇenou kmitoˇctu) je konstantn´ı, a proto pro veˇsker´e kmitoˇcty tento filtr zp˚ usobuje ˇ ad filtru, kter´ konstantn´ı zpoˇzdˇen´ı. R´ y je roven M, b´ yv´a v praxi velmi vysok´ y - stovky aˇz tis´ıce, coˇz je pomˇernˇe omezen´ı, protoˇze takov´ yto filtr m´a d´ıky tomuto zpravidla velk´e zpoˇzdˇen´ı a z´aroveˇ n m´a velk´e n´aroky na pamˇet’ (uloˇzen´ı koeficient˚ u, meziv´ ysledky) a t´ım p´adem tak´e velk´e n´aroky na poˇcet operac´ı (M souˇct˚ u a M+1 n´asoben´ı konstantou). Jejich koneˇcnˇe dlouh´a odezva je ale v´ yhodn´a v tom, ˇze kdyˇz se na vstupu filtru objev´ı velmi y impuls, tak z v´ ysledku zmiz´ı za koneˇcnˇe dlouhou dobu (danou ˇr´adem filtru), siln´ y ruˇsiv´ coˇz u filtr˚ u typu IIR je z principu funkce opaˇcnˇe (vlivem zpˇetn´e vazby se sign´al opˇet vrac´ı na vstup). V´ yhodou je tak´e to, ˇze jsou obecnˇe m´enˇe citliv´e na chybu zp˚ usobenou vlivem koneˇcn´e pˇresnosti aritmetiky v´ ypoˇcetn´ıho procesoru, nav´ıc tato nepˇresnost nem˚ uˇze nikdy zp˚ usobit nestabilitu cel´eho filtru. Nev´ yhodou je to, ˇze se k nim nedaj´ı nal´ezt analogov´e ekvivalenty (protoˇze p´olu v nule v z oblasti odpov´ıd´a p´ol v nekoneˇcnu v s oblasti a to se analogovˇe realizovat ned´a). Tyto filtry jsou dobˇre vyuˇziteln´e jako adaptivn´ı.
ˇ ´ISLICOVE ´ FILTRY KAPITOLA 8. C
8.3.3
31
Realizace filtru
Vˇsechny ˇc´ıslicov´e filtry lze vyj´adˇrit sch´ematem, ve kter´em jsou pouˇzity jen tyto prvky - sˇc´ıtaˇcka, n´asoben´ı konstantou a zpoˇzd’ovac´ı ˇclen. FIR filtr se nejˇcastˇeji realizuje v takzvan´em transverz´aln´ım tvaru, coˇz je v podstatˇe zpoˇzd’ovac´ı linka s odboˇckami. V naˇsem pˇr´ıpadˇe je vˇsak nutn´e si uvˇedomit, ˇze pouˇzit´ y procesor MSP430FG4618 je taktov´an jen kmitoˇctem 6,2 Mhz kv˚ uli n´ızk´e spotˇrebˇe a v´ ypoˇcty je nutn´e kv˚ uli pˇresnosti poˇc´ıtat pomoc´ı datov´eho form´atu float (4 byty, pˇresnost na 7 desetinn´ ych m´ıst), a tak nem˚ uˇzeme ˇr´ad volit zase tak moc velk´ y, protoˇze v´ ypoˇcet by trval pˇr´ıliˇs dlouho a nav´ıc s rostouc´ım ˇr´adem se zmenˇsuje velikost nˇekter´ ych koeficient˚ u a t´ım se zvˇetˇsuje chyba aritmetiky.
Obr´azek 8.3: Blokov´e sch´ema algoritmu filtru typu FIR
Algoritmus naspan´ y v jazyce C realizuj´ıc´ı FIR filtr des´at´eh ˇr´adu v transverz´aln´ı formˇe: #define fir_filter_order 10 /* Fir coeficients */ double coefs[] = {0.00996728268387249,0.0248616598269683,0.0668366890418819, 0.124888939106605,0.175591860415964,0.195707137849416,0.175591860415964, 0.124888939106605,0.0668366890418819,0.0248616598269683,0.00996728268387249}; /* Circular buffer for samples */ int samples[fir_filter_order+1]; /* Buffer writing head */ int head; int firFilter(int sample) { double result = 0; /* Final result variable */
ˇ ´ISLICOVE ´ FILTRY KAPITOLA 8. C
32
int index= head; samples[head] = sample; /* Result counting */ for ( int i =0; i
= fir_filter_order+1) { head = 0; } /* Convert result into an integer and return */ return (int)result; }
8.3.4
Klouzav´ y pr˚ umˇ er (moving average)
Klouzav´ y pr˚ umˇer je zvl´aˇstn´ım pˇr´ıpadem filtru typu FIR, kde vˇsechny jeho koeficienty jsou stejn´e a jejich suma je rovna 1 (pokud chceme, aby filtr mˇel zes´ılen´ı jedna). Daj´ı se realizovat jako takzvan´ y nev´aˇzen´ y klouzav´ y pr˚ umˇer, ale daj´ı tak´e realizovat jako klouzav´ y pr˚ umˇer s exponenci´aln´ım zapom´ın´an´ım - v tomto pˇr´ıpadˇe koeficienty exponenci´alnˇe klesaj´ı se vzd´alenost´ı od posledn´ıho vzorku (posledn´ı vzorek m´a nejmenˇs´ı v´ahu). V´ yhodou tohoto filtru je to, ˇze pokud se n´am v uˇziteˇcn´em sign´alu vyskytuje nˇejak´ y neˇz´adouc´ı harmonick´ y sign´al (napˇr´ıklad 50Hz od distribuˇcn´ı s´ıtˇe nebo napˇr´ıklad nˇejak´e mechanick´e vibrace senzoru), tento filtr je dok´aˇze zcela odstranit. Aby to fungovalo, mus´ı platit, ˇze frekvence sinusov´eho ruˇsiv´eho sign´alu mus´ı b´ yt rovna fvzork /N , kde N je ˇr´ad filtru. Tento filtr je velmi v´ yhodn´ y z hlediska realizace, pr´avˇe proto, ˇze koeficienty jsou vˇsechny stejn´e, pak staˇc´ı pouze vˇsechny vzorky seˇc´ıst a vydˇelit je jejich poˇctem jako je to u klasick´eho pr˚ umˇerovan´ı. Diferenˇcn´ı rovnice klouzav´eho pr˚ umˇeru je 8.5. Pˇrenos vyj´adˇren´ y v z oblasti
ˇ ´ISLICOVE ´ FILTRY KAPITOLA 8. C
33
je 8.6.
y(n) =
1 [x(n − (N − 1) + x(n + 1 − (N − 1)) + ... + x(n − 1) + x(n)] N N −1 1 −i z H(z) = N i=0
(8.5)
(8.6)
Obr´azek 8.4: Frekvenˇcn´ı charakteristika filtru typu plovouc´ı pr˚ umˇer
Algoritmus klouzav´eho pr˚ umˇeru napsan´ y v jazyce C. V´ yhodou oproti obecn´emu filtru typu FIR je to, ˇze nemus´ıme odezvu poˇc´ıtat pˇres vˇsechny vzorky, ale staˇc´ı n´am akor´at pˇri kaˇzd´em vloˇzen´ı nov´eho vzorku pˇriˇc´ıst nov´ y vzorek do celkov´e sumy, spoˇc´ıtat v´ ysledek (dˇelen´ım poˇctem vzork˚ u) a nakonec odeˇc´ıst ten nejstarˇs´ı vzorek ze sumy. #define ma_filter_order 10 /* Circular buffer for samples */ int ma_samples[ma_filter_order]; /* Sample sum */ long sum; /* Circular buffer writing head */ int head; int maFilter(int sample) { int result; int tail; /* Oldes sample indexer */ tail = head+1;
ˇ ´ISLICOVE ´ FILTRY KAPITOLA 8. C
34
if (tail>=ma_filter_order) tail = 0; /* Add a new sample */ ma_samples[head] = sample; /* Add new sample value to the sum */ sum += sample; /* Increment the writing head and wrap arround */ head++; if (head >= ma_filter_order) { head = 0; } /* Count average */ result = sum/ma_filter_order; /* Subtract the oldest sample for the sum */ sum -= ma_samples[tail]; return result; }
8.4 8.4.1
Filtry s nekoneˇ cnou impulsn´ı odezvou - IIR Popis
IIR (infinite impulse response) obsahuj´ı alespoˇ n jednu zpˇetnovazebn´ı smyˇcku. Pˇrenos filtru ˇr´adu N v z oblasti je vyj´adˇren jako pod´ıl dvou polynom˚ u - rovnice 8.8. V ˇcasov´e oblasti je diferenˇcn´ı rovnice ve tvaru 8.8. H(z) =
Y (z) b0 + b1 z −1 + b2 z −2 + . . . + bM z −M = X(z) 1 − a1 z −1 + a2 z −2 + . . . + aN z −N
y(n) =
M i=0
bi x(n − i) +
N
ai y(n − i)
i=1
Z rovnice vid´ıme, ˇze se jedn´a vlastnˇe FIR filtr je IIR filtr s nulov´ ymi a koeficienty.
(8.7)
(8.8)
ˇ ´ISLICOVE ´ FILTRY KAPITOLA 8. C
8.4.2
35
Charakteristick´ e vlastnosti
Pro stejn´e poˇzadavky na frekvenˇcn´ı charakteristiku maj´ı IIR filtry podstatnˇe niˇzˇs´ı ˇr´ad (do 10).D´ıky n´ızk´emu ˇr´adu maj´ı tak´e rychlejˇs´ı odezvu na vstup neˇz filtry typu FIR, jsou tak´e m´enˇe n´aroˇcn´e na v´ ypoˇcty a pamˇet’. Nev´ yhodou je, ˇze mohu b´ yt i nestabiln´ı, a to i v pˇr´ıpadech, ˇze byly navrˇzeny jako stabiln´ı pr´avˇe vlivem koneˇcn´e pˇresnosti aritmetiky procesoru (zaokrouhlov´an´ım se nˇekter´ y p´ol pˇrenosu m˚ uˇze dostat i do nestabiln´ı oblasti). Pravdˇepodobnost v´ yskytu tohoto probl´emu nar˚ ust´a s ˇr´adem filtru. F´azov´a charakteristika tohoto filtru je neline´arn´ı, takˇze pro r˚ uzn´e kmitoˇcty zp˚ usobuj´ı r˚ uzn´a zpoˇzdˇen´ı (skupinov´e zpoˇzdˇen´ı nen´ı konstantn´ı). Dalˇs´ı nev´ yhodou tohoto typu filtru je to, ˇze pokud se objev´ı ystupu se vrac´ı na na vstupu velmi siln´ y ruˇsiv´ y impuls, tak t´ım, ˇze filtr je rekurzivn´ı a v´ vstup, jeho odezn´ıv´an´ı m˚ uˇze b´ yt velmi dlouh´e.
8.4.3
Realizace
IIR filtry navrhujeme zpravidla jako analogie analogov´ ych filtr˚ u. Pro srovn´an´ı je uvedena tabulka nejˇcastˇeji pouˇz´ıvan´ ych filtr˚ u. Tabulka 8.1: Tabulka IIR filtr˚ u
N´azev filtru
Vlastnosti
Butterworth
maxim´alnˇe ploch´a, monotonn´ı funkce, strmost roste
Pˇr´ıkaz v MATLABu butter
s ˇr´adem filtru, velk´e pˇrekmity v ˇcasov´e oblasti Chebyshev
vˇetˇsi strmost neˇz butterworth, amplitudov´a
cheby1, cheby2
charakteristika je nemonotonn´ı,velk´e pˇrekmity Cauer˚ uv
nejstrmˇejˇs´ı pˇrechodov´e p´asmo
Bessel
nejm´enˇe strm´a amplitudov´a charakteristika, f´azov´a
ellip -
se nejbl´ıˇze bl´ıˇz´ı line´arn´ı IIR filtr s dan´ ym pˇrenosem lze realizovat nˇekolika zp˚ usoby. Nejn´azornˇejˇs´ı je prvn´ı pˇr´ım´a forma filtru, kter´a odpov´ıd´a pˇr´ımo diferenˇcn´ı rovnici v ˇcasov´e oblasti. Nuly pˇrenosu realizuje nerekurzivn´ı ˇc´ast filtru, p´oly ta rekurzivn´ı ˇc´ast filtru. Tento zp˚ usob realizace vyˇzaduje zbyteˇcnˇe mnoho zpoˇzd’ovac´ıch ˇclen˚ u (M + N), a proto je do naˇs´ı omezen´e aplikace nevhodn´ y, je tak´e nav´ıc velmi citliv´ y na numerickou nepˇresnost koeficient˚ u, zmˇena jednoho koeficientu posunuje vˇsechny nuly a p´oly cel´eho pˇrenosu filtru.
ˇ ´ISLICOVE ´ FILTRY KAPITOLA 8. C
36
Obr´azek 8.5: Blokov´e sch´ema IIR filtru v prvn´ı pˇr´ım´e formˇe
Druh´a pˇr´ım´a realizace – oproti prvn´ı pˇrin´aˇs´ı omezen´ı poˇctu zpoˇzd’ovac´ıch ˇclen˚ u na N. Tato struktura je v´ yhodn´a pro zpracov´an´ı ˇc´ıslicov´ ym procesorem, avˇsak i tato forma je citliv´a na numerickou nepˇresnost koeficient˚ u a jejich zmˇena, stejnˇe jako v prvn´ım pˇr´ıpadˇe posunuje vˇsechny nuly a p´oly pˇrenosu filtru.
Obr´azek 8.6: Blokov´e sch´ema IIR filtru v druh´e pˇr´ım´e formˇe
Algoritmus naspan´ y v jazyce C realizuj´ıc´ı IIR filtr p´at´eho ˇr´adu typu Butterworth v druh´e pˇr´ım´e formˇe: #define filter_order 5 /* Denominator coeficients */ double a_coefs[filter_order+1] = {1,-3.98454311961234,6.43486709027587,
ˇ ´ISLICOVE ´ FILTRY KAPITOLA 8. C
37 -5.25361517035227, 2.16513290972413, -0.359928245063556 };
/* Numerator coeficients*/ double b_coefs[filter_order+1] = {5.97957803700200e-05, 0.000298978901850100, 0.000597957803700200, 0.000597957803700200, 0.000298978901850100, 5.97957803700200e-05 }; /* Circular buffer for samples*/ int samples[filter_order+1]; /* Buffer writing head */ int head; int iirFilter(int sample) { double result; /* Final result variable */ int index; /* Recursive part */ index = head-1; result = (double)sample; for (int i=1;i
ˇ ´ISLICOVE ´ FILTRY KAPITOLA 8. C
38
head++; if (head >= filter_order+1) { head = 0; } /* Convert result into an integer and return */ return (int)result; } Kask´adn´ı forma filtru je dalˇs´ı moˇznost realizace IIR filtru. Je to s´eriov´e zapojen´ı filtr˚ u druh´eho ˇr´adu. Tento zp˚ usob realizace pˇrin´aˇs´ı velkou v´ yhodu v tom, ˇze pokud se n´am filtr rozkmit´a, tak m˚ uˇzeme vlastnˇe zjistit, kter´ y d´ılˇc´ı IIR filtr to je a jen u nˇeho upravit koeficienty, tak aby to nekmitalo, ˇc´ımˇz nemus´ıme mˇenit cel´ y filtr. Filtr m´a tak´e nav´ıc minim´aln´ı poˇcet zpoˇzd’ovac´ıch ˇclen˚ u. D´ale tak´e m˚ uˇzeme pouˇz´ıt filtr paraleln´ı, kter´ y m´a stej´e vlastnosti jako kask´adn´ı. Jako pˇr´ıklad, jak´ y m˚ uˇze m´ıt vliv nepˇresnost aritmetiky, m˚ uˇze b´ yt porovn´an´ı dvou IIR filtr˚ u des´at´eho ˇr´adu typu Butterworth v druh´e pˇr´ım´e formˇe realizovan´ ych na PC v jazyce C, a to jednou s pouˇzit´ım datov´eho typu float a podruh´e s pouˇzit´ım datov´eho typu double s dvojn´asobnou pˇresnost´ı oproti float. Z v´ ysledk˚ u je dobˇre vidˇet, jak´ y vliv m˚ uˇze m´ıt nepˇresnost aritmetiky.
ˇ ´ISLICOVE ´ FILTRY KAPITOLA 8. C
39
IIR filters − 10th order, Butterworth 1400 Float type arithmetic Double type arithmetic 1200
Signal [−]
1000
800
600
400
200
0
0
0.1
0.2
0.3
0.4
0.5 Time [s]
0.6
0.7
0.8
0.9
1
Obr´azek 8.7: Vliv nepˇresnosti aritmetiky na funkci IIR filtru
8.5
Neline´ arn´ı filtry
Tyto filtry maj´ı zcela jin´e vlastnosti, neˇz pˇredchoz´ı line´arn´ı filtry. U tˇechto filtr˚ u jiˇz nem´a v´ yznam pojem frekvenˇcn´ı charakteristika, nebot’ u nich neplat´ı princip superpozice jako u pˇredchoz´ıch filtr˚ u. Jedn´ım takov´ ym filtrem je napˇr´ıklad medi´anov´ y filtr. Funguje to tak, ˇze se urˇc´ı ˇs´ıˇrka okna (poˇcet vzork˚ u) a pot´e se spoˇc´ıt´a medi´an tohoto souboru hodnot. Medi´an se poˇc´ıt´a tak, ˇze se seˇrad´ı hodnoty vzork˚ u a pot´e se vybere prostˇredn´ı hodnota. Pokud je poˇcet vzork˚ u sud´ y, tak se vezmou dvˇe prostˇredn´ı hodnoty a z nich se spoˇc´ıt´a aritmetick´ y pr˚ umˇer. Medi´anov´ y filtr odstraˇ nuje ze souboru vzork˚ u vzorky se silnˇe odliˇsn´ ymi amplitudami (ty jsou vˇzdy bud’ na zaˇc´atku, nebo na konci setˇr´ıdˇen´eho souboru hodnot, takˇze se nevyberou). Tento filtr je velmi vhodn´ y na odstraˇ nov´an´ı siln´ ych y sign´al a nezp˚ usobuje t´emˇeˇr ˇz´adn´e ruˇsiv´ ych impuls˚ u ze sign´alu, a pˇritom nemˇen´ı uˇziteˇcn´ ˇcasov´e posuvy.
ˇ ´ISLICOVE ´ FILTRY KAPITOLA 8. C
40
Peak filtering 4
3.5
3
Signal [−]
2.5 Input signal Median filter 200th order FIR
2
1.5
1
0.5
0
Obr´azek 8.8: Aplikace medi´anov´eho filtru pro odstranˇen´ı ruˇsiv´ ych impuls˚ u ze sign´alu
Realizace medi´anoveho filtru v jazyce C: #define median_filter_order 10 /* Circular buffer for samples */ int median_samples[ma_filter_order]; /* Array for samples to be sorted */ int median_sorted_samples[ma_filter_order]; /* Bubble sort function */ void medianFilterBubbleSort(int* array); int medianFilter(int sample) { /* Add a new sample */ median_samples[head++] = sample; /* Wrap around */ if (head>=median_filter_order) head = 0; /* Copy samples into a new array */ for (int i =0;i<median_filter_order;i++)
ˇ ´ISLICOVE ´ FILTRY KAPITOLA 8. C { median_sorted_samples[i] = median_samples[i]; } /* Sort smples - bubble sort */ medianFilterBubbleSort(median_sorted_samples); /* If num of samples is even, return the middle*/ if (median_filter_order%2 == 1) { return median_sorted_samples[median_filter_order/2+1]; } else { /* Return average value */ return (median_sorted_samples[median_filter_order/2-1] + median_sorted_samples[median_filter_order/2])/2; } } #define FALSE 0 #define TRUE 1 void medianFilterBubbleSort(int* array) { int sorted = FALSE; while (sorted==FALSE) { sorted = TRUE; for (int i =0;i<median_filter_order-1;i++) { if (array[i]<array[i+1]) { int tmp = array[i]; array[i] = array[i+1]; array[i+1] = tmp; sorted = FALSE; } }
41
ˇ ´ISLICOVE ´ FILTRY KAPITOLA 8. C
42
} }
8.6
Porovn´ an´ı filtr˚ u s filtry z prostˇ red´ı MATLAB
Abychom mohli posoudit kvalitu implementace, provedl jsem porovn´an´ı odezev na skok u sv´ ych filtr˚ u s odezvami v MATLABu. U FIR filtru to vyˇslo t´emˇeˇr stejnˇe. Hodnoty, kter´e dala moje implementace, jsou vˇetˇsinou o trochu niˇzˇs´ı, to je zp˚ usobeno zaokrouhlov´an´ım dol˚ u. IIR filtr vyˇsel o nˇeco horˇs´ı, to je zp˚ usobeno t´ım, ˇze stavov´e hodnoty jsou z d˚ uvodu rychlosti a u ´spory m´ısta datov´eho typu ˇsestn´actibitov´ y integer, takˇze jsou pokaˇzd´e zaokrouhlov´any dol˚ u. T´ımto je zp˚ usobeno i to, ˇze ust´alen´e zes´ılen´ı nen´ı rovno 1. FIR filter step response
Device filter Matlab
2
4
6
8
10 Dicrete time [−]
12
14
16
Obr´azek 8.9: Porovn´ an´ı FIR filtr˚ u (Doln´ı propust ˇr´adu 20))
18
20
ˇ ´ISLICOVE ´ FILTRY KAPITOLA 8. C
Obr´azek 8.10: Porovn´an´ı IIR filtr˚ u (Doln´ı propust, Butterworth ˇr´adu 4))
43
Kapitola 9 Z´ avˇ er Zad´an´ı bylo zcela splnˇeno. Nejprve bylo nutn´e sezn´amit se v´ yvojov´ ym prostˇred´ım, moduly a programov´ ym vybaven´ım. Pot´e jsem naprogramoval kostru toho vybaven´ı, ke koordin´atorovi jsem nejprve pˇristupoval pˇres konzoli, aby bylo ladˇen´ı jednoduˇs´ı. Dal´e jsem zaimplementoval ˇc´ıslicov´e filtry a aˇz nakonec vytvoˇril PC aplikaci. Pˇri programov´an´ı programov´eho vybaven´ı koordin´atora a koncov´eho zaˇr´ızen´ı bylo nutn´e upravovat jiˇz hotov´e zdrojov´e k´ody (SAPI a pˇreruˇsn´ı od ˇcasovaˇce). Ladˇen´ı aplikace bylo velmi zdlouhav´e, protoˇze lad´ıc´ı n´astroj MSP-FET430UIF je velmi pomal´ y. Kvalitu implementace filtr˚ u jsem ovˇeˇril pomoc´ı MATLABu, pˇrechodov´e charakteristiky byly t´emˇeˇr totoˇzn´e. Do budoucna by ale urˇcitˇe st´alo za to uvaˇzovat o jin´em r´adiov´em modulu, nebot’ CC2420 je velmi nev´ yhodn´ y v tom, mus´ı b´ yt zcela ˇr´ızen mikroprocesorem, coˇz je velmi vytˇeˇzuj´ıc´ı a sloˇzit´e na implementaci, coˇz br´an´ı koncov´emu zaˇr´ızen´ı napˇr´ıklad rychle vzorkovat nebo pouˇz´ıvat filtry vysok´ ych ˇr´ad˚ u. Co se t´ yˇce softwarov´eho bal´ıku Z-stack, tak urˇcitˇe by bylo dobr´e pouˇz´ıvat tu nejnovˇejˇs´ı verzi, nebot’ mnou pouˇzit´a obsahovala mnoho chyb. Urˇcitˇe by bylo velmi zaj´ımav´e doplnit zdrojov´e k´ody o syst´em pˇrepos´ıl´an´ı dat v pˇr´ıpadˇe vzd´alen´ı koncov´eho zaˇr´ızen´ı od koordin´atora nebo pˇreruˇsen´ı pˇrenosov´e cesty. V takov´em pˇr´ıpadˇe by se ale urˇcitˇe muselo pˇrej´ıt k ovl´ad´an´ı ZigBee pomoc´ı pˇr´ım´ ych funkc´ı a ne pomoc´ı nadstavbov´e knihovny SAPI. Moˇzn´a by se mohl jeˇstˇe hardware doplnit o nˇejak´ y skuteˇcn´ y senzor, napˇr´ıklad o teplotn´ı senzor DS18B20, tlakomˇer, vlkomˇer atd., aby pr´ace yt doplnˇena napˇr´ıklad o p˚ usobila v´ıce u ´ˇcelovˇe. Co se t´ yˇce PC aplikace tak ta by mohla b´ grafick´e zn´azornˇen´ı pr˚ ubˇeh˚ u mˇeˇren´ ych veliˇcin s funkcemi, kter´e maj´ı osciloskopy.
44
Zdroje Publikace ˇ ˇ ´ pr ˇ´ıklady v C sharp – aneb C# skutec ˇ ne ˇ prakticky, Josef Pirkl, Re sene ISBN: 80-7232-265-6
¨ rgen Bayer, C# 2005 - Velka ´ kniha r ˇeˇ Ju sen´ı, ISBN: 9788025116203
John Sharp, Microsoft Visual C 2005 - Krok za krokem, ISBN: 80251-1156-3
ˇedchoz´ıch znalost´ı - Pr˚ Jeff Kent, Visual C# 2005 bez pr uvodce pro samouky, ISBN: 978-80-251-1584-8
ˇehled architektury .NET Microsoft, Pr
Mario
Naval
Escart´ın,
INTRA-VEHICULAR
SENSOR
ZIGBEE
NETWORK, December 2008
Web popis CC2420, http://focus.ti.com/docs/prod/folders/print/cc2420.html
popis CC2430, http://focus.ti.com/docs/prod/folders/print/cc2430.html
45
´ ER ˇ KAPITOLA 9. ZAV
46
popis CC2431, http://focus.ti.com/docs/prod/folders/print/cc2431.html
popis CC2480a1, http://focus.ti.com/docs/prod/folders/print/cc2480a1.html
popis CC2520, http://focus.ti.com/docs/prod/folders/print/cc2520.html
popis CC2530, http://focus.ti.com/docs/prod/folders/print/cc2530.html
Ostatn´ı ´ listy o Z-Stacku a zdrojove ´ ko ´ dy pr ˇibalene ´ k diplomove ´ pra ´ ci Katalogove ´ ci samotnou: Mario Naval Escart´ın, INTRA-VEHICULAR SENSOR a pra ZIGBEE NETWORK, December 2008
Obsah pˇ riloˇ zen´ eho CD X Projekt koordin´atora X Projekt koncov´eho zaˇr´ızen´ı X Manu´ aly k Z-Stack X Projekt PC aplikace
47