Суббота, 18.05.2024, 13:26
Мой сайт
Приветствую Вас Гость | RSS
Меню сайта
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0
Форма входа
Главная » 2013 » Июль » 31 » Дешевый планарный датчик положения на основе PS/2 M
22:54
 

Дешевый планарный датчик положения на основе PS/2 M

5 марта 2010 в 02:56

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

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

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

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


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


  • Получение координат с контроллера типа мышь в программном комплексе 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 марта сфотографирую и попытаюсь объяснить предметно.
Просмотров: 277 | Добавил: plesed | Рейтинг: 0.0/0
Всего комментариев: 0
Поиск
Календарь
«  Июль 2013  »
ПнВтСрЧтПтСбВс
1234567
891011121314
15161718192021
22232425262728
293031
Архив записей
Друзья сайта
  • Официальный блог
  • Сообщество uCoz
  • FAQ по системе
  • Инструкции для uCoz
  • Copyright MyCorp © 2024Создать бесплатный сайт с uCoz