Помогите демодулировать FSK сигнал!

Pavel906
Offline
Зарегистрирован: 31.01.2018

Прошу помощи в написании скетча. История такая, есть автомобильный блок климат контроля. 3 сервопривода подключены к нему по 1шине. Померил сигнал анализатором китайским....что я увидел так это просто постоянные импульсы
При вращении сервопривода ничего в анализаторе не происходит....долго ломал голову. Разобрал сервопривод, там увидел микросхему, которая в продаже то есть, но вот документации никакой.
позже заметил по входной линии ФНЧ фильтр

Короче, я решил что это может быть FSK модуляция.........
Хочу написать скетч для демодулирования сигналов, которые наверное сидят на 3х частотах

b707
Offline
Зарегистрирован: 26.05.2017

Pavel906 пишет:

При вращении сервопривода ничего в анализаторе не происходит....долго ломал голову.

а что вы надеялись там увидеть? Сервы именно так и управляются - прямоугольными импульсами. Скважность импульсов задает положение сервы. Никаких других сигналов там нет, демодулировать нечего.

Почитайте любую популярную статью про сервомоторы

Pavel906
Offline
Зарегистрирован: 31.01.2018

как 3  сервы подключенные к одному проводу будут управляться раздельно????Они вращаются независимо друг от друга.
тем более изменение шим я бы анализатором увидел

mykaida
mykaida аватар
Offline
Зарегистрирован: 12.07.2018

Скорее всего они сидят на одном из известных интерфейсов. Каждое устройство имеет свой адрес и т.д.

Проще всего разобрать аппарат и посмотреть начем он собран, особенно в плане ввода-вывода. Далее даташит и вопросы в гугль и сюда :)

Pavel906
Offline
Зарегистрирован: 31.01.2018

Разбирал, ни на одну микру нет документации....но я уже близок к правде. После фильтра установил ограничитель и появились информационные сигналы

a5021
Offline
Зарегистрирован: 07.07.2013

А как FSK будеть через фильтр проходить?

Pavel906
Offline
Зарегистрирован: 31.01.2018

Вот с момента ФНЧ всё совпадает, т.е в серве на входе ФНЧ потом сразу на МК, а я после ФНЧ через ограничитель читаю сигнал. (наверное в мк программный ограничитель)

Pavel906
Offline
Зарегистрирован: 31.01.2018

Сигнал сейчас (после ограничителя)

Pavel906
Offline
Зарегистрирован: 31.01.2018

Теперь у меня другой вопрос, как этот пакет данных принимать ардуиной

mykaida
mykaida аватар
Offline
Зарегистрирован: 12.07.2018

Pavel906 пишет:

Теперь у меня другой вопрос, как этот пакет данных принимать ардуиной

Какой уровень сигнала? Если 0-5В то прямо на цифровой порт. А далее стандартно тактуем и считываем фронты. Потом считаем время (оно  Вам известно), и выясняем что это было ноль или один. Записываем, сдвигаем и т.д.

Pavel906
Offline
Зарегистрирован: 31.01.2018

да 0-5

Pavel906
Offline
Зарегистрирован: 31.01.2018

А нельзя как нибудь считать сразу по пакетно , т.е 3 пакета?

mykaida
mykaida аватар
Offline
Зарегистрирован: 12.07.2018

Похоже так - перед выбором серво у Вас достаточно долго идет ноль, затем единица, и снова долго ноль - это команда готовности. Дальше идет адрес и команда. Как я понимаю адрес - 8 бит, команда - 16.

VasiliyV
Offline
Зарегистрирован: 09.07.2018

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

Pavel906
Offline
Зарегистрирован: 31.01.2018

Всмысле сгенерировать и попробовать управлять сервой?

VasiliyV
Offline
Зарегистрирован: 09.07.2018

Да. Ведь составить такую последовательность не представляет труда. Можно даже посредством делэй. Для эксперимента пойдёт.

Pavel906
Offline
Зарегистрирован: 31.01.2018

Но микросхема серво ждет то сигнал как я в самом начале присылал, а я сгенерирую уже демодулированный(или как это назвать). Пойймет ли серва что от неё хотят

VasiliyV
Offline
Зарегистрирован: 09.07.2018

Для начала сформировать сигнал как на диаграмме. Если серве понравится начать менять что-то. Так можно определить что адрес, а что команда. Там уже можно и с командами разобраться. Посредством сериал можно будет оперативно менять какую-либо команду.

То что есть на первой диаграмме никакими фильтрами не привести ко второму виду.

А на серву то что приходит 0-5?

Pavel906
Offline
Зарегистрирован: 31.01.2018

Как мне преобразовать сигнал вот так. пытался диод ставить, но он поднимает низ, а не отсекает

VasiliyV
Offline
Зарегистрирован: 09.07.2018

Компаратор или триггер Шмидта. Проще сделать на компараторе с регулируемыми порогом и гистерезисом. Порог надо сделать 4,25 вольт, гистерезис 0,2-0,4 вольта. Компаратор выбрать из старого компьютерного блока питания. Типа LM393. Он в бп самый распространенный. Используется для формирования сигнала powergood.

Pavel906
Offline
Зарегистрирован: 31.01.2018

Вот так у меня сейчас подключено

VasiliyV
Offline
Зарегистрирован: 09.07.2018

В посте #18 это то что на шине? Сервы автомобильные? Или кондей бытовой?

Pavel906
Offline
Зарегистрирован: 31.01.2018

Это то что после диода. Автомобильные. После ФНЧ я просто припаялся на плате сервы.

VasiliyV
Offline
Зарегистрирован: 09.07.2018

А вообще по шине что идёт? 0-5 или 0-12? Изначально.

Pavel906
Offline
Зарегистрирован: 31.01.2018

0-5

VasiliyV
Offline
Зарегистрирован: 09.07.2018

Чем смотрели? Осциллографом?

Не может так фнч менять сигнал.

Pavel906
Offline
Зарегистрирован: 31.01.2018

ну как сказать...подобием на осциллограф

Pavel906
Offline
Зарегистрирован: 31.01.2018

ФНЧ его не меняет!!! Меняет ограничитель на диоде

Pavel906
Offline
Зарегистрирован: 31.01.2018

Если подключиться не после ФНЧ а до , то ограничитель будет выдавать тоже самое

VasiliyV
Offline
Зарегистрирован: 09.07.2018

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

Если на входе в серву эпюра из поста # 18, то см #19.

VasiliyV
Offline
Зарегистрирован: 09.07.2018

Собственно Вам же все равно хочется УПРАВЛЯТЬ сервами? Так надо сразу делать схему УПРАВЛЕНИЯ ими, и пытаться смоделировать сигнал нужный сервам.

Pavel906
Offline
Зарегистрирован: 31.01.2018

Я запутался, получается там ничего не модулировано, как я думал, а вероятно порог 12В ???.....если это так то я зря ломал голову....проще некуда

mykaida
mykaida аватар
Offline
Зарегистрирован: 12.07.2018

VasiliyV пишет:

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

Если на входе в серву эпюра из поста # 18, то см #19.

Данунах - одинаковой амплитуды как в one wire. 8 бит и 16 бит.

Pavel906
Offline
Зарегистрирован: 31.01.2018

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

mykaida
mykaida аватар
Offline
Зарегистрирован: 12.07.2018

Pavel906 пишет:

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

Не надо путаться - похоже кодировка по времени. Почитайте про dallas semicondakter one wire.

Pavel906
Offline
Зарегистрирован: 31.01.2018

хорошо, я пока пытался поймать хоть что-то уже перепробовал и LIN (но потом осенило что скорее всего в машине 2006г его не могли еще применять) и CAN и 1-Wire. буду дальше ковыряться.

VasiliyV
Offline
Зарегистрирован: 09.07.2018

Вам все равно придётся СНАЧАЛА научиться управлять теми сервами что есть. Чтобы понимать как формируется сигнал управления. И уж потом писать декодер команд с головного устройства. А уж потом зная команды головы формировать свои команды для СВОИХ сервоприводов.

Pavel906
Offline
Зарегистрирован: 31.01.2018

Да, хорошо. Спасибо за советы. Я в шоке от того что не подумал что там лог уровни другие. Интересно как у меня от 12вольтных импульсов не сгорели порты мк. Буду пробовать позже, если что еще спрошу что нибудь, проветрю голову схожу пока)
СЕРВА только одна и то одолжил для теста, поэтому и хочу свои сервы....стоят дорого

VasiliyV
Offline
Зарегистрирован: 09.07.2018

На авторазборе поспрашивай. Удивишься.

Pavel906
Offline
Зарегистрирован: 31.01.2018

я написал что откинул вариант с шиной LIN, а теперь опять подумываю
Похоже?? LIN шина если что этот тот же самый UART, но по одному проводу и поочередно посылки в две стороны

mykaida
mykaida аватар
Offline
Зарегистрирован: 12.07.2018

Pavel906 пишет:

Да, хорошо. Спасибо за советы. Я в шоке от того что не подумал что там лог уровни другие. Интересно как у меня от 12вольтных импульсов не сгорели порты мк. Буду пробовать позже, если что еще спрошу что нибудь, проветрю голову схожу пока)
СЕРВА только одна и то одолжил для теста, поэтому и хочу свои сервы....стоят дорого

Хорошо, что не наоборот. Ардуинка копейки стоит, а вот сервы...

А диаграмма похожа

Pavel906
Offline
Зарегистрирован: 31.01.2018

не думаю что это 1wire скорость передачи не та, у меня длительность импульса 2мc

mykaida
mykaida аватар
Offline
Зарегистрирован: 12.07.2018

Короче - идея программы:

1. Ждем нуля и замеряем его время если оно более 0.05с - ждем единицы

2. После единицы если после нее ноль более 0.05с - ждем единицы и читаем 8 бит и 16 бит.

3. возвращаемся на 1.

Pavel906
Offline
Зарегистрирован: 31.01.2018

че то я 12 и 14бит насчитал....

mykaida
mykaida аватар
Offline
Зарегистрирован: 12.07.2018

Pavel906 пишет:

че то я 12 и 14бит насчитал....

(тихо, что бы никто не слышал) я тоже, но так не бывает. Поэтому 8 и 16

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

mykaida пишет:

(тихо, что бы никто не слышал) я тоже, но так не бывает. Поэтому 8 и 16

Коррупция, опять кто-то что-то попилил и биты в овшор спрятал :))  Так по битику и биткоинт наберется.

Efim
Offline
Зарегистрирован: 04.05.2018

Скорее всего, у вас в машине применена амплитудная модуляция, а т.к. логический анализатор все что выше 1,8 Вольт понимает как единицу то на графике не видно разницы. Такие сигналы желательно смотреть осциллографом. Если направление данных только в одну сторону, то самый простой способ реализовать такое это использовать два порта микроконтроллера. С первого порта формируете 3.3 Вольт, или сколько там нужно для логического нуля, через делитель или стабилитрон + токоограничительный резистор. Вторым портом формируете логическую единицу так же через схему согласования. Выходы схемы объединяете в один провод и к серве. Дальше только реализация программы.

Pavel906
Offline
Зарегистрирован: 31.01.2018

mykaida пишет:

Короче - идея программы:

1. Ждем нуля и замеряем его время если оно более 0.05с - ждем единицы

2. После единицы если после нее ноль более 0.05с - ждем единицы и читаем 8 бит и 16 бит.

3. возвращаемся на 1.

 

 

не могу разобраться как писать. Вот делаю прерывания 

void rising() {
// Привязываю к Pin2 прерывание по срезу сигнала
attachInterrupt(0, falling, FALLING);
//сохраняю значение времени начала импульса
start_time = micros();

void falling() {
// Привязываю к Pin2 прерывание по фронту сигнала
attachInterrupt(0, rising, RISING);
//сохраняю значение длительности импульса
length = micros() - start_time;
//Serial.println(length);

Как дальше ждать единицу, опять замерять и тд...или вообще без прерываний надо?

Pavel906
Offline
Зарегистрирован: 31.01.2018

Efim пишет:

Скорее всего, у вас в машине применена амплитудная модуляция, а т.к. логический анализатор 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 тоже делителем . И стоят они параллельно

ВОПРОС зачем??? есть мысли?

Efim
Offline
Зарегистрирован: 04.05.2018

 Pavel906

Машина Nissan? Можете разобрать блок климат контроля? Хотелось увидеть чем эта шина рулится.

Pavel906
Offline
Зарегистрирован: 31.01.2018

Шевроле Авео t250 . Позже фотки скину , я уже разбирал , даже схемку набросал где  управление серво