Start z STM32 VL Discovery – 21 — Ekran dotykowy wprowadzenie

Start z STM32 VL Discovery – 21 — Ekran dotykowy wprowadzenie
Razem głosów: 7 co stanowi: 97.14% całości.

Czas zająć się innymi poważniejszymi sprawami na naszym Discovery , tym razem zajmiemy się używaniem

ekranu dotykowego. Jest to proste , ale wymaga myślenia i liczenia…. zatem do dzieła …

Kalibracja panelu dotykowego:

Na poniższym obrazku widać schemat blokowy układu dotykowego. Jak więc widzimy na ekranie

LCD umieszczony jest 4 przewodowy, rezystancyjny panel dotykowy, którego wyprowadzenia

są podłączone do układu ADS7843 (Texas Instruments). Układ ADS7843 jest programowalnym

8/12bit przetwornikiem ADC z kontrolerem aproksymacji. Oczywiście układ jest podłączony do

mikrokontrolera przez I2C lub SPI zależnie od wersji.

Jeśli dotkniemy panelu dotykowego zostają wygenerowane współrzędne X i Y punktu dotyku.

Następnie po przetworzeniu w ADS wynik zostaje przekazany przez I2C / SPI do procesora.  To tak

w dużym uproszczeniu. Dokładność  i wiarygodność pomiaru jest jednak względna i może mieć na to

wpływ wiele czynników. W układzie często występują zakłócenia elektryczne, różne rozdzielczości LCD

i panelu dotykowego, a nawet mechaniczne przesunięcia.

Jeśli chodzi o zakłócenia elektryczne to pochodzą one głównie z wyświetlacza i panelu podświetlania,

jak też wyładowania elektrostatyczne (ESD) powstające miedzy warstwami ze względu na

chropowatość powierzchni czy też impulsy elektromagnetyczne spowodowane przez użytkownika

i środowisko pracy (EMP). Wszystkie te czynniki niepożądane są też przekazywane do kontrolera

panelu dotykowego (WHO).

Redukcję zakłóceń można zrealizować różnymi metodami: 

 

  • dobrze zaprojektowane obwody płytek drukowanych (PCB)
  • dodając  kondensatory separujące i tłumiące
  • stosując filtry średnio-tłumiące
  • a nawet poprzez stosowanie podłoża antystatycznego między LCD i panelem dotykowym
Teraz przyszła pora trochę was podenerwować teorią …

Omówię tylko wykonanie filtrów uśredniających ciśnienie na panelu dotykowym.

Eliminacja szumów przy filtrowaniu WHO spowoduje uśrednienie próbek każdego kontaktu

z panelem, zasadniczo jest to często stosowana metoda wyliczania współrzędnych pola kontaktu

powiązana ze zmniejszeniem zakłóceń.

Filtry uśredniające można wykonać samodzielnie lub skorzystać z gotowych układów WHO.

Echhh…. chwila przerwy … bo będzie bardzo nudno , ale jest to konieczne ..byście dobrze zrozumieli

istotę działania paneli dotykowych .


Kilka cykli zegarowych , poświęconych przerwaniu (zabawa_królika)

i ładowaniem zmiennych do żołądka.


Algorytm uśredniania próbek:

Użyjemy prostego algorytmu uśredniania danych , wykrytych zaraz po sobie.

Np. otrzymujemy dane o współrzędnej X (n=3)  i poprzez uśrednienie będziemy brać pod uwagę tylko

2 próbki, ale tylko te których wartości są ułożone blisko siebie.

Zobrazuję to najlepiej chyba wzorem:

 przechwytywanieje (1)

Gdzie :

X(k)  = filtrowane wartości próbek , bez konwersji na współrzędne rzeczywiste

x(k)  = surowe dane otrzymane z przetwornika ADC

bn    = współczynnik filtrowania

N     = liczba próbek dla każdego kontaktu (współrzędne)

 

Cały więc algorytm dla N=3 wygląda następująco:

przechwytywanie1z

A uśrednione próbki mogą zostać wyrażone w następujący sposób:

bn = 1/2  dla 2 wartości x(k) bliższych sobie, 0 – dla 1 wartości x(k)  oddalonej od poprzednich.

Opis algorytmu: 

 

  • pobraliśmy 3 próbki z wartościami współrzędnych x (k) x (k-1) i x (k-2), zebraliśmy razem 9 próbek dla każdej współrzędnej , mamy więc 3 próby by zrobić średnią arytmetyczną.
  • obliczamy bezwzględną wartość różnicy
  • znajdujemy najmniejszą różnicę między dwoma próbkami po obliczeniu średniej

Mam tylko nadzieję że jest to zrozumiałe i że możemy przejść dalej:)

Skoro mamy już nasz algorytm i jesteśmy przekonani, że go rozumiemy możemy się

pokusić napisać program zgodny z nim właśnie :)

Więc do dzieła:

Wprowadzamy niezbędne zmienne i stałe globalne:

Teraz czas na nasz algorytm który w C wygląda następująco:

 

Dobra mamy algorytm już zaimplementowany w kodzie , pozostaje się nam zająć kalibracją

ekranu, ale o tym nieco później :).

Kalibracja — >> cokolwiek to znaczy:

Kalibracja ekranu dotykowego wbrew pozorom jest bardzo ważna , bowiem punkt na ekranie LCD

nie musi koniecznie się ze sobą pokrywać. Dlaczego ??

Weźmy taki przypadek :

Mamy LCD o rozdzielczości 320(X) x 240(Y) i do tego WHO (kontroler panelu dotykowego) ADS7843

pracujący z rozdzielczością 12 bitów co nam daje rozdzielczość 4095×4095 dla panela dotykowego,

więc jak sami widzicie ma się to nijak do siebie, dlatego konieczna jest kalibracja w celu określenia

współczynnika skali w taki sposób żeby współrzędne panela dotykowego pasowały do współrzędnych

ekranu LCD.

Dlatego jest to tak ważne zagadnienie któremu się musimy przyglądnąć dokładnie.

Współczynnik skalowania dla osi X w naszym przypadku wynosi:

przechwytywaniezr

a dla osi Y :

przechwytywanietd (2)

Ale dlaczego ??  Dlatego że :

Sx   = jest rozdzielczością naszego LCD w osi X  (320)

S’x  = to rozdzielczość naszego panela dotykowego w osi X (4095)

Sy   = rozdzielczość LCD w osi Y (240)

S’y  = rozdzielczość panela dotykowego w osi Y  (4095)

Z czego jawnie wynika że współrzędne naszego panela dotykowego osadzonego na LCD są równe:

X=X’.kx     

Y=Y’.ky

 Współczynniki kx i ky są stałymi liniowymi opartymi o rozdzielczość LCD oraz wybraną rozdzielczość

przetwornika ADC kontrolera panela dotykowego.

Hmmm… trochę to dziwne prawda, ale nic popatrzmy na obrazek może się rozjaśni:

Free Image Hosting at www.ImageShack.us

Nie do końca się rozjaśniło ??

Trudno idziemy dalej. Przyglądnijmy się błędom polegającym na mechanicznym przesunięciu

względem siebie wyświetlacza LCD i panela dotykowego. Na lewym widać względne przesuniecie

w poziomie ΔX dla osi X i  ΔY dla osi Y.  Natomiast na prawym widzimy rotację

między LCD a panelem. Jeśli weźmiemy pod uwagę punkt P o współrzędnych (X’,

Y’) na dotykowym panelu błąd będzie pokazywany na wyświetlaczu podobnie jak dla (X’+ ΔX, Y’+ ΔY) przypadku po lewej.

Co wskazuje na fakt iż panel dotykowy powinien mieć współrzędne (R x cosθ, R x sinθ) albo na

LCD [R x cos(θ – Δθ),R x sin( θ – Δθ)] , gdzie R reprezentuje odległość od punktu początkowego

C (0,0) do punktu P (X’, Y’; X, Y).

kalobr3

Jak więc widać na rysunkach powyżej punkt P jest reprezentowany przez współrzędne na wyświetlaczu

LCD jako (X, Y) i (x ‚, y’) na panelu dotykowym. Zatem obliczenie współczynnika skalowania i błędów 

przesunięcia i obrotu dla osi X możemy wyrazić wzorami :

Dla osi X — wariant 1

przechwytywaniext

Gdzie : 

przechwytywaniekm

I podobnie dla osi Y  — wariant 2:

przechwytywanienp

Gdzie :

przechwytywaniene

Z powyższej kalkulacji różnic wynika jasno że musimy mieć wyznaczone minimum 3 niezależne punkty

kalibracji na ekranie co widać poniżej.

url

Pod warunkiem, że (X1, Y1), (X2, Y2) oraz (X3, Y3) są to 3 niezależne punkty na wyświetlaczu LCD,

oraz (X’1, Y’1) (X’2, Y’2) i (X’3, Y’3) na panelu dotykowym. Możemy też rozważając wcześniejsze

relacje dla wariantów 1 i 2, przedstawić równanie do obliczania współczynników kalibracji: 

przechwytywanieu

Różnice zaś możemy zapisać wzorem:

przechwytywanie2i

No jakoś przebrnęliśmy przez to wszystko i pozostaje nam tylko wybrać metodę kalibracji oraz

oczywiście stworzyć algorytm i zapisać go w programie dla mikrokontrolera , ale o tym trochę później :)


No to już jest później, taktów sporo minęło więc jedziemy, będzie trudniej :)

Metoda kalibracji

Poniżej obrazek przedstawia trzy niezależne punkty kalibracyjne. Z równania wyżej można obliczyć współczynniki kalibracji wymagane w celu skorygowania błędów przemieszczenia i obrotu między LCD a panelem  dotykowym.

kalobr5

Nie będę się rozpisywał, że mnożąc obie strony tego równania otrzymamy

odwrotną macierz A:

przechwytywaniean

oraz

 

przechwytywanie1w

gdzie A-1  jest odwrotną macierzą macierzy A  

Punkty (X1, Y1), (X2, Y2) oraz (X3, Y3)  wybrane są na punkty kalibracji na wyświetlaczu LCD,

a elementy macierzy są wartościami współrzędnych uzyskane podczas kalibracji sterownika panelu

dotykowego. 

Przykładowo: 


Mamy wyświetlacz LCD z rozdzielczością 256×768, wybraliśmy 3 punkty kalibracji:

(64, 384), (192, 192), (192, 576). 

Podczas kalibracji otrzymujemy współrzędne:

(678, 2169), (2807, 1327) i (2629, 3367) z panelu dotykowego o rozdzielczości 12-bitow (4095×4095).

Podstawmy więc wartości do naszego równania z przed odwracania macierzy :

przechwytywaniexyk

Po odwróceniu czego otrzymamy :

przechwytywaniear

Z czego wynika jasno że :

Równanie dla współrzędnej x : 

X = X x 0,0623 „x 0,0054 + Y ‚+ 9,9951 

i równanie dla współrzędnej y :

= -0,0163 x X’ + 0,1868 x Y’ – 10,1458 

Uff ….   wybraliśmy i zrozumieliśmy mam nadzieję  metodę kalibracji …

 

Algorytm Kalibracji :

Jest to kolejna rzecz jaką musimy uwzględnić w kodzie programu ale po tym wszystkim pozostanie nam

już tylko esencja obsługi …. jedziemy algorytm sam się nie napisze :)

Do obliczania współczynników kalibracyjnych potrzebujemy macierzy A, w której są przechowywane

współrzędne uzyskane z panelu dotykowego. Dane te wstawiamy w macierz odwrotną A-1 :

przechwytywaniemp

gdzie |A| oznacza czynnik macierzy A, który może być obliczone tak:

przechwytywaniect

Jeśli nasz czynnik jest różny od zera, możemy obliczyć odwrotność elementów w macierzy :

przechwytywaniengd

W ten sposób podstawiając dane do równania, które już znamy :

przechwytywaniear (1)

Otrzymamy wartości współczynników kalibracji.

No to napiszmy wreszcie ten kod …….

Dobrze ubierzemy nasz algorytm w kod na miarę  C i ARM ….

Oczywiście najpierw musimy powołać niezbędne zmienne i stałe:

A zakończymy jutro …. bo już wiele nam nie zostało  do napisania ….

No tak zapomniałem :)

a o to kompletny algorytm 3 punktowej kalibracji ekranu dotykowego:

Ekranem LCD 320×240 czyli modelem HY32D zajmiemy się później bo w tak zwanym 

między czasie wrócimy do paru rzeczy i tematów … ale o tym niebawem 

Teraz …. kila taktów odpoczynku na … no właśnie MSP430 lub LPC1768 zanim wrócę do STM32 :)

Wrócimy też do praktycznego zastosowania opisu z tej części  …. 


Tak jakoś zapomniałem ….

Nasz algorytm 3 punktowej kalibracji tak przedstawia się w naturze :)

Free Image Hosting at www.ImageShack.us

Free Image Hosting at www.ImageShack.us

Free Image Hosting at www.ImageShack.us

Podziel się na:
  • Print
  • Digg
  • Sphinn
  • del.icio.us
  • Facebook
  • Mixx
  • Google Bookmarks
  • Blogplay