S.Bus System
Нашёл подробное описалово:
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 и подать его на устройство под названием ФуБар(аналог ВиБар).
www.rcgroups.com/forums/showthread.php?t=967207&pa… экие у Вас загогулины однако, по ссылке можно сыскать изучение протокола сателлита первой версии ФлайСкай, кстати посмотрите в ветке rcopen.com/forum/f8 , кто то на нашем форуме успешно использовал эти сателлиты.
Ковыряюсь тут с 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 и конвертер готов.
Я бы посмотрел в сторону контроллеров с двумя уартами. Но перед этим посчитал бы частоты уартов. Вполне возможно, что обе скорости адекватно поддержать не сможете и один из уартов придется делать програмным.
Не прошло и полгода, и я снова здесь. Всем доброго времени суток.
Неспешно и с большими перерывами ковыряясь со своим конвертером, я, таки, почти допилил его. Вот проверить, правда не на чем - девайс, под который я планировал конвертер, забыт на даче вместе с вертолётом, а других устройств понимающих S.Bus у меня нет. Посоветуйте какое-нибудь недорогое исполнительное устройство, которое можно купить в Москве, чтобы на практике проверить работу конвертера.
Вполне возможно, что обе скорости адекватно поддержать не сможете и один из уартов придется делать програмным.
Обе скорости нормально поддерживаются аппаратным уартом PIC16F1823,24,27 и т.п. при тактовой частоте в 8МГц. Это относительно новая серия “нановатт” Микрочиповских контроллеров, которые я купил поиграться по цене порядка 40 руб/шт. В них ещё до фига чего понапихано, весьма любопытная серия.
Однако, мне всё равно пришлось использовать ещё и программный уарт для приёма посылок с передатчика, поскольку я не смог заставить аппаратный уарт понимать 16-битные посылки без промежуточных стартовых и стоповых бит.
не смог заставить аппаратный уарт понимать 16-битные посылки без промежуточных стартовых и стоповых бит.
SPI
SPI
Не понял.
16-битные посылки без промежуточных стартовых и стоповых бит
можно вполне принимать с помощью контроллера SPI. не настраивается разве?
А где тактирование брать для SPI?
Дали мне mini V-Bar на пробу, подключил я свой декодер, настроил через прогу V-Staby на вход от S-Bus, подключил серву в канал руддера и… ничего. Не реагирует серва на передатчик. Хрен его знает где глядеть.
По картинке с цифрового анализатора всё отлично 25 импульсов: 0хF0 первый, потом 11 байт ненулевые(конвертированые из принятых с передатчика 8кан.х11бит), дальше 11 байт нулевые(поскольку нет больше каналов для конвертации) и в конце два байта 0х00. Сигнал инвертированный, старт-бит один, бит чётности, стопов два. Что не так - не пойму…
на вход SPI заводите свой сигнал. его же заводите на вход внешнего прерывания. произошло прерывание - запрещаем его, выплевываем 16 бит из SPI, скорость у вас такая-же как приходящий УАРТ. получили ваши 16 бит вез стартов-стопов. обработали, разрешили внешнее прерывание для следующей посылки.
баудрэйт С-БАС у вас сколько?
Я, вероятно, не настолько сведущ в микроконтроллерах, оттого не могу понять ход Вашей мысли. Если не трудно, разъясните попроще - для тупых.
на вход SPI заводите свой сигнал. его же заводите на вход внешнего прерывания.
Что такое свой сигнал? Откуда он берётся?
произошло прерывание - запрещаем его,
Чего запрещаем? Зачем использовать прерывание? Я вообще не люблю прерывания, если можно обойтись без них, то я их не использую.
выплевываем 16 бит из SPI
Куда “выплёвываем”?
скорость у вас такая-же как приходящий УАРТ
Скорость чего?
баудрэйт С-БАС у вас сколько?
100’000 бит/сек
Люди! Окажите посильное вспомоществование!
Подскажите насколько критична для исполнительных устройств частота следования кадров в протоколе S-Bus?
FU-BAR, а значит и большинству клонов V-BAR безразлично 7-11-14 мс фрэймы.
О! Сергей, спасибо за отклик!
Я немного другое имел в виду. У меня частота следования посылок(фреймов) 20 мСек. Может это влиять на результат обработки посылки исполнительным устройством?
Может это влиять на результат обработки посылки исполнительным устройством?
Не думаю, скорей всего отправляете “битый” кадр.
Всех приветствую. Преодолел ещё одну ступеньку на пути к S.Bus - сигнал с выхода моего конвертера воспринимается моим ФуБаром. Однако, не всё так хорошо, как хотелось бы. Сервы, подключенные в каналы ФуБара работают только в половине своего диапазона, т.е. от среднего положения рычаги отклоняются только в одну сторону. Может это как то связано с форматом данных? Я слышал у Футабы в передатчике настройка от -100% до +100% и середина это 0%, а у меня от 0% до 100% и середина - 50%. Я понимаю, что ширина сервоимпульса в крайних точка д.б. от 1000 до 2000 мкСек в обоих случаях, но может есть какие-то тонкости в передаче сигнала Футабы или S.Bus?
Петрович, ну вторая же ссылка в гугле…mbed.org/…/futaba-s-bus-controlled-by-mbed/
data 1-22 = [ch1, 11bit][ch2, 11bit] … [ch16, 11bit] (ch# = 0 bis 2047)
11 бит
з.ы. ради интереса померьте задержку, которую вносит ваш конвертер. и общее быстродействие. щелчок тумблера - срабатывание сервы. если будет больше 200 мс - то очень плохо.
ради интереса померьте задержку, которую вносит ваш конвертер. и общее быстродействие. щелчок тумблера - срабатывание сервы. если будет больше 200 мс - то очень плохо.
Сергей, Вы вероятно достаточно много знаете и вам, вероятно, кажется, что какие-то вещи не требуют разъяснения - они сами собой подразумеваются. Это не совсем так, уверяю Вас! Вот и в данном случае я не могу понять о каком тумблере вы говорите? Задержку конвертера я могу сказать и без тумблера, она составляет порядка 7-8 мСек. Я отслеживал этот момент на анализаторе: пришёл кадр с передатчика - начинаем отсчёт: проверка контрольной суммы, конвертация и стартовый байт посылки S.Bus - всё это занимает 7-8 мСек.
Петрович, ну вторая же ссылка в гугле…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. Каналы, кстати сказать, распределяются нормально и направление отклонения серв по элерону и элеватору правильное.
если ваш конвертер вносит задержку 7-8 мс - все нормально.
среднее положение столбика в фубаре - 1023, минимум - 0, максимум 2047. возможно вы неправильно конвертируете входящие данные. просто положите в элероны-элеватор-руддер значения 0, 1023 и 2047.
Ок, попробую передать фиксированные значения.
Сейчас посмотрел анализатором напрямую что выходит с Fu-Bara. На каналах 1,2,3 на тарелку перекоса идет сигнал от 1200 до 1800 мкСек с периодом в 7000 мкСек. На руддер идёт сигнал в полном диапазоне от 1000 до 2000 мкСек, но период меня поразил - всего 3000 мкСек! Может из-за того, что я в установках поставил цифровую машинку? Одако такого периода я никак не ожидал увидеть. На канале газа сигнал с периодом 17000 мкСек(17мСек) и его длительность не меняется, она примерно 1600 мкСек.
Выходит один только канал руддера отрабатывает весь диапвзон, а остальные хрен поймёшь чего.