DIY или Сделай Сам / Наголовный компьютер под управлением Linux — собери сам!

в 12:35, , рубрики: Новости, метки:

DIY или Сделай Сам / Наголовный компьютер под управлением Linux — собери сам!
В данной статье речь пойдет о самодельном наголовном компьютере с трудновыговариваемым названием WXHMD, созданном парижским умельцем по имени Паскаль. Это одноплатный компьютер (computer-on-module) Gumstix Overo Fire, укрепленный на наголовном дисплее Vuzix VR920. В итоге получилось устройство, дающее стереоскопическое изображение 640x480, имеющее аудиовход и аудиовыход, 3D-сенсоры наклона (3D tilt sensor), 3D магнитный компас, процессор TI OMAP3530 @ 600 MHz, ОС Linux, WiFi, Bluetooth. Питание — 1 ампер @ 3.7 вольт. Вес — 180 граммов.
1. Vuzix VR 920 — это качественный наголовный дисплей ценой около 400 евро.

два 640x480 дисплейных модуля производства Kopin;

аналоговый видеовход DB15 VGA;

питание от USB (номинально — 5 мА @ 5В, но работает и при пониженном напряжении, вплоть до 3.7В);

встроенные стереонаушники и монофонический микрофон (USB аудио профиль);

трехосевые акселерометр и магнетометр (USB HID профиль);

Полную спецификацию можно найти на сайте производителя.
2. Одноплатный компьютер Gumstix Overo Fire

процессор TI OMAP3530, максимально 600 МГц, по умолчанию — 500 МГц

256 Мб ОЗУ, флэш-карта microSD

WiFi, Bluetooth

USB OTG (максимально 100 мА)

видеовыход для LCD @ 1.8В

Полное описание устройства можно найти на сайте производителя.
3. Соединительная плата

Для соединения одноплатного компьютера с наголовным дисплеем потребовалось спроектировать небольшую плату с разъемами для питания, USB и несложными цифро-аналоговыми преобразователями (ЦАП) для аналогового видеовывода. ЦАПы подключаются к видеовыходу компьютера и создают на выходе 12-битный аналоговый сигнал (по 4 бита на цветовую составляющую). Сигналы синхронизации с LCD-выхода направляются непосредственно на соответствующие VGA-контакты (VR 920 смог работать и с сигналом 1.8В, хотя номинально должно быть 5В). Все остальное делает софт на OMAP, Собственно, OMAP не может генерировать полностью VGA-совместимые сигналы синхронизации (возможно, HSYNC импульсы имеют недостаточную длительность), но VR920 работает и с такими, «неправильными» сигналами.Рис.1. Схема: wxhmd.sch, wxhmd.sch.pdf
Двусторонняя печатная плата была спроектирована в gEDA gschem, разведена в gEDA PCB, а вытравлена с помощью технологии Direct Inkjet Resist Printing (подробнее о ней можно прочитать здесь).
Распиновку и footprint Overo пришлось преобразовать к формату gEDA: OVERO.sym, OVERO.fp. Эти файлы получены на основе спецификаций, опубликованных Gumstix под лицензией Creative Commons Attribution-ShareAlike2.5 лицензии. Часть работы была сделана вручную, так что может содержать ошибки.Рис.2. Разводка: wxhmd-2.pcb, wxhmd-2.pcb.pdf
4. Сборка

Поскольку порт USB OTG в Overo выдает только 100 мА, питание наголовного дисплея реализовано через VSYSTEM вместо USBOTG_VBUS.Рис.3. Тестирование работоспособности перед встраиванием плат в VR920
Начиная работу над устройством, автор предполагал, что 13-контактный разъем внутри VR920 будет получать «сырые» (raw) сигналы USB и VGA. Но оказалось, что кабель, разветвляющийся на два хвоста (USB и VGA), содержит маленькую плату, обрабатывающую синхро-сигналы VGA.Рис.4. Плата, «спрятанная» внутри кабеля
Паскаль не стал пытаться выяснять, можно ли заставить OMAP генерировать подходящий композитный синхросигнал (судя по всему, он генерирует нестандартный). Автор просто напаял данную плату на плату компьютера. Кроме того, автору не удалось найти разъем, соответствующий разъему наголовного дисплея (13 контактов с шагом 1 мм). Принесенный в жертву кабель решил обе эти проблемы.Рис.5. Последние приготовления: плата видеосинхронизации напаяна на плату компьютераРис.6. Тестирование перед окончательной сборкой
5. Программное обеспечение
USB. USB-стек VR920 сообщает хосту, что ему необходимо 500 мА, так что Линукс немедленно отключит наголовник. Обычно эта проблема решается подключением USB-хаба с внешним питанием. В нашем случае это не лучшее решение, так как наголовник запитан от VSYSTEM, то мы можем без угрозы работоспособности системы заставить Линукс игнорировать проверку параметров питания USB-устройства с помощью usb_ignore_power.patch.Фрейм-буфер. В u-boot окружении нужно установить разрешение фрейм-буфера линукс равным 640x480.Конфигурация OMAP LCD. Эти команды настраивают подсистему OMAP LCD на генерирование VGA-подобных сигналов:DISPLAY=:0.0 xset -dpms # Предотвратить отключение питания LCD, иначе мы не получим доступ к его регистрам
devmem2 0x480504fc w 0x00003000 # Polarities
devmem2 0x48050464 w 0x02f00f3f # HSYNC
devmem2 0x48050468 w 0x02000901 # VSYNC
devmem2 0x4805047c w 0x01df027f # Size
killall Xorg # Применить внесенные измененияHID. Правильнее всего взаимодействовать с акселерометром (tilt sensors) наголовника через /dev/hidraw. Это потребует перекомпилировать ядро Gumstix Linux с CONFIG_HIDRAW=y. Показания датчиков можно читать 17-байтными порциями, содержащими шесть 16-битных значений (little-endian):root@overo:~# hexdump -e '4/1 "%02x " 6/2 " %4d " 1/1 " %02x" "n"' < /dev/hidraw0
00 02 02 00 -1 403 -60 82 421 189 ab
00 02 02 00 -9 374 -68 65 400 175 ab
00 02 02 00 -8 394 -65 62 396 174 ab
00 02 02 00 -19 378 -78 35 364 158 ab
6. Результаты
Рис.7. Цветные прямоугольники (слева — оригинальное изображение, справа — в наголовнике)
Плавных цветовых переходов не получается, даже при использовании резисторов серии E12 (с погрешностью 10%). Может быть, стоит использовать не 4, а 5 и более бит на цветовую составляющую.Рис.8. Firefox на экране наголовного дисплея (X11 запущен удаленно через WiFi)
Не лучшее качество приведенных выше фотографий объясняется не только использованием простейшего ЦАП, но и тем, что довольно проблематично разместить камеру так, чтобы изображение на экране наголовника оказалось точно в фокусе.vroom920.c — программа, демонстрирующая трехмерное стереоизображение и работу с отслеживанием положения головы. Она строит проволочное изображение цилиндрической комнаты вокруг пользователя.Рис.9. vroom920 в наголовном дисплее
7. В заключение
Внимание! Данный прототип, возможно, нарушает какие-либо технические стандарты и постановления относительно безопасности пользователя и электромагнитной связи.ЦАП. Правильнее было бы использовать качественные ЦАП. Так как это был первый «железный» проект автора, созданный с использованием печати плат с помощью струйного принтера, то автор постарался избежать любых усложнений, использовав простейшие ЦАП на резисторах.GPIO. ЦАП на резисторах на выходе GPIO, возможно, немного искажает электрические параметры OMAP, но проблема не столько в этом, сколько в том, что такие ЦАП быстро нагреваются. Если резисторы сожгут-таки Overo, автор обещает об этом написать.Время работы от батарей. Система потребляет 1 ампер — без оптимизации энергопотребления. Это вполне приемлемо, так как вряд ли найдется желающий носить на голове два работающих микроволновых передатчика, тяжелую литиевую батарею и очки, загораживающие обзор.Улучшение конструкции. Плата VR920 имеет много хитрых фич, которые не были использованы в данном проекте — поддержка различных VGA-режимов и разрешений и даже реализует экранные меню, накладывающиеся на изображение. Разумеется, можно все это убрать и напрямую работать с Kopin'овскими LCD-модулями. [VOGL2008] реализовал это для модели с разрешением 320x240, имеющей немного другой аналоговый RGB-интерфейс. Основные сложности здесь — работа с 9-вольтовыми сигналами, реализация инверсии полярности и разъем ZIF flex.
Библиография

[PCBPRT] Experiments in inkjet PCB printing: http://www.pabr.org/pcbprt/pcbprt.en.html
[VOGL2008] Gumstix Video out board :: Kopin K230LV adapter: http://pervasive.researchstudio.at/portal/node/49
Все права на описанную в данной статье конструкцию и включенные в статью фотографии принадлежат автору конструкции.
Перевод статьи сделан и размещен с согласия автора оригинальной статьи.
Первоисточник: http://www.pabr.org/wxhmd/doc/wxhmd.en.html

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js