Подключение резистивной сенсорной панели c драйвером XPT2046 к STM32 и её калибровка по четырём точкам.

Подключение резистивной сенсорной панели c драйвером XPT2046 к STM32 и её калибровка по четырём точкам.

Статей про резистивные сенсорные панели на сайте уже несколько, тут можно почитать как они работают, а тут как подключить её к AVR и произвести калибровку. Поэтому далее рассказ пойдёт лишь о тонкостях работы с такой панелью.
Как известно, обмен данными c XPT2046 происходит по SPI, поэтому надо просто найти свободный и подключится к нему. Обычно чтобы посмотреть под какой SPI какие выводы отведены, использую программу  STM32CUBE.
Дисплей, на который наклеена сенсорная панель, у меня подключён к плате miniSTM32F103V и пока что не один SPI у меня не задействован, но на разъёме, предназначенном для подключения дисплея, остались не задействованы следующие выводы: PA5, PA6, PA7, PB6, PB7.
И как позже стало понятно часть из них как раз и предназначена для подключения устройств по SPI, оставшиеся два вывода можно использовать как показано на картинке ниже.
Подключение резистивной сенсорной панели c драйвером XPT2046 к STM32 и её калибровка по четырём точкам.

Теперь когда дисплей подключён, надо настроить и включить модуль SPI. Ниже приведён код инициализации SPI модуля для подключения к XPT2046.

Также перепишем остальные функции.


Хотелось обратить внимание на функцию получение координат точки касания, дело в том, что для повышения точности желательно производить несколько измерений, а потом находить среднее значение, что и было реализовано. И ещё если одна из координат равна нулю, значение второй координаты обнуляется и в вычислении они не участвуют.


Теперь предлагаю перейти к калибровке. Сначала хотелось бы отметить, что каждая из координат задаётся уравнением типа
Xдисплея = Xсенсорной панели/K + B

А смысл калибровки заключается в нахождении значений коэффициентов K и B.
Коэффициент пропорциональности К находится из следующих рассуждений: "Если расстояние между двумя точкам на экране равно 100 пикселям и это же расстояние на сенсорной панели равно 500 отсчетам АЦП, то К равно 5.
Зная координаты точек и значение коэффициента K, из формулы выше можно найти значение коэффициента B. Вот как выглядит расчёт коэффициентов на самом деле.

//Расчёт коэффициентов. 
//xPos - значения полученные с помощью тачскринаx, xCenter - реальные координаты точек на дисплее
	axc[0] = (float)(xPos[3] - xPos[0])/(xCenter[3] - xCenter[0]);
	bxc[0] = xCenter[0] - xPos[0]/axc[0];
	ayc[0] = (float)(yPos[3] - yPos[0])/(yCenter[3] - yCenter[0]);
	byc[0] = yCenter[0] - yPos[0]/ayc[0];

Код всей процедуры калибровки представлен ниже.


На этом всё, в архиве проект в Keil uVision, в настройках проекта во вкладке target установить Xtal = 8MHz
ssd1963_xpt2046_example.rar [31,21 Kb] (cкачиваний: 1095)
комментарии
6