Реклама ⓘ
Главная » Радиоуправление
Призовой фонд
на апрель 2024 г.
1. 100 руб.
От пользователей

Похожие статьи:


Реклама ⓘ

Машинка на ДУ управлении своими руками - Интерфейсы. Протоколы.

Программная реализация - передатчик.

На этом уроке мы с вами уясним для себя что такое интерфейсы и протоколы. Узнаем какие варианты реализации доступны нам. Попробуем реализовать обмен между двумя МК.

Для управления машинкой нам понадобится система радиоуправления. Состоит она из пульта управления и ответной части, установленной непосредственно в самой машинке.

Пульт управления включает в себя: органы управления, кодер (в виде нашего МК) и передатчик.

В машинке установлен: приёмник, декодер (нам придётся использовать дополнительный МК), драйверы приводов и исполнительные механизмы.

Физическая связь между кодером и декодером осуществляется посредством интерфейса связи. Данные передаются по заранее установленным правилам, которые определяются протоколом обмена.

Для примера: всем мы общаемся, создавая звуковые волны голосовыми связками – это наш интерфейс. Звуки складываются в слова, мы с вами говорим на русском языке, американцы на английском, французы на французском. Язык - это наш протокол обмена. Вот и получается, что обладая одним и тем же интерфейсом, у людей не совпадают протоколы обмена. Поэтому то русские и не понимают американцев, пока не выучат их «протокол»!!!

Какие интерфейсы нам доступны?

  • вывод данных посредством линии порта с программным формирования пакета данных;
  • передача данных с использования аппаратных интерфейсов имеющихся в МК, таких например как UART, I2C, SPI.

По поводу протоколов… есть несколько вариантов реализации:

  • программное формирования импульсов с длительностью соответствующей передаваемым данным;
  • программное формирования цифровой, байт ориентированной последовательности;
  • передача данных посредством использования аппаратных интерфейсов имеющихся в МК, таких например как UART, I2C, SPI.

Попробуем разобраться с программной реализацией... В начале мы должны выяснить, какие данные мы будем передавать, для этого определим состав нашей машинки:

Во первых двигатель привода, во вторых рулевая система. Что можно ещё добавить??? 

Фары, клаксон?? В них я не вижу смысла.

Коробка передач… её у нас нет.

Адаптивная система управления клиренсом – интересная тема! Но подвеска у нас «не той системы»…

Контроль напряжения батареи… возможно!

Значит, для управления выше перечисленным нам понадобится:

  1. Один импульс для передачи мощности двигателя от ручки газа;
  2. Один импульс для передачи направления движения;
  3. Один импульс для передачи направления поворота: прямо, влево, вправо.

Пакет данных будет выглядеть следующим образом:

Стартовая пауза в 300 отсчётов, для идентификации начала пакета. Три импульса, длительностью в 255 отсчётов каждый. Плюс две паузы, чтобы разграничить импульсы. Всего посылка занимает 1165 отсчётов общей длительностью в 26,6мс.

Рассмотрим как происходит формирование посылки.

Во первых АЦП. Мы настроили его проводить измерения в автоматическом режиме. Никаких действий по запуску/перезапуску нам выполнять не требуется. 

Опрос клавиш заднего хода и поворота происходит следующим образом. Для обработки нажатий введены дополнительные переменные…

direction_of_motion	//Направление движения
direction_of_rotation   //Направление поворота

В основном цикле программы происходит опрос клавиш и кодирование текущего состояния…

//Направление движения
if (!(PIND & (1 << PD0))) direction_of_motion = 255;
else direction_of_motion = 128; 
		
//Направление поворота
if (!(PIND & (1 << PD1))) direction_of_rotation = 3; //Влево
if (!(PIND & (1 << PD2))) direction_of_rotation = 255; //Вправо
if (PIND & (1 << PD1) && PIND & (1 << PD2)) direction_of_rotation = 127; //Прямо

Формирование основной посылки данных происходит в прерывании. Работает это следующим образом. Для проведение отсчётов введена переменная…

counter_cycles //Счётчик тактов посылки

…каждый раз когда счетчик переполняется, переменная инкрементируется и обнуляется при достижении 1165 отсчётов…

counter_cycles++;
if (counter_cycles = 1165) counter_cycles = 0;

Исходя из текущего положения по оси Х импульсы начинаются с отметок 300, 605, 910. Проверяя значение переменной counter_cycles на совпадения с отметкой программно формируется фронт импульса…

if (counter_cycles == 300) PORTB |= (1 << PB0); //Мощность двигателя

Точка среза вычисляется путём сложения значения отметки импульса и значения передаваемой переменной (которое лежит в диапазоне 0..255)…

if (counter_cycles == (300 + ADCH + 3)) PORTB &= ~(1 << PB0);

Остальные данные передаются аналогичным образом.

Прикрепленные файлы:

Теги:

Опубликована: Изменена: 09.06.2015 0 0
Я собрал 0 0
x

Оценить статью

  • Техническая грамотность
  • Актуальность материала
  • Изложение материала
  • Полезность устройства
  • Повторяемость устройства
  • Орфография
0

Средний балл статьи: 0 Проголосовало: 0 чел.

Комментарии (0) | Я собрал (0) | Подписаться

Статью еще никто не комментировал. Вы можете стать первым.
Добавить комментарий
Имя:
E-mail:
не публикуется
Текст:
Защита от спама:
В чем измеряется сила тока?
Файлы:
 
Для выбора нескольких файлов использйте CTRL

Набор 4WD Kit Bluetooth
Набор 4WD Kit Bluetooth
LC-измеритель LC100-A Мультиметр DT9205A
вверх