Touch Sensing Library. Obsługa bezstykowych przycisków pojemnościowych.
Wtorek, 01 Czerwiec 2010
Interfejs użytkownika występuje w większości urządzeń
elektronicznych. Jest to element bardzo ważny, a jednak jego
istotność jest często przez konstruktorów niedoceniana. Dobrze
wykonany interfejs użytkownika pozwala na komfortowe,
intuicyjne i zarazem niezawodne użytkowanie urządzenia. Jednym
z najistotniejszych komponentów składających się na interfejs
użytkownika są przyciski, które są podstawowym elementem
umożliwiającym interakcję użytkownika z urządzeniem.
59ELEKTRONIKA PRAKTYCZNA 6/2010
Obsługa bezstykowych przycisków pojemnościowych
Przyciski przez długi okres opierały się
postępowi techniki i reprezentowane były
niezmiennie przez podzespoły mechaniczne,
których działanie opiera się na mechanizmie
stykowym. Obecny rozwój technologii spowo-
dował znaczny postęp w tej dziedzinie, dzięki
czemu obok klasycznych rozwiązań pojawiły
się nowe, dotąd nieznane. Najpowszechniej-
szą z nich jest metoda bezstykowa, oparta na
pomiarze pojemności. Ma ona wiele zalet,
wśród których wymienić można np. niskie
koszty, łatwość implementacji, dużą trwałość.
Producenci układów scalonych, widząc te
zalety, wychodzą naprzeciw oczekiwaniom,
oferując zintegrowane sterowniki klawiatur
pojemnościowych. Wśród największych pro-
ducentów zajmujących się tą branżą znajdują
się między innymi firmy: Freescale, Micro-
chip NXP, Atmel, Elan i STMicroelectronics.
Produkty tych firm opisane zostały w EP
11/2009, EP 1/2010 oraz EP 5/2010. Firma
STMicroelectronics, kontynuując prace nad
przyciskami pojemnościowymi, przedstawiła
bibliotekę Touch Sensing Library przezna-
czoną dla mikrokontrolerów z rodziny STM8.
Narzędzie to pozwala na implementację
w mikrokontrolerze nawet zaawansowanego
interfejsu złożonego z przycisków pojemno-
ściowych przy użyciu standardowych zaso-
bów mikrokontrolera i jednocześnie bez ko-
nieczności użycia zewnętrznego kontrolera.
Czujniki pojemnościowe i zasada
ich działania
Zasada działania bezstykowych klawia-
tur pojemnościowych opiera się na zjawi-
sku zmiany ilości gromadzonego ładunku
elektrycznego w elektrodzie (będącej polem
przyciskowym) w zależności od odległości
dzielącej elektrodę i ludzkie ciało. Zbliżenie
palca powoduje wprowadzenie dodatkowej
pojemności. W dużym przybliżeniu pojem-
Obsługa bezstykowych
przycisków pojemnościowych
Touch Sensing Library
Interfejs użytkownika występuje w większości urządzeń
elektronicznych. Jest to element bardzo ważny, a jednak jego
istotność jest często przez konstruktorów niedoceniana. Dobrze
wykonany interfejs użytkownika pozwala na komfortowe,
intuicyjne i zarazem niezawodne użytkowanie urządzenia. Jednym
z najistotniejszych komponentów składających się na interfejs
użytkownika są przyciski, które są podstawowym elementem
umożliwiającym interakcję użytkownika z urządzeniem.
ność spodziewaną w warunkach oddziały-
wania ludzkiego palca na zaprojektowane
pole przycisku obliczyć można za pomocą
wzoru opisującego pojemność kondensatora
płaskiego:
gdzie:
C ? pojemność
;R
? względna przenikalność elektryczna
ośrodka, z którego wykonano dzielący okład-
ki izolator
;0
? przenikalność elektryczna wolnej prze-
strzeni
A ? pole powierzchni okładek
d ? odległość okładek kondensatora
W kontekście przycisku pojemnościowe-
go ;R
jest przenikalnością elektryczną ma-
teriału separującego pole przycisku, ;0
jest
przenikalnością elektryczną powietrza, A
jest powierzchnią pola przycisku, natomiast
d odległością między polem przycisku a pal-
cem. Za pomocą powyższego wzoru zinter-
pretować można ponadto sposób zmian po-
jemności ? wraz ze zmniejszaniem dystansu
dzielącego palec i pole przycisku pojemność
będzie rosnąć, natomiast oddalanie palca
spowoduje zmniejszenie pojemności [2].
W celu maksymalnego uproszczenia
sposobu odczytu stanów przycisków firma
STMicroelectronics zaproponowała do tego
celu metodę, której realizacja możliwa jest
za pomocą podstawowych zasobów spoty-
kanych w mikrokontrolerach. Wymaganymi
peryferiami są linie ogólnego przeznaczenia
w liczbie odpowiadającej liczbie przycisków
oraz dwa układy licznikowe. Sposób pomia-
ru polega na periodycznym ładowaniu i roz-
ładowywaniu pojemności elektrody. Proces
ładowania i rozładowania jest odmierzany
przez układ licznikowy i na podstawie zmie-
rzonego czasu określany jest aktualny stan
przycisku. W momencie startu timera na
wszystkie elektrody podawany jest przez re-
zystor stan wysoki. W miarę upływu czasu
ilość gromadzonego ładunku zwiększa się
i napięcie na elektrodach wzrasta. W mo-
mencie odczytania na danej linii sygnałowej
stanu wysokiego obliczany jest czas, który
minął od rozpoczęcia ładowania (rys. 1).
Po sprawdzeniu w ten sposób wszyst-
kich linii od pól przycisków pojemność
elektrod jest rozładowywana przez podanie
na linie stanu niskiego. Następnie cały pro-
ces sprawdzenia przycisków wykonuje się
cyklicznie poprzez powtarzanie opisanych
etapów. Schemat elektryczny przedstawiają-
cy sposób podłączania przycisków zamiesz-
czony został na rys. 3.
Obsługa biblioteki Touch Sensing
Library
Biblioteka Touch Sensing Library jest
kompleksowym narzędziem do obsługi
Rys. 1. Proces ładowania i rozładowania
pojemności elektrody oraz zmieniający
się poziom napięcia na elektrodzie [3]
Jeśli zmierzony czas przekroczył ustaloną
wartość, oznacza to, że cykl ładowania
był wydłużony z powodu dodatkowej
pojemności wprowadzonej przez ludzkie
ciało, a więc przycisk został naciśnięty
(rys. 2)
Notatnik konstruktora
60 ELEKTRONIKA PRAKTYCZNA 6/2010
Notatnik konstruktora
bezstykowych przyci-
sków pojemnościowych.
Umożliwia nie tylko od-
czyt stanów przycisków
metodą opisaną powy-
żej, ale oferuje ponadto
szereg mechanizmów
zwiększających funkcjo-
nalność tego procesu. Są
to między innymi zaim-
plementowane algorytmy
pełniące funkcje filtrów
przeciwzakłóceniowych
oraz wbudowane procedu-
ry kalibrujące. Pozwala to
na wykrycie błędów zwią-
zanych z tak zwanymi fał-
szywymi naciśnięciami,
a więc błędami odczytu
wynikającymi ze zmiany
pojemności elektrody wy-
wołanej np. zakłóceniami
pochodzącymi od zasila-
nia czy zmianami środo-
wiskowymi (temperatura,
wilgotność, kurz).
Sama architektura bi-
blioteki ma budowę war-
stwową. Można w niej
wyróżnić zasadniczo trzy
bloki:
? Acquisition layer ?
warstwa odpowie-
dzialna za ładowanie/
rozładowanie elektrod
i zbieranie surowych
danych
? Post processing layer
? warstwa kontrolują-
ca kalibrację, filtrowanie i adaptację do
zmian środowiskowych
? API ? warstwa umożliwiająca użytkowni-
kowi konfigurację i dostęp do danych wy-
nikowych oraz zmiennych statusowych
Struktura plików biblioteki podzielona
została ze względu na realizowane funkcje. Po-
dział ten został przeprowadzony zgodnie z opi-
sanymi warstwami, a ponadto został rozszerzo-
ny o elementy charakterystyczne dla mikrokon-
trolera, a więc np. plik służący do wyboru sto-
sowanej podrodziny STM8, plik konfiguracyjny
wykorzystywanych peryferii czy plik definiują-
cy liczbę użytych przycisków oraz ich przypo-
rządkowanie do portów. Kompletna struktura
plików przedstawiona została na rys. 4.
Pracę z biblioteką Touch Sensing Libra-
ry należy rozpocząć od edycji pliku STM8_
TSL_RC_Configuration.h. Należy w nim
zdefiniować peryferie, które będą używane
przez bibliotekę oraz wskazać porty podłą-
czone do pól przycisków i linii ładowania/
rozładowania. Przykładowa konfiguracja
przedstawiona jest w tab. 1. Wykorzystany-
mi układami licznikowymi są Timer3 oraz
Timer4. Port PC2 odpowiedzialny jest za
ładowanie i rozładowanie pojemności, nato-
miast do portu PC1 doprowadzone jest pole
przycisku pojemnościowego (rys. 5).
Inicjalizacji biblioteki dokonuje się za po-
mocą wywołania funkcji TSL_Init(). Aktywa-
cja przycisku wykonywana jest poprzez wypeł-
nienie struktury konfiguracyjnej sSCKeyInfo:
sSCKeyInfo[0].
Setting.b.IMPLEMENTED = 1;
sSCKeyInfo[0].Setting.b.ENABLED
= 1;
sSCKeyInfo[0].DESGroup = 0x01;
Wykrycie zmiany stanu przycisków moż-
liwe jest poprzez monitorowanie wartości
Tab. 1. Przykładowe przyporządkowanie wybranych peryferii do elementów wykonawczych biblioteki Touch Sensing Library [1]
Funkcja
Nazwa przy dyrektywie
#define w pliku STM8_TSL_RC_
Configuration.h
Wartość Opis
Wybór mikrokontrolera STM8S 1 Wybrana podrodzina STM8S
Licznik nr 1
TIMACQ
TIMACQ_CNTR_ADD
TIM3
0x5328
Timer do licznika nr 1 = TIMER3
Adres timera = 0x5328
Licznik nr 2 TIMTICK TIM4 Timer do licznika nr 2 = TIMER4
Linia sygnałowa do ładowania/
rozładowania
LOADREF_PORT_ADDR
LOADREF_BIT
GPIOC_BaseAdress
0x04
Linia ładowania/rozładowania = PC2
Przyciski jednokanałowe
SCKEY_P1_KEY_COUNT
SCKEY_P1_PORT_ADDR
SCKEY_P1_A
SCKEY_P1_DRIVEN_SHIELD_MASK
SCKEY_P2_COUNT
SCKEY_P3_COUNT
1
GPIOC_BaseAddress
0x02
0x08
0
0
Liczba klawiszy = 1
Port przycisku = port C
Pin przycisku = pin nr 1
Warstwa ochronna dla przycisku P1
wyłączona
Przycisk P2 wyłączony
Przycisk P3 wyłączony
Przyciski wielokanałowe NUMBER_OF_MULTI_CHANNEL_KEYS 0
Funkcja wielokanałowych przycisków
wyłączona
Maski elektrod
GPIOA_ELECTRODES_MASK
GPIOA_ELECTRODES_MASK
GPIOA_ELECTRODES_MASK
GPIOA_ELECTRODES_MASK
GPIOA_ELECTRODES_MASK
GPIOA_ELECTRODES_MASK
GPIOA_ELECTRODES_MASK
GPIOA_ELECTRODES_MASK
GPIOA_ELECTRODES_MASK
0x00
0x00
0x0A
0x00
0x00
0x00
0x00
0x00
0x00
Definicja masek dla elektrod (wartość
nieużywanych masek = 0x00)
Rys. 2. Proces sprawdzania stanu przycisków (różnica
przebiegów dla samej elektrody oraz elektrody ze zbliżonym
palcem) [3]
Rys. 3. Sposób podłączania przycisków pojemnościowych
do układu mikrokontrolera [3]
61ELEKTRONIKA PRAKTYCZNA 6/2010
Obsługa bezstykowych przycisków pojemnościowych
pól struktury TSL_GlobalSetting. Przykłado-
wy kod wykonujący tą czynność może wy-
glądać następująco:
if (TSL_GlobalSetting.b.CHANGED)
{
TSL_GlobalSetting.b.CHANGED = 0;
if (sSCKeyInfo[0].
Setting.b.DETECTED)
{
/* wykrycie wciśnięcia przycisku */
}
}
TSL_Action();
Kompleksowy program obsługujący
przyciski pojemnościowe powinien być
zgodny ze schematem blokowym z rys. 6.
Kod programu realizujący czynności
zgodne ze schematem blokowym:
#include ?stm8s.h?
#include ?stm8_tsl_rc_api.h?
void main(void)
{
/* Konfiguracja zegara */
CLK_HSIPrescalerConfig(CLK_PRESCALER_
HSIDIV1);
/* Inicjalizacja biblioteki ?Touch
Sensing Library? */
TSL_Init();
/* Aktywacja wybranego przycisku */
sSCKeyInfo[0].Setting.b.IMPLEMENTED
= 1;
Rys. 4. Widok plików składających się
na bibliotekę Touch Sensing Library
w przykładowym projekcie w środowisku
ST Visual Develop
Rys. 5. Połączenie mikrokontrolera STM8S
z układem RC przycisku pojemnościowe-
go
Rys. 6. Schemat blokowy przykładowego
programu do obsługi przycisków pojem-
nościowych
sSCKeyInfo[0].Setting.b.ENABLED = 1;
sSCKeyInfo[0].DESGroup = 0x01;
/* Włączenie przerwań */
enableInterrupts();
while(1)
{
if (TSL_
GlobalSetting.b.CHANGED )
{
TSL_
GlobalSetting.b.CHANGED = 0;
if (sSCKeyInfo[0].
Setting.b.DETECTED)
{
/* wykryto
wciśnięcie przycisku */
}
}
TSL_Action();
}
}
Dokładny opis wszystkich aspektów
dotyczących biblioteki Touch Sensing Li-
brary znajduje się w pliku pomocy STM8
TSL Manual. Zostały tam opisane między
innymi wszystkie funkcje i struktury danych
wchodzące w skład tego narzędzia. Pakiet
instalacyjny biblioteki zwierający ten do-
kument oraz pliki źródłowe biblioteki wraz
z przykładami dostępny jest pod poniższym
adresem:
http://www.st.com/stonline/products/support/
micro/files/stm8s_touch_sensing_package.zip
Podsumowanie
Biblioteka Touch Sensing Library jest ko-
lejnym krokiem w rozwoju dziedziny elek-
troniki, jaką są bezstykowe przyciski pojem-
nościowe. Narzędzie do ich obsługi zapropo-
nowane przez firmę STMicroelectronics jest
ciekawym rozwiązaniem, gdyż umożliwia pro-
gramową implementację obsługi przycisków
w mikrokontrolerach rodziny STM8. Jakość
i funkcjonalność tej metody obsługi przyci-
sków nie ustępuje rozwiązaniom sprzętowym,
a więc zintegrowanym kontrolerom klawiatur
pojemnościowych. Dodatkowym atutem jest
możliwość nieodpłatnego korzystania z tego
narzędzia, gdyż jest ono udostępniane przez
producenta za darmo. Daje to możliwość szyb-
kiego i taniego zaadaptowania tego rozwiąza-
nia w nowych lub istniejących konstrukcjach.
Szymon Panecki
szymon.panecki@pwr.wroc.pl
Literatura
[1] www.st.com Adjustable LED blinking spe-
ed using STM8S-DISCOVERY touch sensing
key, UM0833 User manual
[2] www.st.com Guidelines for designing to-
uch sensing applications, AN2869 applica-
tion note
[3] www.st.com RC acquisition principle for
touch sensing applications, AN2927 applica-
tion note
[4] www.st.com STM8S Access Line/Perfor-
mance Line, datasheet
R E K L A M A
Zobacz więcej w kategorii Notatnik konstruktora