jueves, 8 de febrero de 2018

Disparador remoto para cámaras Canon


Este artículo es una versión en castellano de una entrada previa del blog R6500

El artículo fue reseñado, en su dia en hackaday.

El objetivo del artículo es explicar el desarrollo de un disparador IR para ser utilizado en las cámaras reflex digitales Canon EOS. Debe imitar el funcionamiento del disparador remoto Canon RC-1 y se construirá alrededor de un microcontrolador MSP430G2553.



El dispositivo Canon RC-1 presenta dos opciones para disparar una cámara a distancia. Instantánea, justo cuando se recibe la señal y diferido dos segundos después de recibir la señal. De esta forma, si estás en la foto, tienes tiempo para ocultar el control remoto.Es posible encontrar clones del mando RC-1 con precios alrededor de 20 € en tiendas de fotografía locales, por lo que el objetivo de este desarrollo no es económico, sino para jugar con la miniaturización y las restricciones de energía en un diseño basado en microcontrolador.También lo usaré para agregar algunas características nuevas en el futuro ya que el sistema será reprogramable.Empecemos con lo básico.

Precedentes y especificaciones de señal

Desarrollar un clon RC-1 no es nada nuevo. He utilizado como referencia el trabajo EOS IR REMOTE en doc-diy.net. Este trabajo es bastante interesante para cualquiera que intente desarrollar un clon RC-1 ya que incluye la ingeniería inversa del control remoto RC-1 original. No me gusta mucho la conexión directa propuesta de un LED IR a los pines de salida de una MCU, pero no es de lo peor que he visto.A partir de esta referencia, obtuve las especificaciones de señal necesarias.Para enviar la señal de disparo, el control remoto RC-1 de Canon envía dos ráfagas de 16 impulsos. Las ráfagas tienen una frecuencia de aproximadamente 32700 Hz y se obtienen de un cristal de reloj (probablemente deberían ser 32768 Hz).La separación de dos ráfagas determina el funcionamiento del disparador.Si el inicio de ambas ráfagas se separa alrededor de 8ms (7.82ms) la toma se toma justo cuando se recibe la señal.Si la separación de la ráfaga es de aproximadamente 6 ms (5,86 ms), la toma se retrasa dos segundos después de recibir la señal.El protocolo de señal es bastante fácil de reproducir y eso simplifica el desarrollo de un clon RC-1.La referencia también indica que el control remoto RC-1 usa una señal de infrarrojos con una longitud de onda de 950 nm.

Selección de LED IR

El elemento principal en el disparador remoto es el LED infrarrojo que debe enviar las ráfagas de impulsos a la cámara. Para seleccionar un componente óptimo, necesitaríamos las características del receptor IR en las cámaras Canon EOS. Lamentablemente, no tengo esa información, pero se puede hacer una conjetura razonable de otros receptores IR que podemos encontrar en el mercado. He considerado un TSOP11 como ejemplo de un receptor IR típico (normalmente utilizado en receptores remotos IR).

Receptor IR TSOP11


El silicio es sensible a las longitudes de onda desde el infrarrojo cercano hasta el final del espectro visible. Los receptores IR generalmente incorporan un filtro IR que reduce la sensibilidad a las longitudes de onda visibles. De esa manera, la luz visible que brilla sobre el receptor no interfiere con la señal de IR recibida. En la siguiente figura, muestro la sensibilidad típica a la longitud de onda del silicio (a partir de un fotodiodo de silicio BPW33) junto con la sensibilidad de un receptor TSOP11 y el rango de longitud de onda visible. Como se puede ver, el filtro IR en el receptor elimina toda la sensibilidad a la luz de onda corta, incluido todo el rango visible.

Rango de longitudes de onda TSOP11

No podemos estar seguros de que las cámaras EOS tengan la misma sensibilidad que el TSOP11, pero es una suposición bastante razonable. El hecho de que el RC-1 use una longitud de onda de 950nm, justo en el centro de la curva TSOP11, nos da algo de confianza adicional.Conocer la sensibilidad del receptor es importante para seleccionar el LED del emisor IR para el proyecto, ya que no todos los LED IR se crean iguales.Por ejemplo, podemos verificar un LED TSUS5400 cuyas características se muestran a continuación:


La longitud de onda máxima está a 950 nm, justo en el centro del receptor TSOP11. Por lo tanto, será ideal para el proyecto. Pero la longitud de onda pico no es todo lo que necesitamos. También necesitamos potencia. Los LED TSUS tienen potencias entre 14 y 20 mW / sr. Es decir, 20 mW para cada estereorradian de ángulo sólido.En cada emisor radiante hay un compromiso entre el ángulo y la densidad de potencia. El ángulo radiante de los diodos TSUS es de +/- 22 grados. Como se puede mostrar en la siguiente curva:

Ángulo de emisión de los LED TSUS


Tener un gran ángulo extendido es bueno porque de esa manera no necesitamos apuntar exactamente en la dirección de la cámara, pero también es malo porque la energía total se extiende en un ángulo mayor por lo que incide menos energía en el receptor. Como siempre, no hay una solución que valga para todo y debemos optimizar. Podemos tener un buen alcance y una necesidad de apuntar bien o un mal alcance y requisitos de poca puntería. En este proyecto, consideré que 20mW / sr era bastante poco, así que revisé otras opciones de emisor IR.Finalmente reduje la selección a dos LED: TSHF5210 y TSAL6100. Ambos LED tienen el mismo ángulo de raciación de +/- 10 grados. Como puede ver en la siguiente figura, eso significa que necesitaremos una buena orientación para esos dispositivos.
Ángulo para los LEDs seleccionados

El rango de distancia será es mucho mejor porque esos LED tienen una densidad de potencia radiante bastante mayor:








Ambos cuentan con potencias radiantes de más de 100 mW / sr (mucho mejores que los LED TSUS) pero son diferentes en las longitudes de onda pico y en el tiempo de respuesta.Hay LED IR en el mercado con una mejor potencia radiante. El SFH4550, por ejemplo, presenta 400mW / sr a 100mA. Pero su ángulo de radiante es de solo +/3 grados, por lo que requerirá de mucha puntería para usarlo.Respecto al tiempo de respuesta, nos gustaría enviar ráfagas de señal 32768Hz. Eso significa un período de aproximadamente 30us. Un tiempo de respuesta de aproximadamente 1us en el TSAL6100 parece estar bien, pero el TSHF5210 es mejor.Respecto a la longitud de onda, el TSAL6100, a 940 nm, está muy cerca del valor máximo de 950 nm del RC-1 y del valor esperado del receptor IR. El proyecto donde obtuve las especificaciones RC-1 usó un LED SFH484 que tiene una longitud de onda máxima de 880nm, así que creo que los 890nm del TSHF5210 no podrían ser tan malos.Para analizar más a fondo la cuestión de la longitud de onda, podemos poner las respuestas del LED, obtenidas de sus hojas de datos, en la curva de sensibilidad esperada del receptor.

Comparación de longitud de onda LED

Como se puede ver, el diodo TSAL6100 está mejor posicionado en el centro del rango del receptor. Pero el TSHF5210 tiene un rendimiento mayor (180 mW / sr frente a 130 mW / sr). La mayor potencia radiante compensa en cierta medida la compensación de la longitud de onda. Como el TSHF5210 también es más rápido, seleccioné al final este diodo. De hecho, puedo cambiarlo en el futuro, así que no es gran cosa.

Diseño de circuito

El circuito para controlar el LED IR está construido alrededor de un microcontrolador MSP430G2553 en encapsulado DIP20. Esta MCU, como se muestra en la siguiente figura, presenta 16KB Flash, 512B RAM, dos puertos de 8 bits (el tercero no está disponible en encapsulado DIP) y varios periféricos. Puede ser excesivo para este proyecto, pero, por el costo adicional respecto de las MCU menos complejos de la familia MSP430G, no es necesario optimizar el tamaño del programa y se pueden agregar varias características en el futuro sin necesidad de cambiar de MCU.

Características MSP430G2553

Alrededor del MCU hay varios componentes, como podemos ver en el esquema a continuación.
Esquema circuital

El LED IR es atacado por un transistor bipolar BC547 en la configuración del seguidor del emisor (colector común). Esta configuración no requiere una resistencia de base como la configuración  emisor común y es más rápida porque el transistor nunca entra en la región de saturación. Sin embargo, esto tiene un precio, ya que la tensión de salida se reduce aproximadamente 0,5 V con respecto a la configuración del emisor común. En esta aplicación, esto no es problema porque solo necesitamos un máximo de 1.6V para atacar el LED a 100mA como podemos ver en su hoja de datos:

Datos TSHF5210


Podemos ver que la corriente directa máxima es de 100 mA. En nuestra aplicación, enviamos una ráfaga de 16 pulsos a 32768Hz. Eso le da una duración total de 488us que es más que el pico permitido de la corriente de 100us en la hoja de datos. Así que mantendremos la corriente a aproximadamente a 100mA.La configuración del emisor seguidor necesita una resistencia en serie con el LED que se puede calcular:Rseries = (Vport - Vled - Vbe) / IledDónde:
  
Vport: Es el voltaje de salida en un puerto de microcontrolador (3V)
  
Vled: Es el máximo voltaje del LED en directa Vf (1,6V)
  
Vbe: Es la tensión emisor-base del transistor (0,7V)
  
Iled: Es la corriente deseada para el LED

Ello da un valor de 7 Ohm para la resistencia. Seleccionaremos un valor de 6,8 Ohmios ya que es un valor de resistencia normalizado similar.En la práctica, la resistencia de salida de la batería, especialmente cuando envejece, también puede limitar la corriente, por lo que es fácil que la corriente caiga por debajo de 100 mA en la práctica usando la resistencia elegida.En el circuito, el transistor se puede controlar con dos puertos de salida: P1.4 y P2.1. Hemos seleccionado ambas salidas porque de esa manera podemos seleccionar tres formas diferentes de atacar el LED:
  •     Usando la operación GPIO normal con P1.4 o P2.1
  •     Usar la salida SMCLK con P1.4
  •     Usando la línea TA1.0 del temporizador 1 en P2.1

En el primer firmware de prueba del sistema, he usado operaciones normales de GPIO, pero en el futuro planeo probar otras opciones y, conectar la base a P1.4 y P2.1, deja las opciones solo en el lado del software.

MSP430G2553 en encapsulado de 20 pines

El circuito incluye un diodo LED rojo normal de 3 mm conectado a P1.0. Ese LED se encenderá cuando se envíe la señal de disparo y también se usará para cualquier otra interacción del usuario.Hay dos botones conectados a P1.3 y P1.5. Un botón dará un disparador instantáneo de la cámara y el otro dará la operación retardada de dos segundos.Dos condensadores de 10uF y 100nF proporcionan el filtrado de suministro necesario.El circuito también incluye un cristal de reloj de 32768 Hz 12pF y dos resistencias de 22k conectadas a P1.6 y P1.7. Ambos elementos son opcionales ya que el sistema puede funcionar sin ellos. De hecho, el primer firmware desarrollado no los usa. El cristal del reloj está incluido para proporcionar una mejor estabilidad de frecuencia que el oscilador DCO interno, si es necesario, y las dos resistencias están incluidas para usar el ADC del MCU para medir el voltaje de alimentación y dar una indicación de una situación de batería baja.Finalmente hay un conector ISP de 6 pines. Esta conexión, junto con la resistencia de 47k y el condensador de 1nF, permite programar el sistema mediante un cable específico que utiliza las señales TDIO y TCK. El pin 1 se elimina del conector para indicar su orientación correcta. El pin 6 está conectado a la batería CR2032 que alimenta el sistema. De esa forma podemos alimentar el sistema cortocircuitando los pines 5 y 6 usando un puente. El circuito no incluye un interruptor de encendido porque puede apagarse eliminando el puente y porque planeo usar los modos de muy baja potencia de la MCU en el firmware final para que no sea necesario apagar el sistema.

Prototipo en breadboard


Para probar el sistema, los elementos del circuito principal se colocaron en una placa de prueba sin soldadura. Para programar el MCU, se utilizó un Launchpad MSP430. Podría usar mi Launchpad FET construido anteriormente, pero estaba en uso en otro proyecto más importante. Se utilizó un Analog Discovery para medir los tiempos.



El primer firmware para el proyecto fue desarrollado en Energia, un entorno de desarrollo similar a Arduino para la familia MSP430. Los tiempos para la señal IR se ajustaron manualmente usando el osciloscopio Analog Discovery. Puede encontrar el código en esta referencia de Google Drive. Energia proporciona una manera rápida y sucia de desarrollar el firmware. El futuro firmware del sistema se desarrollará bajo MSP GCC, pero con el fin de verificar el funcionamiento del sistema, Energia está bien.ACTUALIZACIÓN: hay un nuevo firmware desarrollado con GCC. Ver más información al final de este artículo.


Implementación de circuito

El circuito final se implementa en una placa de soldadura de 100 mil de paso. El primer paso fue reunir todos los componentes para verificar el espacio necesario.

Componentes del proyecto (falta C de 1nF)

La siguiente figura muestra la distribución de los componentes sobre la placa. De esa manera se verifica el espacio necesario para poder cortarla placa al tamaño necesario.

Distribución de componentes


Después de cortar la placa a la medida adecuada, los componentes se soldaron y todas las conexiones se hicieron una por una. El enrutamiento se realizó sobre la marcha sin planificación previa, por lo que anoté todas las conexiones según se hacían para verificar no dejar ninguna.
Dibujo de enrutamiento de la placa

La siguiente figura muestra el lado superior del circuito soldado final. El condensador de 100uF, el LED IR y el cristal del reloj se bloquearon en su lugar con cables de metal soldados.

Lado superior de la placa

Para minimizar el espacio utilizado, el soporte de la batería se soldó en el lado inferior de la placa después de que todos los demás componentes se enrutaron

Lado inferior de la placa

El LED IR necesitaba algo de espuma para garantizar que estuviese correctamente alineada con la placa. Como el ángulo radiante es de solo +/- 10 grados, es importante hacerlo bien.

Alineación LED IR

Como se explicó anteriormente, el conector del ISP funciona como el interruptor de encendido. Como el primer firmware, desarrollado en Energia, no fue lo suficientemente eficiente, el jumper debe colocarse en posición de apagado cuando no está en uso. El próximo firmware, que se desarrollará con MSP GCC utilizará los modos de baja potencia de la MCU para que el jumper no tenga que colocarse en la posición OFF después de cada uso.

Jumper en el conector ISP

Por ahora, el sistema funciona bien para distancias de hasta 5 m. Suficiente para mis necesidades de un disparador IR de cámara.


Próximos pasos

El sistema, tal como está ahora si es completamente funcional. Sin embargo, planeo hacer algunas mejoras en el futuro:
  •     Desarrollar el firmware utilizando el Eclipse MSP GCC toolchain
  •     Implementar  el modo de bajo consumo MSP430
  •     Utilizar el cristal 32768Hz para proporcionar un timing más robusto
  •     Implementar la indicación de batería baja usando las resistencias conectadas a P1.6 y P1.7

 

Nuevo Firware (actualización el 26/11/2014)

He escrito un nuevo firmware para el Disparador IR. Puedes encontrarlo en el siguiente enlace:

http://r6500.blogspot.com.es/2014/11/new-firmware-for-ir-trigger.html

Se desarrolla utilizando un entorno portátil MSP430GCC que describo en esta otra referencia:


El nuevo firmware usa el cristal de 32768 Hz por lo que brinda una sincronización más estable en la señal generada. También mejora en gran medida la corriente inactiva que pasa de 3.2mA a 0.1uA.


Codigo en Github (11/02/2018)

El código está ahora disponible en Github, tanto para la primera versión desarrollada en Energia como la segunda versión en MSP430-GCC:

https://github.com/R6500/Canon-IR-trigger
 
 

No hay comentarios:

Publicar un comentario