Как уже упоминалось пару раз уже, я имел в виду изучить взаимодействие камеры и объектива для системы Canon EOS. Цель этого упражнения — посмотреть, можно ли использовать дешевые линзы со стабилизацией изображения (IS) для создания биноклей или монокуляров IS.

Как читатели этого блога могут знать, я увлекаюсь астрономией. Одним из наименее популярных инструментов для наблюдения за звездами является бинокль. Они помогают собрать больше света, чем глаза, быстро и удобно развертываются и обеспечивают уникальные возможности широкого обзора. С другой стороны, их также обычно используют с рук, что сильно ограничивает апертуру, чтобы они не становились слишком тяжелыми для работы. Бинокли IS удивительны, потому что они позволяют использовать более высокое увеличение, чем это было бы возможно в противном случае, а также, благодаря улучшенной стабильности, также помогают улучшить обзор, так что даже скромная пара 12 × 36 обеспечивает удивительно хорошие обзоры. Тем не менее, они также безумно дороги, часто от 700 до 1200 долларов США за приличную пару. Пару лет назад у меня возникла мысль, что, возможно, можно сделать пару из дешевых IS-объективов, так как в принципе можно использовать окуляр с любым объективом фотоаппарата. Так родился проект DIY ISB.

Не так быстро…

Упрощенная идея заключалась в следующем: ранее я использовал свой Canon EOS Rebel XS (он же 1000D) с комплектным объективом 18–55 мм IS. Он включается следующим образом: я нажимаю кнопку спуска затвора до половины, и двигатель IS начинает жужжать. Я также знаю, что у Canon 12×36 IS есть небольшой переключатель, который включает IS. Итак, я подумал, что это должен быть простой выключатель. Я подключил контакты мотора объектива к источнику питания (A_GND и Vbat, на основе распиновки, показанной ниже), полностью ожидая, что объектив начнет работать, но никаких кубиков.

Конечно, будучи электронными монстрами, объективы фотоаппаратов так просто не сдадутся. Немного покопавшись, я нашел несколько проектов, в которых рассматривалась возможность электронного управления фокусировкой объектива. Оказывается, для связи используется тип протокола SPI, поэтому я решил попробовать расшифровать команды.

Создание аппаратного интерфейса

Для связи с объективом/камерой необходимо вставить логический анализатор между двумя устройствами.

В некоторых проектах линзы деструктивно модифицируются для этой цели, но я решил сохранить линзы и вместо этого модифицировать экстендер с автофокусом. Обычно они предназначены для макросъемки и, переключая электрические контакты, поддерживают связь между объективом и камерой.

Подключить маленькие перемычки к этим штырям оказалось чрезвычайно сложно. Во-первых, стационарная часть штифтов крепилась к пластиковой рамке, а это означало, что пайка плавила пластик (как это произошло с одним штифтом). Намотка проводов на пружину помогла их немного закрепить, но случайные пряди неизбежно приводили к короткому замыканию на штырях. В конце концов, мне пришлось разрезать несколько соломинок, чтобы сделать маленькие куртки, чтобы провода не пересекались.

Сбоку в удлинителе было вырезано отверстие для вывода проводов.

Прослушивание

Подключить выводы к логическому анализатору было несложно. Затем я загрузил программное обеспечение PulseView, использующее серверную часть Sigrok, и запустил его, как описано здесь. Когда камера просыпается, она отправляет на объектив некоторые начальные данные. Чтобы избежать перехвата этих команд, я убедился, что кнопка спуска затвора была наполовину нажата в течение нескольких секунд перед записью данных связи. Вот некоторые следы.

Я никогда раньше не расшифровывал данные SPI, поэтому потребовалась некоторая детективная работа. Во-первых, каждый пакет данных имеет практически одинаковую импульсную последовательность, состоящую примерно из 20+ команд. Во-вторых, нижняя кривая на каждом изображении (CLOCK) показывает паттерн из 8 коротких и одного длинного импульса. Я полагаю, что они представляют 8 битов данных и один стоповый бит (?), И по переднему фронту каждого из этих битов считывается состояние строки данных MOSI (верхняя дорожка на изображении выше), что дает команду SPI. Состояние бита для последнего длинного импульса всегда HIGH, а 8 предшествующих битов содержат разные команды для разных целей. Строка битов данных SPI (фиолетовая строка) представляет состояние, считываемое при каждом импульсе, и для их разбора в команды требуется правильная группировка этих битов. Понимая, что это, скорее всего, конфигурация 8+1, я установил для программы разные «длины слов» — по сути, количество битов, содержащихся в каждой записанной команде, — и обнаружил, что мне не удалось получить какие-либо последовательные результаты, будь то в терминах данных, времени и т. д.

Было несколько проблем со считыванием данных SPI MOSI (синяя строка). Ширина команд была непостоянной, а также тот факт, что она была слишком длинной — трассировки CLK и OUT показывают пачки импульсов, где каждый всплеск на этом изображении представляет собой набор всплесков, как и на предыдущем изображении. Каждый прочитанный байт данных должен быть мизерным, так что явно что-то не так. Мне потребовалось несколько часов, чтобы понять это. Подробнее об этом в следующем посте.

Вывод

В этом посте я показал, как я взломал удлинительную трубку автофокусировки и использовал ее для прослушивания связи между камерой и объективом. В следующем посте я расскажу о процессе парсинга этих данных.