Вот уже несколько дней работаю над созданием USB-свистка для симулятора с высокой точностью на базе платки Arduino Leonardo. Все бы ничего, но небольшой дребезг значений в около-нулевой зоне немного не нравится. Причину его я знаю, но это навело меня на совсем другие мысли.
Если проследить всю цепочку сигнала с передатчика от стиков до конечного потребителя (мотор или сервопривод), то вырисовывается такая картина: стики - передатчик - приемник - контроллер - регулятор - мотор. На всем этом пути только стики являются аналоговыми, все остальные связи с недавних пор стали цифровыми. В стиках установлены переменные резисторы, которые могут иметь нелинейные характеристики, дребезг, износ резистивного слоя, люфт оси резистора. Да и значение сопротивления, кроме этих факторов, может зависеть от температуры, влажности, погрешности измерения. В общем, переменные резисторы на осях стика - единственное слабое место, мешающее достичь хорошей точности определения угла наклона стика.
Немного могут исправить ситуацию использование датчиков Холла вместо резисторов. В них нет трущихся частей, погрешность измерения значительно выше, но есть нелинейность в выходном сигнале. Да и все равно контроллеру передатчика нужно оцифровывать данные с датчиков Холла, что тоже увеличит погрешность измерений.
А нельзя ли каким либо образом получать со стиков сразу цифровые данные, без необходимости преобразования? Такую возможность могут дать обычные гироскопы, которые используются в полетных контроллерах квадриков и вертолетов.
Допустим, разместим двух-осевой гироскоп на стике и попробуем снимать с него данные. Но при этом пульт придется держать абсолютно неподвижно, чтобы данные по отклонению стика были адекватные. Бред какой-то получается. А что если на корпус пульта установить еще один гироскоп? Тогда можно будет снимать данные с гироскопа, установленного на осях стика и гироскопа, установленного на корпусе передатчика. Если не трогать стики, то данные должны совпадать. Логично? Но если пошевелить стик, то данные с гироскопов будут отличаться. И они будут отличаться как раз на величину угла наклона стика! Вот оно значение! Как бы пульт не гулял в руках оператора, но разница в данных с гироскопов и будет реальным значением отклонения стика. Все просто! Никаких движущихся частей, никаких аналоговых данных, чистая цифра! Как думаете, идея стоящая?
Реализовать можно двумя способами. Первый способ - с помощью небольших платок с гироскопами и какого-нибудь контроллера под Arduino. Нужна только программа обработки данных с гироскопов и преобразования данных в значения, понятные контроллеру передатчика. Таким способом можно приспособить гироскопы к любому пульту. Но этот способ не очень хорош тем, что понижает точность данных, увеличивает их дискретность из-за преобразования. Но для эксперимента вполне подойдет. Не нужно будет глобально переделывать пульт.
Второй способ более правильный и предполагает подключение гироскопов непосредственно к контроллеру передатчика через SPI-шину. В этом случае вся обработка ляжет на плечи процессора пульта, но не будет промежуточного преобразования данных, что позволит повысить точность. Такой вариант более сложен и потребует модификации прошивки пульта. Это можно проделать с прошивкой Deviation для передатчиков DEVO.
К сожалению я не очень силен в программировании, чтобы реализовать хотя бы первый способ. Есть желающие попробовать? Давайте обсудим в комментариях!
Показаны сообщения с ярлыком Brainstorm. Показать все сообщения
Показаны сообщения с ярлыком Brainstorm. Показать все сообщения
08 февраля 2017
Подписаться на:
Сообщения
(
Atom
)