Разработка лазерного проектора

p0

Давным давно, хотел сделать одну штуку, но все не хватало времени, и финансов сделать лазерный проектор. И спустя не мало времени у меня появился драйвер, и специальные механизмы «гальвосканеры», и тут началось…..

Сам гальвосканер выглядит вот так:

p5

Управляется напряжением от -12 до +12 вольт, с помощью драйвера, в моем случае, 2-х канальный драйвер  для оси X и Y выглядит так:

p4

Перечень разъемов:

  • слева и права разъемы по 7 контактов, используются для подключения гальвасканеров оси X и Y
  • в верху разъем через который я управляю зеркалами, в разьеме есть 3 контакта, земля, и 2 входа (ось X,Y), на входы подается напряжение от нуля до 5 вольт (я проверял работу до 5 вольт, но возможно и больше подавать)
  • По краям есть 2 резистора, (пометил их как 1 и 2) эти резисторы в схеме представляют собой делители напряжения для каждой из осей, но главное их назначение в том что позволяют управлять проецируемым маштабом изображения, индивидуально для каждой оси.
  • И самый нижний разъем, это питание -12 вольт, «земля», и +12вольт

Данный драйвер позволяет легко управлять гальвосканерами, подавая на вход аналоговый сигнал от нуля до +3.3 или 5 вольт, с применением различных контроллеров, типа STM, или ардуин.

Я для управления использую контроллер STM32F429-Discovery, т.к. в нем есть 2 канала ЦАП, и сам контроллер работает на достаточно высокой частоте.

Вот для примера видео работы:

И второе видео

В итоге получается вот такая анимация:

p1

p2

p3

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

Разрешение получаемого изображения составляет 4095х4095 точек, а почему именно такое разрешение????

Все дело в применяемом АЦП, в моем случае это 12-ти битный АЦП, (а 12 битное число может быть от нуля до 4095).

Для компьютера была написана программа на C#, которая подготавливает данные, и через USB посылает в контроллер данные, на текущий момент я реализовал несколько предо определенных вариантов данных, вот пример:

p6

и такой вариант:

p7

p8

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

В контроллере имеется буфер на 16000 байт, информация об отрезке занимает 14 байт, в итоге доступно для рисования 1142 линий. (Позже можно будет увеличить, т.к. на плате есть SRAM размером 64 Мбита, что даст возможность хранить информацию о более 500 тыс. отрезках).

Вывод изображения на контроллере работает так: имеется массив данных об отрезках, и контроллер по кругу постоянно из масива выводит данные, по таблице ниже, домик из 8 отрезков, представляет собой набор из 20956 точек, контроллер за секунду успевает этот набор точек вывести 33 раза, что соответствует 698673 точкам в секуду.

При тестах получил вот такие данные:

Выводимое изображение кол. Точек част. Осцило графа кол точек в секунду
домик 20956 16,67 698673,04
крест 9788 33,33 652468,08
звезда 18211 18,52 674535,44
сетка 1000х1000 20381 13,51 550694,62
секундная стрелка (анимация) 2000 71 284000,00
рамка 16380 16,39 536936,40
окружность 16849 23,26 783815,48

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

Вот на сегодня пока всё………….

2 комментария

  • Пингбэк: Лазерный выжигатель — Сайт Жейгурова Сергея

  • Спору нет. цифровое телевидение лучше во много раз аналогового. Правда становится тошно, когда цифровое начинает глючить и изображение рассыпается. Я к тому что может лучше попробовать по типу аналогового. Там же не нужен АЦП? Что в проекторе самое нужное? Сигнал яркости и развертка. Развертка у вас есть, а сигнал яркости возьмем со старого телевизора. Правда я не знаю можно ли менять яркость луча при помощи модуляции напряжения питания самого лазера. Может через какой-то жидкокристалический затвор?

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

*

code