Форум РадиоКот https://radiokot.ru/forum/ |
|
Радиоуправление. Переходим на МК. https://radiokot.ru/forum/viewtopic.php?f=28&t=108688 |
Страница 1 из 44 |
Автор: | svic [ Пн янв 27, 2014 21:51:00 ] |
Заголовок сообщения: | Re: Радиоуправление: делаем сами. |
Ну, с цифровым подходом в первом приближении делается чуток хитрее - для распознавания используется не одиночный бит, а байт, при этом достоверность улучшается многократно. Для телеуправления, думаю, достаточно тетрады или даже триады, далее должен следовать инфокод значения управляющей величины и в конце стоповый (разделительный) код. Если первый и последний анализировать математически в МК, то количество ложных интерпретаций должно резко сократиться. ИМХО. |
Автор: | roman.com [ Пн янв 27, 2014 23:17:48 ] | ||||
Заголовок сообщения: | Re: Радиоуправление: делаем сами. | ||||
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 Гц. При нажатии любой кнопки будет выполняться соответствующая команда, пока не нажмем другую кнопку... ![]() ![]() Нажимаем кнопку 1 - код 00100101 - пауза - код 00100101.... и т.д. бесконечно. Нажимаем кнопку 2 - код 00101001 - пауза - код 00101001.... и т.д. бесконечно. Нажиаем одновременно кнопку 1 и 2 - код 00100101 - пауза - код 00101001 - код 00100101 - пауза - код 00101001.... и т.д. бесконечно. Т.е. поочереди передаются коды 1 и 2... Так же и с другими кнопками. Байты разделены синхропаузами... Пока ничего лучше (проще) не придумал. Компилируем... Прошиваем mega8... Все работает ![]() ![]() Декодер (RX). тут сложнее... Приемник и передатчик на atmega8. Для упрощения схемы используеться внутренний генератор RC - 1 Мгц. Фьюзы не трогаем.Приёмник: ![]() Теперь алгоритм приёмника: в исходном состоянии на ноге 28 (порт PC5) "1" (+5V). При поступлении команды "0"- старт бит (0V) запускаеться программа алгоритма определения состояния ноги 28 (порт PC5) через равные промежутки времени. При этом мигает диод D1-индикатор сигнала. Я пока не дошел до всяких таймеров и т.д... поэтому задержку я сделал используя бесконечный цикл while (1). После доработки программы я использовал счетчики for (a=0;a<b;a++). На счетчиках программа получилась почти в два раза меньше. ![]() Короче, при появлении "0" на 28 (порт PC5) включаеться счетчик задержки, время задержки задаеться при настройке-c=100. Затем включаеться счетчик проверки состояния, первого бита кода. Он проверяет состояние ноги 28 (порт PC5). Проверка: 70 раз, количество проверок задаеться также при настройке-b=70... Если первый бит "0" то включаеться второй счетчик задержки c=100... затем второй третий счетчик проверяет второй бит кода... и опять задержка... и опять проверка третего бита кода... и так пока программа не проверит все 8 бит кода. В зависимости от расположения битов в коде вывоиться соответствующая команда: D1,D2,D3,D4. После этого МК переходит в режим ожидания... и ожидания следующей посылки кода... Если хоть один бит неверный то происходит сброс МК... и ожидания следующей посылки кода... и т.д. бесконечно. ![]() Короче простенькая програмка с возможностью расширения на большее количество кнопок. Задержки между определениями импульсов кода нужны для того чтобы небыло ошибок при фазовом шуме импульсов... который незбежно появиться при прохождении через радиоканал. Т.е. форма и фаза импульсов сильно изменяться - это устраняеться задержками. Вообщем примерно так .. Жду замечаний, предложений ![]()
|
Автор: | roman.com [ Ср янв 29, 2014 11:50:53 ] | |||
Заголовок сообщения: | Re: Радиоуправление: делаем сами. | |||
Если код не верный, то: ![]() И так со всеми кнопками... В данной схеме время рекции получаеться около 0,04 секунды! Т.е. от нажатия кнопки на передатчике до срабатывания ключа на транзисторе проходит около 0,04...0,05 секунды (можно даже точно настроить время реакции). C такими скоростями уже можно говорить о высшем пилотаже )) ![]() В Proteuse все работает четко... осталось проверить в реале ![]() Вопрос на засыпку! Какая стабильность встроенного тактового RC-генератора у ATmega8 ??? Это важно, если будут большие масивы кодов... ![]() svic писал(а): думаю, достаточно тетрады или даже триады, далее должен следовать инфокод значения управляющей величины и в конце стоповый (разделительный) код. 1-Кик видим, триады (3 бита) и даже тетрады (4 бита) недостаточно для надежного распознования кода... лучше байт целиком. 2-далее должен следовать инфокод значения управляющей величины - над этим ещё поработаем... ![]() 3-в конце стоповый (разделительный) код... помоему проще сделать синхропаузу. ![]() ![]()
|
Автор: | ks0 [ Чт янв 30, 2014 18:13:03 ] |
Заголовок сообщения: | Re: Радиоуправление: делаем сами. |
roman.com писал(а): 4-Схема ДТМФ (от телефонов) - при слабом сигнале, (сигнал зашумлен) всплески шума приемник ДТМФ воспринимает как частоты ДТМФ кода... - - ложное срабатывание. Чтобы не было ложных срабатываний команды должна кодироваться не одним символом, а, например, парой разных символов, не имеющих общих частот. Недопустимо 1-2 (697/1209 - 697/1336) Допустимо 1-5 (697/1209 - 770/1336) |
Автор: | roman.com [ Пт янв 31, 2014 16:29:19 ] |
Заголовок сообщения: | Re: Радиоуправление: делаем сами. |
ks0 писал(а): Недопустимо 1-2 (697/1209 - 697/1336)Допустимо 1-5 (697/1209 - 770/1336) Да, наверное вы правы. Так как частота 1209 при сильном щуме выглядит на экране анализатора как частота 1336 или выше... Т.е. частоту (синусоиду) 1209 Гц шум разбивает на несколько частей... в итоге вместо "1" на выходе получаем "2"... Нажимаю "5", получаю "7" ... и т.д. Только появляеться другая проблема: 1-специализированных микросхеме я не нашёл... Передатчик ...ВЖ18 можно выдрать из телефона (номеронабирателя), а вот приёмника ...ВЖ19 на радиорынке нет. ![]() ![]() ![]() 2-при передачи двухчастотного кода модуляция получаеться 50% ... т.е. радиоканал используеться только наполовину. При ИКМ (импульсно-кодовая модуляция) модуляция 100%... т.е. выжимаем из радиоканала максимум. Значит дальность и надежность выше. И т.д. и т.п... |
Автор: | roman.com [ Вс фев 09, 2014 01:41:51 ] | |||
Заголовок сообщения: | Re: Радиоуправление: делаем сами. | |||
АлександрЛ писал(а): "самое простое" управление... Мы обсуждаем тут радиоуправление. ![]() Доработал свою схемку (программу): добавил счетчики ошибок, сброс при отсутствии сигнала, уменьшил длительность опроса, увеличил код до 20 бит... Получилась рабочая схема: нет ложных срабатываний, работает даже при зашумленном (слабом) сигнале - ![]() ![]() Код 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-тактового генератора. ![]() ![]() При питании 6 V частота встроенного RC-тактового генератора уменьшаеться и появляються ошибки при определении кода: ![]() Поэтому питание ATmega8 должно быть от стабилизатора 5 V: ![]() ![]() ![]() При хорошем сигнале (С/Ш около 10:1) ошибок нет. Напряжение на антенном входе приёмника около 1 мкВ: ![]() При слабом сигнале (С/Ш около 3:1) ошибок практически нет. Напряжение на антенном входе приёмника около 0,5 мкВ. ![]() При слабом сигнале (С/Ш около 2:1) ошибки 50% (потеря половины пакетов). Напряжение на антенном входе приёмника около 0,3 мкВ. Реле начинает переодически отключаться (дребезжать): ![]() При слабом сигнале (С/Ш меньше 1:1) ошибки 100% (потеря всех пакетов): ![]() При отсутствии сигнала: ![]() самое главное - при любом уровне сигнала никаких ложных срабатываний! ![]() Радиоканал - наша любимая рация http://radiokot.ru/circuit/analog/receiv_transmit/30/ Осталось приделать релюшки и получиться простая 4-х командная схема радиоуправления. ![]()
|
Автор: | roman.com [ Вс авг 03, 2014 12:28:09 ] | |||
Заголовок сообщения: | Re: Радиоуправление: делаем сами. | |||
Появилось свободное время... продолжаем ![]() Достал свою рацию: http://www.radiokot.ru/forum/download/f ... ?id=128930 ![]() Собрал к ней простенький переходник для подключения МК: Можно собрать компаратор... но это долго и сложно. Переходник подключается практически к любой рации или FM приёмнику и т.д. вместо динамика. При средней громкости (около 50%) на выходе получаем четкие импульсы. Диоды (красные) прямое падение напряжения 2 V. Они защищают вход МК от перенапряжения. (без них один порт МК я уже спалил ![]() Результаты эксперемента (осциллограмы сняты через звуковую карту компьютера со входа МК - вывод 28). Зелёным цветом - импульсы на входе МК. Красным цветом - импульсы контроля работы МК (вывод 2 МК), начало и конец отсчета пакета. Для примера передаем команду №1. Ей соответствует код 01011001010101011011. Частота импульсов 480 Гц. Сигнал на выходе приёмника инвертирован. При чётком сигнале передатчика потерь пакетов нет. Команда выполняется чётко. Время реакции около 0,1...0,2 секунды. ![]() При слабом сигнале (С/Ш около 1:2) потеря пакетов около 50%: ![]() При слабом сигнале (С/Ш менее 1:1) потеря пакетов около 90%: Т.е. если долго держать кнопку то команда все же выполняется. ![]() А это МК ищет код (но не может найти ![]() ![]() Чуть подробней о борьбе с помехами. Для надежной работы при слабом сигнале передатчика МК анализирует каждый бит. Для этого каждый бит разбивается на 144 равных частей. Т.е. МК измеряет напряжение на входе 144 раза за время прохождения каждого бита. Затем МК математически определяет сколько в одном бите "+" и столько "-" и принимает значение данного бита "1" или "0": ![]() Аналогично и с другими импульсами: ![]() И даже при таких импульсах МК чётко распознаёт биты правильно- "1" или "0": ![]() Таким образом, мелкие помехи нам не страшны. Радиоуправление работает при слабом уровне сигнала. Вот. ![]() Есть ещё у кого какие идеи?
|
Автор: | roman.com [ Пн авг 11, 2014 23:35:26 ] | |||
Заголовок сообщения: | Re: Радиоуправление: делаем сами. | |||
Переходим к практике. ![]() А вот и первая схема. Схема рабочая. Собрана на макетке и протестирована! (питание МК и выводы для прошивки на схеме не показаны-они стандартные по даташиту): Пульт на 6 кнопок. Кнопки работают независимо. Т.е. при нажатии на кнопку (в передатчике) горит светодиод соответствующий номеру кнопке (в приёмнике), один или несколько (или все сразу), в любой последовательности. ![]() Примечание: 1-Время включения светодиода (скорость реакции) зависит от количества нажатых кнопок (25мс...150мс). При хорошем уровне сигнала МК синхронизируется по переднему фронту первого принятого бита. 2-Время выключения светодиода не зависит ни от кнопок ни от уровня сигнала. 3-Для повышения скорости реакции (если это нужно), при низком уровне сигнала передатчика, кнопка "№6" должна быть постоянно нажата. При этом МК синхронизируется по последнему пакету (кнопке "№6"). 4-В приёмнике добавлен светодиод-индикатор. Если он горит-МК синхронизирован. Если не горит-нет сигнала (есть одна несущая передатчика). Если мигает-на входе МК шум (передатчик выключен). Короче, получился простенький пульт с возможностью расширения на любое количество кнопок (сколько есть свободных портов у МК). Исходники прикрепил. Копируем в cvavr, компилируем, прошиваем любым программатором МК и... наслаждаемся. ![]()
|
Автор: | roman.com [ Вс авг 17, 2014 19:43:29 ] | ||
Заголовок сообщения: | Re: Радиоуправление: делаем сами. | ||
На базе этой схеме можно собрать например гусеничный танк... Вместо светодиодов ставим релюшки: При хорошем сигнале время реакциии менее 0,1 сек. Т.е. достаточно высокое для выполнения сложных манёвров. Время реакции зависит от количества нажатых кнопок. Все 6 пакетов от шести кнопок передаються поочереди. Время передачи одного пакета 25 мс. Для более точного управления можно сделать 1,2,3,4 кнопки высокоприоритетными - они будут передоваться в первую очередь. Остальные 5,6, и т.д. будут передаваться в промежутках между 1,2,3,4 кнопками... В этом случае скорость реакции будет постоянная. Короче, все зависит от конкретных задач. ![]() Короче, простое дискретное радиоуправление у нас есть. Усложним задачу! Переходим к пропорциональному радиоуправлению. Провел разные эксперементы... остановился на встроенном АЦП... Крутим резистор... диоды показывают напряжение в двоичном коде. Стандартные настройки АЦП в cvavr. Время обновления (время оцифровки) около 0,3 мс. Теперь нужно придумать как это передать и принять... ![]()
|
Автор: | roman.com [ Вт авг 19, 2014 00:42:55 ] |
Заголовок сообщения: | Re: Радиоуправление: делаем сами. |
Придумал)). Используем манчерский код. 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 мс... При слабом сигнале появляются ошибки. ![]() Проблема в том, что для лучшей помехозащищенности приходится увеличивать пакет... но при этом увеличивается время передачи... уменьшается время реакции... 1024 делим на 33. Получаем 31 делений поворота (00000...11111). Передаём пять бит кода... + № руля... +пауза... 0010101010101010101101010101011111... короче 30 пакетов в секунду. Проверяем. ![]() |
Автор: | roman.com [ Вт авг 19, 2014 15:45:22 ] | |||
Заголовок сообщения: | Re: Радиоуправление: делаем сами. | |||
короче собрал на макетке схемку... вместо кнопок поставил переменные резисторы. Крутим резисторы... в приёмнике выводится код поочереди от двух резисторов одновременно. програмка получилась простенькой. пришлось увеличить пакеты до 30 бит. Ложных срабатываний не даблюдается при любом уровне сигнала. получился не совсем манчестерский код... но смысл тот же: при передаче "1" и "0" не повторяются более двух раз подряд. Т.е. нет постоянной составляющей... можно спокойно передавать по радиоканалу: ![]() короче после эксперементов пришёл к технологии простых пультов от телевизора (тот же принцип)... измеряем напряжение на входах (их может быть много) поочереди, очифровываем... делим на нужный коэффициент... переводим в "манчестерский код" и передаём по радиоканалу... 0(старт бит)-0101(номер кнопки)-0101010101(двоичный код величины напряжения)-1010(инверсия номера кнопки)-1010101010(инверсия кода величины напряжения)-1(стоп бит)-11111(синхро пауза). Ложных показаний нет. Время передачи про хорошем сигнале не более 70 мс. При слабом сигнале система тоже работает, только увеличивается время передачи... часть пакетов теряется, но команда всёравно выполняется: ![]() Т.е. система нормально работает при не сильно зашумленном сигнале: ![]() короче получилась базовая програмка для передачи как дискретный команд, так и пропорциональных (аналоговых сигналов). Можно "подкрутит" под конкретные задачи. Например улучшить распределение трафика или ещё что... Вот теперь мы можем передавать разные типы сигналов. Осталось приделать моторчики или релюшки... ))) ![]()
|
Автор: | roman.com [ Вт авг 26, 2014 21:55:26 ] | |||
Заголовок сообщения: | Re: Радиоуправление: делаем сами. | |||
продолжаем... Накидал на макетке вот такую рабочую схемку пропорционального управления: Под рукой сервомашинок нет, поэтому все резисторы пока крутим вручную... В ходе эксперементов выяснилось, что если медленно крутить резисторы управления, то в приёмнике появляются неоднозначности... АЦП измерят напряжение на входе вместе с помехами и выдаёт значения в пределах 0...31 (00011111), при этом при переходе напри от одного уровня к другому 1...2...3... АЦП выдает два значения 1 и 2... 2 и 3... и т.д... Т.е. моторчики будут дёргаться туда-сюда (или будет дребезг реле). Поэтому в программу передатчика (при необходимости и в приёмнике) добавил фильтр-гистерезис. Фильтр-гистерезис: После оцифровки 0...5 V получаем код 0...1024. Устанавливаем коэффициент деления 16. Получаем 64 значения... Реально получаем 63 значения. Буфер меняет своё значение если отклонение будет более чем на два деления. Полученный результат делим на 2. Получаем 31 значение... Короче "дребезга" больше нет... Лучше пояснить с помощью графика: Думаю всё понятно. А вот осциллограмма сигнала. Данные от двух АЦП передаются поочереди: ![]() Добавлена одна кнопка для демонтрации и проверки-вкл/выкл лампочки. Код лампочки передаёться между кодами АЦП. Короче получилась рабочая базовая программа. Количество АЦП и кнопок как и раньше может быть любым. Вот. ![]()
|
Автор: | roman.com [ Вт сен 02, 2014 22:21:49 ] | ||
Заголовок сообщения: | Re: Радиоуправление: делаем сами. | ||
Такс... продолжим. Усложним задачу! ![]() Накидал макетку ![]()
|
Автор: | roman.com [ Ср сен 03, 2014 15:09:43 ] | |||
Заголовок сообщения: | Re: Радиоуправление: делаем сами. | |||
я же уже давал схему http://radiokot.ru/circuit/analog/receiv_transmit/30/ там на форуме всё расписано... я собирал плату размером 5х7 см ... в пачке сигарет на КТ315. нужна ещё компактней ? ![]() Продолжим... получилась схемка простой машинки с плавной регулировкой скрости (0...31) ![]() ![]() Правда для полной картины нужно приделать ещё "задний ход". Таймер №1 в МК имеет один выход. Самое простое приделать релюшку "задний ход" к одной из кнопок. ![]() ![]()
|
Автор: | roman.com [ Пт сен 05, 2014 21:35:22 ] | |||
Заголовок сообщения: | Re: Радиоуправление: делаем сами. | |||
Такс... "подкрутил" программу приёмника. Улучшил синхронизацию. Количество ошибок (при слабом сигнале) сократилось примерно в три раза. Передатчик пока не трогаем. При хорошем сигнале всё работает чётко. При слабом сигнале всё это работает так: пункт 1 - МК непрерывно анализирует состояние порта (ножка PC4)... ищем "синхро паузу" (пять подряд "1"): ![]() пункт 2 - МК ждёт первый бит кода. Запускаем "запись" кода по первому биту кода: При хорошем сигнале: ![]() При слабом сигнале: ![]() Анализируем код. Если код верный, выполняем соответствующую команду и "запоминаем" положение пакета в общем потоке... пункт 3 Переходим к точке приёма следующего пакета. При этом если следующий пакет не верный (помеха) , то переходим к точке приема следующего пакета. Т.к. МК знает в какой момент времени придет следующий пакет, то МК сразу переходит к этой точке (при этом уменьшается вероятность помехи). Выпадение до 5 пакетов (задаётся при настройке) из общего потока не влияет на синхронизацию МК: ![]() При потери более 5 пакетов (высокий уровень помех или передатчик выключен) выключаем все кнопки переходим к поиску "синхро паузы" - пункт 1. Процесс замыкается. При настройке можно задавать "вероятность" определения "0" и "1", в зависимости от того что нам важнее: скорость передачи или надежность системы (отсутствие ошибок). ![]() Кстате! В МК ATmega8 есть втроенный UART. https://ru.wikipedia.org/wiki/%D3%ED%E8 ... 2%F7%E8%EA Правда, по даташиту там высокие требования к импульсам... Вопрос! Как передать UART при таком сигнале ??? : ![]() ![]() Короче вот. ![]()
|
Автор: | roman.com [ Пн сен 08, 2014 17:59:39 ] | |||
Заголовок сообщения: | Re: Радиоуправление: делаем сами. | |||
Продолжим... дошли до UART в ATmega8. На одном из форумов предлагали использовать UART для радиоуправления. Проверяем. Накидал схемку: ![]() ![]() Настройка: меняем местами резисторы на входе. Выставляем напряжение около 2,6 V. Если на входе МК напряжение больше половины напряжения питания МК (5 V), то МК воспринимает это как "1". Т.е. просто подтянули вход МК к "1". Вот и всё. UART в чистом виде можно передать через обычную рацию, при низкой скорости: 110, 300, 600, 1200, 2400, 4800 (Baud Rant). Причем МК без кварца. При хорошем сигнале как обычно всё работает чётко. Но даже небольшой шум - и сразу появляются ошибки. Причем ни Бит контроля четности , ни Стоп биты - 1 или 2 бита, не справляются с ошибками... Для примера так выглядит UART при скорости 1200(Baud Rant). Получили импульсы частотой 600 Гц: Короче, использовать чистый UART, без фильтра (фильтра импульсов и фильтра ишибок) не рекомендуется. Вот. ![]() Для интереса накидал програмку своего приёмника UART. Для сравнения: Заводской UART при обнаружении бита работает так: ![]() ![]() ![]() А вообще лучше перевести UART в манчестерский код и передавать "по человечески" - с кодировкой, с инверсией и т.д... (см. выше) ![]() Всё это может пригодится если вдруг возникнет желание упралять машинкой или ещё чем с компьютера - через COM порт например, который работает по UART ... или через USB... - это ещё интересней )))) ![]()
|
Автор: | roman.com [ Пн сен 15, 2014 22:34:37 ] | |||
Заголовок сообщения: | Re: Радиоуправление: делаем сами. | |||
Продолжим... ![]() Последнии иследования показали, что использование синхронизации - не лучший способ передачи пакетов. Теряем время на поиск "правильного пакета" и синхронизацию по пакету... Поэтому пишем другой алгоритм. Меняем формат пакетов: 1(старт бит)-0101(номер АЦП)-0101010101(данные АЦП)-1010(инверсия номера АЦП) -1010101010(инверсия данных АЦП)-1(стоп бит)-0000(синхро пауза) - 35 бит. ![]() ![]() ![]() Вместо "000" можно использовать любую кодовую комбинацию. Просто "000" - в данном случае самое простое. Для высокой скорости передачи (высокой скорости реакции) пакеты должны иметь минимальную длину. Переходим к практике. Из всего выше сказанного получилось вот что: Схема собрана на макетке и протестирована. Схема передатчика: Схема приёмника: Передача без инверсии сигнала: "1" в передатчике = "1" в приёмнике. (соответственно "0" = "0"). Поворот влево-вправо Всё стандартно, как в заводской машинке. Только добавил "поворотники" (жёлтые диоды), которые автоматически начинают мигать при повороте влево-вправо соответственно (как в настоящем автомобиле). ![]() Вперед-назад У ATmega8 только один выход ШИМ генератора. Точнее два генератора ШИМ и у каждого по одному выходу. Поэтому ничего лучше не придумал, как просто автоматический переключатель. Ещё при управлении (при остановки) трудно установить точно нейтральное (по центру) положение джойстика, поэтому для лучшей управляемости 4 деления сделал "стоп" (задаётся при настройке). Частоту ШИМ выбрал 1041 Hz. Можно выбрать из списка предделителя таймера, кратную 4. Можно взять например 260 Hz, но становятся заметны вибрации моторчика. При 1041 Hz ход более плавный, без вибрации. Ещё осталось 4 кнопки, которые я ещё не придумал куда подключить ![]() Время реакции модели (как и в предыдущих схемах) зависит от количества нажатых кнопок, т.к. все (нажатые) кнопки передаются по очереди. Если кнопки не нажаты, то передаются только пакеты АЦП и ШИМ. Соответсвенно время реакции не более двух пакетов т.е. около 0,1 секунды. Можно увеличить скорость передачи. Позже поэкспериментируем. ![]()
|
Страница 1 из 44 | Часовой пояс: UTC + 3 часа |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |