Помогите демодулировать FSK сигнал!
- Войдите на сайт для отправки комментариев
Пт, 03/08/2018 - 14:03
Прошу помощи в написании скетча. История такая, есть автомобильный блок климат контроля. 3 сервопривода подключены к нему по 1шине. Померил сигнал анализатором китайским....что я увидел так это просто постоянные импульсы
При вращении сервопривода ничего в анализаторе не происходит....долго ломал голову. Разобрал сервопривод, там увидел микросхему, которая в продаже то есть, но вот документации никакой.
позже заметил по входной линии ФНЧ фильтр
Короче, я решил что это может быть FSK модуляция.........
Хочу написать скетч для демодулирования сигналов, которые наверное сидят на 3х частотах
При вращении сервопривода ничего в анализаторе не происходит....долго ломал голову.
а что вы надеялись там увидеть? Сервы именно так и управляются - прямоугольными импульсами. Скважность импульсов задает положение сервы. Никаких других сигналов там нет, демодулировать нечего.
Почитайте любую популярную статью про сервомоторы
как 3 сервы подключенные к одному проводу будут управляться раздельно????Они вращаются независимо друг от друга.
тем более изменение шим я бы анализатором увидел
Скорее всего они сидят на одном из известных интерфейсов. Каждое устройство имеет свой адрес и т.д.
Проще всего разобрать аппарат и посмотреть начем он собран, особенно в плане ввода-вывода. Далее даташит и вопросы в гугль и сюда :)
Разбирал, ни на одну микру нет документации....но я уже близок к правде. После фильтра установил ограничитель и появились информационные сигналы
А как FSK будеть через фильтр проходить?
Вот с момента ФНЧ всё совпадает, т.е в серве на входе ФНЧ потом сразу на МК, а я после ФНЧ через ограничитель читаю сигнал. (наверное в мк программный ограничитель)
Сигнал сейчас (после ограничителя)
Теперь у меня другой вопрос, как этот пакет данных принимать ардуиной
Теперь у меня другой вопрос, как этот пакет данных принимать ардуиной
Какой уровень сигнала? Если 0-5В то прямо на цифровой порт. А далее стандартно тактуем и считываем фронты. Потом считаем время (оно Вам известно), и выясняем что это было ноль или один. Записываем, сдвигаем и т.д.
да 0-5
А нельзя как нибудь считать сразу по пакетно , т.е 3 пакета?
Похоже так - перед выбором серво у Вас достаточно долго идет ноль, затем единица, и снова долго ноль - это команда готовности. Дальше идет адрес и команда. Как я понимаю адрес - 8 бит, команда - 16.
Может попытаться пойти от противного? Сгенерировать сигнал похожий на картинке. Только для одной сервы. И меняя команду убедиться что логика правильная. Потом уже писать обработчик пакета.
Всмысле сгенерировать и попробовать управлять сервой?
Да. Ведь составить такую последовательность не представляет труда. Можно даже посредством делэй. Для эксперимента пойдёт.
Но микросхема серво ждет то сигнал как я в самом начале присылал, а я сгенерирую уже демодулированный(или как это назвать). Пойймет ли серва что от неё хотят
Для начала сформировать сигнал как на диаграмме. Если серве понравится начать менять что-то. Так можно определить что адрес, а что команда. Там уже можно и с командами разобраться. Посредством сериал можно будет оперативно менять какую-либо команду.
То что есть на первой диаграмме никакими фильтрами не привести ко второму виду.
А на серву то что приходит 0-5?
Как мне преобразовать сигнал вот так. пытался диод ставить, но он поднимает низ, а не отсекает
Компаратор или триггер Шмидта. Проще сделать на компараторе с регулируемыми порогом и гистерезисом. Порог надо сделать 4,25 вольт, гистерезис 0,2-0,4 вольта. Компаратор выбрать из старого компьютерного блока питания. Типа LM393. Он в бп самый распространенный. Используется для формирования сигнала powergood.
Вот так у меня сейчас подключено
В посте #18 это то что на шине? Сервы автомобильные? Или кондей бытовой?
Это то что после диода. Автомобильные. После ФНЧ я просто припаялся на плате сервы.
А вообще по шине что идёт? 0-5 или 0-12? Изначально.
0-5
Чем смотрели? Осциллографом?
Не может так фнч менять сигнал.
ну как сказать...подобием на осциллограф
ФНЧ его не меняет!!! Меняет ограничитель на диоде
Если подключиться не после ФНЧ а до , то ограничитель будет выдавать тоже самое
У вас на бумажке нарисована эпюра напряжений на входе. Все импульсы одинаковой амплитуды и продолжительности. Значит при любом линейном преобразовании импульсы должны остаться одинаковыми друг с другом. У вас не так. Значит скорее всего входные импульсы неодинаковой амплитуды.
Если на входе в серву эпюра из поста # 18, то см #19.
Собственно Вам же все равно хочется УПРАВЛЯТЬ сервами? Так надо сразу делать схему УПРАВЛЕНИЯ ими, и пытаться смоделировать сигнал нужный сервам.
Я запутался, получается там ничего не модулировано, как я думал, а вероятно порог 12В ???.....если это так то я зря ломал голову....проще некуда
У вас на бумажке нарисована эпюра напряжений на входе. Все импульсы одинаковой амплитуды и продолжительности. Значит при любом линейном преобразовании импульсы должны остаться одинаковыми друг с другом. У вас не так. Значит скорее всего входные импульсы неодинаковой амплитуды.
Если на входе в серву эпюра из поста # 18, то см #19.
Данунах - одинаковой амплитуды как в one wire. 8 бит и 16 бит.
Вообще с точностью наоборот, перехватывать команды и управлять самодельными сервами
Вообще с точностью наоборот, перехватывать команды и управлять самодельными сервами
Не надо путаться - похоже кодировка по времени. Почитайте про dallas semicondakter one wire.
хорошо, я пока пытался поймать хоть что-то уже перепробовал и LIN (но потом осенило что скорее всего в машине 2006г его не могли еще применять) и CAN и 1-Wire. буду дальше ковыряться.
Вам все равно придётся СНАЧАЛА научиться управлять теми сервами что есть. Чтобы понимать как формируется сигнал управления. И уж потом писать декодер команд с головного устройства. А уж потом зная команды головы формировать свои команды для СВОИХ сервоприводов.
Да, хорошо. Спасибо за советы. Я в шоке от того что не подумал что там лог уровни другие. Интересно как у меня от 12вольтных импульсов не сгорели порты мк. Буду пробовать позже, если что еще спрошу что нибудь, проветрю голову схожу пока)
СЕРВА только одна и то одолжил для теста, поэтому и хочу свои сервы....стоят дорого
На авторазборе поспрашивай. Удивишься.
я написал что откинул вариант с шиной LIN, а теперь опять подумываю
Похоже?? LIN шина если что этот тот же самый UART, но по одному проводу и поочередно посылки в две стороны
Да, хорошо. Спасибо за советы. Я в шоке от того что не подумал что там лог уровни другие. Интересно как у меня от 12вольтных импульсов не сгорели порты мк. Буду пробовать позже, если что еще спрошу что нибудь, проветрю голову схожу пока)
СЕРВА только одна и то одолжил для теста, поэтому и хочу свои сервы....стоят дорого
Хорошо, что не наоборот. Ардуинка копейки стоит, а вот сервы...
А диаграмма похожа
не думаю что это 1wire скорость передачи не та, у меня длительность импульса 2мc
Короче - идея программы:
1. Ждем нуля и замеряем его время если оно более 0.05с - ждем единицы
2. После единицы если после нее ноль более 0.05с - ждем единицы и читаем 8 бит и 16 бит.
3. возвращаемся на 1.
че то я 12 и 14бит насчитал....
че то я 12 и 14бит насчитал....
(тихо, что бы никто не слышал) я тоже, но так не бывает. Поэтому 8 и 16
(тихо, что бы никто не слышал) я тоже, но так не бывает. Поэтому 8 и 16
Скорее всего, у вас в машине применена амплитудная модуляция, а т.к. логический анализатор все что выше 1,8 Вольт понимает как единицу то на графике не видно разницы. Такие сигналы желательно смотреть осциллографом. Если направление данных только в одну сторону, то самый простой способ реализовать такое это использовать два порта микроконтроллера. С первого порта формируете 3.3 Вольт, или сколько там нужно для логического нуля, через делитель или стабилитрон + токоограничительный резистор. Вторым портом формируете логическую единицу так же через схему согласования. Выходы схемы объединяете в один провод и к серве. Дальше только реализация программы.
Короче - идея программы:
1. Ждем нуля и замеряем его время если оно более 0.05с - ждем единицы
2. После единицы если после нее ноль более 0.05с - ждем единицы и читаем 8 бит и 16 бит.
3. возвращаемся на 1.
не могу разобраться как писать. Вот делаю прерывания
Как дальше ждать единицу, опять замерять и тд...или вообще без прерываний надо?
Скорее всего, у вас в машине применена амплитудная модуляция, а т.к. логический анализатор http://arduino.ru/comment/reply/27820/images/orfo_misgrammed.gif); background-position: left bottom; background-repeat: repeat no-repeat;">все что выше 1,8 Вольт понимает как единицу то на графике не видно разницы. Такие сигналы желательно смотреть осциллографом. Если направление данных только в одну сторону, то самый простой способ реализовать такое это использовать два порта микроконтроллера. С первого порта формируете 3.3 Вольт, или сколько там нужно для логического нуля, через делитель или стабилитрон + токоограничительный резистор. Вторым портом формируете логическую единицу так же через схему согласования. Выходы схемы объединяете в один провод и к серве. Дальше только реализация программы.
как я уже писал, похоже в блоке управления как раз так и сделано, один транзистор формирует 1 делителем напряжения, а второй транзистор 0 тоже делителем . И стоят они параллельно
ВОПРОС зачем??? есть мысли?
Pavel906
Машина Nissan? Можете разобрать блок климат контроля? Хотелось увидеть чем эта шина рулится.
Шевроле Авео t250 . Позже фотки скину , я уже разбирал , даже схемку набросал где управление серво