Главная » Радиоуправление
Призовой фонд
на октябрь 2021 г.
1. Рюкзак Mean Well
Компэл
2. Инвертор авто Mean Well 150 Ватт
Компэл
3. Термос MeanWell
Компэл
4. 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
вверх