Как подключить камеру к микроконтроллеру
камера для микроконтроллера
Andrey » 26 ноя 2010, 21:37
Re: камера для микроконтроллера
EdGull » 26 ноя 2010, 21:39
Re: камера для микроконтроллера
Andrey » 26 ноя 2010, 21:53
ну тут всё от fps зависит я планирую примерно 5 6 fps!
Добавлено спустя 12 минут 40 секунд:
В принципе если честно то мне пока трудно оценить производительность, да и быстродействие сильно не нужно!
Re: камера для микроконтроллера
EdGull » 26 ноя 2010, 22:01
Re: камера для микроконтроллера
Andrey » 26 ноя 2010, 23:34
Вот в том и вопрос, очевидно что камера (я хочу подыскать что нить типо микросборки) должна иметь свой буффер захвата, либо рабоать через скоростной интерфейс USB точно хватит+встроенный в микроконтроллер DMA. Предположим что камера 256 цветовой палитры, тогда 640*480*1байт=300КБ для моих целей подойдёт на самом деле и 1 кадр в секунду, имеем что нужен интерфейс со скоростью 2.4 мегабит, я думаю что SPI справиться!
Добавлено спустя 53 минуты 48 секунд:
А вообще реально ли использовать камеру от сотового телефона.
Re: камера для микроконтроллера
yak-40 » 26 ноя 2010, 23:39
Re: камера для микроконтроллера
Andrey » 26 ноя 2010, 23:43
Re: камера для микроконтроллера
yak-40 » 26 ноя 2010, 23:57
Re: камера для микроконтроллера
Andrey » 27 ноя 2010, 00:08
Re: камера для микроконтроллера
EIN_ENGEL » 27 ноя 2010, 00:09
сенсор OV7725 управление по И2С, данные по параллельной шине.
осталась одна лишняя от проекта.
Re: камера для микроконтроллера
Michael_K » 27 ноя 2010, 00:11
Re: камера для микроконтроллера
Andrey » 27 ноя 2010, 00:54
Интересная вешч «OV7725»!!
Это что за зверь и можно ли его купить и где.
Или это только в единственном эксклюзивном вариант??
я правильно понят что данный модуль 0.3 мегапиксела. погуглив я так и не нашёл ничего вразумительного по поводу протокола и интерфейса если у вас есть проект поделитесь пожалуйста куском работы с камерой если не сложно! Заранее спасибо!!
Добавлено спустя 32 минуты 47 секунд:
Re: камера для микроконтроллера
AndreiSk » 27 ноя 2010, 01:29
Re: камера для микроконтроллера
EIN_ENGEL » 27 ноя 2010, 02:42
Andrey писал(а): Интересная вешч «OV7725»!!
Это что за зверь и можно ли его купить и где.
Или это только в единственном эксклюзивном вариант??
я правильно понят что данный модуль 0.3 мегапиксела. погуглив я так и не нашёл ничего вразумительного по поводу протокола и интерфейса если у вас есть проект поделитесь пожалуйста куском работы с камерой если не сложно! Заранее спасибо!!
Добавлено спустя 32 минуты 47 секунд:
Заказывали их где-то в инете. Не, не единственная. Если интересует, спрошу, может будем ещё заказывать.
Я с ней ковырялся только на аппаратном уровне. Собрал такую штуку, проверил ответ камеры по И2С и работу шины данных осциллографом. Дальше я ей уже не занимался.
У меня есть проект на С в Кодевижине под ХМегуА3.
Там инициализация контроллера, интерфейса И2С и тестовый опрос нескольких регистров.
Есть ещё куски кода, найденные в инете — какой-то проект с похожим сенсором, но там всё программно сделано, все интерфейсы. И карта регистров.
Да, ещё схематик, могу дать, если надо.
Re: камера для микроконтроллера
Doniak » 27 ноя 2010, 20:16
Основные характеристики
- Напряжение питания: 3,3 В
- Ток в активном режиме: 20 мА
- Ток в режиме сна: менее 20 мкА
- Уровень напряжения лог. 1 на контактах сигналов: в диапазоне 2,5 – 3 В
- Интерфейсы: SCCB (совместим с I2C) и параллельный 8 линий
- Разрешающая способность матрицы: 0,3 Мп
- максимальная: 640 x 480 px
- минимальная 40 x 30 px
- Развертка по строкам
- Поддерживается масштабирование изображения
- Форматы передачи цвета: RGB565, RGB555, RGB444, YUV/YCbCr 4:2:2, GRB 4:2:2, Raw RGB Data
- Количество кадров в секунду: до 30
- Рамер линзы: 1/6’’
- Угол обзора: 25°
- Отношение сигнал/шум: 46 дБ
- Динамический диапазон: 52 дБ
- Методы автокоррекции: AEC, AGC, AWB, ABF, ABLC
- Автокомпенсация помехи 50, 60 Гц
- Прогрессивная развертка
- Температура окружающего воздуха во время работы OV7670 300KP:
- рекомендуемая: от 0 до 50 °С
- предельная: от –30 до 70 °C
- Размер модуля: 35 х 34 x 26 мм
- Вес: 12 г
STM32F4Discovery – подключаем камеру по интерфейсу DCMI
STM32F4Discovery – подключаем камеру по интерфейсу DCMI
Когда-то, подключая камеру от мобильного телефона к микроконтроллеру STM32F407VGT6 (который имеет место быть на плате STM32F4Discovery), я даже не думал о том, что данный контроллер имеет специальный аппаратный интерфейс для данного дела. Может быть, невнимательно читал даташит, но я всегда считал, что интерфейс DCMI имеется только у чипов в корпусах UFBGA176 и LQFP от 144 ног. Однако, не так давно, открыл для себя озвученную деталь: 100-ногий STM32F407 также имеет DCMI на борту.
Являясь большим любителем изучения и совместного запуска различного мобильного железа (в частности, LCD и камер) с МК, мимо такого открытия я просто так пройти не смог, и решил восполнить данный пробел в изучении периферии STM32. Собственно, данный материал и посвящен описанию осуществления возникшей затеи.
Совсем немножко теории.
Прежде всего, нужно представлять, о чем идет речь – а точнее, что такое CMOS-камера, и с чем ее едят.
Данный вид камер осуществляет вывод информации с сенсора в цифровом виде: RGB, YCbCr, а также в сжатом виде – JPEG. У различных камер имеются свои нюансы в плане возможностей, я буду рассматривать вполне конкретный случай камеры с небольшим разрешением (VGA, 640×480), вытащенной мною в незапамятные времена из телефона «Siemens C72» (сенсор PixelPlus PO2030N). Данная камера является наиболее подходящей для изучения в виду простоты функционирования и принадлежности к типу более-менее распространенному. Давным-давно я вытравил для нее небольшую плату (для большего удобства подключения) – со стабилизатором на 2.8 В и подтягивающими резисторами на шине I2C. Вот она (шлейф и разъем камеры скрыты под кожухом).
Кроме нюансов в области формата данных, камеры также могут отличаться в области количества выводов синхронизации. У большинства (по моему мнению) сенсоров в наличии имеются специальные выводы строчной и кадровой синхронизации; но есть камеры, имеющие только лишь вывод строба пикселя, а о начале новой строки/кадра они дают знать с помощью специальных передаваемых кодов (к примеру, 0x00 или 0xFF). Камера, что есть у меня в наличии, имеет выводы внешней синхронизации.
Можно прикинуть примерное схематическое изображение камеры в виде блока.
По большей части CMOS-камеры управляются по интерфейсу I2C (хотя я встречал устройства, управляющиеся и по UART). По I2C производится настройка различных параметров, таких как: разрешение, цветовая гамма, формат данных на выходе, и т.д.
Вывод EXTCLK – тактирование камеры, которым нужно обеспечить ее извне. DCLK – строб-сигнал, по переднему или заднему фронту которого на шине данных камеры фиксируются данные (к примеру, байт данных одного пикселя матрицы, либо байт данных «полупикселя», если камера работает в режиме RGB565). HSYNC – сигнал горизонтальной синхронизации, свидетельствующий о начале новой строки, а VSYNC – сигнал синхронизации, активный уровень которого указывает на начало нового кадра. Выводы D0..D7 – шина данных; как правило, у подобных камер она восьмиразрядная.
Теперь подробнее о сигналах синхронизации.
На графиках видно, что камера настроена на активность сигнала DCLK только в активную фазу HSYNC (а именно эта фаза нас и интересует, тактовый сигнал в период «перевода строки» нам не интересен). Если камера настроена на разрешение 320×240, то в период каждого импульса HSYNC укладывается 320 импульсов DCLK, а в период VSYNC – 240 HSYNC.
При увеличении масштаба, видим, что творится на шине данных.
По переднему фронту (в данном случае) с шины данных снимается байт, который можно отправлять сразу на дисплей для отображения, либо «складывать» в буфер для последующей обработки.
В теории все более-менее понятно, теперь об интерфейсе DCMI микроконтроллера STM32.
Интерфейс DCMI способен работать с шиной данных шириной до 14 разрядов, поддерживает как аппаратную, так и программную синхронизацию, а также форматы данных: YCbCr, RGB и JPEG.
Кроме того, DCMI содержит буфер FIFO, имеет возможность настройки прерываний (в том числе и по заполнению регистра данных) и настройки работы через DMA.
Прерывания от DCMI могут вызываться при наступлении следующих условий: окончание линии, окончание кадра, переполнение приемного буфера, обнаружение ошибки синхронизации (при внутренней синхронизации).
В некоторое недоумение меня ввело отсутствие специального вывода тактирования камеры. Я не знаю, по каким причинам разработчики из SGS Microelectronics от него отказались, но по мне, было бы весьма удобно иметь, к примеру, настраиваемый источник тактовой частоты.
Лично я задействовал таймер-счетчик общего назначения, включенный в режиме ШИМ на генерацию меандра частотой 4 МГц. Большого FPS, конечно, с такой тактовой не получить, но сразу оговорюсь – дисплей, который я использую, подключен не к FSMC, поэтому самая длительная функция во всей цепи – функция вывода на LCD, следовательно, при бОльшей частоте происходит срыв вывода изображения на экран. Посему перед выгрузкой я глушу таймер, а после нее – включаю таймер снова.
Аппаратный модуль DCMI содержит, кроме регистра данных, десять регистров управления/статуса. Это: регистр управления (DCMI_CR), регистр состояния (DCMI_SR), регистр состояния прерываний (DCMI_RIS), регистр разрешения прерываний (DCMI_IER), регистр маски прерываний (DCMI_MIS), регистр сброса флагов прерываний (DCMI_ICR), регистр кодов внутренней синхронизации (DCMI_ESCR), регистр сброса маски кодов внутренней синхронизации (DCMI_ESUR), регистр стартовых значений при захвате части кадра (DCMI_CWSTRT) и регистр величины фрагмента кадра в режиме CropWindow (DCMI_CWSIZE). И, само собой, регистр данных – DCMI_DR.
В данном случае регистры, относящиеся к захвату части кадра и внутренней синхронизации нас не интересуют. Прерывания я тоже решил пока оставить в покое, поэтому рассмотреть подробнее стоит только регистр управления DCMI_CR и регистр состояния DCMI_SR.
Регистр управления дает нам возможность полностью настроить формат взаимодействия с камерой: размер шины данных, активные уровни линий HSYNC и VSYNC, и т.д.
По порядку. Бит ENABLE – само собой разумеется, включение интерфейса в работу. Поле EDM (extended data mode) – размер шины данных; шина у моей камеры восьмиразрядная, так что это поле следует установить в значение «00». Поле FCRC (frame capture rate control) дает возможность немного регулировать FPC: 00 – захватываются все приходящие кадры, 01 – каждый второй кадр, 10 – каждый четвертый. Биты VSPOL и HSPOL – активные уровни линий кадровой и строчной синхронизации. Активные уровни игнорируются, и данные в периоды активности не захватываются, это следует учитывать. PCKPOL – бит активного уровня строба пикселя – по какому фронту сигнала считывать данные с шины: переднему, или заднему. ESS – бит выбора способа синхронизации: внешняя, либо внутренняя. JPEG – выбор формата приходящих данных – сжатый, или нет. CROP – бит выбора захвата фрагмента кадра (crop window). Если данный бит установить в единицу, то интерфейс будет захватывать данные в окне, определяемом значениями в регистрах DCMI_CWSTRT и DCMI_CWSIZE.
Итак, настраиваем.
Так как я привык использовать стандартную библиотеку периферии от ST (хотя в первых итерациях работы с новой периферией никогда ее не использую, пока не поковыряюсь в регистрах «ручками»), настройку привожу именно с использованием библиотеки.
Собственно, для моих нужд можно было не трогать ни одного бита в регистре DCMI_CR – по умолчанию они сброшены – кроме битов CAPTURE и ENABLE.
Интерфейс сконфигурирован и готов к работе. После подачи тактового сигнала камере, интерфейс начнет принимать данные, которые нам необходимо обрабатывать.
Задачу для начала я поставил перед собой максимально простую – выводить изображение на дисплей, так что и обработка данных будет минимальной.
В своевременном считывании данных из приемного буфера нам поможет статусный регистр DCMI_SR.
Для чтения доступно весьма скудное количество битов – всего три. Биты HSYNC и VSYNC сигнализируют о состоянии соответствующих линий: активная фаза, либо перевод строки; самым интересным является бит FNE. Он указывает нам на заполнение буфера данными. Или на не заполнение.
Проверяя в постоянном цикле состояние бита FNE в DCMI_SR, узнаем о приходе данных в приемный тридцатидвухразрядный буфер. В моем случае данные будут располагаться так:
При установке бита FNE в регистре состояния DCMI_SR в приемном буфере будут содержаться четыре байта, данные двух соседних пикселей: Byte0 и Byte1 – 16 разрядов пикселя n, а Byte2 и Byte3 – 16 разрядов пикселя n+1. Мне останется только их объединить и отправить для отображения на дисплей. Итак, вот каким образом выглядит основной цикл:
То есть, я жду установки бита FNE в регистре состояния DCMI_SR, а после – в два захода выгружаю по 16 бит данных на дисплей.
На этом моменте хотелось бы подойти к логическому завершению, но не тут-то было.
После прошивки и перезапуска МК на дисплее я увидел… нет, я увидел вполне себе знакомую собственную физию, но в черно-синих оттенках. Красный и зеленый цвета отсутствовали напрочь.
После недолгих разборок с дебагером было обнаружено следующее: регистр данных интерфейса содержал лишь 16 бит данных одного пикселя, причем младшие 8 бит располагались на месте Byte0 (см. рис. выше), а старшие – на месте Byte2. Пространства Byte1 и Byte3 же были пусты. До сих пор я не понял, откуда такое несоответствие документации действительности, и, возможно, обращусь в STM.
В итоге удалось получить изображение с камеры с помощью интерфейса DCMI, хотя и не без некоторых сложностей. На рисунке привожу фотографию дисплея, на который выводилось изображение демо-борды STM32F3Discovery с моей камеры.
А вот что увидим на выводах EXTCLK, PIXCK, HSYNC и VSYNC, если подключить логический анализатор.
Всё выглядит именно так, как и ожидалось: 240 импульсов HSYNC укладывается в длительность одного VSYNC, 320 PIXCK – в одном HSYNC. В активную фазу HSYNC камера не выдает сигналов PIXCK – именно так, как она была настроена.
Вообще говоря, интерфейс меня несколько разочаровал. Отсутствие «штатной» ноги тактирования камеры, отсутствие мало-мальски интересных встроенных фишек (а как насчет аппаратного кодера JPEG?), да еще и танцы с бубном вокруг располовиненного FIFO…
Организуя работу с камерой на прерываниях PIXCK, HSYNC и VSYNC я не имел столько головняка, сколько поимел, работая с камерой с помощью аппаратного DCMI.
Тем не менее, в ближайшее время буду пробовать осуществлять захват кадра, сжатие оного в JPEG, и пробовать писать картинку на SD карту.
PS. На всякий случай даю ссылку на проект для «Code::Blocks» — вдруг пригодится кому.
Установка сервопривода
Для Ардуино и сервопривода подключения нам потребуется:
- плата Arduino
- 3 провода со стандартным 3-х пиновым разъемом с шагом 2.54мм
- сервопривод
- программа Arduino IDE
Схематически подключение Ардуино к сервоприводу выглядит так:
Цвета проводов могут меняться, но мы будем ориентироваться на следующее распределение:
- Черный (коричневый) — для земли. Подключается к GND выводу,
- Красный — источник питания. Подключается к контакту VTG,
- Оранжевый (белый) — управляющий сигнал. Предназначен для цифрового вывода SIG.
Шаг 7. Заключение
Эта дешевая и простая в использовании Arduino-совместимая камера полезна для проектов видеонаблюдения или в качестве системы для робототехники, использующей платформы, такие как OpenCV. Также можно использовать как обычную веб-камеру.
OV7670 представляет собой модуль камеры с буфером типа FIFO. В настоящее время он производится несколькими фирмами и доступен с различной распиновкой. OV7670 обеспечивает полномасштабное (full frame) 8 битовое изображение в окне. OV7670 умеет работать с различными форматами видео изображения. В VGA разрешении камера обеспечивает до 30 кадров в секунду.
Модуль камеры OV7670 включает:
- массив датчиков изображений (разрешения примерно 656 x 488 пикселов);
- тактовый генератор;
- процессор обработки сигналов;
- аналого-цифровые преобразователи;
- генератор тестовых шаблонов;
- цифровой сигнальный процессор;
- устройство для масштабирования изображений;
- цифровой видео порт;
- светодиод и выход управления стробоскопической вспышкой.
Датчик изображения камеры OV7670 управляется с помощью шины SCCB (Serial Camera Control Bus — последовательная шина управления камерой) по протоколу I2C (контакты SIOC, SIOD) с максимальной частотой синхронизации 400 кГц.
Внешний вид модуля камеры OV7670 показан на следующих рисунках.
Полезная информация
После установки приложения Camera Connect на мобильное устройство может потребоваться установить новое подключение с камерой, чтобы обеспечить ее правильное подключение к мобильному устройству.
*Canon Camera Connect предлагает следующие функции:
[Функции и совместимые модели]
1) Подключение к камере по Wi-Fi для передачи изображений***, удаленная съемка в режиме Live View и настройка даты/времени.
2) Добавление данных о местоположении на изображения в камере
3) Bluetooth-соединение с поддерживаемыми моделями камер
[Поддерживаемые функции: 1, 2, 3]
PowerShot SX730 HS **/ G9 X Mark II
EOS 200D**, EOS M6, EOS M5
[Поддерживаемые функции: 1, 3]
EOS 6D Mark II, EOS 77D, EOS 800D (удаленный спуск затвора камеры при помощи Bluetooth доступен с пультом BR-E1, который приобретается отдельно)
[Поддерживаемые функции: 1, 2]
PowerShot SX430 IS / SX432 IS / SX620 HS / G7 X Mark II / SX720 HS / SX540 HS / SX420 IS / G5 X / G9 X / G3 X / SX530 HS / SX 710 HS / SX 610 HS / G7 X / SX60 HS / N2 / G1 X Mark II / SX700 HS / SX600 HS / N100
IXUS 190 / 285 HS / 180 / 182 / 275 HS / 265 HS
PowerShot G16* / S120* / S200* / SX510 HS* / SX280 HS* / N* / A3500 IS* / A3550 IS* / S110*
IXUS 255 HS* / 140* / 135* / 245 HS*
[Поддерживаемые функции: 1]
EOS 5D Mark IV, EOS 1300D, EOS 80D, EOS 760D, EOS 750D, EOS 70D, EOS 6D, EOS M10, EOS M3
IXUS 510 HS* / 240 HS*
LEGRIA HF R86* / HF R87*/ HF R88*
* Не поддерживается удаленная съемка в режиме Live View
** Можно добавить данные о местоположении на изображения в камере при помощи Bluetooth.
*** Изображения CR2 будут уменьшены до оптимального размера для вашего устройства в зависимости от использованной камеры. Передача файлов RAW CR2 в полном разрешении НЕДОСТУПНА.
Операционная система:
— iOS 9.3/10.3
— Android OS 5.0–5.1/6.0/7.0–7.1
Системные требования для Bluetooth:
Для установки Bluetooth-соединения камера должна поддерживать Bluetooth, а на вашем устройстве должен быть Bluetooth версии 4.0 или выше (поддерживается технология Bluetooth с низким энергопотреблением). Устройства с поддержкой Bluetooth версии 4.0: iPhone 4s и более поздние модели, iPad 3-го поколения и более поздние, iPod touch 5-го поколения и более поздние.
Совместимые форматы файлов:
— JPEG, MP4, MOV
- Файлы MOV, записанные с помощью камер EOS, не могут быть сохранены.
- Файлы AVCHD, записанные с помощью видеокамеры, не могут быть сохранены.
Примечание:
— Если приложение не работает надлежащим образом, закройте его и попробуйте запустить снова.
— Длительное использование GPS в фоновом режиме может значительно снизить продолжительность работы от аккумулятора.
— При использовании мощного адаптера сервопривода установите для функции съемки в режиме Live View значение ON (Вкл.).
Мы используем файлы cookie, чтобы обеспечить вам наиболее полные возможности взаимодействия с Canon и наиболее удобную работу с нашим веб-сайтом. Узнайте больше об использовании файлов cookie и измените ваши настройки cookie здесь. Вы принимаете нашу политику использования файлов cookie на вашем устройстве, продолжая использовать наш веб-сайт или нажав Принимаю.