реклама на сайте
подробности

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> Посоветуйте простой протокол передачи данных
Pyku_He_oTTyda
сообщение Nov 30 2010, 08:48
Сообщение #1


Профессионал
*****

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



Нуждаюсь в связи двух МК между собой.
Скорость практически не важна (необходимо передать 8ми битную уставку при нажатии\отпускании кнопки без раздражающей человека задержки).
Однако важна помехозащищеннось, так как один из МК трудится на плате управления ДПТ с импульсными токами до 6А и осуществляет PWM управление этим двигателем без гальванической развязки.
Команду необходимо передать четко, громко и без искажений, как лай караульной собакиsmile.gif

Процессор интерфейса находится на отдельной плате, но также гальванически не развязан и питается от того же источника, что и МК управляющий мотором, так что возможны "иголки". Протокол нужен софтовый, так как для связи используются выводы, не несущие альтернативных функций протоколов связи. На целевом МК доступно внешнее прерывание на одном из выводов. Оба МК тактируются от внутренней RC и будут работать не только в комнатных условиях.

Какой интерфейс посоветуете (хоть стандарт, хоть самодельный)?



--------------------
Андрей Смирнов
Go to the top of the page
 
+Quote Post
firstvald
сообщение Nov 30 2010, 09:09
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 580
Регистрация: 3-06-08
Пользователь №: 38 041



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

В вашем случае можно сделать так:
команда начинается символом ":"
команда заканчивается символом "cr"
Если вам надо передать просто байт один, то дальше ничего не надо выдумывать, а просто между символами начала и конца передаем дважды в hex виде этот байт, т е четыре символа. Мы фактически вместо контрольной суммы просто повторим байт. При передаче бывает полезно по разным причинам перед символом ":" передать 3-4 байта 0xFF (если смотреть терминалом что происходит в линии вы их увидете как буквы "я").
По окончании передачи тоже полезно после "cr" передавать "lf", это все упростит отладку.
Go to the top of the page
 
+Quote Post
MrYuran
сообщение Nov 30 2010, 09:19
Сообщение #3


Беспросветный оптимист
******

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



Цитата(firstvald @ Nov 30 2010, 12:09) *
В вашем случае можно сделать так:

Тогда уж проще взять Modbus ASCII и вообще ничего не изобретать.
И на терминале будет не буква "я", а HEX-коды переданных байтов.

Можно немного упростить, выкинув поле адреса и кода команды (если они не нужны).
Но не стоит экономить 1 байт на CRC

Готовая библиотека freemodbus имплементируется в 3 шага за полчаса.


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post
XVR
сообщение Nov 30 2010, 09:22
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 3 123
Регистрация: 7-04-07
Из: Химки
Пользователь №: 26 847



Цитата(firstvald @ Nov 30 2010, 12:09) *
Тогда вам нужен символьный протокол.
Сам по себе символьный протокол не обеспечит помехозащищенность. Нужно нечто большее. Если брать по максимуму, то протокол должен обладать следующими характеристиками:
  1. Данные должны передаваться в виде пакета (можно в виде символьной строки, как предлагал firstvald)
  2. Обязательна должен быть контроль целостности
  3. Можно добавить коды, корректирующие ошибки (forward error correction)
  4. Протокол должен быть двухсторонним - т.е. на пакет с установками приемник должен ответить пакетом с подтверждением. Если подтверждения нет - пакет должен перепосылаться
  5. Должна быть предусмотрена реакция на невозможность посылки пакета (например при превышении количества попыток отправки и при отсуствии ответа)

Go to the top of the page
 
+Quote Post
stells
сообщение Nov 30 2010, 09:32
Сообщение #5


внештатный сотрудник
******

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



Цитата(XVR @ Nov 30 2010, 12:22) *
[*]Протокол должен быть двухсторонним

если протокол двусторонний, то и проблем нет - приемник просто возвращает назад команду для контроля целостности ее передачи, да и все...

если протокол не двусторонний, то можно мажоритарный принцип рассмотреть - 2 из 3-х
Go to the top of the page
 
+Quote Post
firstvald
сообщение Nov 30 2010, 09:34
Сообщение #6


Знающий
****

Группа: Свой
Сообщений: 580
Регистрация: 3-06-08
Пользователь №: 38 041



Ребята, а вы вообще обмены с приборами на производстве и внутриприборные обмены писали? Зачем тень на плетень наводить. Нужен простой протокол, который легко отладить и написать.
Go to the top of the page
 
+Quote Post
MrYuran
сообщение Nov 30 2010, 09:45
Сообщение #7


Беспросветный оптимист
******

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



Цитата(firstvald @ Nov 30 2010, 12:34) *
Нужен простой протокол, который легко отладить и написать.

Да уж куда проще...
А Modbus - промышленный стандарт.
К тому же готовый - и писать ничего не надо. Множество открытых библиотек - как для контроллеров (разных), так и для PC.

Межприборным обменом занимаюсь непрерывно.
В данный конкретный момент выковыриваю самописные велосипеды и переделываю на модбас РТУ, ибо проще, логичнее, универсальнее и к тому же куча готовых тулзов.


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post
Pyku_He_oTTyda
сообщение Nov 30 2010, 11:18
Сообщение #8


Профессионал
*****

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



Спасибо за ответы!
Но меня в первую очередь волнует физическая реализация протокола.
Я для этого и описал среду обитания МК.
Пока размышляю по поводу однопроводного двунаправленного интерфейса, вторую имеющуюся линию использовать для определения направления передачи.


--------------------
Андрей Смирнов
Go to the top of the page
 
+Quote Post
stells
сообщение Nov 30 2010, 11:38
Сообщение #9


внештатный сотрудник
******

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



Цитата(Pyku_He_oTTyda @ Nov 30 2010, 14:18) *
Но меня в первую очередь волнует физическая реализация протокола.

расстояние?
Go to the top of the page
 
+Quote Post
Pyku_He_oTTyda
сообщение Nov 30 2010, 11:56
Сообщение #10


Профессионал
*****

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



прошу прощения, расстояние упустил, так как оно незначительное.
Межплатный шлейф - 10 - 20 см


--------------------
Андрей Смирнов
Go to the top of the page
 
+Quote Post
stells
сообщение Nov 30 2010, 13:05
Сообщение #11


внештатный сотрудник
******

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



Цитата(Pyku_He_oTTyda @ Nov 30 2010, 14:18) *
Пока размышляю по поводу однопроводного двунаправленного интерфейса, вторую имеющуюся линию использовать для определения направления передачи.

так может uart софтовый?
Go to the top of the page
 
+Quote Post
Pyku_He_oTTyda
сообщение Nov 30 2010, 13:23
Сообщение #12


Профессионал
*****

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



UART не хотелось бы из-за тактирования МК от RC внутренних и широкой температуры использования.


--------------------
Андрей Смирнов
Go to the top of the page
 
+Quote Post
Александр77
сообщение Nov 30 2010, 13:29
Сообщение #13


Знающий
****

Группа: Свой
Сообщений: 608
Регистрация: 10-07-09
Из: Дубна, Московская область
Пользователь №: 51 111



Цитата(Pyku_He_oTTyda @ Nov 30 2010, 16:23) *
UART не хотелось бы из-за тактирования МК от RC внутренних и широкой температуры использования.

Чем обосновано внутреннее тактирование?
Ведь если начнет плыть - то уже почти ничего не спасет, разве только параллельной шиной завязав источниками внешних прерываний оба МК. Но такое решение - изврат на мой взгляд
Go to the top of the page
 
+Quote Post
rx3apf
сообщение Nov 30 2010, 13:37
Сообщение #14


Гуру
******

Группа: Участник
Сообщений: 3 834
Регистрация: 14-06-06
Из: Moscow, Russia
Пользователь №: 18 047



Цитата(Pyku_He_oTTyda @ Nov 30 2010, 16:23) *
UART не хотелось бы из-за тактирования МК от RC внутренних и широкой температуры использования.

Используйте что-нибудь самосинхронизирующееся, "Манчестер" или бифазное кодирование. Тогда нет никаких проблем работать хоть при изменении битовой скорости на порядок, лишь бы за время передачи бита скорость не уходила больше чем 50% (но проще, если на время всей посылки, тогда подстройку скорости достаточно делать один раз, при начальной синхронизации). Чисто программно это не очень приятно делать (высчитывать по тактам), лучше, когда есть таймер с аппаратным выходом и захватом. Но можно и программно. Синхронизация, данные, CRC - вполне надежно.
Go to the top of the page
 
+Quote Post
stells
сообщение Nov 30 2010, 13:39
Сообщение #15


внештатный сотрудник
******

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



Цитата(Pyku_He_oTTyda @ Nov 30 2010, 16:23) *
UART не хотелось бы из-за тактирования МК от RC внутренних и широкой температуры использования.

т.е. интерфейс должен быть синхронным и обеспечивать полудуплекс, занимая только 2 ноги у контроллера?
тогда что-то типа I2C, только подтяжка помощнее, чтобы помеху задавить
Go to the top of the page
 
+Quote Post

2 страниц V   1 2 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 21st July 2025 - 17:44
Рейтинг@Mail.ru


Страница сгенерированна за 0.01507 секунд с 7
ELECTRONIX ©2004-2016