Прошивка M2C2Д
Статья принадлежит к серии – колёсная управляемая платформа с элементами BEAM.
Как говорилось ранее основные возможности платы: управление 2-мя двигателями, 2-мя сервоприводами и опрос одного датчика. Но т.к. сейчас нет возможности проверить работу сервоприводов – будет рассмотрен алгоритм без них, т.е. это будет М2Д.
Робот
Алгоритм робота сводиться к 2-м одновременно выполняемым вещам: контроль UART и обработка его данных, что происходит в главной функции программы, и формирования ШИМ’а для работы двигателей, за что отвечает третий таймер контроллера (TMR2).
Связь с роботом происходит по Bluetooth в режиме SPP или последовательного порта, т.е. UART. Данные передаются пакетами, длиной по 3 байта:
1 стартовый и одновременно команда
2 передаваемый параметр/значение
3 конечный байт, имеет 13 код или в ASCII – это Enter
Реализованные команды и их значения:
Команда | Параметр | Описание |
A | Байт, скорость вращения 0-255 | Левый мотор вперед |
a | Левый мотор назад | |
D | Правый мотор назад | |
d | Правый мотор назад | |
W | Оба мотора вперед | |
w | Оба мотора назад | |
S | Байт, не используется | Стоп моторы |
L | Запрос значения с датчика | |
l | Байт, 0-255, значение АЦП | Ответ робота на команду L |
Т.к. длина посылки фиксированная, в командах без параметров передаётся любое значение вместо параметра.
Такое большое количество команд создавалось для временного управления роботом через консоль, для управления из программы команды W, w, S не используются. О приеме команды робот сообщает мигнувшим светодиодом.
Действия, происходящие в главной функции, описывает следующая блок-схема —
Просмотреть блок схему функции main
Если кратко словами, то: после включения питания и инициализации в бесконечном цикле крутиться проверка наличия данных пришедших с Bluetooth, а что пришло, обрабатывается и выполняется.
Происходящее в таймере описано в следующей блок схеме —
Просмотреть блок схема таймера TMR2
I – это байтовая переменная, т.е. принимает значения от 0 до 255, она постоянно увеличивается на 1, при переполнение возвращается в 0. В самом начале происходит проверка – включены ли моторы, т.е. следует ли формировать ШИМ для них, если нет, то нечего не делаем. Если включен – смотрим, в какую сторону он должен крутиться, и на соответствующих выводах подаём логические 1 и 0, так же во временную переменную сохраняем значение, отвечающее за конец ШИМа или его величину. Далее на каждом такте таймера проверяем, для каждого из моторов, следует ли прекратить формирования ШИМа.
Alex_EXE | 27.04.2012 | Робототехника |