dron-r

Stm32F4 И Аналоговая Камера

16 сообщений в этой теме

dron-r    13

Добрый день.

Хочу научиться подключать аналоговую видеокамеру к STM32F4 (дискавери).

У меня есть такая камера: 690TVL Ultra WDR Pixim SEAWOLF HD CCTV Mini Camera 2.8mm Lens OSD. У нее 3 выхода: +, -, сигнал.

Как можно ее подключить к STM32? В дальнейшем хочу к картинке примешать текстовые данные (OSD).

Кто соединял камеры, подскажите что смотреть/читать...

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
mail_robot    1 452

я не соединял, но покуривал вопрос. Камеру с аналоговым выходом будет сложновато подключить. Вообще камеры это не для STM-ок. Нужен как минимум фрэймбуфер, чтобы данные обрабатывать и все это еще и на довольно высоких скоростях. Это уже область применения ПЛИС, а не МК. Для утилитарных задач типа отловить по строкам чтото еще пойдет, а для полноценной покадровой (черезкадровой) обработки видео даже четырехсотки будет маловато. Поэтому забил на камеры

хз, возможно курил не тут траву. Поэтому мое мнение не база

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
andryxa    232

Для наложения текста на видео, камеру к STM подключать не обязательно, достаточно выделить горизонтальные и вертикальные синхроимпульсы из видеосигнала и подать их на микроконтроллер, в котором будет генерироваться текст. Сгенерированный текст подмешивается к сигналу видео и вы получаете видео с текстом или графикой. Для выделения синхроимпульсов можно воспользоваться микросхемой LM1881.

Изменено пользователем andryxa

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Геннадий    1 032

хз, возможно курил не тут траву. Поэтому мое мнение не база

Все так, для "оцифровки" видео они слабоваты.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
mail_robot    1 452

такое дело весьма даже красиво выглядит, если речь идет только об OSD без какого либо анализа видеопотока

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
o_l_e_g    1 643

Подмешивать в видеосигнал, умели и медленные 8-разрядные ЦПУ, вспомните телевизоры 4-го поколения.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
mail_robot    1 452

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

Изменено пользователем mail_robot

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
КЭС    1 226

Кто соединял камеры, подскажите что смотреть/читать...

Я делал на основе этого градусник. Это не STM, но для понимания, думаю сойдет. Сразу оговорюсь: если решите повторить, синхроимпульсы выделяйте отдельно (LM1881), в исходном виде схема нестабильна.

Прошу прощения за качество скриншота - делал через TeamViewer.

post-163091-0-34538000-1455292989_thumb.jpg

ПС. Градусник в центре, т.к. раньше был другой регистратор, там в кадре свободно было. Переписывать лень - надо на чердак лезть за МК :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
КЭС    1 226

Температура от ds18B20 - там по исходнику понятно, куда цеплять и про LM1881 есть коммент. Извиняюсь за кривость кода - дела давние :) Сразу скажу: прерывания приходится отключать, поэтому изо иногда подергивается. Надо было на LM335 делать или подобных - тупо напряжение мерить, да не было тогда... Да и не серьезно все это, так, по-играться :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
artos5    291

Понял, спасибо . Попробую расковырять код . А ПИКа хватает для ОСД? Ему не тяжело на 25МГц работать?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
КЭС    1 226

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Ваша публикация должна быть проверена модератором

Гость
Вы не авторизованы. Если у вас есть аккаунт, пожалуйста, войдите.
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Восстановить форматирование

  Разрешено не более 75 смайлов.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

Загрузка...

  • Похожие публикации

    • Автор: Геннадий К.
      В электронный журнал требуются внештатные авторы статей - опытные разработчики электроники или преподаватели профильных дисциплин ВУЗов.
      Тема - практическое применение электронных компонентов. Выдаем ТЗ на статьи, при необходимости высылаем отладочные платы, по итогам публикации выплачиваем гонорар.
    • Автор: rmatveev
      Всем привет!
      Задумано следующее: на малинку ставится веб-сервер (именно веб, а не HTTP, т.к. подразумевается тонкий клиент, но возможно я с терминами немного путаю), который обеспечивает управление через тонкий клиент по Ethernet, по Modbus RTU поверх RS-485 малинка должна будет управлять объектом.
      Т.е. задача такая: на удаленном рабочем месте визуализация объекта и его управление по Modbus.
      Изначально я хотел под это дело использовать какой-нибудь NUCLEO на процессоре STM32. Но почитал немного о подробностях установки TCP-IP стека и веб-сервера на STM32 и понял, что эту задачу они выполняют, но как-то сложновато. Вроде как Raspberry Pi намного лучше с этим должна справиться. Да и комьюнити намного больше.
      Ваши мнения, господа?
    • Автор: michaelukolov
      Доброго времени суток.
      Сразу скажу: я не прошу писать за меня код, просто натолкните, как правильнее это реализовать.
      Имеется STM32F103C8T6, необходимо на ней построить одноканальный генератор сигнала, желательно разной формы (синус/меандр) с регулировкой частоты и скважности от переменного резистора. Регулировки частоты хватило бы в пределах 1Гц - 20кГц (отсюда еще вопрос, годится ли для этого F103C8T6?). Хотелось бы еще иметь разные уровни (5В/12В), но это и сам сообразить могу.
      Если использовать HAL таймер, то когда он уже будет запущен, можно будет менять частоту/скважность?
      Как реализовать переключение синус/меандр?
    • Автор: artos5
      Всем привет! Столкнулся с проблемой которую не удается решить.
      прописал в файле Drive.h так:
      typedef struct { uint8_t FlgL; uint8_t FlgR; uint16_t Speed; uint16_t PulseL1; uint16_t PulseL2; uint16_t PulseR1; uint16_t PulseR2; } Motor_; typedef struct { uint8_t Status; } Button_; extern struct Motor_ Motor; extern struct Button_ Button; а в с файле:
      #include "Drive.h" Motor.Pulse = 3; // зададим значение переменной в структуре Motor в итоге 2 ошибки редефайн....
       
      как правильно с ними работать? За вчера и за сегодня уже наверное 1000 вариантов попробовал.
    • Автор: artos5
      Всем доброго времени суток!
      Необходима стабилизация частоты вращения двигателей по энкодерам. Энкодеры состоят из одного датчика холла на валу двигателя.
      Эту задачу на АВР я решил при помощи INT0 и аппаратного таймера , попробовал перенести код на STM32 . Попробовал через EXTI , результат не понравился .. Решил через таймер .
       
      void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim) { static uint8_t InpCaptIndexL=0, InpCaptIndexR=0; if (htim->Channel == HAL_TIM_ACTIVE_CHANNEL_1) // =RISING= EDGE DETECTED { // Get =RISING= EDGE Capture value if(InpCaptIndexR==0) { Motor.TimerOldR = HAL_TIM_ReadCapturedValue(htim, TIM_CHANNEL_1); InpCaptIndexR=1; } else { Motor.TimerNewR = HAL_TIM_ReadCapturedValue(htim, TIM_CHANNEL_1); InpCaptIndexR=0; } if (Motor.TimerOldR > Motor.TimerNewR) { Motor.MotorRData = (Motor.TimerOldR - Motor.TimerNewR); } else { Motor.MotorRData = (Motor.TimerNewR - Motor.TimerOldR); } // Reset Counter After Input Capture Interrupt Occurs __HAL_TIM_SET_COUNTER(&htim1,0x00); } if (htim->Channel == HAL_TIM_ACTIVE_CHANNEL_2) // =FALLING= EDGE DETECTED { // Get =FALLING= EDGE Capture value if(InpCaptIndexL==0) { Motor.TimerOldL = HAL_TIM_ReadCapturedValue(htim, TIM_CHANNEL_2); InpCaptIndexL=1; } else { Motor.TimerNewL = HAL_TIM_ReadCapturedValue(htim, TIM_CHANNEL_2); InpCaptIndexL=0; } if (Motor.TimerOldL > Motor.TimerNewL) { Motor.MotorLData = (Motor.TimerOldL - Motor.TimerNewL); } else { Motor.MotorLData = (Motor.TimerNewL - Motor.TimerOldL); } // Reset Counter After Input Capture Interrupt Occurs } StabMotorSpeed1(); __HAL_TIM_SET_COUNTER(&htim2, 0x00); } в интернете подсмотрел применение захвата но получается какая то каша . Осциллографом четко вижу меандр одинаковой частоты , а в юарт сыпет постоянно разные значения ...
      (имею ввиду переменную Motor.MotorLData и Motor.MotorRData)
      Тактирование 64МГц
      настройки таймера такие:
      TIM_ClockConfigTypeDef sClockSourceConfig = {0}; TIM_MasterConfigTypeDef sMasterConfig = {0}; TIM_IC_InitTypeDef sConfigIC = {0}; htim2.Instance = TIM2; htim2.Init.Prescaler = 6400; htim2.Init.CounterMode = TIM_COUNTERMODE_UP; htim2.Init.Period = 65535; htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; htim2.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; if (HAL_TIM_Base_Init(&htim2) != HAL_OK) { Error_Handler(); } sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL; if (HAL_TIM_ConfigClockSource(&htim2, &sClockSourceConfig) != HAL_OK) { Error_Handler(); } if (HAL_TIM_IC_Init(&htim2) != HAL_OK) { Error_Handler(); } sMasterConfig.MasterOutputTrigger = TIM_TRGO_UPDATE; sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; if (HAL_TIMEx_MasterConfigSynchronization(&htim2, &sMasterConfig) != HAL_OK) { Error_Handler(); } sConfigIC.ICPolarity = TIM_INPUTCHANNELPOLARITY_RISING; sConfigIC.ICSelection = TIM_ICSELECTION_DIRECTTI; sConfigIC.ICPrescaler = TIM_ICPSC_DIV1; sConfigIC.ICFilter = 0; if (HAL_TIM_IC_ConfigChannel(&htim2, &sConfigIC, TIM_CHANNEL_1) != HAL_OK) { Error_Handler(); } if (HAL_TIM_IC_ConfigChannel(&htim2, &sConfigIC, TIM_CHANNEL_2) != HAL_OK) { Error_Handler(); } что то я или недопонимаю , или что то не так приготавливаю..
       
      Пробовал и так:
      void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim) { if (htim->Channel == HAL_TIM_ACTIVE_CHANNEL_2) // =RISING= EDGE DETECTED { // Get =RISING= EDGE Capture value Motor.TimerR = HAL_TIM_ReadCapturedValue(htim, TIM_CHANNEL_2); // Reset Counter After Input Capture Interrupt Occurs __HAL_TIM_SET_COUNTER(&htim1,0x00); } if (htim->Channel == HAL_TIM_ACTIVE_CHANNEL_1) // =FALLING= EDGE DETECTED { // Get =FALLING= EDGE Capture value Motor.TimerL = HAL_TIM_ReadCapturedValue(htim, TIM_CHANNEL_1); // Reset Counter After Input Capture Interrupt Occurs } StabMotorSpeed(); __HAL_TIM_SET_COUNTER(&htim2, 0x00); } Результат тоже хуже чем на АВР , и в юарт сыпет каша (имею ввиду переменную Motor.TimerL и Motor.TimerR)
      Помогите пожалуйста разобраться в чем дело.
  • Сообщения

    • очень нужна особенно из-за с учетом того что окно компаратора   и как это окно будет реализовываться на концах интервала 0,5...4,5в при  питании схемы 5в???
    • Саша! Схема плохенькая, но читаемая. Питается предварительный УНЧ от двухполярного стабилизатора +/- 15 вольт, собранного на транзисторах  VT1, VT3, cтабилитроне VD1, конденсаторе С3 ( положительное плечо) и  VT2, VT4, VD2, C4 соответственно, отрицательное плечо. На схеме а (+15в), в (-15в). С этих точек запитан предварительный усилитель. На вход этого каскада приходит напряжение +/- 32в с силового трансформатора TV1, диодного моста VD1-VD4 и и сглаживающих конденсаторов С3 (+32в), провод 11 и C4 (- 32в), провод 13. Ну вот вроде и всё! Собираете блок питания +/- 32в и запитуете  двухполярный стабилизатор предварительного каскада.
    • Добавлю еще 3 штуки .
    • И насколько сильно влияет / какая зависимость от потребляемого тока либо мощности? Обычный закон Ома потребляемый ток на сопротивление нагрузки? Если на одной или каждой банке висит вольтметр, это тоже потребитель, получается вольтметры ставить нельзя. Т.е. адекватными решениями данной задачи являются ТОЛЬКО понижающий DC-DC с напряжения суммы всех батарей до нужного либо 220 на 12 на выходе из инвертора? А КПД при десятикратном преобразовании переменного в постоянный и обратно? Какой из этих 2х вариантов будет иметь больший КПД?
    • Любой, даже маломощный потребитель, подключённый к одной из банок, понизит на ней напряжение, и немного повысит на других.
    • Есть батарея из последовательно соединенных кислотных аккумуляторов, подключенных к бесперебойнику в буферном режиме. Очень хочу взять питание 12V для маломощного потребителя с одного из них. Какие тут есть подводные камни (кроме риска посадить один аккумулятор ниже 10.8 с известными последствиями)? Если я неправильно выразился, ниже схема. Батареи могут находиться в состоянии зарядки (буферный режим) или состоянии разряда через инвертор бесперебойника (при отсутствии 220 в сети). Как будет влиять параллельное включение на процесс зарядки / разрядки всех батарей?