|
Калибровка резистивного тачскрина 7 дюймов |
|
|
|
Oct 22 2017, 17:50
|
Знающий
   
Группа: Свой
Сообщений: 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-ти точкам.
|
|
|
|
|
 |
Ответов
(1 - 14)
|
Oct 22 2017, 21:42
|
■ ■ ■ ■
    
Группа: Свой
Сообщений: 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]-для короткого!!!
--------------------
Делай что должен и будь что будет.
|
|
|
|
|
Oct 23 2017, 20:15
|
Гуру
     
Группа: Участник
Сообщений: 2 219
Регистрация: 16-08-12
Из: Киров
Пользователь №: 73 143

|
Цитата(Rash @ Oct 23 2017, 22:08)  Точность будет +/- сантиметр и больше. Точность нужна, где нажал там и курсор стоит и скорость реакции не секундами исчислялась. Точность +- 3-5мм на 10и дюймовом экране. меньше не получите в любом случае, ибо это радиус пальца при прикосновении. ЗЫ. А вообще меня интересует, как эти тачи реагируют на изменение температуры окр. среды, скажем от +30 до +5 градусов, может, кто знает, на сколько точность "уплывет"?
Сообщение отредактировал mantech - Oct 23 2017, 20:19
|
|
|
|
|
Oct 23 2017, 21:06
|
Знающий
   
Группа: Свой
Сообщений: 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-ти точкам, только будут свои коэффициенты для каждой области.
|
|
|
|
|
Oct 24 2017, 07:44
|
■ ■ ■ ■
    
Группа: Свой
Сообщений: 1 100
Регистрация: 9-08-06
Пользователь №: 19 443

|
Цитата(Rash @ Oct 23 2017, 22:08)  skripach, У меня подобный алгоритм только для 9-ти точек, AN от Analog Devices. Ссылку дадите? И да, у самого края проблемы неизбежны, там диалектик мешает, который между слоями тачка. Разделить экран на несколько частей наверно неплохая идея, добавление точек в алгоритм приведённый мной по ссылке приведёт к существенному усложнению расчетов и наверно потребует увеличить разрядность некоторых переменных, а там уже некуда...
--------------------
Делай что должен и будь что будет.
|
|
|
|
|
Oct 24 2017, 14:59
|
Гуру
     
Группа: Участник
Сообщений: 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
|
|
|
|
|
Oct 24 2017, 20:27
|
Знающий
   
Группа: Свой
Сообщений: 639
Регистрация: 5-09-05
Пользователь №: 8 231

|
skripach, смотрите AN-1021. В 5-ти дюймовом края уже не проблема, думаю и для 7-ми дюймового можно откалибровать, только методику нужно изменить, из-за его нелинейности. Текущий алгоритм у меня на float числах. Разницу c double не заметил. Нужно ещё придумать как области которые разделить для своей калибровки, синхронизировать между собой. Пока думаю придётся помимо калибровочный коэффициентов ещё крайние значения АЦП хранить для каждой области. Но в таком случае, нужно учесть, если вдруг попадётся экран с поменянными X- и Х+ или Y- и Y+. Калибровка всего экрана это учитывает в алгоритме.
mantech, Ёмкостные тачи вроде не так давно в широком доступе, может год, полтора и то, что видел это только на buydisplay, на али ещё тоже появились, но вместе с экрани. Экраны с телефонов не беру в расчёт. Да и ёмкостной тач, является лицевой частью корпуса, это тоже нужно учитывать. Другой плюс для меня, это одинаковость шлейфов для 5 и 7 дюймовых LCD.
|
|
|
|
|
Oct 25 2017, 05:57
|
Гуру
     
Группа: Участник
Сообщений: 2 219
Регистрация: 16-08-12
Из: Киров
Пользователь №: 73 143

|
Цитата(Rash @ Oct 24 2017, 23:27)  Ёмкостные тачи вроде не так давно в широком доступе, может год, полтора и то, что видел это только на buydisplay, на али ещё тоже появились, но вместе с экрани. Экраны с телефонов не беру в расчёт. Да и ёмкостной тач, является лицевой частью корпуса, это тоже нужно учитывать. На счет "недавно", смотрел года 2 назад - уже не мало было, интересовали тачи для планшетов, т.к. они подходили под искомую диагональ (7-10") Единственный минус - разные контроллеры, либо надо было ставить свой на плату и к нему 1 или 2 широких разъема.
|
|
|
|
|
Nov 1 2017, 15:01
|

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

|
Цитата(Rash @ Oct 25 2017, 09:28)  Может быть и полно, но мне как то не попадались. Да и мультитач мне пока не нужен, поэтому резистивного вполне хватало. Использовал 7" тач с экраном от стартеркита SK-ATM0700D4-Plug, так же модули md070sd. Там у них примеры калибровки - работает идеально, 1-3 мм погрешность по краям приблизительно. Но ушли на ёмкостные - люди привыкли к смартам и тяжело понимают, что надо нажать сильно для отклика. Я фильтровал силу нажатия (z), поэтому слабые касания не обрабатывались. Так же фильтровал по накоплению координат.
|
|
|
|
|
Nov 2 2017, 09:43
|

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

|
Цитата(mantech @ Nov 1 2017, 20:38)  В смысле? Контроллер тача разве это не делает сам? У меня был самодельный на МК и с спец. контроллерами не работал, приходилось делать нормирование и фильтрацию, думал, что специализированные ИС это должны делать, иначе зачем они тогда, скоммутировать порты и замерить сопротивление?? Я работал с XPT2046, фильтрация обязательна.
|
|
|
|
|
Nov 4 2017, 21:23
|
Знающий
   
Группа: Свой
Сообщений: 639
Регистрация: 5-09-05
Пользователь №: 8 231

|
Цитата(sadat @ Nov 1 2017, 19:01)  ... Там у них примеры калибровки ... А примеры примеры в общем доступе есть? Я их не нашёл. Цитата(sadat @ Nov 1 2017, 19:01)  Я фильтровал силу нажатия (z) ... Значение для силы нажатия меняется от координат. С одного края лёгкое нажатие это может быть 200-300 (значение АЦП), а с другого края для лёгкого нажатия это уже значение не меньше 800-1000. Силу нажатия привязывали по координатам при калибровке?
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|