Здравствуйте, уважаемые радиокоты!
Сам я далёк от электронного ремесла, но в качестве хобби пытаюсь сделать (хоть в каком-нибудь первом приближении) графический планшет (для тех, кто не в курсе, что это:
https://ru.wikipedia.org/wiki/%D0%93%D1%80%D0%B0%D1%84%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B9_%D0%BF%D0%BB%D0%B0%D0%BD%D1%88%D0%B5%D1%82).
Что имеется на сегодняшний деньАЦП AD9280, ATtiny44A и Raspberry Pi для произведения каких-либо осмысленных действий с АЦП и микроконтроллером:
Печатная плата с типа антеннами, предназначенная для определения положения пера вдоль одной оси (Х или У):
Общая линия земли, от которой отходят все эти спирали, у которых другие концы подключены каждый к своей линии питания - всего 32 штуки. Размеры одной антенны: 6мм x ~200мм.
Перо:
На ферритовый стержень намотано 50 витков медного провода диаметром 0.1 мм, подключено к АЦП.
Схема:
Катушка LPEN - это перо, подключенное к АЦП; катушки L1-L4 - это 4 подключенные антенны на печатной плате (остальные не подключены никак); RB-P - это Raspberry Pi, которая даёт команды микроконтроллеру, чтобы тот начал по очереди включать катушки L1-L4 и АЦП для считывания уровня сигнала с пера, результат с АЦП идёт напрямую в Raspberry Pi.
Принцип работы: катушка в пере - это раз, катушка на печатной плате - это два, "переменный" ток по печатной плате - это три, индуцированный ток в пере - это четыре. Переменный ток получается путём смены логического нуля на логическую единицу на одной из ножек микроконтроллера. Ножка подключена к базе транзистора, который порождает ток по одной из подключённых антенн печатной платы. Скачок тока по антенне индуцирует ток в пере.
Прошивка микроконтроллера:
Алгоритм: ждёт команды от Raspberry Pi, потом запускает АЦП (ADC_CLK <- 0), открывает вентиль для катшуки L1 (TBL_CLK_0 <- 1), останавливает АЦП (ADC_CLK <- 1), закрывает вентиль (TBL_CLK_0 <- 0), сигнализирует о готовности Raspberry Pi (RBP_RESP <- 0). Raspberry Pi считывает данные с АЦП и даёт команду микроконтроллеру для следующей итерации, где отработают таким же образом антенны L2-L4. А потом всё по новой.
Демонстрация "работы":
[youtube]https://youtu.be/SSN1l0t94m4[/youtube]
На телевизоре samsung можно видеть в углу серое окно. На нём отрисовывается красными столбиками уровень сигналов с 4-х антенн в зависимости от положения пера. Максимальный уровень сигнала: ~600 милливольт.
Всё бы хорошо, но...
Помехи (?)[youtube]https://youtu.be/Qkl-XJdk7PY[/youtube]
При неподвижном пере уровень сигнала прыгает очень сильно. Для его более-менее стабилизации я использую сглаживающий программный фильтр. На видео видны дёрганья на графиках и в неком числовом виде (то, что прыгают десятые доли - это уже очень плохо).
Даже когда к АЦП ничего не подключено уровень сигнала с него не постоянный, а прыгающий +- 100 милливольт (а иногда и больше).
По-хорошему, на аппаратном уровне сигнал должен быть как можно более стабильным, чтобы его можно было трактовать как есть без прибегания к программной фильтрации (которая требует несколько десятков сэмплов, что плохо сказывается на отзывчивости в целом).
Немонотонный сигнал с антеннКогда перо начинает двигаться от границы двух антенн к центру одной из антенн, уровень сигнала начинает повышатся для обоих антенн (не в равной степени, между прочим. Сигнал повышается быстрее для той антенны, в сторону которой движется перо). Потом внезапно сигнал для отдаляющейся антенны резко спадает до почти нуля и остаётся только сигнал для приближающейся антенны.
Здесь нужно, чтобы при движении пера уровень сигнала менялся по вполне себе определённому закону, чтобы для минимального изменения положения пера можно было бы сопоставить некую монотонную функцию. С её помощью можно будет получить физические координаты пера.
Может быть, у кого-нибудь есть мысли, что можно сделать, чтобы решить эти проблемы?