Технический форум по робототехнике.
lfway » 27 июн 2012, 10:50
Здравствуйте. Мне нужно сделать фазовый модулятор двоичного
сигнала, который бы управлял миганием светодиода.
Как я понимаю, просто генерить *дуиной сигнал по таймеру -
плохая идея: нужна несущая частота. Нагуглить не выходит,
не будучи профи трудно понять, с чего вообще начать.
Как сделать генератор несущей частоты?
Как соединить его с дуиной?
Посоветуйте, если кто знает, с чего вообще начать? Где искать инфу?
elmot » 27 июн 2012, 12:13
Дуиной и сделать. Не надо отдельного генератора. У любого МК есть тактирование, т.е. некоторая частота уже есть. Дальше просто пишем алгоритм.
Можно, конечно инфу искать, а можно просто головой подумать и алгоритм сделать. Это же учебная задача? От вас этого и хотят - сделать простенький алгоритм, реализующий ФМ.
lfway » 27 июн 2012, 17:50
Это не учебная задача. Просто хочу попробовать передать информацию таким "кустарным" методом, посмотреть что из этого получится =) Спасибо за совет, попробую понять что за тактирование и как мне его применить.
Добавлено спустя 42 минуты 31 секунду:
elmot, Вы пишите: "далее просто пишем алгоритм..."
Как написать алгоритм который бы управлял сдвигом фазы мне понятно, мне не понятно как привязать его к тактированию. Можно делать всё это в цикле с задержками по таймеру, но это через чур уж криво, даже на костыль не тянет. Как мне созданный сигнал поставить в очередь на выполнение в жесткий, независящий от работы программы такт? Например, если взять период колебания 1 секунда и сдвиг 0.5 секунды для кодирования сигнала.
Я очень надеюсь, что вопрос сформулирован более-менее понятно.
legion » 27 июн 2012, 17:54
Если задача стоит "плавно помигать светодиодом", то фазовая модуляция не нужна. Используйте широтно-импульсный модулятор, он же ШИМ, он же PWM. Ознакомление с микроконтроллерами советую начать с
курса DIHALTa. Возможно, обойдетесь без ардуино, задача решается практически "голым" МК.
lfway » 27 июн 2012, 18:04
legion, мне нужно передать фазомодулированный сигнал на расстояние. Как его принять - отдельная, понятная мне задача.
Мне не понятно, как его привязать к жесткой частоте. DIHALT - мощный мужчина))) но у него в блоге про это нет, к сожалению(
От ардуино, я, конечно, откажусь в будущем, но оно очень уж хорошо в прототипировании.
Добавлено спустя 48 секунд:
... и к тому же, оно есть, что немаловажно)))
elmot » 27 июн 2012, 18:48
Ссылку дайте, где подробнее ваша модуляция описана. Как-то подзабыл с институcких времен, как оно должно быть.
legion, фазовая модуляция и ШИМ ну очень разные вещи. при помощи ФМ "плавно помигать" не выйдет. С точки зрения ШИМ - ФМ-модулированный сигнал - это скважность 50%, но на нестабильной частоте. Кажется так.
Dmitry__ » 27 июн 2012, 19:02
Несущая частота какая? Частота модуляции какая? Фазовая модуляция двоичным сигналом - фазовая манипуляция
Если манипуляция 2-х уровневая (0,1), то фаза меняется на 180 или 90 град. Делается элементом xor (программно)
На 1-й вход - несущая, на 2-й вход модуляция.
Пля, неужели я это из головы взял, а не из вики? Какой я умный
legion » 27 июн 2012, 19:12
elmot, я понимаю, но в изначальном ТЗ говорилось про управление миганием и не говорилось, что нужно именно посредством ФМ. Вот и предложил.
Хотя, может и говорилось. В любом случае, ситуация-то проясняется! =)
Duhas » 27 июн 2012, 20:03
ммм, два таймера.. 1 на 50% скважности, вторым 50/0 модулируем.. выходы таймеров xor-ить.. Получится ?
Romikgy » 27 июн 2012, 21:32
определились бы частотой несущей.... и фазовая манипуляция это сдвиг фазы или 0 или 180....
lfway » 27 июн 2012, 22:52
Всем спасибо за отклик!elmot, Фазовая модуляция это вот что:
или
http://www.chipdip.ru/video.aspx?vid=ID000276334&searchtext=%D1%84%D0%B0%D0%B7%D0%BE%D0%B2%D0%B0%D1%8F+%D0%BC%D0%BE%D0%B4%D1%83%D0%BB%D1%8F%D1%86%D0%B8%D1%8Fили
.
Dmitry__, всё верно) но как это применить к ардуине и цифровому сигналу)
Duhas, любой лаг программы может привести к обрушению передачи, поэтому таймеры не подходят, как я понимаю.
Romikgy, что значит "вы бы определились с несущей"? с самой частотой? да это не важно, пусть будет 1 Гц. Про то что нужно сделать сдвиг на 180 я понял. Мне не хватает знаний, как это вколотить в железо так, чтобы была несущая, независимая от программы. Чтобы основная программа генерила стек, а непосредственно передача шла максимально отдельно.
Duhas » 27 июн 2012, 22:58
мм, а что может быть надежнее по времени срабатывания чем таймер + прерывание? если есть и другие задачи для чипа ..
таймер - аппаратный..
Dmitry__ » 27 июн 2012, 23:51
Romikgy писал(а):что значит "вы бы определились с несущей"? с самой частотой? да это не важно, пусть будет 1 Гц.
Что значит неважно? Для 1 Гц. легко делать на прерывании. Будет определенное дрожание фазы (джиттер), но для последовательных программ по-другому невозможно. Определяйся с нужной точностью. Примерный алгоритм для 1 гц:
Настроить таймер на 1гц*2, настроить прерывание от этого таймера.
В прерывании от таймера:
Инвертировать или не трогать выход в соответствии с подготовленным флагом. Так надо делать, чтоб была минимальная задержка и дрожание фазы зависящее от ветки исполнения программы.
Сигнал поменяли, теперь можно спокойно готовить флаг для след. прерывания:
Если между битами данных есть изменение уровня, то выставляем флаг, иначе сброс.
Фсе
Цифровой выход фильтровать rc цепью.
И плохо не отвечать на вопросы, или считай себя "самым умным" и не спрашивай, или отвечай на наводящие вопросы.
Например, этот алгоритм идет лесом если частота модуляции не кратна удвоенной частоте несущей.
lfway » 28 июн 2012, 13:36
Duhas, Dmitry_
Спасибо за ответы. Если таймер аппаратный, возможно, это то что нужно. Спасибо за наводку на счёт прерываний.
Касаемо наводящих вопросов. Я не знаю пока про частоту=)) Я бы с удовольствием ответил на все наводящие вопросы) Сначала я реализую с частотой 1Гц. Когда успешная передача и приём будут сделаны, буду изучать возможность для максимального увеличения частоты и квадратурно-фазовую модуляцию.
"Так надо делать, чтоб была минимальная задержка и дрожание фазы зависящее от ветки исполнения программы." - вот это меня и беспокоило, когда я в начале писал про несущую частоту..
dccharacter » 28 июн 2012, 14:40
В детали пока не вник, но то, что нарисовано на картинке реализуется в железе на контроллерах с DSM - Data Signal Modulator (пример такого МК - pic16f1827). Вопрос в том, где взять синус
На STM32 я думаю, можно генерить синус железный и просто инвертировать полярность, через, например, DMA, т.е. сделать это все в железе полностью.
(там же есть синус да? он же мне не привиделся?)
Добавлено спустя 2 минуты 17 секунд:http://interface.khm.de/index.php/lab/e ... generator/