|
Посоветуйте простой протокол передачи данных |
|
|
|
Nov 30 2010, 08:48
|

Профессионал
    
Группа: Свой
Сообщений: 1 751
Регистрация: 4-08-05
Из: Великие Луки
Пользователь №: 7 360

|
Нуждаюсь в связи двух МК между собой. Скорость практически не важна (необходимо передать 8ми битную уставку при нажатии\отпускании кнопки без раздражающей человека задержки). Однако важна помехозащищеннось, так как один из МК трудится на плате управления ДПТ с импульсными токами до 6А и осуществляет PWM управление этим двигателем без гальванической развязки. Команду необходимо передать четко, громко и без искажений, как лай караульной собаки  Процессор интерфейса находится на отдельной плате, но также гальванически не развязан и питается от того же источника, что и МК управляющий мотором, так что возможны "иголки". Протокол нужен софтовый, так как для связи используются выводы, не несущие альтернативных функций протоколов связи. На целевом МК доступно внешнее прерывание на одном из выводов. Оба МК тактируются от внутренней RC и будут работать не только в комнатных условиях. Какой интерфейс посоветуете (хоть стандарт, хоть самодельный)?
--------------------
Андрей Смирнов
|
|
|
|
2 страниц
1 2 >
|
 |
Ответов
(1 - 29)
|
Nov 30 2010, 09:19
|

Беспросветный оптимист
     
Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646

|
Цитата(firstvald @ Nov 30 2010, 12:09)  В вашем случае можно сделать так: Тогда уж проще взять Modbus ASCII и вообще ничего не изобретать. И на терминале будет не буква "я", а HEX-коды переданных байтов. Можно немного упростить, выкинув поле адреса и кода команды (если они не нужны). Но не стоит экономить 1 байт на CRC Готовая библиотека freemodbus имплементируется в 3 шага за полчаса.
--------------------
Программирование делится на системное и бессистемное. ©Моё :) — а для кого-то БГ — это Bill Gilbert =)
|
|
|
|
|
Nov 30 2010, 09:45
|

Беспросветный оптимист
     
Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646

|
Цитата(firstvald @ Nov 30 2010, 12:34)  Нужен простой протокол, который легко отладить и написать. Да уж куда проще... А Modbus - промышленный стандарт. К тому же готовый - и писать ничего не надо. Множество открытых библиотек - как для контроллеров (разных), так и для PC. Межприборным обменом занимаюсь непрерывно. В данный конкретный момент выковыриваю самописные велосипеды и переделываю на модбас РТУ, ибо проще, логичнее, универсальнее и к тому же куча готовых тулзов.
--------------------
Программирование делится на системное и бессистемное. ©Моё :) — а для кого-то БГ — это Bill Gilbert =)
|
|
|
|
|
Nov 30 2010, 13:29
|
Знающий
   
Группа: Свой
Сообщений: 608
Регистрация: 10-07-09
Из: Дубна, Московская область
Пользователь №: 51 111

|
Цитата(Pyku_He_oTTyda @ Nov 30 2010, 16:23)  UART не хотелось бы из-за тактирования МК от RC внутренних и широкой температуры использования. Чем обосновано внутреннее тактирование? Ведь если начнет плыть - то уже почти ничего не спасет, разве только параллельной шиной завязав источниками внешних прерываний оба МК. Но такое решение - изврат на мой взгляд
|
|
|
|
|
Nov 30 2010, 13:37
|
Гуру
     
Группа: Участник
Сообщений: 3 834
Регистрация: 14-06-06
Из: Moscow, Russia
Пользователь №: 18 047

|
Цитата(Pyku_He_oTTyda @ Nov 30 2010, 16:23)  UART не хотелось бы из-за тактирования МК от RC внутренних и широкой температуры использования. Используйте что-нибудь самосинхронизирующееся, "Манчестер" или бифазное кодирование. Тогда нет никаких проблем работать хоть при изменении битовой скорости на порядок, лишь бы за время передачи бита скорость не уходила больше чем 50% (но проще, если на время всей посылки, тогда подстройку скорости достаточно делать один раз, при начальной синхронизации). Чисто программно это не очень приятно делать (высчитывать по тактам), лучше, когда есть таймер с аппаратным выходом и захватом. Но можно и программно. Синхронизация, данные, CRC - вполне надежно.
|
|
|
|
|
Nov 30 2010, 14:47
|

Профессионал
    
Группа: Свой
Сообщений: 1 751
Регистрация: 4-08-05
Из: Великие Луки
Пользователь №: 7 360

|
Спасибо за проявленное внимание! Внутренне тактирование определено тем, что небыло необходимости в точных интервалах. UART не планировался изначально. SPI с заведенным на прерывание синхроимпульсом мне видится не очень надежным, любая "иголка" вызовет ненужное прерывание. Манчестер да, спасибо! Видимо оптимум, на нем пока и остановлюсь. Вторая нога - ну лишней не будет, по крайней мере можно возложить функцию, определяющую продолжительность посылки или что либо еще. Я же еще не определился с протоколом
--------------------
Андрей Смирнов
|
|
|
|
|
Nov 30 2010, 18:29
|

внештатный сотрудник
     
Группа: Участник
Сообщений: 2 458
Регистрация: 10-05-08
Из: МО, Медвежьи озера
Пользователь №: 37 401

|
Цитата(Pyku_He_oTTyda @ Nov 30 2010, 20:57)  Чем плох манчестер в моем случае? только тем, что обработать его программно гораздо сложнее, чем принимать бит по прерыванию от синхросигнала. а так сам по себе вариант интересный: сэмулировать открытый сток (коллектор), подтянуть шину резистором и получить эдакую однопроводную синхронную магистраль с одним мастером или передачей приоритета да и надежность пожалуй пониже будет. вот и rx3apf написал не "абсолютно", а "вполне": Цитата(rx3apf @ Nov 30 2010, 16:37)  Синхронизация, данные, CRC - вполне надежно.
Сообщение отредактировал stells - Nov 30 2010, 18:32
|
|
|
|
|
Dec 1 2010, 03:23
|

Профессионал
    
Группа: Свой
Сообщений: 1 751
Регистрация: 4-08-05
Из: Великие Луки
Пользователь №: 7 360

|
Вот именно железная часть и интересует. Крайнее опосение, как я писал выше, вызывает работа по прерываниям в условиях помех от коммутации ДПТ, даже если линию отслеживающую перывание, "задавить" резистором на грани нагрузочной способности пина. Все равно необходима будет либо временная синхронизация, либо линия определяющая период передачи команды. Иначе возможная помеха, если она вызовет прерывание, делает всю команду неверной и вероятен случай, даже при использовании контрольной суммы, никогда не принять верную команду.
--------------------
Андрей Смирнов
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|