|
Какой интерфейс выбрать: SPI, TWI, UART?, Для соединения трех устройств |
|
|
|
Dec 2 2010, 11:54
|
Участник

Группа: Участник
Сообщений: 37
Регистрация: 13-11-10
Пользователь №: 60 871

|
Ситуация такая.
Есть три устройства, расположены на расстоянии 3-х метров друг от друга, одно master, два slave. Все три на ATMega446. Необходимо периодически обмениваться данными между мастером и слейвами. Размер пакета - 10 байт, скорость обмена - около 30 пакетов в секунду. Смотрел в сторону TWI- вроде бы он идеально подходит для моей задачи.
Проблема только одна - питания всех трех устройств гальванически развязаны друг от друга. А TWI вроде бы работает только в том случае, когда питание у всех МК общее.
Подскажите, как лучше решить эту проблему?
|
|
|
|
|
Dec 2 2010, 12:22
|
Участник

Группа: Участник
Сообщений: 37
Регистрация: 13-11-10
Пользователь №: 60 871

|
MALLOY2, я правильно Вас понял, что вместо вот такого (из даташита):
можно использовать вот такое:
При этом Vcc1, Vcc2, Vcc3 - это всё местные питания, друг с другом не связанные. И ещё соединить землю питаний всех трех устройств вместе. Я правильно понял?
Сообщение отредактировал Mastakkos - Dec 2 2010, 12:24
Эскизы прикрепленных изображений
|
|
|
|
|
Dec 2 2010, 12:48
|
Гуру
     
Группа: Свой
Сообщений: 5 273
Регистрация: 30-03-10
Пользователь №: 56 295

|
Цитата(Mastakkos @ Dec 2 2010, 15:54)  Проблема только одна - питания всех трех устройств гальванически развязаны друг от друга. А TWI вроде бы работает только в том случае, когда питание у всех МК общее. Если питания развязаны, то развязаны и земли, и сигнальные линии. Иначе какой в этой развязке смысл ? А если земли у всех общие, то это и не развязка, и незачем тогда развязывать питания. Что-то я вопроса не понял. И вообще, зачем развязка, если между устройствами три метра ? Они что, от разных подстанций питаются ? Уточнили бы задачу, а то не совсем понятно, что, от чего и как питается. А так, первое, что приходит на ум - в мастере сделать два УАРТА, программных или аппаратных, и соединить их со слэйвами с помощью той же опторазвязанной токовой петли (Current Loop). Тогда действительно можно отвязать все и от всего, и расположить слэйвы хоть за 500м от мастера ... Примеры развязок (CL): http://www.kron.com.ua/conv/docs/T232-CL20%20S%20V4.pdf
Сообщение отредактировал kovigor - Dec 2 2010, 12:53
|
|
|
|
|
Dec 2 2010, 13:07
|
Знающий
   
Группа: Validating
Сообщений: 838
Регистрация: 31-01-05
Пользователь №: 2 317

|
Цитата MALLOY2, я правильно Вас понял, что вместо вот такого (из даташита): Да, только если напряжения питания одинаковые, иначе нужно будет согласовывать. Цитата Не обязательно, можно соединить tx мастера с rxами слэйвов, а txы слэйвов через диоды (оптопары с ОК) на rx мастера, говорить одновременно и мешать друг другу они не будут. и UART тут развязывать проще, линии однонаправленные. Не находите что вы стоите ту же физику что и I2C ??? зачем тратитьь деньги на то что уже в монтировано в камень ???, а если обмен будет асинхронным ? как вы будите колизии разруливать ? а адресация, зачем писать лишний код ? Еще раз повторю для тех кто в бронепоезде UART это точка точка, если хотите UART много UARTов это уже RS-422 или RS-485, но тут может получится что затраты на драйвера будут лишними.
|
|
|
|
|
Dec 2 2010, 13:53
|
Гуру
     
Группа: Свой
Сообщений: 2 563
Регистрация: 8-04-05
Из: Nsk
Пользователь №: 3 954

|
Цитата(MALLOY2 @ Dec 2 2010, 20:07)  Не находите что вы стоите ту же физику что и I2C ??? зачем тратитьь деньги на то что уже в монтировано в камень ???, а если обмен будет асинхронным ? как вы будите колизии разруливать ? а адресация, зачем писать лишний код ? Не нахожу, разница в однонаправленности линий. для развязки i2c потребуются специализированные микросхемы которые будут определять с какой стороны кто в данный момент шину тянет, либо вот так, вместо просто одной оптопары. Слова про мастера и слэйвов в исходном посте и i2c как один из вариантов как бы намекают на отсутствие асинхронности. и во всех остальных случаях разве адресация не нужна? Цитата(MALLOY2 @ Dec 2 2010, 20:07)  Еще раз повторю для тех кто в бронепоезде UART это точка точка, если хотите UART много UARTов это уже RS-422 или RS-485, но тут может получится что затраты на драйвера будут лишними. UART это никакая не "точка-точка", а всего лишь способ синхронизации для передачи данных по одной линии без клоков, а вот уж как будет сделан физический уровень 232, 422 (который, кстати, точка-точка в основном), 485 или просто выходы OK оптопар в качестве драйвера линии - это совсем другой вопрос.
|
|
|
|
|
Dec 2 2010, 22:32
|
Участник

Группа: Участник
Сообщений: 37
Регистрация: 13-11-10
Пользователь №: 60 871

|
MALLOY2, да, напряжения питания одинаковые, просто разные источники питания. Объединить их нельзя. Спасибо за совет!
_pv, Вы идете против бритвы Оккама ) Да вообще, мне субъективно TWI больше нравится. Я прочтя соответствующий даташита с перовго раза там все понял, прочтя то же самое по UART - не понял, осталось много вопросов. Вот этот факт и определил мой выбор. Никакой цели организовать гальваноразвязку между устройствами у меня нет - она и так уже есть, это развязка, т.к. источники питания разные. Не было бы её - было бы проще жить на свете.
|
|
|
|
|
Dec 3 2010, 08:51
|
Местный
  
Группа: Участник
Сообщений: 256
Регистрация: 5-04-09
Из: Москва
Пользователь №: 47 180

|
Цитата(Mastakkos @ Dec 3 2010, 01:32)  ...Никакой цели организовать гальваноразвязку между устройствами у меня нет - она и так уже есть, это развязка, т.к. источники питания разные... Если у Вас земля общая - значит гальваноразвязки нет. Если земля развязана - без доп. геморроя I2C сделать не получится. В похожей ситуации (только слэйвов побольше) использовали UART+драйверы RS-485 - и все очень здорово получилось. P.S. На 3 метрах I2C ничего не наловит?
Сообщение отредактировал forever_student - Dec 3 2010, 08:52
|
|
|
|
|
Dec 3 2010, 09:03
|
Гуру
     
Группа: Свой
Сообщений: 5 273
Регистрация: 30-03-10
Пользователь №: 56 295

|
Цитата(forever_student @ Dec 3 2010, 11:51)  Если у Вас земля общая - значит гальваноразвязки нет. Да, вопрос так поставлен, что ничего не понять. Гальваноразвязки у автора действительно и в помине нет. И для чего она ему нужна на трех метрах - тоже понять трудно. Разве что нужно связать между собой, например, несколько высоковольтных блоков. Например, человеку нужен управляемый источник высокого напряжения ... Цитата(Mastakkos @ Dec 3 2010, 01:32)  прочтя то же самое по UART - не понял, осталось много вопросов Вы заблуждаетесь. На практике применить и запрограммировать UART на порядок проще, чем TWI. Чего только стоит одна обработка ошибок приема/передачи на TWI. Хотя это дело хозяйское. Пробуйте сами ...
|
|
|
|
|
Dec 3 2010, 13:49
|

Профессионал
    
Группа: Участник
Сообщений: 1 091
Регистрация: 25-07-07
Из: Саратов
Пользователь №: 29 357

|
Цитата(MALLOY2 @ Dec 2 2010, 15:09)  SPI можно но в данном случае избыточно, TWI он же I2C идеально подходит SPI избыточно? Вы хотите сказать что SPI сложнее чем I2C? Да это самый простой из всех этих интерфейсов, нужно не морочить никому голову, а делать на нем. Цитата(firstvald @ Dec 3 2010, 11:40)  Выбрав UART вы сможете спокойно отладить обмен устройств независимо друг от друга. UART это сколько угодно slavov. А как их адресовать? Цитата(firstvald @ Dec 3 2010, 11:40)  Вся промышленность так работает. Весьма самоуверенное заявление. Цитата(kovigor @ Dec 2 2010, 15:48)  Если питания развязаны, то развязаны и земли, и сигнальные линии. Иначе какой в этой развязке смысл ? А если земли у всех общие, то это и не развязка, и незачем тогда развязывать питания. Может там сделать каждому свое питание легче, чем тащить к каждому устройству 5В. Развязывать земли при расстоянии 3 метра нет никакого смысла, а вот 5-вольтовое питание передавать на такое расснояние я бы не стал. Цитата(kovigor @ Dec 3 2010, 12:03)  Вы заблуждаетесь. На практике применить и запрограммировать UART на порядок проще, чем TWI. Правильно. А SPI на порядок проще чем UART. Ну хорошо, на пол-порядка  Зато с адресацией слейвов никаких проблем.
Сообщение отредактировал 777777 - Dec 3 2010, 13:47
|
|
|
|
|
Dec 5 2010, 08:20
|
Местный
  
Группа: Участник
Сообщений: 245
Регистрация: 15-08-07
Пользователь №: 29 795

|
Цитата RS485 не годится? И модбас на нем и тогда, если в будущем, понадобиться, то можно без переделок... Цитата Изолированный 485 со своим... +1 Поверьте, люди Вам дело говорят. Реализовать протокол, например, MODBUS, хотя бы в самом урезаном варианте, не сложно, во всяком случае, не сложнее TWI. И привыкайте, пока на грабли не наступили, что шнурок, который соединен с ногами камня и выходит наружу устройства - это не просто сборщик мусора вместо данных, а и источник зависаний всего устройства (если конечно это хозяйство не лежит на рабочем столе у вас дома). Это - во-первых, а во-вторых, развязать гальванически двунаправленный TWI сложнее, чем UART. Кстати, уверен на 90 процентов, что реализованый сегодня MODBUS, в будущем пригодится Вам неоднократно.
|
|
|
|
|
Dec 5 2010, 18:49
|
Участник

Группа: Участник
Сообщений: 37
Регистрация: 13-11-10
Пользователь №: 60 871

|
Спасибо всем за ответы! Действительно, посмотрю в сторону 485...
|
|
|
|
|
Dec 6 2010, 13:53
|
Знающий
   
Группа: Validating
Сообщений: 838
Регистрация: 31-01-05
Пользователь №: 2 317

|
Цитата SPI избыточно? Вы хотите сказать что SPI сложнее чем I2C? Да это самый простой из всех этих интерфейсов, нужно не морочить никому голову, а делать на нем. нет не сложнее, а избыточнее в данном случае. Скорость нужна низкая I2C хватает, но I2C всего 3 провода, а у SPI сколько будет ?
|
|
|
|
|
Dec 7 2010, 10:19
|
Частый гость
 
Группа: Участник
Сообщений: 108
Регистрация: 6-02-09
Из: Новочеркасск
Пользователь №: 44 469

|
Цитата(Dx! @ Dec 4 2010, 14:37)  Прошу прощения, ошибся. http://www.analog.com/en/interface/rs-485/...ts/product.html <- этот со своим интегрированным питанием. Если вопрос бюджета не стоит остро - очень удобное решение.
|
|
|
|
|
Dec 7 2010, 13:50
|
Знающий
   
Группа: Validating
Сообщений: 838
Регистрация: 31-01-05
Пользователь №: 2 317

|
Цитата(777777 @ Dec 7 2010, 14:13)  А ты не ел устриц не знаешь SPI? А что ж тогда заявляешь что I2C однозначно лучше? У SPI 2 провода, плюс по одному проводу для выбора ведомого. То есть адресация ведомых существенно проще, а в обработке состояний I2C свихнуться можно. Дядя идите учить мат часть SPI interfaceЦитата Ситуация такая.
Есть три устройства, расположены на расстоянии 3-х метров друг от друга, одно master, два slave. теперь считаем 1) GND 2) MISO 3) MOSI 4) SCK 5) CS for Slave 1 6) CS for Slave 2 Итого 6 проводов, против: 1) GND 2) SCL 3) SDA Цитата То есть адресация ведомых существенно проще Мне что I2C, что SPI, что UART не вызывает ни каких трудностей, все это примитивщина.
|
|
|
|
|
Dec 7 2010, 14:13
|
Гуру
     
Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882

|
Цитата(MALLOY2 @ Dec 7 2010, 18:50)  теперь считаем Если выход может переключаться в Z-состояние, то MOSI и MISO допустимо объединять. Тут немного другое стоит учитывать. Самое важное в интерфейсах передачи данных это достоверность передаваемых данных. I2C и SPI на аппаратном уровне не дают информации о достоверности передаваемых данных. В UART с помощью передачи бита Parity можно обнаруживать искажение единичных бит. При использовании же программного протокола, который "ложится" поверх аппаратного интерфейса, достоверность передачи данных значительно увеличивается.
|
|
|
|
|
Dec 7 2010, 16:46
|

Профессионал
    
Группа: Участник
Сообщений: 1 091
Регистрация: 25-07-07
Из: Саратов
Пользователь №: 29 357

|
Цитата(MALLOY2 @ Dec 7 2010, 16:50)  Дядя идите учить мат часть SPI interfaceДа, про клок забыл... Цитата(MALLOY2 @ Dec 7 2010, 16:50)  теперь считаем Количество проводов - не самое страшное в жизни. Управлять I2C на порядок сложнее, а если еще делать полную обработку ошибок (а не надеяться что их не будет), то можно свихнуться.
|
|
|
|
|
Dec 8 2010, 10:24
|
Местный
  
Группа: Участник
Сообщений: 217
Регистрация: 11-06-10
Пользователь №: 57 868

|
Цитата А там где 6N36 указана частота всего 5кГц. Если вдвое снизить частоту опроса, то подойдет. Что-то мне подсказывает, что это возможно.
|
|
|
|
|
Feb 2 2011, 18:02
|

Шаман
     
Группа: Модераторы
Сообщений: 3 064
Регистрация: 30-06-04
Из: Киев, Украина
Пользователь №: 221

|
Цитата(defunct @ Feb 2 2011, 17:06)  Пользовать UART через драйвер RS485. Ещё лучше использовать CAN драйверы. Принцип тот же, цена та же, но нет состояния неоднозначности на выходе приёмника при ненагруженной линии. Цитата(defunct @ Feb 2 2011, 17:06)  SPI и TWI совершенно негодятся - т.к. это интерфейсы комуникаций между микросхемами, а не между устройствами - они как правило используются в пределах одного устройства. Скорее это можно сформулировать как интерфейсы для связи интеллектуального мастера (МК) с неинтеллектуальными слейвами (память, часы, АЦП, ЦАП, ...). Но это не догма, а, скорее, более частая практика. Я в своё время реализовывал сети МК на всех трёх интерфейсах (плюс CAN), в том числе и развязанные. Никаких особых сложностей.
|
|
|
|
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|
|