Дешевый планарный датчик положения на основе PS/2 Mouse, MatLab + MBED + PS/2 Mouse

    Ну что же, попытка номер два.

    В данном посте я попытаюсь рассказать об одной из частей моего дипломного проекта.
    Использование контроллера типа Мышь, в качестве планарного датчика положения.

    В чем же плюс Мышки?


    Постановка задачи.


    • Получение координат с контроллера типа мышь в программном комплексе MatLab

    Для начала немного теории.
    Работа с мышью в MatLab будет реализована посредством работы с rs232 (по другому com портом), контроллер MBED будет общаться с мышью и выдавать на ком порт по запросу пакеты по 3 байта. В MatLab с помощью несложной блоксхемы будет происходить анализ пакетов с последующим разбором на управляющие сигналы и сигналы данных.

    Почему был выбран метод общения через rs232? Потому что этот путь позволяет реализовать работу с мышью через стандартные блоки MatLab'а, тем самым оставляя возможность использования во всех режимах (Simulink, RTW, xPC).

    Давайте взглянем теперь на MBED
    image

    Как мы видим контроллер обладает просто сумасшедшим количеством портов, из этого многообразия нам понадобится всего 4, причем 2 из них будут питанием :)

    Вот как это выглядит в прототипной плате
    image

    Мышь работает с конечным устройством посредством 2х портов DATA и CLOCK, по названиям я думаю не сложно догадаться что есть что ;)
    В нашем случае мы подключаем CLOCK на 28 ножку контроллера, а DATA на 26.
    Питание берем с ног GND и VU.

    Программа для контроллера крайне простая

    ////////////////////////////////////////////////
    main.cpp
    ////////////////////////////////////////////////
    #include "mbed.h"
    #include "PS2Mse.h"
     
    PS2Mse mse(p28,p26);
    Serial pc(USBTX, USBRX);
     
    int main() {
     
     
        mse.wr(0xf0);
        mse.wr(0xff);  // reset
        mse.rd();  // ack byte
        mse.rd();  // blank */
        mse.rd();  // blank */
        mse.wr(0xf0);  // remote mode
        mse.rd();  // ack
     
     
        char mstat;
        char mx;
        char my;
     
     
        while (1) {
     
            while (pc.getc()!=0) {
                mse.wr(0xeb);  
                mse.rd();      
                mstat = mse.rd();
                mx = mse.rd();
                my = mse.rd();
                pc.printf("%c%c%c\r\n", mstat,mx,my);
            }
        }
     
     
     
    }
     

    ////////////////////////////////////////////////
    PS2Mse.cpp
    ////////////////////////////////////////////////
    dumpz.org/17295
    ////////////////////////////////////////////////
    PS2Mse.h
    ////////////////////////////////////////////////
    dumpz.org/17297

    Как мы видим все что выполняет программа так это ждет любого символа от хоста (PC) и в ответ выдает текущие значения координат и клавиш мыши в виде 3х байтового пакета.

    Рассмотрим что же происходит далее.
    Вот как выглядит наш блок для работы в MatLab
    image
    Заглянем внутрь блока Mouse
    image

    Как мы видим тут тоже все довольно просто, идет анализ первого байта, из него извлекается 7 флаговых бита
    • 1 — Нажата первая кнопка мыши
    • 2 — Нажата вторая кнопка мыши
    • 3 — Нажата третья кнопка мыши
    • 5 — Знак приращения по X
    • 6 — Знак приращения по Y
    • 7 — Переполнение по X
    • 8 — Переполнение по Y

    Второй и третий байт — приращения по X и по Y соответственно.

    Как мы видим использование мыши очень просто.
    Если кому то будет интересно то будут и метрологические исследования мыши.

    UPDATE:

    Кстати небольоше уточнение, мой диплом про другое, датчик же мне «попросили» (как обычно это делается в институте) сделать для помощи другому специалисту ;)
    Мой диплом же совершенно про другие вещи, а конкретнее про Lego шарик и компас :)

    Нус попробуем немного объяснить зачем вся эта возня была.
    Существует задачу управления двухзвенным нежестким манипулятором.
    Были испробованы много способов для определения конечного положения каждого из звеньев, начиная от тензометров наклеенных на звенья, заканчивая бредовыми идеями с лазерными датчиками расстояния.
    Конечная цель определить куда все таки переместилось звено после подачи управляющих импульсов на сервоприводы, так как звено нежесткое, а также конструкция имеет некоторую инерцию, то использовать для этого тахогенераторы и счетчики самих двигателей бессмысленно.

    Под MatLab же заточка велась именно для эта моделирования/программирования, подбора ПИД и подобных регуляторов. Вос ссылочка примерно с такими же задачами в дипломе www.lib.ua-ru.net/diss/cont/61880.html

    Вообще тема управления нежесткими манипуляторами — любимая тема специальности Системы Управления, про эту тему уже столько всего написано.

    Мышь была взята так как готовый бесконтактный датчик положения в цене явно превышает стоимость мыши.

    Постарался как мог объяснить, 9 марта сфотографирую и попытаюсь объяснить предметно.

    Similar posts

    Ads
    AdBlock has stolen the banner, but banners are not teeth — they will be back

    More

    Comments 48

      +4
      Тоесть мышь из мыши...?
        +1
        Разница в том, что приращения обрабатываются не драйвером мыши и системой, а любой сторонней программой работающей с com портом, либо на какой-либо отдельной железке.
        Данный конструктив же был разработан чтоб стать частью двухзвенного нежесткого манипулятора.
        +3
        Забавно тут некоторые минусуют, видать слишком сложными предложениями пишу?
          +2
          Наверное не поняли. Я, например, не понял :-(
            0
            Не понятно, почему мышь — планарный датчик. Для меня всегда планарный, означало, плоский, т.е. мышь — плоский датчик :). В автоматике и телемеханике это слово, скорее всего, имеет другое значение? Типа, датчик определяющий координаты на плоскости?
              0
              Ну так правильно, датчик 2х координатный.
            +1
            Интересно бы почитать продолжение.

            Особенно про другие части вашего устройства, чтоб сформировать общее представление о нем и процессе создания подобных вещей в принципе.

            И у меня вопрос:
            «rs232… позволяет реализовать работу с мышью через стандартные блоки MatLab'а»
            "… приращения обрабатываются не драйвером мыши и системой, а… какой-либо отдельной железке."

            Вы в пользу rs232 решили из-за MatLab'а, или из-за больше простоты, нежели скажем USB, особенно в контексте потенциальной «железки» — контроллера?
              0
              rs232 выбран исключительно ради MatLab'a так как он не умеет работать с USB в режимах xPC и RTW(RTx).
              Конечное устройство представляет из себя манипулятор и искусственно созданными двумя нежесткостями.
              Думаю если интересно сфотографирую этого монстра.
                0
                Пожалуйста, сфотографируйте и добавьте в статью. Думаю не только мне это будет интересно, да и статье добавит ещё больше внушительности и полноты.
                  0
                  Хорошо но это уже после праздника ;)
                    +1
                    лучше видео сделайте, хотелось бы увидеть в действии
              +1
              1. Зачем?
              2. Где здесь диплом?
                0
                1) что зачем?
                2) это часть из дипломного проекта.

                Если «зачем» подразумевалось зачем это делать из мыши, то как было указано выше — цена и простота реализации.
                  +1
                  Нет. Под «зачем» я имел ввиду «зачем переписывать драйвер мыши в матлабе?». Ну и второй вопрос все еще в силе.
                    0
                    Уточню. Мышь и так является планарным датчиком положения, и именно так используется в ОС. Зачем его использовать «в качестве» планарного датчика положения.
                      –3
                      чтоб матлаб мог получать и анализировать данные полученные от этого датчика в обход системы, а в конечном результате вообще не используется, датчик же используется как обратная связь по положению в замкнутом контуре управления манипулятором.
                        0
                        У меня преподаватель подобным образом выражается )
                          +1
                          Я тоже практически ничего не понял. То вы говорите, что задача была в получении координат мыши матлабом в обход системы, то — что матлаб это просто для примера.

                          Очень бы хотелось аргументации по примерно такой схеме:

                          Нам нужно сделать [...], потому что такого еще нет, а было бы удобно. Для этого нам понадобится планарный датчик, а для простоты разработки и отладки мы сначала заточим его под Matlab в таком режиме, чтобы потом можно было легко перенести с эмуляции на реальную железку.

                          Если первое предложение будет достаточно убедительным, дальнейших вопросов ни у кого не возникнет.
                            0
                            Кстати небольоше уточнение, мой диплом про другое, датчик же мне «попросили» (как обычно это делается в институте) сделать для помощи другому специалисту ;)
                            Мой диплом же совершенно про другие вещи, а конкретнее про Lego шарик и компас :)
                            Нус попробуем.
                            Существует задачу управления двухзвенным нежестким манипулятором.
                            Были испробованы много способов для определения конечного положения каждого из звеньев, начиная от тензометров наклеенных на звенья, заканчивая бредовыми идеями с лазерными датчиками расстояния.
                            Конечная цель определить куда все таки переместилось звено после подачи управляющих импульсов на сервоприводы, так как звено нежесткое, а также конструкция имеет некоторую инерцию, то использовать для этого тахогенераторы и счетчики самих двигателей бессмысленно.

                            Под MatLab же заточка велась именно для эта моделирования/программирования, подбора ПИД и подобных регуляторов. Вос ссылочка примерно с такими же задачами в дипломе www.lib.ua-ru.net/diss/cont/61880.html.

                            Вообще тема управления нежесткими манипуляторами — любимая тема специальности Системы Управления, про эту тему уже столько всего написано.

                            Мышь была взята так как готовый бесконтактный датчик положения в цене явно превышает стоимость мыши.

                            Постарался как мог объяснить, 9 сфотографирую и попытаюсь объяснить предметно.

                          –1
                          немного криво написал, имел ввиду, что в конечном варианте MatLab не используется. Он нужен на этапе проектирования, системы, подбора регуляторов, фильтров и прочего, для последующей аппаратной реализации.
                            +1
                            Мне кажется, что вы зря об этом не упомянули в самой статье. Люди банально не поняли, для чего вы городили весь огород. Честно говоря, я до конца тоже не понял)
                          –1
                          1) так как иначе не было возможности вытащить приращения из мыши, MatLab не умеет работать с usb ну и плюс еще массу чего не умеет :) вот и пришлось лепить аппаратно программный костыль
                          2) Диплом я и не планировал тут публиковать.
                          А опубликовал это вдруг кому будет интересно или пригодится
                      +1
                      Не совсем понятно, нафига это нужно, но вообще подошел ты к этому основательно. Я бы даже сказал круто.
                        0
                        Интересная статья. Только, наверное, стоило написать побольше про контекст, в котором это собиралось (про диплом то есть :). Иначе не совсем понятно, какая цель преследуется, и зачем такой мощный контроллер (только ту часть, которую вы описали, ИМХО можно было бы реализовать на какой-нибудь AVRке вроде tiny45).
                          0
                          Согласен что не совсем предметно получилось, на счет контроллера — привык просто к нему ;) плюс нужен был CAN и I2C. Не спорю что это все в принципе реализуемо на AVRке, но тут встал вопрос удобства. Постараюсь 9 марта всю конструкцию сфотографировать, и более предметно объяснить зачем нужен датчик положения.
                        +2
                        Напишите в самом начале — какая стояла задача, почему было решено использовать Матлаб, и что получилось в конечном итоге, и напишите это языком, понятным пятилетним дебилам широким массам! :-)
                          0
                          У этого куска текстолита есть изернет!
                          Надо было писать дипломную работу на тему «Интернет-радиоприёмник из MBED»
                          Вот его бы скопировал!
                            0
                            У MBED цап — всего лишь 10 бит :) звук получится аховый ;)
                            0
                            более того, кроме мышки особо-то альтернативы нет. я сейчас думаю над инерциальной системой навигации, там гироскопы так шумят и дрейфуют, что о точном позиционировании не может быть и речи. Ну разве что gps еще даст нормальую точность, если у нас есть время на замеров эдак 200-300 (5 минут)
                              0
                              Гироскопы это конечно хорошо ;) но точность как Вы сами заметили ни к черту, точность GPS же в нашей стране и в солнечный погожий денек это порядка 2-20 метров. не думаю что для манипулятора это подходит ;)
                                0
                                ну я и говорил про 200 замеров с анализом результатов. Думаю, что с gps можно получить сантиметровую точность за пять минут простоя в одном месте, но ясное дело, это не для манипулятора, и те, кто выдумал мышку, замечательно с задачей справились
                                  0
                                  На самом деле мышь используется для минимизации расходов, так как датчика надо 2. Были бы у наших вузов финансы, я думаю они бы не стали так извращаться.
                                  Конечно сам MBED — это 100$, но он был куплен ранее и для других целей.
                            • UFO just landed and posted this here
                                0
                                Все сорцы прикреплены выше, на Дампе как раз полностью библиотека для работы с мышью
                                0
                                Стоимость Матлаба учтена? ))) А по делу: пишите о чем речь, а то статья не дает понять что и для чего происходит, не все же электронщики.
                                  0
                                  MatLab по программе Academic Licensing, обновил статью чуть-чуть.
                                  0
                                  Реализовывать дешёвый датчик на базе очень дорогого контроллера, ресурсы которого совершенно ненужны в данной задаче — как-то не совсем адекватно. Возможно Ваша система будет обрастать новыми возможностями со временем?
                                    0
                                    Как я уже писал выше конечным этапом будет полный отказ от PC, управление будет вестись в замкнутом контуре. Да и контроллер был куплен изначально для других задач ;) Привычно просто на нем реализовывать. В принципе этот датчик можно реализовать и на амтеле
                                    0
                                    Я все-таки все равно не понял — а зачем _определять_ положение манипулятора? почему не задать _начальное_ положение и не управлять дальше шаговыми двигателями. Положение потом _вычисляется_?
                                      0
                                      Как было написано выше манипулятор нежесткий + инерционность в звеньях, это и есть смысл, управление такой системой возможно лишь через обратные связи на подобии данного датчика.
                                    • UFO just landed and posted this here
                                        0
                                        Ничерта не понял. Какая конечная схема то?

                                        Мышь — контроллер — комп — контроллер — привод манипулятора?

                                        А почему тогда всего два провода — только сериал интерфейс. А куда тогда мышь втыкается? В комп? Или если эти провода идут от мыши, то как контроллер взаимодействует с компом? По USB?
                                          0
                                          В данной статье схема такова — Мышь — Контроллер — Комп. Тут приведен пример получения приращений от мыши в MatLab'е. Если внимательно прочитать статью там написана куда подключается мышь, непосредственно к контроллеру.
                                            0
                                            У вас получается что UART TX идущий в комп на COM порт играет еще и роль клока для мыши?
                                              0
                                              Нет, всю работу с мышью ведет контроллер, и колок и дата дергает он.
                                              Сам контроллер же подключен по USB, изображает из себя COM порт и туда отдаются данные, которые уже потом анализируются MatLab
                                          0
                                          Подскажите как в Матлабе получить координаты мышки? Какой Toolbox для этого использовать?
                                            0
                                            В MatLab'е нет штатных тулбоксов для работы с мышью, есть для работы с 3d мышами и с джойстиками, на матлабцентрале есть насколько самописных библиотек, но они на сколько я помню не работают в RT

                                          Only users with full accounts can post comments. Log in, please.