S.Bus System

MPetrovich

Нашёл подробное описалово:
S-BUS protocol

The protocol is 25 Byte long and is send every 14ms (analog mode) or 7ms (highspeed mode).
One Byte = 1 startbit + 8 databit + 1 paritybit + 2 stopbit (8E2), baudrate = 100’000 bit/s
The highest bit is send first. The logic is inverted (Level High = 1)

[startbyte] [data1] [data2] … [data22] [flags][endbyte]

startbyte = 11110000b (0xF0)

data 1-22 = [ch1, 11bit][ch2, 11bit] … [ch16, 11bit] (ch# = 0 bis 2047)
channel 1 uses 8 bits from data1 and 3 bits from data2
channel 2 uses last 5 bits from data2 and 6 bits from data3
etc.

flags = bit7 = ch17 = digital channel (0x80)
bit6 = ch18 = digital channel (0x40)
bit5 = Frame lost, equivalent red LED on receiver (0x20)
bit4 = failsafe activated (0x10)
bit3 = n/a
bit2 = n/a
bit1 = n/a
bit0 = n/a

endbyte = 00000000b
Теперь вроде всё ясно. Остался ещё один вопрос : какой сигнал идет с сателлита приёмника Турнига ТХ9? Есть необходимость конвертировать этот сигнал с сателлита в S.Bus и подать его на устройство под названием ФуБар(аналог ВиБар).

PigTail

www.rcgroups.com/forums/showthread.php?t=967207&pa… экие у Вас загогулины однако, по ссылке можно сыскать изучение протокола сателлита первой версии ФлайСкай, кстати посмотрите в ветке rcopen.com/forum/f8 , кто то на нашем форуме успешно использовал эти сателлиты.

MPetrovich

Ковыряюсь тут с S.Bus и хотел спросит совета по конвертированию протокола приёмника в S.Bus. Протокол приёмника описан здесь: www.rcgroups.com/forums/showpost.php?p=13200954&po… ;
S.Bus описан здесь: rcopen.com/forum/f4/topic268205/149
В общих чертах, нужно перевести UART-образный протокол со скоростью 46660 Бод в другой UART-образный протокол со скоростью 100000 Бод.
Вопрос как лучше сделать: тупо принимать на RX со скоростью 46660 Бод, складывать в буфер(строку), потом переключать скорость UART на 100000 Бод(надеюсь, это реально - переписать значение регистра, определяющего скорость UART) и выдавать данные на ТХ? Или есть более “модный и молодёжный” способ?
Просто, если можно сделать как я описал выше, то достаточно копеечного PIC12 и конвертер готов.

Aleksey_Gorelikov

Я бы посмотрел в сторону контроллеров с двумя уартами. Но перед этим посчитал бы частоты уартов. Вполне возможно, что обе скорости адекватно поддержать не сможете и один из уартов придется делать програмным.

4 months later
MPetrovich

Не прошло и полгода, и я снова здесь. Всем доброго времени суток.
Неспешно и с большими перерывами ковыряясь со своим конвертером, я, таки, почти допилил его. Вот проверить, правда не на чем - девайс, под который я планировал конвертер, забыт на даче вместе с вертолётом, а других устройств понимающих S.Bus у меня нет. Посоветуйте какое-нибудь недорогое исполнительное устройство, которое можно купить в Москве, чтобы на практике проверить работу конвертера.

Aleksey_Gorelikov:

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

Обе скорости нормально поддерживаются аппаратным уартом PIC16F1823,24,27 и т.п. при тактовой частоте в 8МГц. Это относительно новая серия “нановатт” Микрочиповских контроллеров, которые я купил поиграться по цене порядка 40 руб/шт. В них ещё до фига чего понапихано, весьма любопытная серия.
Однако, мне всё равно пришлось использовать ещё и программный уарт для приёма посылок с передатчика, поскольку я не смог заставить аппаратный уарт понимать 16-битные посылки без промежуточных стартовых и стоповых бит.

RW9UAO
MPetrovich:

не смог заставить аппаратный уарт понимать 16-битные посылки без промежуточных стартовых и стоповых бит.

SPI

RW9UAO

16-битные посылки без промежуточных стартовых и стоповых бит

можно вполне принимать с помощью контроллера SPI. не настраивается разве?

MPetrovich

А где тактирование брать для SPI?
Дали мне mini V-Bar на пробу, подключил я свой декодер, настроил через прогу V-Staby на вход от S-Bus, подключил серву в канал руддера и… ничего. Не реагирует серва на передатчик. Хрен его знает где глядеть.
По картинке с цифрового анализатора всё отлично 25 импульсов: 0хF0 первый, потом 11 байт ненулевые(конвертированые из принятых с передатчика 8кан.х11бит), дальше 11 байт нулевые(поскольку нет больше каналов для конвертации) и в конце два байта 0х00. Сигнал инвертированный, старт-бит один, бит чётности, стопов два. Что не так - не пойму…

RW9UAO

на вход SPI заводите свой сигнал. его же заводите на вход внешнего прерывания. произошло прерывание - запрещаем его, выплевываем 16 бит из SPI, скорость у вас такая-же как приходящий УАРТ. получили ваши 16 бит вез стартов-стопов. обработали, разрешили внешнее прерывание для следующей посылки.
баудрэйт С-БАС у вас сколько?

MPetrovich

Я, вероятно, не настолько сведущ в микроконтроллерах, оттого не могу понять ход Вашей мысли. Если не трудно, разъясните попроще - для тупых.

RW9UAO:

на вход SPI заводите свой сигнал. его же заводите на вход внешнего прерывания.

Что такое свой сигнал? Откуда он берётся?

RW9UAO:

произошло прерывание - запрещаем его,

Чего запрещаем? Зачем использовать прерывание? Я вообще не люблю прерывания, если можно обойтись без них, то я их не использую.

RW9UAO:

выплевываем 16 бит из SPI

Куда “выплёвываем”?

RW9UAO:

скорость у вас такая-же как приходящий УАРТ

Скорость чего?

RW9UAO:

баудрэйт С-БАС у вас сколько?

100’000 бит/сек

MPetrovich

Люди! Окажите посильное вспомоществование!
Подскажите насколько критична для исполнительных устройств частота следования кадров в протоколе S-Bus?

RW9UAO

FU-BAR, а значит и большинству клонов V-BAR безразлично 7-11-14 мс фрэймы.

MPetrovich

О! Сергей, спасибо за отклик!
Я немного другое имел в виду. У меня частота следования посылок(фреймов) 20 мСек. Может это влиять на результат обработки посылки исполнительным устройством?

rual
MPetrovich:

Может это влиять на результат обработки посылки исполнительным устройством?

Не думаю, скорей всего отправляете “битый” кадр.

7 days later
MPetrovich

Всех приветствую. Преодолел ещё одну ступеньку на пути к S.Bus - сигнал с выхода моего конвертера воспринимается моим ФуБаром. Однако, не всё так хорошо, как хотелось бы. Сервы, подключенные в каналы ФуБара работают только в половине своего диапазона, т.е. от среднего положения рычаги отклоняются только в одну сторону. Может это как то связано с форматом данных? Я слышал у Футабы в передатчике настройка от -100% до +100% и середина это 0%, а у меня от 0% до 100% и середина - 50%. Я понимаю, что ширина сервоимпульса в крайних точка д.б. от 1000 до 2000 мкСек в обоих случаях, но может есть какие-то тонкости в передаче сигнала Футабы или S.Bus?

RW9UAO

Петрович, ну вторая же ссылка в гугле…mbed.org/…/futaba-s-bus-controlled-by-mbed/

data 1-22 = [ch1, 11bit][ch2, 11bit] … [ch16, 11bit] (ch# = 0 bis 2047)

11 бит

з.ы. ради интереса померьте задержку, которую вносит ваш конвертер. и общее быстродействие. щелчок тумблера - срабатывание сервы. если будет больше 200 мс - то очень плохо.

MPetrovich
RW9UAO:

ради интереса померьте задержку, которую вносит ваш конвертер. и общее быстродействие. щелчок тумблера - срабатывание сервы. если будет больше 200 мс - то очень плохо.

Сергей, Вы вероятно достаточно много знаете и вам, вероятно, кажется, что какие-то вещи не требуют разъяснения - они сами собой подразумеваются. Это не совсем так, уверяю Вас! Вот и в данном случае я не могу понять о каком тумблере вы говорите? Задержку конвертера я могу сказать и без тумблера, она составляет порядка 7-8 мСек. Я отслеживал этот момент на анализаторе: пришёл кадр с передатчика - начинаем отсчёт: проверка контрольной суммы, конвертация и стартовый байт посылки S.Bus - всё это занимает 7-8 мСек.

RW9UAO:

Петрович, ну вторая же ссылка в гугле…mbed.org/users/Digixx/noteboo...olled-by-mbed/ data 1-22 = [ch1, 11bit][ch2, 11bit] … [ch16, 11bit] (ch# = 0 bis 2047) 11 бит

При чём здесь 11 бит? Я именно 11 младших бит из каждого интового значения длительности канала расссовываю по байтам S.Bus. Каналы, кстати сказать, распределяются нормально и направление отклонения серв по элерону и элеватору правильное.

RW9UAO

если ваш конвертер вносит задержку 7-8 мс - все нормально.
среднее положение столбика в фубаре - 1023, минимум - 0, максимум 2047. возможно вы неправильно конвертируете входящие данные. просто положите в элероны-элеватор-руддер значения 0, 1023 и 2047.

MPetrovich

Сейчас посмотрел анализатором напрямую что выходит с Fu-Bara. На каналах 1,2,3 на тарелку перекоса идет сигнал от 1200 до 1800 мкСек с периодом в 7000 мкСек. На руддер идёт сигнал в полном диапазоне от 1000 до 2000 мкСек, но период меня поразил - всего 3000 мкСек! Может из-за того, что я в установках поставил цифровую машинку? Одако такого периода я никак не ожидал увидеть. На канале газа сигнал с периодом 17000 мкСек(17мСек) и его длительность не меняется, она примерно 1600 мкСек.
Выходит один только канал руддера отрабатывает весь диапвзон, а остальные хрен поймёшь чего.