Например TDA7294

 Форум РадиоКот • Просмотр темы - Радиоуправление. Переходим на МК.
Форум РадиоКот
Здесь можно немножко помяукать :)



Текущее время: Ср окт 17, 2018 15:29:49



Часовой пояс: UTC + 3 часа [ Летнее время ]


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 870 ]  На страницу 1, 2, 3, 4, 5 ... 44  След.
Автор Сообщение
Не в сети
 Заголовок сообщения: Радиоуправление. Переходим на МК.
СообщениеДобавлено: Пн янв 27, 2014 19:04:21 
Собутыльник Кота

Карма: 18
Зарегистрирован: Вт мар 13, 2012 13:16:13
Сообщений: 2585
Откуда: Россия
Рейтинг сообщения: 1
Решил поднять эту тему. Покоя мне не даёт)) Продолжаем учиться. Цель-получить опыт и знания...
Подведём итоги:
1-Схемы с частотным (тональным) разделением каналов (на LC, RC) - много деталей, ложные страбатывания... - помеха с частотой контура LC (RC) - ложное срабатывание.
2-Схемы число-импульсного разделения каналов - много деталей, ложные страбатывания... малейшая помеха, количество импульсов меняеться - ложное срабатывание.
3-Схемы с временным разделением каналов (как в аппаратуре пропорционального управления) - много деталей, ложные страбатывания... - малейшая помеха, количество и фаза импульсов меняеться - - ложное срабатывание.
4-Схема ДТМФ (от телефонов) - при слабом сигнале, (сигнал зашумлен) всплески шума приемник ДТМФ воспринимает как частоты ДТМФ кода... - - ложное срабатывание.

Выше предлагали: дублирование команды, т.е. например если команда пришла два(три) раза подряд одна и та же, значит она истинна - этот метод для п.1; п.2; п.3; п.4; - не работает!!! Делать схемы на логике с передачей контрольных сумм... Вы себе размер схемы представляете??? :facepalm:

Вывод: переходим на МК. :roll:
Сильно меня не пинать!!!)) Я только начал работать с МК.
Качаем бесплатно cvavr, Proteus... Берём самую дешёвую mega8... USB-программатор... и поехали! Пишем на Си
Для сравнения: cхема на транзисторах - с временным разделением каналов (как в аппаратуре пропорционального управления) - более 60 транзисторов :facepalm: ИзображениеИзображение... дальше продолжать схему смысла нет. :)))
На МК - mega8 - 2 шт.
Для начала - 4 дискретных команды: 00100101 - 1; 00101001 - 2; 00101011 - 3; 00101101 - 4.
Т.е. используем 1 байт (8 бит) для передачи одной команды. Коды выбираем таким образом, чтобы в нашем коде "0" и "1" не повторялись более 3 (трёх) раз подряд. Иначе трудно будет пропустить посылку по радиоканалу - появляется постоянная составляющая...
И каждый байт должен начинаться с "0" - это будет стартовый бит. И каждый байт должен заканчиваться "1" - это будет стоповый бит.
Не трудно посчитать, что в 1-м байте можно разместить 16 комбинаций кода:
00100101 00110011 01001101 01011011
00101001 00110101 01010011 01100101
00101011 01001001 01010101 01101001
00101101 01001011 01011001 01101101
Биты "0" и "1" будем передавать с частотой 500 Гц. Радиоканал - простая радиостанция с узкополосной ЧМ. :tea:


Последний раз редактировалось roman.com Вт янв 28, 2014 17:35:09, всего редактировалось 3 раз(а).

Вернуться наверх
 Профиль  
 
Не в сети
 Заголовок сообщения: Re: Радиоуправление: делаем сами.
СообщениеДобавлено: Пн янв 27, 2014 22:51:00 
Друг Кота
Аватар пользователя

Карма: 60
Зарегистрирован: Чт ноя 18, 2010 00:10:55
Сообщений: 5462
Откуда: Ижевск LO66NU
Рейтинг сообщения: 0
Ну, с цифровым подходом в первом приближении делается чуток хитрее - для распознавания используется не одиночный бит, а байт, при этом достоверность улучшается многократно. Для телеуправления, думаю, достаточно тетрады или даже триады, далее должен следовать инфокод значения управляющей величины и в конце стоповый (разделительный) код. Если первый и последний анализировать математически в МК, то количество ложных интерпретаций должно резко сократиться. ИМХО.

_________________
В начале жизнь мучает вопросами, в конце - ответами...


Вернуться наверх
 Профиль  
 
JLCPCB, 10 прототипов ПП всего за $2 и 2 дня доставка!

Крупнейший производитель печатных плат в Китае, 300,000+ заказчиков, 10,000+ он-лайн заказов в день.

Рассчитайте цену онлайн:https://jlcpcb.com/quote

Не в сети
 Заголовок сообщения: Re: Радиоуправление: делаем сами.
СообщениеДобавлено: Вт янв 28, 2014 00:17:48 
Собутыльник Кота

Карма: 18
Зарегистрирован: Вт мар 13, 2012 13:16:13
Сообщений: 2585
Откуда: Россия
Рейтинг сообщения: 0
svic писал(а):
для распознавания используется не одиночный бит, а байт
Вы забегаете вперед...))Я только про это хотел сказать.
Почему именно 500 Гц ? Вообще при разработке нужно стремиться использовать существующие стандарты. Так схема получиться универсальной, работающая практически со всеми типами раций... телефонами и т.д. У меня полоса пропускания рации примерно такая же как и у заводских: примерно 200...2700 Гц (линейная область 200...2000 Гц) - это полоса разговорного тракта всех раций, радиотелефонов, проводных телефонов и т. д... Значит при передачи простых кодов (00100101 - 1; 00101001 - 2; 00101011 - 3; 00101101 - 4...... ) получим импульсы с частотой 250 или 500 Гц. При таких частотах мы получаем довольно хорошую прямоугольность импульсов на выходе приёмника. Гармоники прямоугольных импульсов укладываються в полосу пропускания рации... Как показывает практика, лучше всего передавать биты через рации со скоростью несколько сотен бит. Получаем несколько сотен герц. Позже поэксперементируем со скоростью передачи. Пока остановимся на 500 Гц. Я могу внести изменения в схему рации для низкой скорости передачи... даже постоянной составляющей. Но это уже получиться не универсальная схема.
Кодировка.При использовании МК вопрос с количеством деталей уже не стоит так остро. Поэтому для распознавания используется не одиночный бит, а байт целиком. Я тут накидал схемку кодера-декодера байтов...
Кодер (TX).получился простенький. Кнопки 1,2,3,4, - команды, 0,5- служебные для настройки радиоканала. Нажимаем кнопку 0 получаем на выходе меандр 480 Гц. Кнопка 5- меандр 240 Гц.
При нажатии любой кнопки будет выполняться соответствующая команда, пока не нажмем другую кнопку... :roll: Изображение
Нажимаем кнопку 1 - код 00100101 - пауза - код 00100101.... и т.д. бесконечно.
Нажимаем кнопку 2 - код 00101001 - пауза - код 00101001.... и т.д. бесконечно.
Нажиаем одновременно кнопку 1 и 2 - код 00100101 - пауза - код 00101001 - код 00100101 - пауза - код 00101001.... и т.д. бесконечно. Т.е. поочереди передаются коды 1 и 2...
Так же и с другими кнопками. Байты разделены синхропаузами... Пока ничего лучше (проще) не придумал.
Компилируем... Прошиваем mega8... Все работает :tea: Изображение

Декодер (RX). тут сложнее... Приемник и передатчик на atmega8. Для упрощения схемы используеться внутренний генератор RC - 1 Мгц. Фьюзы не трогаем.Приёмник:ИзображениеДиод D1-индикатор сигнала. D1,D2,D3,D4 - выход команд на реле.
Теперь алгоритм приёмника: в исходном состоянии на ноге 28 (порт PC5) "1" (+5V). При поступлении команды "0"- старт бит (0V) запускаеться программа алгоритма определения состояния ноги 28 (порт PC5) через равные промежутки времени. При этом мигает диод D1-индикатор сигнала.
Я пока не дошел до всяких таймеров и т.д... поэтому задержку я сделал используя бесконечный цикл while (1). После доработки программы я использовал счетчики for (a=0;a<b;a++). На счетчиках программа получилась почти в два раза меньше. :solder:
Короче, при появлении "0" на 28 (порт PC5) включаеться счетчик задержки, время задержки задаеться при настройке-c=100. Затем включаеться счетчик проверки состояния, первого бита кода. Он проверяет состояние ноги 28 (порт PC5). Проверка: 70 раз, количество проверок задаеться также при настройке-b=70... Если первый бит "0" то включаеться второй счетчик задержки c=100... затем второй третий счетчик проверяет второй бит кода... и опять задержка... и опять проверка третего бита кода... и так пока программа не проверит все 8 бит кода. В зависимости от расположения битов в коде вывоиться соответствующая команда: D1,D2,D3,D4. После этого МК переходит в режим ожидания... и ожидания следующей посылки кода... Если хоть один бит неверный то происходит сброс МК... и ожидания следующей посылки кода... и т.д. бесконечно.
Изображение
Короче простенькая програмка с возможностью расширения на большее количество кнопок.

Задержки между определениями импульсов кода нужны для того чтобы небыло ошибок при фазовом шуме импульсов... который незбежно появиться при прохождении через радиоканал. Т.е. форма и фаза импульсов сильно изменяться - это устраняеться задержками.

Вообщем примерно так .. Жду замечаний, предложений :roll:


Вложения:
RX исходник Си.txt [5.7 KiB]
Скачиваний: 439
TX - исходник Си.txt [1.74 KiB]
Скачиваний: 335
TX.png [42.5 KiB]
Скачиваний: 714
Вернуться наверх
 Профиль  
 
PCBWay - всего $5 за 10 печатных плат, первый заказ для новых клиентов БЕСПЛАТЕН

Сборка печатных плат от $88 + БЕСПЛАТНАЯ доставка по всему миру + трафарет

Второй конкурс по дизайну печатных плат от PCBWay!
Не в сети
 Заголовок сообщения: Re: Радиоуправление: делаем сами.
СообщениеДобавлено: Ср янв 29, 2014 12:50:53 
Собутыльник Кота

Карма: 18
Зарегистрирован: Вт мар 13, 2012 13:16:13
Сообщений: 2585
Откуда: Россия
Рейтинг сообщения: 0
Если код не верный, то:
Изображение
И так со всеми кнопками... В данной схеме время рекции получаеться около 0,04 секунды! Т.е. от нажатия кнопки на передатчике до срабатывания ключа на транзисторе проходит около 0,04...0,05 секунды (можно даже точно настроить время реакции). C такими скоростями уже можно говорить о высшем пилотаже )) :beer:
В Proteuse все работает четко... осталось проверить в реале :)
Вопрос на засыпку! Какая стабильность встроенного тактового RC-генератора у ATmega8 ??? Это важно, если будут большие масивы кодов... :roll:
svic писал(а):
думаю, достаточно тетрады или даже триады, далее должен следовать инфокод значения управляющей величины и в конце стоповый (разделительный) код.

1-Кик видим, триады (3 бита) и даже тетрады (4 бита) недостаточно для надежного распознования кода... лучше байт целиком.
2-далее должен следовать инфокод значения управляющей величины - над этим ещё поработаем... :roll:
3-в конце стоповый (разделительный) код... помоему проще сделать синхропаузу. :)А результат будет даже лучше. Синхропаузу проще реализовать... Хотя по надежности может лучше будет стоповый (разделительный) код... :roll:


Вложения:
код ошибка.png [34.57 KiB]
Скачиваний: 435
код.png [42.12 KiB]
Скачиваний: 410
Вернуться наверх
 Профиль  
 
Более 10 000 000 оригинальных новых компонентов

Поставка электронных компонентов под ваш проект

Комплексные решения поставки электронных компонентов

Сэкономьте $30 при первом заказе на сумму боле $200 (только для посетителей нашего форума)
Не в сети
 Заголовок сообщения: Re: Радиоуправление: делаем сами.
СообщениеДобавлено: Чт янв 30, 2014 19:13:03 
Прорезались зубы
Аватар пользователя

Зарегистрирован: Чт фев 28, 2013 15:16:10
Сообщений: 209
Рейтинг сообщения: 0
roman.com писал(а):
4-Схема ДТМФ (от телефонов) - при слабом сигнале, (сигнал зашумлен) всплески шума приемник ДТМФ воспринимает как частоты ДТМФ кода... - - ложное срабатывание.


Чтобы не было ложных срабатываний команды должна кодироваться не одним символом, а, например, парой разных символов, не имеющих общих частот.
Недопустимо 1-2 (697/1209 - 697/1336)
Допустимо 1-5 (697/1209 - 770/1336)


Вернуться наверх
 Профиль  
 
Не в сети
 Заголовок сообщения: Re: Радиоуправление: делаем сами.
СообщениеДобавлено: Пт янв 31, 2014 17:29:19 
Собутыльник Кота

Карма: 18
Зарегистрирован: Вт мар 13, 2012 13:16:13
Сообщений: 2585
Откуда: Россия
Рейтинг сообщения: 0
ks0 писал(а):
Недопустимо 1-2 (697/1209 - 697/1336)Допустимо 1-5 (697/1209 - 770/1336)

Да, наверное вы правы. Так как частота 1209 при сильном щуме выглядит на экране анализатора как частота 1336 или выше... Т.е. частоту (синусоиду) 1209 Гц шум разбивает на несколько частей... в итоге вместо "1" на выходе получаем "2"...
Нажимаю "5", получаю "7" ... и т.д. Только появляеться другая проблема:
1-специализированных микросхеме я не нашёл... Передатчик ...ВЖ18 можно выдрать из телефона (номеронабирателя), а вот приёмника ...ВЖ19 на радиорынке нет. :( Поэтому купил mega8 ))) В интернете есть схемы с прошивками передатчиков и приёмников ДТМФ кода на mega8, только возникает вопрос: за зачем использовать ДТМФ код на МК, если на МК можно собрать намного лучше схему кодирования :) Дажепри передаче простого байта кода получаем намного более защищенную радиолинию... и скорость передачи выше в десятки раз! (при тех же частотах передачи). :roll: т.е. время реакции выше.
2-при передачи двухчастотного кода модуляция получаеться 50% ... т.е. радиоканал используеться только наполовину.
При ИКМ (импульсно-кодовая модуляция) модуляция 100%... т.е. выжимаем из радиоканала максимум. Значит дальность и надежность выше.
И т.д. и т.п...


Вернуться наверх
 Профиль  
 
Не в сети
 Заголовок сообщения: Re: Радиоуправление: делаем сами.
СообщениеДобавлено: Вс фев 02, 2014 02:46:38 
Собутыльник Кота

Карма: 18
Зарегистрирован: Вт мар 13, 2012 13:16:13
Сообщений: 2585
Откуда: Россия
Рейтинг сообщения: 0
Собрал в железе. Для устранения фазового шума уменьшил длительность импульсов опроса... пропустил по радиоканалу...
Изображение
Впринципе для простых игрушек пойдет...
Изображение
Но для более сложных систем программа пока слишком сырая :roll: Одного байта недостаточно для четкого распознования посылок... При слабом сигнале - ложные срабатывания, т.к. разница в коде 1 бит... под действием помех 00100101 - 1; превращаеться в 00101101 - 4. И синхронизация по стартовуму биту работает при хоршем сигнале... Короче нужно поработать. Хорошо что ничего ненужно перепаивать, как на логике))) Вот преимщество МК... :tea:


Вернуться наверх
 Профиль  
 
Не в сети
 Заголовок сообщения: Re: Радиоуправление: делаем сами.
СообщениеДобавлено: Вс фев 09, 2014 02:41:51 
Собутыльник Кота

Карма: 18
Зарегистрирован: Вт мар 13, 2012 13:16:13
Сообщений: 2585
Откуда: Россия
Рейтинг сообщения: 0
АлександрЛ писал(а):
"самое простое" управление...
Мы обсуждаем тут радиоуправление. :tea:
Доработал свою схемку (программу): добавил счетчики ошибок, сброс при отсутствии сигнала, уменьшил длительность опроса, увеличил код до 20 бит... Получилась рабочая схема: нет ложных срабатываний, работает даже при зашумленном (слабом) сигнале - ИзображениеОсциллографа под рукой нет. Использую звуковую карту компьютера. На самом деле форма импульсов - прямоугольная, просто искажения звуковухи (режит нижнии частоты). :roll:
Код 20 бит с синхро паузой и стартовыми битами...
0011---0101/1001--0101/0101 - команда 1
0011---0101/0011--0110/1001 - команда 2
0011---0110/1010--1001/0101 - команда 3
0011---0011/0110--1010/1001 - команда 4
Можно увеличить количество команд... Программа использует только 20% памяти МК. Короче очень простенькая програмка на mega8 (или любой другой). Кстате, Proteusврет! Фаза импульсов в реале немного другая чем в симуляторе... Вот и верь всяким там симуляторам :)))
ATmega8 по даташиту я не нашел информации о стабильности встроенного RC-тактового генератора. :dont_know: По доташиту напряжение питания ATmega8 - 4,5...5,5 V. На практике она нормально работает при 4...6 V. Однако, при изменении напряжения питания меняеться частота встроенного RC-тактового генератора. Работа данной схемы напрямую зависит от частоты встроенного RC-тактового генератора. Это четко видно на осциллограмах. При напряжении питании 4 V частота встроенного RC-тактового генератора увеличиваеться, фаза импульсов опроса сдвигаетьсяИзображение
При питании 6 V частота встроенного RC-тактового генератора уменьшаеться и появляються ошибки при определении кода:Изображение
Поэтому питание ATmega8 должно быть от стабилизатора 5 V:ИзображениеПри 5 V ток потребления 10 mA, что сравнимо с простыми схемами на КМОП логике или транзисторах. Габариты схемы на транзисторах даже страшно себе представить :facepalm: На КМОП логике - несколько десятков микросхем. На микроконтроллере - всего две микросхемы: одна в приемник вторая в передатчик. :lol:
При хорошем сигнале (С/Ш около 10:1) ошибок нет. Напряжение на антенном входе приёмника около 1 мкВ:
Изображение
При слабом сигнале (С/Ш около 3:1) ошибок практически нет. Напряжение на антенном входе приёмника около 0,5 мкВ.
Изображение
При слабом сигнале (С/Ш около 2:1) ошибки 50% (потеря половины пакетов). Напряжение на антенном входе приёмника около 0,3 мкВ. Реле начинает переодически отключаться (дребезжать):
Изображение
При слабом сигнале (С/Ш меньше 1:1) ошибки 100% (потеря всех пакетов):
Изображение
При отсутствии сигнала:
Изображение
самое главное - при любом уровне сигнала никаких ложных срабатываний! :)
Радиоканал - наша любимая рация http://radiokot.ru/circuit/analog/receiv_transmit/30/
Осталось приделать релюшки и получиться простая 4-х командная схема радиоуправления. :tea:


Вложения:
tx4 - 8.c [3.96 KiB]
Скачиваний: 294
rx4 - 8.c [17.41 KiB]
Скачиваний: 271
Вернуться наверх
 Профиль  
 
Не в сети
 Заголовок сообщения: Re: Радиоуправление: делаем сами.
СообщениеДобавлено: Вс авг 03, 2014 13:28:09 
Собутыльник Кота

Карма: 18
Зарегистрирован: Вт мар 13, 2012 13:16:13
Сообщений: 2585
Откуда: Россия
Рейтинг сообщения: 0
Появилось свободное время... продолжаем :tea:
Достал свою рацию:
http://www.radiokot.ru/forum/download/f ... ?id=128930
Изображение
Собрал к ней простенький переходник для подключения МК:
Изображение
Можно собрать компаратор... но это долго и сложно. Переходник подключается практически к любой рации или FM приёмнику и т.д. вместо динамика. При средней громкости (около 50%) на выходе получаем четкие импульсы. Диоды (красные) прямое падение напряжения 2 V. Они защищают вход МК от перенапряжения. (без них один порт МК я уже спалил :oops: ). Делитель 22к-33к задает начальное смещение на входе МК. Если напряжение на входе МК более 2,6 V (при 5 V питании) то МК воспринимает как "1". Если напряжение на входе МК менее 2,6 V то МК "думает" что это "0".
Результаты эксперемента (осциллограмы сняты через звуковую карту компьютера со входа МК - вывод 28). Зелёным цветом - импульсы на входе МК. Красным цветом - импульсы контроля работы МК (вывод 2 МК), начало и конец отсчета пакета.
Для примера передаем команду №1. Ей соответствует код 01011001010101011011. Частота импульсов 480 Гц. Сигнал на выходе приёмника инвертирован.
При чётком сигнале передатчика потерь пакетов нет. Команда выполняется чётко. Время реакции около 0,1...0,2 секунды.
Изображение
При слабом сигнале (С/Ш около 1:2) потеря пакетов около 50%:
Изображение
При слабом сигнале (С/Ш менее 1:1) потеря пакетов около 90%: Т.е. если долго держать кнопку то команда все же выполняется.
Изображение
А это МК ищет код (но не может найти :) ) в шумах при отсутствии сигнала (передатчик выключен):
Изображение
Чуть подробней о борьбе с помехами. Для надежной работы при слабом сигнале передатчика МК анализирует каждый бит. Для этого каждый бит разбивается на 144 равных частей. Т.е. МК измеряет напряжение на входе 144 раза за время прохождения каждого бита. Затем МК математически определяет сколько в одном бите "+" и столько "-" и принимает значение данного бита "1" или "0":
Изображение
Аналогично и с другими импульсами:
Изображение
И даже при таких импульсах МК чётко распознаёт биты правильно- "1" или "0":
Изображение
Таким образом, мелкие помехи нам не страшны. Радиоуправление работает при слабом уровне сигнала. Вот. :tea:
Есть ещё у кого какие идеи?


Вложения:
tx.c [5.18 KiB]
Скачиваний: 271
rx.c [7.22 KiB]
Скачиваний: 249
Вернуться наверх
 Профиль  
 
Не в сети
 Заголовок сообщения: Re: Радиоуправление: делаем сами.
СообщениеДобавлено: Вс авг 10, 2014 18:28:19 
Собутыльник Кота

Карма: 18
Зарегистрирован: Вт мар 13, 2012 13:16:13
Сообщений: 2585
Откуда: Россия
Рейтинг сообщения: 0
Провёл ряд экспериментов. Улучшил синхронизацию. В остальном ничего лучшего не получается. Для высокой скорости реакции требуется постоянно передавать синхро пакет, чтобы принимающий МК был постоянно синхронизирован с передающим МК. :solder:
Короче, при напряжении на антенном входе приёмника 0,3 мкВ (27Мгц) система работает чётко. Время реакции менее 0,1 секунды (зависит от количества кнопок). Скорость передачи получилась 40 пакетов в секунду. Для получения ещё большей чувствительности (работа при меньшем сигнале без потерь пакетов) приходится уменьшать скорость передачи пакетов (уменьшаем частоту импульсов). Однако это уменьшает скорость реакции модели, что для игрушек не пойдет. Для всяких стационарных радиосигнализаций не требуется высокая скорость реакции... поэтому система работает при меньшем уровне сигнала (сигнал/шум менее 1:1). Т.е. просто дольше держим кнопку на передатчике. :tea:
Пару слов о синхронизации. Запуск МК-приёмника идет по переднему фронту первого бита пакета. При слабом сигнале идет "скольжение". Синхронизируемся по первому правильному пакету. Пропускаем не более 6 пакетов:
Изображение
Благодаря "умной" синхронизации количество потерянных пакетов (при слабом сигнале) заметно уменьшено:
Изображение
Кстате, благодаря такой системе анализа, МК прекрасно работает и с любыми сигналами на входе. Например с такими:
Изображение
Т.е. форма импульсов (амплитуда, фронт, фазовый шум, длительность и скважность...)нам не критична.
Короче, получилась простенькая базовая программка. Теперь можно её "подкрутить" под конкретные задачи. :tea:


Вернуться наверх
 Профиль  
 
Не в сети
 Заголовок сообщения: Re: Радиоуправление: делаем сами.
СообщениеДобавлено: Вт авг 12, 2014 00:35:26 
Собутыльник Кота

Карма: 18
Зарегистрирован: Вт мар 13, 2012 13:16:13
Сообщений: 2585
Откуда: Россия
Рейтинг сообщения: 0
Переходим к практике. :)
А вот и первая схема. Схема рабочая. Собрана на макетке и протестирована! (питание МК и выводы для прошивки на схеме не показаны-они стандартные по даташиту):
Изображение
Пульт на 6 кнопок. Кнопки работают независимо. Т.е. при нажатии на кнопку (в передатчике) горит светодиод соответствующий номеру кнопке (в приёмнике), один или несколько (или все сразу), в любой последовательности. :tea:

Примечание:
1-Время включения светодиода (скорость реакции) зависит от количества нажатых кнопок (25мс...150мс).
При хорошем уровне сигнала МК синхронизируется по переднему фронту первого принятого бита.
2-Время выключения светодиода не зависит ни от кнопок ни от уровня сигнала.
3-Для повышения скорости реакции (если это нужно), при низком уровне сигнала передатчика, кнопка "№6" должна быть постоянно нажата. При этом МК синхронизируется по последнему пакету (кнопке "№6").
4-В приёмнике добавлен светодиод-индикатор. Если он горит-МК синхронизирован. Если не горит-нет сигнала (есть одна несущая передатчика). Если мигает-на входе МК шум (передатчик выключен).

Короче, получился простенький пульт с возможностью расширения на любое количество кнопок (сколько есть свободных портов у МК).
Исходники прикрепил. Копируем в cvavr, компилируем, прошиваем любым программатором МК и... наслаждаемся. :tea:


Вложения:
Комментарий к файлу: исходник приёмник
rx1.c [7.89 KiB]
Скачиваний: 342
Комментарий к файлу: исходник передатчик
tx1 - 8.c [5.18 KiB]
Скачиваний: 285
Вернуться наверх
 Профиль  
 
Не в сети
 Заголовок сообщения: Re: Радиоуправление: делаем сами.
СообщениеДобавлено: Вс авг 17, 2014 20:43:29 
Собутыльник Кота

Карма: 18
Зарегистрирован: Вт мар 13, 2012 13:16:13
Сообщений: 2585
Откуда: Россия
Рейтинг сообщения: 0
На базе этой схеме можно собрать например гусеничный танк... Вместо светодиодов ставим релюшки:
Изображение
При хорошем сигнале время реакциии менее 0,1 сек. Т.е. достаточно высокое для выполнения сложных манёвров. Время реакции зависит от количества нажатых кнопок. Все 6 пакетов от шести кнопок передаються поочереди. Время передачи одного пакета 25 мс. Для более точного управления можно сделать 1,2,3,4 кнопки высокоприоритетными - они будут передоваться в первую очередь. Остальные 5,6, и т.д. будут передаваться в промежутках между 1,2,3,4 кнопками... В этом случае скорость реакции будет постоянная. Короче, все зависит от конкретных задач. :tea:

Короче, простое дискретное радиоуправление у нас есть. Усложним задачу! Переходим к пропорциональному радиоуправлению. Провел разные эксперементы... остановился на встроенном АЦП...
Изображение
Крутим резистор... диоды показывают напряжение в двоичном коде. Стандартные настройки АЦП в cvavr. Время обновления (время оцифровки) около 0,3 мс. Теперь нужно придумать как это передать и принять... :roll:


Вложения:
АЦП.c [931 байт]
Скачиваний: 262
Вернуться наверх
 Профиль  
 
Не в сети
 Заголовок сообщения: Re: Радиоуправление: делаем сами.
СообщениеДобавлено: Вт авг 19, 2014 01:42:55 
Собутыльник Кота

Карма: 18
Зарегистрирован: Вт мар 13, 2012 13:16:13
Сообщений: 2585
Откуда: Россия
Рейтинг сообщения: 0
Придумал)). Используем манчерский код. https://ru.wikipedia.org/wiki/%D4%E8%E7 ... 0%ED%E8%E5
Встроенный АЦП МК измеряет напряжение на входе 0...5 V и переводит в код 0...1024 бит. Такая точность поворота руля нам не нужна. Поэтому 1024 делим на 68. Получаем 15 делений поворота (0000...1111). Передаём четыре бита кода... переведя в манчерский код... и инвертировав для лучшей помехозащищенности (как в пульте телевизора)... 4 бит: 0(старт)-01010101(код)-10101010(инверсия кода)-11111(синхро пауза)... пакет 22 мс... При слабом сигнале появляются ошибки. :facepalm:
Проблема в том, что для лучшей помехозащищенности приходится увеличивать пакет... но при этом увеличивается время передачи... уменьшается время реакции...
1024 делим на 33. Получаем 31 делений поворота (00000...11111). Передаём пять бит кода... + № руля... +пауза... 0010101010101010101101010101011111... короче 30 пакетов в секунду. Проверяем. :tea:


Вернуться наверх
 Профиль  
 
Не в сети
 Заголовок сообщения: Re: Радиоуправление: делаем сами.
СообщениеДобавлено: Вт авг 19, 2014 16:45:22 
Собутыльник Кота

Карма: 18
Зарегистрирован: Вт мар 13, 2012 13:16:13
Сообщений: 2585
Откуда: Россия
Рейтинг сообщения: 0
короче собрал на макетке схемку...
Изображение
вместо кнопок поставил переменные резисторы. Крутим резисторы... в приёмнике выводится код поочереди от двух резисторов одновременно. програмка получилась простенькой. пришлось увеличить пакеты до 30 бит. Ложных срабатываний не даблюдается при любом уровне сигнала. получился не совсем манчестерский код... но смысл тот же: при передаче "1" и "0" не повторяются более двух раз подряд. Т.е. нет постоянной составляющей... можно спокойно передавать по радиоканалу:
Изображение
короче после эксперементов пришёл к технологии простых пультов от телевизора (тот же принцип)... измеряем напряжение на входах (их может быть много) поочереди, очифровываем... делим на нужный коэффициент... переводим в "манчестерский код" и передаём по радиоканалу...
0(старт бит)-0101(номер кнопки)-0101010101(двоичный код величины напряжения)-1010(инверсия номера кнопки)-1010101010(инверсия кода величины напряжения)-1(стоп бит)-11111(синхро пауза). Ложных показаний нет. Время передачи про хорошем сигнале не более 70 мс. При слабом сигнале система тоже работает, только увеличивается время передачи... часть пакетов теряется, но команда всёравно выполняется:
Изображение
Т.е. система нормально работает при не сильно зашумленном сигнале:
Изображение
короче получилась базовая програмка для передачи как дискретный команд, так и пропорциональных (аналоговых сигналов). Можно "подкрутит" под конкретные задачи. Например улучшить распределение трафика или ещё что... Вот теперь мы можем передавать разные типы сигналов. Осталось приделать моторчики или релюшки... ))) :tea:


Вложения:
rx1.c [9.62 KiB]
Скачиваний: 253
tx1 - 8.c [6.94 KiB]
Скачиваний: 237
Вернуться наверх
 Профиль  
 
Не в сети
 Заголовок сообщения: Re: Радиоуправление: делаем сами.
СообщениеДобавлено: Вт авг 26, 2014 22:55:26 
Собутыльник Кота

Карма: 18
Зарегистрирован: Вт мар 13, 2012 13:16:13
Сообщений: 2585
Откуда: Россия
Рейтинг сообщения: 0
продолжаем...
Накидал на макетке вот такую рабочую схемку пропорционального управления:
Изображение
Под рукой сервомашинок нет, поэтому все резисторы пока крутим вручную...
В ходе эксперементов выяснилось, что если медленно крутить резисторы управления, то в приёмнике появляются неоднозначности... АЦП измерят напряжение на входе вместе с помехами и выдаёт значения в пределах 0...31 (00011111), при этом при переходе напри от одного уровня к другому 1...2...3... АЦП выдает два значения 1 и 2... 2 и 3... и т.д... Т.е. моторчики будут дёргаться туда-сюда (или будет дребезг реле). Поэтому в программу передатчика (при необходимости и в приёмнике) добавил фильтр-гистерезис.
Фильтр-гистерезис: После оцифровки 0...5 V получаем код 0...1024. Устанавливаем коэффициент деления 16. Получаем 64 значения... Реально получаем 63 значения. Буфер меняет своё значение если отклонение будет более чем на два деления. Полученный результат делим на 2. Получаем 31 значение... Короче "дребезга" больше нет... Лучше пояснить с помощью графика:
Изображение
Думаю всё понятно.
А вот осциллограмма сигнала. Данные от двух АЦП передаются поочереди:
Изображение
Добавлена одна кнопка для демонтрации и проверки-вкл/выкл лампочки. Код лампочки передаёться между кодами АЦП.
Короче получилась рабочая базовая программа. Количество АЦП и кнопок как и раньше может быть любым. Вот. :tea:


Вложения:
tx1 - 8.c [7.84 KiB]
Скачиваний: 244
rx1.c [12.7 KiB]
Скачиваний: 235
Вернуться наверх
 Профиль  
 
Не в сети
 Заголовок сообщения: Re: Радиоуправление: делаем сами.
СообщениеДобавлено: Вт сен 02, 2014 23:21:49 
Собутыльник Кота

Карма: 18
Зарегистрирован: Вт мар 13, 2012 13:16:13
Сообщений: 2585
Откуда: Россия
Рейтинг сообщения: 0
Такс... продолжим. Усложним задачу! :wink: Попробуем приделать ШИМ для плавной регулировки скорости движения (оборотов двигателя). Пробовал сделать ШИМ простыми логическими операциями в программе. Но возникла сложность получения точно заданного ШИМ... появляется "дребезг" ... фазовый шум.
Накидал макетку ИзображениеДля ШИМ используем встроенный в МК таймер №1... В даташите пишут что таймер работает независимо от выполнения основной программы... Проверяем. Крутим резистор... На выходе получаем плавную регулировку яркости лампочки 0...12 V. :tea:


Вложения:
rx1.c [2.83 KiB]
Скачиваний: 245
Вернуться наверх
 Профиль  
 
Не в сети
 Заголовок сообщения: Re: Радиоуправление: делаем сами.
СообщениеДобавлено: Ср сен 03, 2014 16:09:43 
Собутыльник Кота

Карма: 18
Зарегистрирован: Вт мар 13, 2012 13:16:13
Сообщений: 2585
Откуда: Россия
Рейтинг сообщения: 0
я же уже давал схему http://radiokot.ru/circuit/analog/receiv_transmit/30/ там на форуме всё расписано... я собирал плату размером 5х7 см ... в пачке сигарет на КТ315. нужна ещё компактней ? :roll:

Продолжим... получилась схемка простой машинки с плавной регулировкой скрости (0...31) ИзображениеШИМ действительно работает независимо от основной программы. ИзображениеПолучаем чёткие импульсы на выходе. :)
Правда для полной картины нужно приделать ещё "задний ход". Таймер №1 в МК имеет один выход. Самое простое приделать релюшку "задний ход" к одной из кнопок. ИзображениеПравда управлять такой машинкой будет не очень удобно. Нужно приделать "автоматическую коробку передач" :))) Вот. :tea:


Вложения:
tx1 - 8.c [10.13 KiB]
Скачиваний: 238
rx1.c [15.95 KiB]
Скачиваний: 228
Вернуться наверх
 Профиль  
 
Не в сети
 Заголовок сообщения: Re: Радиоуправление: делаем сами.
СообщениеДобавлено: Пт сен 05, 2014 22:35:22 
Собутыльник Кота

Карма: 18
Зарегистрирован: Вт мар 13, 2012 13:16:13
Сообщений: 2585
Откуда: Россия
Рейтинг сообщения: 0
Такс... "подкрутил" программу приёмника. Улучшил синхронизацию. Количество ошибок (при слабом сигнале) сократилось примерно в три раза. Передатчик пока не трогаем.
При хорошем сигнале всё работает чётко. При слабом сигнале всё это работает так:
пункт 1 - МК непрерывно анализирует состояние порта (ножка PC4)... ищем "синхро паузу" (пять подряд "1"):
Изображениепри обнаружении "синхро паузы" переходим к пункту 2.
пункт 2 - МК ждёт первый бит кода. Запускаем "запись" кода по первому биту кода:
При хорошем сигнале:
Изображение
При слабом сигнале:
Изображение
Анализируем код. Если код верный, выполняем соответствующую команду и "запоминаем" положение пакета в общем потоке...
пункт 3 Переходим к точке приёма следующего пакета. При этом если следующий пакет не верный (помеха) , то переходим к точке приема следующего пакета. Т.к. МК знает в какой момент времени придет следующий пакет, то МК сразу переходит к этой точке (при этом уменьшается вероятность помехи). Выпадение до 5 пакетов (задаётся при настройке) из общего потока не влияет на синхронизацию МК:
Изображение
При потери более 5 пакетов (высокий уровень помех или передатчик выключен) выключаем все кнопки переходим к поиску "синхро паузы" - пункт 1. Процесс замыкается.
При настройке можно задавать "вероятность" определения "0" и "1", в зависимости от того что нам важнее: скорость передачи или надежность системы (отсутствие ошибок). :roll:
Кстате! В МК ATmega8 есть втроенный UART. https://ru.wikipedia.org/wiki/%D3%ED%E8 ... 2%F7%E8%EA Правда, по даташиту там высокие требования к импульсам...
Вопрос! Как передать UART при таком сигнале ??? :Изображение... а было бы интересно :))) .

Короче вот. :tea:


Вложения:
передатчик.c [16.63 KiB]
Скачиваний: 269
приёмник.c [16.63 KiB]
Скачиваний: 247
Вернуться наверх
 Профиль  
 
Не в сети
 Заголовок сообщения: Re: Радиоуправление: делаем сами.
СообщениеДобавлено: Пн сен 08, 2014 18:59:39 
Собутыльник Кота

Карма: 18
Зарегистрирован: Вт мар 13, 2012 13:16:13
Сообщений: 2585
Откуда: Россия
Рейтинг сообщения: 0
Продолжим... дошли до UART в ATmega8. На одном из форумов предлагали использовать UART для радиоуправления. Проверяем.
Накидал схемку: Изображение Программа несколько строчек... Радиопульт на 6 кнопок по UART. Получилась самая простая система радиоуправления ! :))) Нажимаем кнопку №1 > закидываем байт (00000010) в буфер UDR передатчика UART. При появлении байта в буфере UDR, передатчик автоматически переходит к передачи байта. Ждем пока передатчик передаст байт и закидываем следующий... Приёмник работает наоборот: при появлении "0" на входе, приёмник переходит к приёму байта. Ждём пока приёмник примет байт. Считываем принятый байт из буфера приёмника UDR и выводим на порт "D". Светодиоды показывают байт (номер кнопки). Вот и всё! :))) Вместо светодиодов подключаем реле или моторчики и катаем машинку или танчик ))).
Настройка: меняем местами резисторы на входе. Выставляем напряжение около 2,6 V. Если на входе МК напряжение больше половины напряжения питания МК (5 V), то МК воспринимает это как "1". Т.е. просто подтянули вход МК к "1". Вот и всё.
UART в чистом виде можно передать через обычную рацию, при низкой скорости: 110, 300, 600, 1200, 2400, 4800 (Baud Rant). Причем МК без кварца.
При хорошем сигнале как обычно всё работает чётко. Но даже небольшой шум - и сразу появляются ошибки. Причем ни Бит контроля четности , ни Стоп биты - 1 или 2 бита, не справляются с ошибками... Для примера так выглядит UART при скорости 1200(Baud Rant). Получили импульсы частотой 600 Гц: Изображение
Короче, использовать чистый UART, без фильтра (фильтра импульсов и фильтра ишибок) не рекомендуется. Вот. :tea:

Для интереса накидал програмку своего приёмника UART. Для сравнения:
Заводской UART при обнаружении бита работает так: Изображение Сделал тоже самое програмно, только увеличит время выборки на всю длительность импульса ИзображениеПолучился ФНЧ. (см. выше): Изображение. Как и ожидалось количество ошибок заметно уменьшилось. 115 выборок (столько выборок успевает сделать МК при тактовой частоте 1 МГц) против 3-х заводских... разница заметна. Ну а делее анализируем уже программно ошибки...
А вообще лучше перевести UART в манчестерский код и передавать "по человечески" - с кодировкой, с инверсией и т.д... (см. выше) :tea:
Всё это может пригодится если вдруг возникнет желание упралять машинкой или ещё чем с компьютера - через COM порт например, который работает по UART ... или через USB... - это ещё интересней )))) :P


Вложения:
приёмник 6 кнопок.c [1 KiB]
Скачиваний: 292
передатчик 6 кнопок.c [791 байт]
Скачиваний: 266
Вернуться наверх
 Профиль  
 
Не в сети
 Заголовок сообщения: Re: Радиоуправление: делаем сами.
СообщениеДобавлено: Пн сен 15, 2014 23:34:37 
Собутыльник Кота

Карма: 18
Зарегистрирован: Вт мар 13, 2012 13:16:13
Сообщений: 2585
Откуда: Россия
Рейтинг сообщения: 0
Продолжим... :tea:
Последнии иследования показали, что использование синхронизации - не лучший способ передачи пакетов. Теряем время на поиск "правильного пакета" и синхронизацию по пакету... Поэтому пишем другой алгоритм. Меняем формат пакетов: 1(старт бит)-0101(номер АЦП)-0101010101(данные АЦП)-1010(инверсия номера АЦП) -1010101010(инверсия данных АЦП)-1(стоп бит)-0000(синхро пауза) - 35 бит. Изображение Пакет взяли в "рамочку" - "1______1" (старт бит - стоп бит). - Благодаря этому нам не важно чем начинаются и заканчиваются наши данные. В пакете никогда не повторяются "000" подряд (передача идет манчестерским кодом). МК анализирует каждый принятый бит и ищет синхро паузу - "000" подряд: Изображение. МК находит паузу даже в зашумленном сигнале. Приём начинается по первому пакету, без задержек на синхронизацию. При таком методе синхронизация не нужна. Количество ошибок при слабом сигнале примерно одинаковое с синхронизацией и без неё. Кроме того, пакеты могут быть разной длины: данные АЦП и ШИМ - более длинные, а пакеты кнопок -короткие, достаточно и 20 бит (см. выше). Позже поэкспериментируем. :tea:
Вместо "000" можно использовать любую кодовую комбинацию. Просто "000" - в данном случае самое простое. Для высокой скорости передачи (высокой скорости реакции) пакеты должны иметь минимальную длину.

Переходим к практике. Из всего выше сказанного получилось вот что: Схема собрана на макетке и протестирована. Схема передатчика:
Изображение
Схема приёмника:
Изображение
Передача без инверсии сигнала: "1" в передатчике = "1" в приёмнике. (соответственно "0" = "0").
Поворот влево-вправо Всё стандартно, как в заводской машинке. Только добавил "поворотники" (жёлтые диоды), которые автоматически начинают мигать при повороте влево-вправо соответственно (как в настоящем автомобиле). :roll:
Вперед-назад У ATmega8 только один выход ШИМ генератора. Точнее два генератора ШИМ и у каждого по одному выходу. Поэтому ничего лучше не придумал, как просто автоматический переключатель. Ещё при управлении (при остановки) трудно установить точно нейтральное (по центру) положение джойстика, поэтому для лучшей управляемости 4 деления сделал "стоп" (задаётся при настройке). Частоту ШИМ выбрал 1041 Hz. Можно выбрать из списка предделителя таймера, кратную 4. Можно взять например 260 Hz, но становятся заметны вибрации моторчика. При 1041 Hz ход более плавный, без вибрации.
Ещё осталось 4 кнопки, которые я ещё не придумал куда подключить :dont_know:
Время реакции модели (как и в предыдущих схемах) зависит от количества нажатых кнопок, т.к. все (нажатые) кнопки передаются по очереди. Если кнопки не нажаты, то передаются только пакеты АЦП и ШИМ. Соответсвенно время реакции не более двух пакетов т.е. около 0,1 секунды. Можно увеличить скорость передачи. Позже поэкспериментируем. :tea:


Вложения:
tx1.c [10.39 KiB]
Скачиваний: 275
rx1.c [17.76 KiB]
Скачиваний: 261
Вернуться наверх
 Профиль  
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 870 ]  На страницу 1, 2, 3, 4, 5 ... 44  След.



Часовой пояс: UTC + 3 часа [ Летнее время ]


Кто сейчас на форуме

Сейчас этот форум просматривают: int4880053, Slabovik и гости: 17


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y