И снова про РРМ

Создание декодера РРМ сигнала

На этом форуме Вы можете задать вопросы знатокам программы и автору.
Ответить
Priyatel
Рядовой
Сообщения: 85
Зарегистрирован: 04.11.2018{, 14:09}
Репутация: 0
Имя: Олегович

И снова про РРМ

#1

Сообщение Priyatel » 07.01.2019{, 13:16}

Уважаемые Форумчане. Всех с Новым Годом и Рождеством! В новогодние каникулы посвятил себя разработке новых проектов.
В канун нового года, приятель попросил помочь с подключением эл. двигателей на его разработке «Инвалидная коляска – вездеход». Он приобрел у робототехников «хитрую» коробочку, состоящую из двух джойстиков, контроллера (Атмега 328) и драйвера двух двигателей постоянного тока. Но оказалось, что контроллер управляется аналоговыми джойстиками, а не РРМ сигналом. Хотя ранее я приятелю изготовил плату на дискрете и модулях для управления от аппаратуры RC, с переключателем на ручное управление от двух сервотестеров и возможностью микширования РРМ сигналов для раздрайва гусеничных приводов.
СпойлерПоказать
Contol-Fil.GIF
Долго убеждал продавцов, в том, что входным сигналом их гаджета должен быть РРМ сигнал, а не аналоговый. Потом подумал, - овладев FLProg, я и сам смогу сотворить нечто подобное. Сказано – сделано. И я «нырнул». Но не заметил «подводных камней». Казалось, все просто… Для считывания РРМ сигнала (измерения длительности-ширины импульса), из длительности этого импульса нужно создать временные ворота и заполнить серией импульсов более высокой частоты. Количество импульсов, которые уложатся в этом временном интервале можно посчитать. Девиация (изменение) ширины РРМ сигнала от 1 до 2 мСек со средним значением 1,5 мСек., период 20 мСек.. 1,5 мСек – это нулевое значение команды управления двигателями, т.е. значение СТОП для моторов.
Сделал имитатор сервотестера (РРМ-coder) для получения одиночного РРМ сигнала. Импульс устойчив, ширина регулируется в заданных пределах. Визуализируется осциллографом.
PPM-coder.bmp
PPM-coder.bmp (246.04 КБ) 1286 просмотров
При попытке модуляции более высокой частотой на КТ1 импульс пропадает. На КТ2 импульсы 20 мСек. Счетчик считает, на индикаторе бесконечный отсчет. Пробовал включать положительным импульсом генератор (как на схеме), переключением от ключа, модуляцией логики «И». Результат тот же!
PPM-coder-decoder.bmp
Прочитал все ссылки по поводу РРМ на форуме. Всюду варианты на системном таймере по входу D2. Это не вариант!
С приемника идут, как минимум, 2 (3) сигнала РРМ, сдвинутые последовательно во времени. Т.е. на Атмегу должны приходить 2 (3) на разные цифровые! входы (лучше всего 8) РРМ сигналов. Каждый должен обрабатываться независимо друг от друга, разве что с общей синхронизацией (сформированному импульсу паузы). Может быть, кто-то подскажет?

Priyatel
Рядовой
Сообщения: 85
Зарегистрирован: 04.11.2018{, 14:09}
Репутация: 0
Имя: Олегович

И снова про РРМ

#2

Сообщение Priyatel » 09.01.2019{, 21:16}

Уважаемые ЗНАТОКИ! Очень жаль, что никто не откликнулся на мою тему. Неужели нет ответов, или тема никому не интересна? Вроде более 80 просмотров.
Ну да ладно. Хотел немного поправить свою терминологию. РРМ сигналом мы всегда называли одиночные импульсы, снимаемые с каждого канала RC приемника. Радиосигнал получал сам приемник, детектировал и формировал импульсную последовательность, которая распределялась по каналам дешифратора на CD4017 (К561ИЕ8) или CD4015 (К561ИР2). Еще в 1980г., я предложил разместить около каждой рулевой машинки (сейчас ее называют "сервой") по такому дешифратору с возможностью выбора своего канала. Это позволило бы вести разводку только тремя проводами. Но тогда меня не поддержали. Позже появились подобные варианты S-BUS, MOD-BUS, K-line, CAN-BUS и в том числе мое предложение 80-х СРРМ (во всяком случае раньше это так называли) Complex Pulse Position Modulation. Сейчас все перемешалось. Ну, я не об этом.
За эти два дня я углубился в изучении материала. И вроде получилось поверхностно освоить ПБ блоки в коде.
Пошел по пути обучалок и создал данный девайс. Но я совсем не программист и даже срисовывание кодовых фраз давалось тяжело (как будто я писал МАМА на иврите). Ведь нужно было еще осознать, что я делаю.
Вроде создал, но как то криво. Почему то выходная информация обновляется очень медленно (примерно раз в 4 секунды), как на индикаторе, так и в мониторе СОМ-порта. Что-то я не дописал! Может быть мне в этот раз повезет и кто нибудь подскажет?
RC-PWM.flp
(54.64 КБ) 76 скачиваний
RC_PWM_(CODE).ubi
(18.91 КБ) 65 скачиваний

Аватара пользователя
Sancho
Полковник
Сообщения: 4066
Зарегистрирован: 25.12.2015{, 17:32}
Репутация: 590
Откуда: Ярославль.
Имя: Александр
Контактная информация:

И снова про РРМ

#3

Сообщение Sancho » 09.01.2019{, 21:56}

Из детства.
Была книжка. Между импульсами управления есть пауза.
Подайте комплексный сигнал на вход прерывания, обработайте по очереди.
Собрать в один - диодами.

Отправлено спустя 40 секунд:
Только писать код.
Для оптимизации.
мой ник в нете и почте omelchuk890, если что. запомните на всякий. многие знают номер тлф.

Priyatel
Рядовой
Сообщения: 85
Зарегистрирован: 04.11.2018{, 14:09}
Репутация: 0
Имя: Олегович

И снова про РРМ

#4

Сообщение Priyatel » 09.01.2019{, 22:40}

Sancho писал(а):
09.01.2019{, 21:57}
Из детства.
Была книжка. Между импульсами управления есть пауза.
Подайте комплексный сигнал на вход прерывания, обработайте по очереди.
Собрать в один - диодами.
Все это очень зДорово! Все зто было 300, нет, 30 лет тому назад. Сейчас хочется, под конец своей жизни, пошагать в ногу со ВРЕМЕНЕМ. Про паузу я знаю. Вы подскажите как в коде исправить БАГ?

Аватара пользователя
Sancho
Полковник
Сообщения: 4066
Зарегистрирован: 25.12.2015{, 17:32}
Репутация: 590
Откуда: Ярославль.
Имя: Александр
Контактная информация:

И снова про РРМ

#5

Сообщение Sancho » 10.01.2019{, 09:25}

Priyatel писал(а):
09.01.2019{, 22:40}
Про паузу я знаю. Вы подскажите как в коде исправить БАГ?
Все ли сигналы поданы?
Убрать массив, присваивать сразу выходам.

Отправлено спустя 32 минуты 56 секунд:
Попробуйте так
Вложения
RC-PWM_v1.flp
(99.74 КБ) 68 скачиваний
мой ник в нете и почте omelchuk890, если что. запомните на всякий. многие знают номер тлф.

Priyatel
Рядовой
Сообщения: 85
Зарегистрирован: 04.11.2018{, 14:09}
Репутация: 0
Имя: Олегович

И снова про РРМ

#6

Сообщение Priyatel » 10.01.2019{, 12:12}

Sancho писал(а):
10.01.2019{, 09:58}
Попробуйте так
Увы, при такой схеме не работает. Мертвый экран и СОМ-порт. Я срисовывал софт из этого видео
Может я где то скосячил? Все сигналы, я думаю, подавать необязательно. На видео демонстратор подключает их последовательно (правда, прописывает тоже последовательно, а потом подключает). Я подаю сигнал только на один из каналов от проверенного "TURNIGY" servo tester. А может быть из-за этого глюк? Тогда подскажите пожалуйста, как залочить неиспользуемые каналы?

Аватара пользователя
Sancho
Полковник
Сообщения: 4066
Зарегистрирован: 25.12.2015{, 17:32}
Репутация: 590
Откуда: Ярославль.
Имя: Александр
Контактная информация:

И снова про РРМ

#7

Сообщение Sancho » 10.01.2019{, 12:21}

Priyatel, Сделайте блок на один канал - проверьте работу.
мой ник в нете и почте omelchuk890, если что. запомните на всякий. многие знают номер тлф.

Priyatel
Рядовой
Сообщения: 85
Зарегистрирован: 04.11.2018{, 14:09}
Репутация: 0
Имя: Олегович

И снова про РРМ

#8

Сообщение Priyatel » 10.01.2019{, 12:27}

P.S. Ведь это все уже давно работает, например в связке RC приемник + полетный контроллер квадрокоптера (в роботах и т.д.). Совсем необязательно использовать все назначаемые каналы. Я просто не умею программировать, поэтому вся инфа в открытых доступах мне недосягаема. Просто заливать скетч мне не интересно. У меня есть своя режиссура использования. Для этого я хочу, используя готовые узлы, сделать что то свое.

Отправлено спустя 1 минуту 13 секунд:
Sancho писал(а):
10.01.2019{, 12:21}
Priyatel, Сделайте блок на один канал - проверьте работу.
Сейчас попробую. Ок!

Отправлено спустя 18 минут 24 секунды:
Сделал на один канал. Все работает. Экспериментирую дальше. Копирую в проге второй блок. Переназначаю имена, каналы и т.д. Включаю... работают оба канала, но задержка примерно 1Сек. Вывод: каждый канал дает задержку около 1Сек, т.е. 4Сек. на 4 канала, как в первом примере.

Аватара пользователя
Sancho
Полковник
Сообщения: 4066
Зарегистрирован: 25.12.2015{, 17:32}
Репутация: 590
Откуда: Ярославль.
Имя: Александр
Контактная информация:

И снова про РРМ

#9

Сообщение Sancho » 10.01.2019{, 13:02}

Priyatel, Какие интервалы, в мсек, на каналах? Какой размер кадра, в мсек?
мой ник в нете и почте omelchuk890, если что. запомните на всякий. многие знают номер тлф.

Priyatel
Рядовой
Сообщения: 85
Зарегистрирован: 04.11.2018{, 14:09}
Репутация: 0
Имя: Олегович

И снова про РРМ

#10

Сообщение Priyatel » 10.01.2019{, 13:14}

Это стандарт для РРМ. Я могу выдавать с тестера как стандартный сигнал (1мСек - 2мСек, период 20мСек), так и расширенный (0,5мСек - 2,5мСек, период 20мСек). Все контролируется встроенным в тестер индикатором.

Отправлено спустя 1 час 15 минут 34 секунды:
Вдогонку. Вот кодер - тестер СРРМ/РРМ сигнала (3 канала).
PPM.flp
(323.18 КБ) 88 скачиваний
Можно использовать как самостоятельное устройство, можно добавить до 8-ми каналов. Только я пока не представляю, как можно заставить это работать совместно с РРМ-декодером в одном проекте. Ведь входы декодера назначены программно и не имеют внутренних входов. Это еще один из вопросов к ЗНАТОКАМ.

Аватара пользователя
Sancho
Полковник
Сообщения: 4066
Зарегистрирован: 25.12.2015{, 17:32}
Репутация: 590
Откуда: Ярославль.
Имя: Александр
Контактная информация:

И снова про РРМ

#11

Сообщение Sancho » 10.01.2019{, 17:06}

Priyatel писал(а):
10.01.2019{, 14:29}
Ведь входы декодера назначены программно и не имеют внутренних входов. Это еще один из вопросов к ЗНАТОКАМ.
Типа так:
RC-PWM_v2.flp
(47.18 КБ) 75 скачиваний
Постарайтесь подавать сигналы на все объявленные входы.
Задержка в 1 сек не может быть связана с индикацией?
мой ник в нете и почте omelchuk890, если что. запомните на всякий. многие знают номер тлф.

Priyatel
Рядовой
Сообщения: 85
Зарегистрирован: 04.11.2018{, 14:09}
Репутация: 0
Имя: Олегович

И снова про РРМ

#12

Сообщение Priyatel » 10.01.2019{, 17:46}

Sancho писал(а):
10.01.2019{, 17:06}
Типа так:

RC-PWM_v2.flp
Прошу прощения, но я в посте #8 написал Вам, что на одном канале все работает. Может быть Вы послали другой файл? Этот - фактическая копия моей лаб. работы, а про внутренние входы я инфы не получил.
Sancho писал(а):
10.01.2019{, 17:06}
Постарайтесь подавать сигналы на все объявленные входы.
Задержка в 1 сек не может быть связана с индикацией?
Я проверял работоспособность как с индикатором, так и без него (с СОМ-портом). Результат одинаков! Если не сложно, пройдите пожалуйста по ссылке на видео из #6. Там ничего не тормозится на СОМ-порте. Посмотрите пожалуйста еще на эти ссылки. Там очень интересный метод обработки сигнала. Я пробовал создать СОДЕ-блок, но не справился.

http://arduino.ru/forum/programmirovani ... iemnika-rc

http://forum.arduino.cc/index.php?topic=420662.0

Priyatel
Рядовой
Сообщения: 85
Зарегистрирован: 04.11.2018{, 14:09}
Репутация: 0
Имя: Олегович

И снова про РРМ

#13

Сообщение Priyatel » 20.01.2019{, 20:57}

Выражаю большую благодарность Sancho за помощь в продвижении проекта!
Вот что получилось:
1. модуль электро-механического переключателя на 3 положения, управляемый от RC передатчика
RC-Thumbler-3position.flp
(228.48 КБ) 91 скачивание
2. модуль управления DC мотором с драйвером L-298 (или аналогичным) от RC
RC-L298_beta.flp
(303.61 КБ) 98 скачиваний
3. дифференциальный модуль управления двумя DC моторами с драйвером L-298 (тракторный джойстик)
RC-L298-Tank_beta.flp
(654.08 КБ) 108 скачиваний
Если кому-то понравились модули, то прошу сделать отзыв по тестированию.

vfear
Рядовой
Сообщения: 93
Зарегистрирован: 30.01.2019{, 14:56}
Репутация: 1
Имя: Владимир

И снова про РРМ

#14

Сообщение vfear » 26.06.2019{, 09:33}

Sancho писал(а):
10.01.2019{, 17:06}
Priyatel писал(а):
10.01.2019{, 14:29}
Ведь входы декодера назначены программно и не имеют внутренних входов. Это еще один из вопросов к ЗНАТОКАМ.
Типа так:RC-PWM_v2.flp
Спасибо большое, искал именно такой блок)
Только один вопрос - если посмотреть выходные значения в режиме покоя, то идут не большие колебания от -10 до 10 из 1000. Как можно это сгладить, или хотя бы сделать от -10 до 10 = 0, а остальное пускай как есть. Эти значения мне нужно писать в переменную. Пробовал один блок - фильтр, но реакция очень медленная становится.
Вложения
RC Control.flp
(42.3 КБ) 61 скачивание

Ответить

Вернуться в «Спросить у знатоков»