Дисплеи, датчики и прочие функциональные узлы, управляемые МК.
Ответить

Интерфейс и Протокол обмена данными между МК (Какой?)

Пн окт 03, 2016 10:11:15

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

Эти МК все висят на одной линии. И мало того, могут отваливаться в любой момент, как впрочем и появляться. Вот и надо, чтобы между ними диалог шел (между мастером и слейвами). Увидел мастер слейва очередного - дал команду, а остальные промолчали, т.к. свои команды они уже выполняют.

И еще... Думаю как организовать связь и питание одновременно. Хочу что-то типа зарядки для телефона беспроводной, но "телефонов" (МК) много к ней прикладывается. От нее же и работают, и с ней же данными обмениваются.
Вот и думаю, если подобные трансформаторы работают уже на высокой частоте, как еще по нему же туда-обратно данные можно перегонять?

Есть какие предложения?

Вот типа такого, только еще МК добавить.

Re: Интерфейс и Протокол обмена данными между МК (Какой?)

Пн окт 03, 2016 10:23:50

данные перегонять можно путем изменения скважности (фазы) питающих импульсов. так же можно модулировать амплитуду.

что касается протокола, то ваш случай очень сильно напоминает 1-wire, по его образу и подобию и поступать

Re: Интерфейс и Протокол обмена данными между МК (Какой?)

Пн окт 03, 2016 10:30:49

Как вариант:
RS485 + MODBUS. Подключение по витой паре. Одна пара для общения, три пары - питание.
Была одна работа. Именно так и сделал.
В здании два крыла по 150м (по проводам), Master - по середине.
Питание +24V, в каждом Slave-е свой Step-Down на MCP16301.
----
P.S.
На мой взгляд, делать по типу 1-Wire - не самый лучший вариант.

Re: Интерфейс и Протокол обмена данными между МК (Какой?)

Пн окт 03, 2016 10:36:31

Благодарю, Роман. Пошел повторять 1-Wire, писал под него библиотеку на ассемблере, но давненько и уже подзабыл. Зато термометр с DS18B20 уже года два работает.

Albert_V, а вот RS485 + MODBUS хреново представляю... Но там подразумеваю, что у RS-485 шины две А и В, по которым идут зеркальные сигналы для избавления от помех. У меня же связь не по проводам. и Интерфейс действительно, однопроводный... Да еще и по нему же питание идет... И питание не постоянка... :) :) :)

Re: Интерфейс и Протокол обмена данными между МК (Какой?)

Пн окт 03, 2016 10:45:06

Тогда посмотрите в сторону ST7540.
Не обязательно использовать именно эту микросхему, но идею перенять можно.
----
P.S.
Посмотрите тему Передача данных через электросеть.
Возможно, будет интересно.

Re: Интерфейс и Протокол обмена данными между МК (Какой?)

Пн окт 03, 2016 11:14:42

Это полудуплексные трансиверы (модемы) для создания сети через питающую сеть?
Какая намудренная штука. ))

Пока же все равно думаю, как проще модулировать сигнал по амплитуде или скважности. (Скорее второе). Но это может повлиять на качество передачи питания, т.к. такие источники питания (без сердечников) привередливые. Один собирал, транзистор грелся жутко, и настраивать надо было довольно точно, чтобы максимальный ток забрать.
У меня же по подсчетам тока будет жрать все МК на нем где-то около 2 Ампер... А это капец как много. (((((((( А как отследить изменение амплитуды на приемной стороне не знаю.


Есть еще один момент. Сам передатчик большой. И у него основное питание. Он и излучает питание. А слейвы все от него зависят. Т.е. там маленькая обмотка и он не мощный. Как он будет передавать в ответку, если своего источника не имеет?! Только максимум конденсатор. С учетом того, что у него нагрузка максимальная кроме МК - это один яркий светодиод.

И смысл примерно такой:
1. Положил я слейв на базу. Он начал получать питание. Запустился его МК и передал в "эфир" свой адрес (где зашифровано, кто он).
2. В этот момент база, которая обеспечивает питание еще нескольким таким слейвам одновременно, считала адрес нового появившегося.
3. База сформировала сигнал (команду) для нового слейва и отправила его.
4. Тот выполнил и отчитался, что все успешно.

Прошло какое-то время. Слейвы лежат на базе и выполняют то, что им было сказано изначально. Но тут пользователь тыкает кнопку на базе... И все слейвы приняли другую команду и выполнили ее и отчитались. Теоретически все это можно сделать не единовременно, а по порядку адресов слейвов. т.е. База вызывает первый слейв и он отвечает. Дает ему новую команду, от подтверждает. Затем база вызывает второй слейв....

:)))
Бляха! Точно 1-Ваер! ))))))))

Re: Интерфейс и Протокол обмена данными между МК (Какой?)

Пн окт 03, 2016 11:25:31

Есть одна "подлянка", которая называется "Электромагнитная совместимость".
Прикиньте спектр и мощность излучения вашей системы.
Если в вашем районе есть КВ-шники - ждите "гостей". :)

Re: Интерфейс и Протокол обмена данными между МК (Какой?)

Пн окт 03, 2016 11:29:24

Та, мощность то не большая будет... )))) Хотя... для 2 Ампер... :facepalm:
Не знаю, как там по гармоникам, но частота трансформатора подобного настраивается на килогерцы, как подобные импульсные БП. Не думаю, что они будут сильно фонить.
Радиус передачи необходимой для питания энергии очень маленький. Витков довольно много. Частота не большая.

Меня больше заморачивает тот вопрос, как сделать посылку от слейва к базе, если база большая, а слейв маленький...

Re: Интерфейс и Протокол обмена данными между МК (Какой?)

Пн окт 03, 2016 11:34:23

Может быть, имеет смысл радиоканал сделать на, к примеру, SI4432?
Там есть возможность адресовать посылки к группе или к конкретному приёмнику.
Она "автоматом" может выдать ACK при совпадении адреса...

Re: Интерфейс и Протокол обмена данными между МК (Какой?)

Пн окт 03, 2016 11:34:54

1 - Никаких модуляций по амплитуде. Амплтуда вещь не постоянная)) Теоретически можно с помощью АЦП измерить амлитуду... и по изменению амплитуды (относительно среднего уровня) передавать биты...

Ну его нафиг)))

2 - Причём тут 1-Ваер... ? http://avr.ru/beginer/understand/1wire

Цитата: "Сигнал "Чтение". Ведущий устанавливает низкий уровень в течение 1…15 мкс. После этого подчинённый, если хочет передать 0, удерживает шину в низком состоянии до 60 мкс; если же подчинённых хочет передать 1, то он просто освобождает линию."

Интересно... и как слейв будет удерживать линию при беспроводной передачи ? ))) Хотя теоретически возможно... Если на каждом слейве свой генератор ВЧ и генератор мастера и слейва точно синхронизированы... с точностью до фазы.

Ну его нафиг)))

3 - Помоему для беспроводной передачи лучше использовать протоколы радиомодулей.

Мастер включает генератор (мендр) 1010101010... идёт передача ВЧ энергии и одновременно синхронизация всех приёмников слейвов. И одновременно этот же меанд является преамбулой как в радиомодуле.

Если мастер хочет передать слейву, то после преамбулы передаёт адрес слейва и команду (или данные):
1010101010101010110011001001011001001100101010... адрес, данные.

Короче, обычный радиомодуль)) :roll:

Re: Интерфейс и Протокол обмена данными между МК (Какой?)

Пн окт 03, 2016 11:39:05

Ну, ARV про это примерно и сказал. Не полный 1-Ваер. А его логика взаимодействия с кучей подчиненных по одному проводу (как и по одной волне).

Вы изложили сам принцип. Что мне тоже очень интересно! :) :beer: Спасибо вам, умные люди, что помогаете и толкаете на мысли умные.


Как я додумался пока, работать будет примерно так:

1. База стоит и дает синхронизацию модулям, и одновременно на другой частоте слушает линию на появление новых модулей.
2. Появился модуль и получил питание, прошла инициализация его МК и синхронизация с базой. Он начинает выдавать свой адрес.
3. После чего модуль переходит в ожидание ответа от базы.
4. Если база считала адрес, то проверяет его в таблице (заранее занесенных адресов), и если он совпадает, то отправляет ВСЕМ модулям, которые сейчас есть этот же адрес последнего устройства.
5. Все модули стояли и ждали этой команды по умолчанию.
6. Но те модули, у кого адрес не совпал, отвалились.
7. А новый модуль с одинаковым адресом отвечает базе ОК и принимает от нее команду на инициализацию, после чего переходит в рабочий режим.
8. Если База не смогла прочитать новый адрес из-за помехи, либо адрес не попал в таблицу, то продолжает молчать (игнорит) и слушает линию дальше.
9. Модуль, который новый - не получил команду на инициализацию и работу, думает, что база его не увидела и через интервал времени опять передает свой адрес.

Общей команды для модулей нет. Все работает в режиме полудуплексного диалога. Отправили команду, получили ответ. и т.д. От всех Слейвов всегда приходит подтверждение на любую команду базы. Если подтвреждения нет, то команда не понята и повторяется вновь с самого начала (адреса слейва).
Так по очереди база опрашивает все Модули и дает новые команды.
А одновременно, при опросе проверяет, существует ли еще все адреса, или некоторые выбыли. Если выбыли , то вычеркивает его из своей временной таблицы, чтобы не опрашивать больше и не тратить время на него.

Один момент. Как быстро все это может работать на 30 устройствах-слейвах? Будет ли глазу заметны тормоза от такого долгого временного опроса каждого модуля?

Вот примерно такая бодяга.

P/S/ другой вопрос теперь примерно... Как сделать примнико-передатчик...
И что делать, если одновременно брошу на базу два-три утсройства (модуля), которые одновременно (почти) начнут сувать свои адреса?

Re: Интерфейс и Протокол обмена данными между МК (Какой?)

Пн окт 03, 2016 13:00:49

СКАЗОЧНИК писал(а):И что делать, если одновременно брошу на базу два-три утсройства (модуля), которые одновременно (почти) начнут сувать свои адреса?
Может Вам поглядеть в сторону CAN. Я им ни разу не пользовался, как-то читал для "повышения образованности". Понравилась идея разруливания коллизий на шине. Главное не должно быть устройств на шине с одинаковыми идентификаторами.

Re: Интерфейс и Протокол обмена данными между МК (Какой?)

Пн окт 03, 2016 13:37:30

СКАЗОЧНИК писал(а):Как сделать примнико-передатчик...
И что делать, если одновременно брошу на базу два-три утсройства (модуля), которые одновременно (почти) начнут сувать свои адреса?
Ох, и лютый же головняк вы себе задумали...

когда-то очень давно я что-то подобное пытался изобрести, продумывал алгоритм и протокол... почитайте в прилагаемом файле, только не смейтесь :oops:
Вложения
smart_home[1].pdf
(378.78 KiB) Скачиваний: 336

Re: Интерфейс и Протокол обмена данными между МК (Какой?)

Пн окт 03, 2016 13:39:04

ARV писал(а):Ох, и лютый же головняк вы себе задумали...


И не говорите! Но это для саморазвития. И для экспериментов. )))) Вдруг получится. Тогда интересненькое устройство реализую. А если не получится, то и хрен с ним, хотя... жаль конечно.

Re: Интерфейс и Протокол обмена данными между МК (Какой?)

Пн окт 03, 2016 14:57:15

СКАЗОЧНИК писал(а):Хочу что-то типа зарядки для телефона беспроводной, но "телефонов" (МК) много к ней прикладывается. От нее же и работают, и с ней же данными обмениваются. Вот и думаю, если подобные трансформаторы работают уже на высокой частоте, как еще по нему же туда-обратно данные можно перегонять?

СКАЗОЧНИК писал(а):Как быстро все это может работать на 30 устройствах-слейвах?

30 устройств в одном месте? Это типа коврика из под мышки... точнее размером с большой ковёр в комнате)))

А размер "трансформатора" для питания 30 устройств одновременно? )))
СКАЗОЧНИК писал(а):И что делать, если одновременно брошу на базу два-три утсройства (модуля), которые одновременно (почти) начнут сувать свои адреса?

Ну есть стандартные алгоритмы... например алгоритм работы локальной сети "шина". Это не большая проблема...
СКАЗОЧНИК писал(а):1. База стоит и дает синхронизацию модулям, и одновременно на другой частоте слушает линию на появление новых модулей.

Слушать на другой частоте? Две частоты... это полный геморрой)) Не советую...
СКАЗОЧНИК писал(а):2. Появился модуль и получил питание, прошла инициализация его МК и синхронизация с базой. Он начинает выдавать свой адрес.
3. После чего модуль переходит в ожидание ответа от базы.

Стандартный алгоритм... лучше оптимизировать скорость: передача адреса слейва и приём подтверждения инициализации - в одно действие)) Дуплекс...
СКАЗОЧНИК писал(а):4. Если база считала адрес, то проверяет его в таблице (заранее занесенных адресов), и если он совпадает, то отправляет ВСЕМ модулям, которые сейчас есть этот же адрес последнего устройства.
5. Все модули стояли и ждали этой команды по умолчанию.

Вообщето все слейвы могул сами записать адрес нового слейва.. без участия базы. И при необходимости проверить в своих таблицах - является ли адрес нового слейва разрешённым. Так будет быстрей))
СКАЗОЧНИК писал(а):6. Но те модули, у кого адрес не совпал, отвалились.

Зачем ? ))
СКАЗОЧНИК писал(а):7. А новый модуль с одинаковым адресом отвечает базе ОК и принимает от нее команду на инициализацию, после чего переходит в рабочий режим.

Зачем?)) База и все слейвы уже записали адрес нового слейва в свои таблицы...
СКАЗОЧНИК писал(а):8. Если База не смогла прочитать новый адрес из-за помехи, либо адрес не попал в таблицу, то продолжает молчать (игнорит) и слушает линию дальше.
9. Модуль, который новый - не получил команду на инициализацию и работу, думает, что база его не увидела и через интервал времени опять передает свой адрес.

Стандартный алгоритм инициализации нового устройства в сети))

Вся сложность в конструкции устройства...
-Размеры, частота (от частоты так жа зависит скорость обмена),
-Мощность устройств (потянет ли трансформатор 30 устройств ? )))
...
...
:roll:

Re: Интерфейс и Протокол обмена данными между МК (Какой?)

Пн окт 03, 2016 15:10:27

:)
roman.com писал(а):А размер "трансформатора" для питания 30 устройств одновременно? )))

Да. Размер "трансформатора" базы примерно 40х40 см. квадрат. плюс-минус чуток. Вот такая пластинка, куда можно класть модули.
Модули маленькие, примерно 3х3 см, ну или 4х4 см. В них... ну пусть будет вторичка трансформатора, МК и светодиод, пусть двухцветный.
Потребляет один модуль примерно 20-30 мА. Может и меньше.

roman.com писал(а): Две частоты... это полный геморрой)) Не советую...

А как слушать то же самое, по чему передаешь синхронизацию?

roman.com писал(а):лучше оптимизировать скорость: передача адреса слейва и приём подтверждения инициализации - в одно действие)) Дуплекс...

Как это? :roll:

roman.com писал(а):Вообщето все слейвы могул сами записать адрес нового слейва.. без участия базы.

Неа. У слейвов нет необходимости общаться между собой. Они каждый сам по себе. Это у Базы есть таблица адресов, в которой прописаны ее "родные" устройства, которым она может что-то сказать. А другие игнорит.
Сам по себе слейв не новый... ) Он новый, когда добавляется на платформу базы, пока его не определят и не назначат выполнять задание какое-либо. Чем занимается сама База.

roman.com писал(а):Вся сложность в конструкции устройства...
-Размеры, частота (от частоты так жа зависит скорость обмена),
-Мощность устройств (потянет ли трансформатор 30 устройств ? )))
...
...


Вроде все указал. Да, частота трансформатора думаю, где-то в 40-50 кГц... :) А вот частота передатчика-приемника не знаю... Вот и кубатурю, как реализовать.

Да, и пусть база передает команду на то, когда какой светодиод включить. А сами модули исполняют команды, включают светодиоды. Ну, может еще ШИМом ими управляют.

Re: Интерфейс и Протокол обмена данными между МК (Какой?)

Пн окт 03, 2016 17:22:42

Я не понял... что мы вообще делаем? ))) Просто 30 штук МК со светодиодами, которые перемигиваются (питание от конденсаторов) или зарядка аккумуляторов?

Самое простое: мастер в цикле опрашивает все слейвы и смотрит кто в сети. Короче Сетевая топология «звезда». ))

....мастер >> слейв 1....слейв 1 >> мастер....
....мастер >> слейв 2....нет....
....мастер >> слейв 3....слейв 3 >> мастер....
....
....мастер >> слейв 30....слейв 30 >> мастер....

Табличка:
-1
-нет
-3
...
-30.

Всё))

Можно напридумывать кучу протоколов и алгоритмов для оптимизации, повышения скорости... но всё это приведёт к усложнению...

И не забываем, что для передачи достаточного количества энергии, мастер должен большую часть времени передавать, а слейвы слушать. Поэтому думаю это оптимально.
:roll:

СКАЗОЧНИК писал(а):А как слушать то же самое, по чему передаешь синхронизацию?

Мастер и все слейвы имеют приёмопередатчик... простой генератор ВЧ и детектор, на одной катушке. Все генераторы ВЧ работают на одной частоте.

Вопрос в детекторе. Это может быть:

1-выпрямитель. Простая АМ модуляция. Скорость передачи будет маленькая...
2-без выпрямителя. Импульсы 40-50 кГц поступают на вход МК.

Если частота 40-50 кГц... и зная длину пакетов, то не трудно посчитать время обновления таблички мастера))

Осталось посчитать мощность ВЧ генератора мастера: ))
-40х40 см. квадрат/пластинка, куда можно класть модули.
-Модули 3х3 см
-Потребляет один модуль 20-30 мА.

Мощность генератора слейва можно сделать намного меньше чем у мастера, т.к. слейву не требуется передавать энергию мастеру..))

Re: Интерфейс и Протокол обмена данными между МК (Какой?)

Вт окт 04, 2016 06:19:22

Albert_V писал(а):Как вариант:
RS485 + MODBUS. Подключение по витой паре...

+100, тоже делал подобным образом, использовал эту публикацию:
https://geektimes.ru/post/259336/
Тут всё железо доступное. И провода, и коннекторы - коробочки, в общем тема понравилась, ну а за протокол уже сам думал. Все датчики имеют МК с аппаратным USART, подключение к сети через ADM485. MODBUS-slave написан на Си, в реализации получился достаточно простым. Мастером пока был PC + простейший переходник USB-RS485 купленный на ebay за 30 рублей, может дойдут руки написать master-a для центрального контроллера на МК пожирнее. Тоже тогда посчитал, что все заморочки с 1Wire, или иными решениями с паразитным питанием/PLC-модемом, того не стоят. Радиоканал - хорошо, но датчики всё-равно запитывать нужно, в общем как-то так у меня получилось. Интерес не только академический был, а больше практический, а здесь и задача не очень ясна. :)

Re: Интерфейс и Протокол обмена данными между МК (Какой?)

Вт окт 04, 2016 08:21:37

Есть ли вообще смысл увязывать передачу данных и зарядку ? Что мешает заряжать на удобной для этого частоте, а обмен данными вести на другой какими нибудь стандартными средствами ? "Беспроводная передача энергии" - это в любом случае довольно низкий КПД, так что аргумент "так будет больше жрать" тут как то не очень катит.

Re: Интерфейс и Протокол обмена данными между МК (Какой?)

Вт окт 04, 2016 09:03:22

Morroc писал(а):так что аргумент "так будет больше жрать" тут как то не очень катит.


А я на это сильно и не заморачиваюсь... ) Пусть даже жрет 1 - 1.5 Ампера при эффективном отдаваемом токе в 0.5-0.8 Ампера. Хотя, может даже это сильно оптимистично. )
И про то, что питать можно на другой частоте и предавать тоже - думал.
Только усложнять сами слейвы не хочется сильно. А то, сейчас пойдет типа блютуса в каждый... Почему и подумал, что силами самого источника питания организовать коммуникацию.

shindax писал(а):Интерес не только академический был, а больше практический, а здесь и задача не очень ясна.

У меня пока интерес на уровне сбора информации. Т.к. если это не реально сделать, то зачем заморачиваться. Обсудили и все. ))))

А задача простая.
1. Поле-зарядка, оно же база. Размером примерно 40х40 см. В нем главный управляющий МК стоит.
2. Слейвы-модули, которые можно на это поле положить, размером примерно 3х3х3 см. Они без батареек. Питаются прямо от этого поля. В них всего пара светодиодов и один МК мелкий. Вся их суть - включать/выключать светодиоды, когда им скажет поле-база. Больше к ним ничего не подключается.
3. Поле-база-зарядка одна. А модулей-слейвов может быть штук 30, причем одновременно. Но каждый должен исполнять свою функцию на отображении светодиодами.
4. Всё.

Самая большая задача - это организовать связь между полем и модулем.


З.Ы. Вот здесь же можно сделать так, чтобы лампочки светились. Значит можно сделать, чтобы и МК работали.

Ответить