реклама на сайте
подробности

 
 
> Калибровка резистивного тачскрина 7 дюймов
Rash
сообщение Oct 22 2017, 17:50
Сообщение #1


Знающий
****

Группа: Свой
Сообщений: 639
Регистрация: 5-09-05
Пользователь №: 8 231



Здравствуйте.
Нужна помощь в калибровке резистивного тачскрина 7 дюймов. У кого есть опыт, помогите разобраться, в чём ошибка. Тачскрин опрашиваю через XPT2046, мк STM32. Бьюсь над проблемой уже 3-ю неделю.

Немного истории и суть проблемы:
Вначале проект был на LCD 3.2 дюйма (разрешение 320 x 240). Калибровка была по 3-м точкам. Работало идеально, хоть от пальца, хоть от стилуса.

Дальше проект перешёл на LCD 5 дюймов (разрешение 800 x 480). Возникло 2 проблемы:
1-ая это калибровки по 3-м точкам стало не хватать, решение - сделал калибровку по 9-ти точкам (чтоб больше не возвращаться к этому вопросу);
2-ая это пришлось учитывать степень нажатия на экран, т.е. читать z1 и вводить поправочный коэффициент для разных областей экрана (хватило 4-х областей). Стало работать тоже идеально. И думал, что вопрос закрыт.

Дальше проект перешёл на LCD 7 дюймов (разрешение 800 x 480) и тут с тачскрином застрял. Он не калибруется должным образом. Чем дальше удаляться от центра экрана, тем курсор имеет большую погрешность (калибровка по 9-ти точкам), по разным краям разную. Причём тачскрин по краям имеет большой разброс сопротивления, если считывать код АЦП, то разница составляет от 100..300 единиц минимум по одной оси. Силу нажатия нужно учитывать ещё больше, для этого снял в калибровочных точках координату z1 и считаю, какая должна быть z1 для каждой координаты. Но всё это не даёт хороший результат.

Подключал 5-ти и 7-ми дюймовый экран к GPS навигатору, шлейфы у них одинаковые, на навигаторе WinCE,работают абсолютно одинаково, с одной и той же калибровкой. Но там не отображается курсор, но в пиктограммы всё чётко попадает, лишь на совсем крайних точках нужно больше давить на экран. На навигаторе калибровка по 5-ти точкам.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 14)
skripach
сообщение Oct 22 2017, 21:42
Сообщение #2


■ ■ ■ ■
*****

Группа: Свой
Сообщений: 1 100
Регистрация: 9-08-06
Пользователь №: 19 443



Читать это.

По 5 точкам:
CODE
#define POINT_QTY 5

typedef struct
{
Int32U x;
Int32U y;
} tPoint;

typedef struct
{
Flo64 alfa_x;
Flo64 beta_x;
Flo64 delta_x;
Flo64 alfa_y;
Flo64 beta_y;
Flo64 delta_y;
} tFactors;

void FactorsCalc(tPoint *s, tPoint *t, tFactors *factors)
{
Int8U j;
Int64U a=0, b=0, c=0, d=0, e=0, X1=0, X2=0, X3=0, Y1=0, Y2=0, Y3=0;
Int64S D, Dx1, Dx2, Dx3, Dy1, Dy2, Dy3;

for(j=0; j<POINT_QTY; j++)
{
a+=t[j].x*t[j].x;
b+=t[j].y*t[j].y;
c+=t[j].x*t[j].y;
d+=t[j].x;
e+=t[j].y;
X1+=t[j].x*s[j].x;
X2+=t[j].y*s[j].x;
X3+=s[j].x;
Y1+=t[j].x*s[j].y;
Y2+=t[j].y*s[j].y;
Y3+=s[j].y;
}

D=n*(a*b-c*c)+2*c*d*e-a*e*e-b*d*d;

Dx1=n*(X1*b-X2*c)+e*(X2*d-X1*e)+X3*(c*e-b*d);
Dx2=n*(X2*a-X1*c)+d*(X1*e-X2*d)+X3*(c*d-a*e);
Dx3=X3*(a*b-c*c)+X1*(c*e-b*d)+X2*(c*d-a*e);

Dy1=n*(Y1*b-Y2*c)+e*(Y2*d-Y1*e)+Y3*(c*e-b*d);
Dy2=n*(Y2*a-Y1*c)+d*(Y1*e-Y2*d)+Y3*(c*d-a*e);
Dy3=Y3*(a*b-c*c)+Y1*(c*e-b*d)+Y2*(c*d-a*e);

factors->alfa_x=(Flo64)((Flo64)Dx1/(Flo64)D);
factors->beta_x=(Flo64)((Flo64)Dx2/(Flo64)D);
factors->delta_x=(Flo64)((Flo64)Dx3/(Flo64)D);

factors->alfa_y=(Flo64)((Flo64)Dy1/(Flo64)D);
factors->beta_y=(Flo64)((Flo64)Dy2/(Flo64)D);
factors->delta_y=(Flo64)((Flo64)Dy3/(Flo64)D);
}

void Correction(tPoint *corrected, tPoint *adc, tFactors *factors)
{
corrected->x=(Int32U)(factors->alfa_x*adc->x + factors->beta_x*adc->y + factors->delta_x);
corrected->y=(Int32U)(factors->alfa_y*adc->x + factors->beta_y*adc->y + factors->delta_y);
}


Сообщение отредактировал IgorKossak - Oct 23 2017, 07:46
Причина редактирования: [codebox] для длинного кода. [code]-для короткого!!!


--------------------
Делай что должен и будь что будет.
Go to the top of the page
 
+Quote Post
mantech
сообщение Oct 23 2017, 11:48
Сообщение #3


Гуру
******

Группа: Участник
Сообщений: 2 219
Регистрация: 16-08-12
Из: Киров
Пользователь №: 73 143



Цитата(Rash @ Oct 22 2017, 20:50) *
Здравствуйте.
Нужна помощь в калибровке резистивного тачскрина 7 дюймов. У кого есть опыт, помогите разобраться, в чём ошибка. Тачскрин опрашиваю через XPT2046, мк STM32. Бьюсь над проблемой уже 3-ю неделю.


А в чем проблема? Хотите получить высокое разрешение(чтоб стилусом в писать текст от руки или просто по кнопкам в 2 кв. см. пальцем попасть)? В последнем случае использую "контроллер", сделанный из тини25го с калибровкой в 2 точки.
Go to the top of the page
 
+Quote Post
Rash
сообщение Oct 23 2017, 19:08
Сообщение #4


Знающий
****

Группа: Свой
Сообщений: 639
Регистрация: 5-09-05
Пользователь №: 8 231



skripach, У меня подобный алгоритм только для 9-ти точек, AN от Analog Devices.

mantech, Проблема описана в 1-ом посте, если его весь прочитать, а не первые 2 строчки.
Интересно глянуть как будет работать тач на 7-ми дюймовом LCD с калибровкой по двум точкам. Точность будет +/- сантиметр и больше. Точность нужна, где нажал там и курсор стоит и скорость реакции не секундами исчислялась.
Go to the top of the page
 
+Quote Post
mantech
сообщение Oct 23 2017, 20:15
Сообщение #5


Гуру
******

Группа: Участник
Сообщений: 2 219
Регистрация: 16-08-12
Из: Киров
Пользователь №: 73 143



Цитата(Rash @ Oct 23 2017, 22:08) *
Точность будет +/- сантиметр и больше. Точность нужна, где нажал там и курсор стоит и скорость реакции не секундами исчислялась.


Точность +- 3-5мм на 10и дюймовом экране. меньше не получите в любом случае, ибо это радиус пальца при прикосновении.

ЗЫ. А вообще меня интересует, как эти тачи реагируют на изменение температуры окр. среды, скажем от +30 до +5 градусов, может, кто знает, на сколько точность "уплывет"?

Сообщение отредактировал mantech - Oct 23 2017, 20:19
Go to the top of the page
 
+Quote Post
Rash
сообщение Oct 23 2017, 21:06
Сообщение #6


Знающий
****

Группа: Свой
Сообщений: 639
Регистрация: 5-09-05
Пользователь №: 8 231



3 - 5 мм это много, если нажимать стилусом. У меня на 5 дюймовом при нажатии курсор изменяет свою позицию максимум на 1-2 пикселя и то ближе к краю экрана, и то не всегда. А так стоит как вкопанный. На 7 дюймовом это выполнимо только ближе к центру, к крайним точкам экрана значения начинают уплывать до 5-15мм, меня это не устраивает. Нелинейность тача для 7-ми дюймов 100..200 по показаниям 12 битного АЦП, а нелинейность тача для 5 дюймов 10-30. Плюс нужно учитывать силу нажатия, т.к. при слабом нажатии в точке отдалённой от центра будут читаться неправильные значения АЦП.
Как вас калибровка по 2-м точкам для 10-ти дюймового тача, может устраивать для меня загадка.

Т.к. предложений от сообщества никаких, пришла мысль разделить экран на 4 части и сделать для каждой части свою калибровку по 4-м точкам. Это останется та же калибровка по 9-ти точкам, только будут свои коэффициенты для каждой области.
Go to the top of the page
 
+Quote Post
skripach
сообщение Oct 24 2017, 07:44
Сообщение #7


■ ■ ■ ■
*****

Группа: Свой
Сообщений: 1 100
Регистрация: 9-08-06
Пользователь №: 19 443



Цитата(Rash @ Oct 23 2017, 22:08) *
skripach, У меня подобный алгоритм только для 9-ти точек, AN от Analog Devices.

Ссылку дадите?
И да, у самого края проблемы неизбежны, там диалектик мешает, который между слоями тачка. Разделить экран на несколько частей наверно неплохая идея, добавление точек в алгоритм приведённый мной по ссылке приведёт к существенному усложнению расчетов и наверно потребует увеличить разрядность некоторых переменных, а там уже некуда...


--------------------
Делай что должен и будь что будет.
Go to the top of the page
 
+Quote Post
mantech
сообщение Oct 24 2017, 14:59
Сообщение #8


Гуру
******

Группа: Участник
Сообщений: 2 219
Регистрация: 16-08-12
Из: Киров
Пользователь №: 73 143



Цитата(Rash @ Oct 24 2017, 00:06) *
3 - 5 мм это много, если нажимать стилусом. У меня на 5 дюймовом при нажатии курсор изменяет свою позицию максимум на 1-2 пикселя и то ближе к краю экрана, и то не всегда. А так стоит как вкопанный.


Согласен, но мне тач нужен именно для работы без стилуса, поэтому данная точность вполне оправдана.

На счет, как по 2м точкам - как сказать, видать тачи с достаточно линейной характеристикой попадаются, почему и спрашиваю, как при разных температурах будет, может нелинейность увеличится...

ЗЫ. Кстати, почему именно резистивный выбрали? В моем случае нужно, чтоб работало в условиях влажности и сырости.

Сообщение отредактировал mantech - Oct 24 2017, 15:01
Go to the top of the page
 
+Quote Post
Rash
сообщение Oct 24 2017, 20:27
Сообщение #9


Знающий
****

Группа: Свой
Сообщений: 639
Регистрация: 5-09-05
Пользователь №: 8 231



skripach, смотрите AN-1021.
В 5-ти дюймовом края уже не проблема, думаю и для 7-ми дюймового можно откалибровать, только методику нужно изменить, из-за его нелинейности. Текущий алгоритм у меня на float числах. Разницу c double не заметил.
Нужно ещё придумать как области которые разделить для своей калибровки, синхронизировать между собой. Пока думаю придётся помимо калибровочный коэффициентов ещё крайние значения АЦП хранить для каждой области. Но в таком случае, нужно учесть, если вдруг попадётся экран с поменянными X- и Х+ или Y- и Y+. Калибровка всего экрана это учитывает в алгоритме.

mantech, Ёмкостные тачи вроде не так давно в широком доступе, может год, полтора и то, что видел это только на buydisplay, на али ещё тоже появились, но вместе с экрани. Экраны с телефонов не беру в расчёт. Да и ёмкостной тач, является лицевой частью корпуса, это тоже нужно учитывать. Другой плюс для меня, это одинаковость шлейфов для 5 и 7 дюймовых LCD.
Go to the top of the page
 
+Quote Post
mantech
сообщение Oct 25 2017, 05:57
Сообщение #10


Гуру
******

Группа: Участник
Сообщений: 2 219
Регистрация: 16-08-12
Из: Киров
Пользователь №: 73 143



Цитата(Rash @ Oct 24 2017, 23:27) *
Ёмкостные тачи вроде не так давно в широком доступе, может год, полтора и то, что видел это только на buydisplay, на али ещё тоже появились, но вместе с экрани. Экраны с телефонов не беру в расчёт. Да и ёмкостной тач, является лицевой частью корпуса, это тоже нужно учитывать.


На счет "недавно", смотрел года 2 назад - уже не мало было, интересовали тачи для планшетов, т.к. они подходили под искомую диагональ (7-10") Единственный минус - разные контроллеры, либо надо было ставить свой на плату и к нему 1 или 2 широких разъема.
Go to the top of the page
 
+Quote Post
Rash
сообщение Oct 25 2017, 06:28
Сообщение #11


Знающий
****

Группа: Свой
Сообщений: 639
Регистрация: 5-09-05
Пользователь №: 8 231



Может быть и полно, но мне как то не попадались. Да и мультитач мне пока не нужен, поэтому резистивного вполне хватало.
Go to the top of the page
 
+Quote Post
sadat
сообщение Nov 1 2017, 15:01
Сообщение #12


Частый гость
**

Группа: Свой
Сообщений: 117
Регистрация: 6-07-05
Из: Белгород
Пользователь №: 6 575



Цитата(Rash @ Oct 25 2017, 09:28) *
Может быть и полно, но мне как то не попадались. Да и мультитач мне пока не нужен, поэтому резистивного вполне хватало.

Использовал 7" тач с экраном от стартеркита SK-ATM0700D4-Plug, так же модули md070sd. Там у них примеры калибровки - работает идеально, 1-3 мм погрешность по краям приблизительно.
Но ушли на ёмкостные - люди привыкли к смартам и тяжело понимают, что надо нажать сильно для отклика.

Я фильтровал силу нажатия (z), поэтому слабые касания не обрабатывались. Так же фильтровал по накоплению координат.
Go to the top of the page
 
+Quote Post
mantech
сообщение Nov 1 2017, 17:38
Сообщение #13


Гуру
******

Группа: Участник
Сообщений: 2 219
Регистрация: 16-08-12
Из: Киров
Пользователь №: 73 143



Цитата(sadat @ Nov 1 2017, 18:01) *
Я фильтровал силу нажатия (z), поэтому слабые касания не обрабатывались. Так же фильтровал по накоплению координат.


В смысле? Контроллер тача разве это не делает сам? У меня был самодельный на МК и с спец. контроллерами не работал, приходилось делать нормирование и фильтрацию, думал, что специализированные ИС это должны делать, иначе зачем они тогда, скоммутировать порты и замерить сопротивление??
Go to the top of the page
 
+Quote Post
sadat
сообщение Nov 2 2017, 09:43
Сообщение #14


Частый гость
**

Группа: Свой
Сообщений: 117
Регистрация: 6-07-05
Из: Белгород
Пользователь №: 6 575



Цитата(mantech @ Nov 1 2017, 20:38) *
В смысле? Контроллер тача разве это не делает сам? У меня был самодельный на МК и с спец. контроллерами не работал, приходилось делать нормирование и фильтрацию, думал, что специализированные ИС это должны делать, иначе зачем они тогда, скоммутировать порты и замерить сопротивление??

Я работал с XPT2046, фильтрация обязательна.
Go to the top of the page
 
+Quote Post
Rash
сообщение Nov 4 2017, 21:23
Сообщение #15


Знающий
****

Группа: Свой
Сообщений: 639
Регистрация: 5-09-05
Пользователь №: 8 231



Цитата(sadat @ Nov 1 2017, 19:01) *
... Там у них примеры калибровки ...

А примеры примеры в общем доступе есть? Я их не нашёл.

Цитата(sadat @ Nov 1 2017, 19:01) *
Я фильтровал силу нажатия (z) ...

Значение для силы нажатия меняется от координат. С одного края лёгкое нажатие это может быть 200-300 (значение АЦП), а с другого края для лёгкого нажатия это уже значение не меньше 800-1000. Силу нажатия привязывали по координатам при калибровке?

Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 21st July 2025 - 23:40
Рейтинг@Mail.ru


Страница сгенерированна за 0.01494 секунд с 7
ELECTRONIX ©2004-2016