В 2024 году я насмотрелся роликов ютубера saveitforparts и заинтересовался автоматическими спутниковыми антеннами. В Нидерландах такие обычно продают в виде компактных офсетных тарелок на моторизованном основании, вроде Megasat или Oyster. Это не совсем то же, что установки Winegard, которые попадаются saveitforparts в США. (Одну такую я, скорее всего, всё равно когда-нибудь куплю.) Но, листая Marktplaats, я наткнулся на штуку поинтереснее: морскую антенну. Intellian i4 продавали примерно за 200 евро, хотя новая сейчас стоит около 4000. Я купил её сразу и стал гордым владельцем куска корабельной техники.
В отличие от большинства автоматических тарелок для автодомов, морской нужна точность повыше. Поэтому все моторы в ней — мощные шаговые двигатели. Ещё там стоит четырёхвыходной конвертер (quad LNB) и забавный вращающийся отражатель, о котором расскажу ниже.
Основные мозги антенны (кроме логики захвата сигнала) живут во внутреннем блоке, который называется ACU, Antenna Control Unit. Раз уж ценник высокий, у него есть Ethernet, Wi-Fi и даже RS-232!




Как она вообще работает
Лодку постоянно качает: крен, тангаж, рыскание. А спутник висит в 36 000 км на геостационарной орбите, то есть относительно земли он неподвижен. Тарелка должна держать его, что бы ни делала лодка. Для этого ей нужно знать своё положение (GPS у неё встроенный), куда она смотрит (курс ей сообщает судно по NMEA) и где находится спутник.
Постойте, но мы же не лодка
Было бы здорово устроить NURDspace @ Sea, но это нам не по силам.
Что мы можем? Притвориться лодкой!
NMEA — текстовый последовательный протокол поверх RS-422 (дифференциального), реализовать его несложно. Нужны только преобразователь TTL в RS-422 и микроконтроллер, и вот мы уже яхта за 130 000 евро!
Достаточно отправлять блоку управления строку
$HCHDG,0.0,0.0,E,0.0,E*checksum
чтобы он мог правильно посчитать свою математику. Что она означает?
Каждое предложение NMEA начинается с $, за ним идёт двухбуквенный идентификатор источника (например, GP у GPS и HC у компаса), затем трёхбуквенный тип предложения, поля через запятую и в конце * с двумя шестнадцатеричными символами контрольной суммы. Контрольная сумма — просто XOR всех байтов между $ и *.

А управлять-то ею можно?
Для меня после покупки это был вопрос на миллион евро. На миллион — потому что примерно столько нужно, чтобы по-настоящему владеть яхтой.
Сначала у меня не было даже программы для управления антенной, в сети я её тогда тоже не нашёл. Доступа к партнёрскому порталу Intellian у меня нет. Что я сделал? Всё просто: написал в Intellian и попросил программу. И мне её охотно прислали!

Теперь антенной можно было управлять из этой программы. А без неё?
Я начал снифать обмен между Aptus и ACU. Оказалось, это довольно простой текстовый протокол с контрольной суммой в конце:
{XX param1 param2 ... paramN}C
Ещё полезнее то, что Aptus написан на C#, так что код легко декомпилировать и прочитать. Этого хватило, чтобы получить всё нужное. В итоге, примерно через два года, я попросил LLM составить описание протокола.
Как считается контрольная сумма? Просто: для каждого символа сообщения вычисляется num = (num + char_value - 32) % 95, а в конце возвращается ASCII-символ с кодом num + 32:
public static char UIF_CheckSum(StringBuilder sb, int length) { int num = 0; for (int index = 0; index < length; ++index) num = (num + sb[index] - 32) % 95; return (char)(num + 32); }
То же на Python:
def uif_checksum(message: str) -> str: num = 0 for char in message: num = (num + ord(char) - 32) % 95 return chr(num + 32)
Как сказать антенне, куда смотреть? Тоже очень просто: отправить ACU команду GO с азимутом и углом места.
{GO 16250 2000}
Почему числа такие большие? Вместо чисел с плавающей точкой, которые на разных компиляторах и архитектурах ведут себя непредсказуемо, всё хранится целыми с двумя неявными знаками после запятой. Поэтому 16250 == 16250 всегда однозначно истинно, а сравнение float может молча не сработать. К тому же вычисления с плавающей точкой медленные, если FPU нет (или он сам медленный). Для морских и критически важных систем такая предсказуемость очень важна!
Что это за крутилка?
Немного об устройстве тарелки. Большинство телевизионных тарелок на крышах — офсетные: конвертер у них вынесен вбок от центра зеркала. Так он не отбрасывает тень на отражатель и не съедает сигнал.
У нашей тарелки прямофокусная схема, конвертер стоит точно по центру. У бытовых антенн так бывает реже, зато опорно-поворотное устройство получается компактным и симметричным, а это важно, когда тарелка крутится на лодке. Диаметр всего 40 см (чем больше тарелка, тем больше усиление), но благодаря такой схеме мощности ей вполне хватает. (Прим. пер.: в характеристиках производителя диаметр отражателя i4 указан как 45 см.)
Помогает и моторизованный контррефлектор между зеркалом и конвертером. Это часть технологии Intellian Dynamic Beam Tilting (DBT). Вместо того чтобы постоянно гонять шаговые моторы на каждую волну и качку, контррефлектор всё время подстраивается и держит луч на спутнике. Основные моторы берут на себя только крупные поправки, поэтому вся конструкция работает тихо и отзывчиво. Вот чем занята наша крутилка! Интересная всё-таки техника.
Прим. пер.: в комментариях к заметке об этом проекте на Hackaday читатели предложили другое объяснение: вращающийся смещённый контррефлектор нужен для конического сканирования. Луч описывает небольшой круг вокруг спутника, а по модуляции уровня сигнала антенна понимает, в какую сторону подправить наведение.


И что с ней делать?
Сначала я написал небольшой скрипт-прослойку между ACU и Gpredict, чтобы тот видел антенну как обычный поворотный механизм. Так она может следить и за спутниками не на геостационарной орбите. Правда, я с этим пока почти не играл: облучатель у тарелки только на Ku-диапазон, а негеостационарных спутников в этом диапазоне я пока не знаю.
Потом мы перевезли антенну в NURDspace и закинули на крышу, а один добрый коллега-хакер отдал нам кое-что из спутникового хозяйства. Среди 75-омных кабелей нашёлся Digibit R1, и вместе с Dreambox DM800 он послужил тюнером, чтобы попробовать поймать телевизионные транспондеры. Первый захват сигнала порадовал: мы настроились на Astra 1P в позиции 19.2°E и увидели китайский канал CGTN HD!


Ура, я могу смотреть спутниковое телевидение дома: сигнал прилетает из космоса, а дальше идёт ко мне через WireGuard. Техника — это прекрасно!
Конечно, у меня были и другие планы, но они заслуживают отдельных постов.
И напоследок видео, где тарелка исполняет свой радостный тестовый танец.
CitizenOfDreams
Качающийся субрефлектор это интересно, не встречал раньше такого. Согласен с выводами читателей Hackaday - он помогает быстро измерить направление ошибки наведения, но не освобождает основные приводы от работы: на
плавающем суднеходящем корабле они все равно будут постоянно активны.Углы отклонения у субрефлектора мизерные, судя по геометрии. А если сделать отклонение больше, то возрастут потери и ухудшится кроссполяризация, что 40-сантиметровая тарелка не может себе позволить. Ну и движение субрефлектора явно не управляемое, а просто постоянное вращение, вроде обруча на стройной талии гимнастки.
opium Автор
Фраза «основные моторы берут на себя только крупные поправки» — слишком категоричное объяснение в исходнике, которое осталось в переводе. В паспорте Intellian i4/i4P отдельно указаны двухосевые шаговые приводы стабилизации и внеосевое вращение субрефлектора с проверкой уровня сигнала 50 раз в секунду: https://www.mastersystems.com/wp-content/uploads/2024/08/i4-i4P-Datasheet.pdf. Производитель говорит об уменьшении движений основного отражателя, а не о том, что при качке достаточно одного субрефлектора. Примечание про коническое сканирование в переводе уже есть, но оно не устраняет неточную формулировку перед ним; текст статьи пока не исправлен.
CitizenOfDreams
А, вспомнил, саму технологию конического сканирования встречал много лет назад, только тогда еще не понял, что это такое. Там это было реализовано неподвижным субрефлектором и вращающимся рупором облучателя (слегка асимметричным внутри).
Наверное, технические статьи и надо так переводить: оставлять неточности оригинала с примечаниями.