Controlar la corriente a través de múltiples LED de forma lineal y eficiente

Tengo alrededor de 100 LED infrarrojos, cada uno con un fototransistor adyacente para detectar pequeñas diferencias en la distancia de varios objetos ( QRE1113 ).

Como los materiales de los objetos difieren, quiero poder calibrar la intensidad de cada emisor por separado para compensar esto. Como la salida de cada fototransistor se mide con una frecuencia de muestreo muy alta (~50 ksps), no puedo usar un controlador PWM, ya que normalmente funcionan alrededor de 20 kHz, por lo que necesitan controlar directamente el flujo de corriente a través de cada emisor IR.

Como me gustaría hacer esta fase de calibración sobre I2C, mi idea fue usar un potenciómetro digital como el MCP4451 como reóstato. Tiene 4 canales, por lo que pensé en usarlo como resistencia limitadora de corriente para 4 LED. Si bien esto es atractivo por un lado (precio bajo, configuración sencilla), veo dos problemas principales:

  1. Todos los potenciómetros digitales asequibles tienen un rango de al menos 5kΩ. Necesito un rango de alrededor de 400Ω. Al usar una resistencia paralela, podría ajustar el rango, pero el rango resultante ya no sería lineal. Si bien no se requiere una linealidad perfecta, quiero poder hacer ajustes razonables en todas las regiones, y no solo en el extremo de bajo amperaje.

  2. Eficiencia. Estoy manejando todo esto desde una fuente de 5V, y sin hardware de calibración pude poner 3 LED en serie con una resistencia. Por lo tanto, el consumo de energía promedio por LED fue de alrededor de 30 mW, lo cual es excelente. Con este enfoque, cada LED se mantendría solo con su resistencia, lo que generaría 100 mW adicionales de calor para el funcionamiento del LED a 30 mW.

En el siguiente gráfico, puede ver la relación resultante de la configuración del limpiaparabrisas del MCP4415 con la resistencia total resultante y la corriente directa del LED. Los cálculos son para usar una resistencia de 680 Ω en paralelo y una de 68 Ω en serie (para establecer el máximo):

ajuste del limpiaparabrisas a la resistencia y la corriente directa

Circuito relacionado:

esquemático

simular este circuito : esquema creado con CircuitLab

Mi principal problema es definitivamente el limpiaparabrisas no lineal a la relación de resistencia, la eficiencia es solo una consideración secundaria. Estoy abierto a cualquier solución, pero no puedo permitirme un controlador LED dedicado para cada LED, ya que mi presupuesto es limitado, por lo que el MCP4415 me pareció una solución atractiva (~25 € para controlar todos los LED).

EDITAR: Quiero aclarar algunos aspectos:

  • Me gustaría poder controlar la corriente de cada LED por separado y de forma lineal, de 10 mA a 30 mA en al menos 64 pasos. No necesito una precisión absoluta para ninguno de estos valores, solo una forma aproximadamente uniforme de recorrer este rango para ajustar el brillo del LED de forma lineal.
  • La eficiencia no es mi objetivo principal. La funcionalidad y el costo son los factores más importantes.
  • Tenía la esperanza de poder usar algo similar al MCP4415, ya que es económico y no necesita una interfaz activa todo el tiempo (conserva su valor al menos hasta que se apaga).
  • Mi fase de calibración ocurre una vez al inicio, donde me aproximaré iterativamente a la corriente correcta usando la retroalimentación del fototransistor.
  • La red de 5 V alimentará principalmente estos LED y algunos circuitos integrados lógicos. Si es necesario, puedo cambiar a otro voltaje.

EDIT 2: Respuestas adicionales a las preguntas de los comentarios.

En primer lugar, permítanme aclarar que este no es un proyecto comercial, sino solo un proyecto personal. Además, soy informático y no ingeniero electrónico, así que tenlo en cuenta. (Por lo tanto, no hay especificaciones que deba seguir). Estoy abierto a cualquier sugerencia.

Mostrar aplicación. ¿Y qué distancia y rango de reflectividad?

Los objetos están hechos de madera y no se pueden pintar ni modificar. Por lo tanto, la reflectancia varía según los diferentes objetos (puntos oscuros, etc.).

Lo más cercano posible es alrededor de 3 mm (+- 1 mm), lo más lejos es alrededor de 13 mm (+-2 mm). Entonces, la distancia de viaje será de alrededor de 9-10 mm para cada objeto. Todo es madera, por lo tanto todas las medidas tienen estas altas tolerancias. El PCB ya está en el punto más alejado de los objetos. Probablemente no pueda cambiar estas distancias (tal vez -+ 1 mm).

Tengo ADC de 12 bits que miden los fototransistores y solo quiero desperdiciar la menor precisión posible. Por lo tanto, quiero ajustar el LED IR para que el punto cercano (3 mm) tenga aproximadamente el mismo valor ADC para todos los objetos. Aproximadamente igual es todo lo que necesito: simplemente no quiero que un ADC mida 3000 en el punto cercano y otro mida 3500. Los puntos lejanos no son importantes.

Básicamente, ha realizado algunas interpretaciones deficientes de la hoja de datos, suposiciones y, por lo tanto, malas elecciones. hFE=CTR (efectivo) = IcON/If varía de 0,2 % a 0,9 % a 10 mA a 1 mm utilizando un espejo de alumbre pulido. ¿Cuál es su especificación de tolerancia al error? ¿Y qué variación en la altura de la viruta? 0,1 mm máx. 0,05 mm?

Ya veo, esta es también la razón por la que quiero poder hacer la calibración. Toda la información de tolerancia que pude recopilar se encuentra arriba.

Con respecto a la altura del chip: tengo que soldar a mano todos los chips, así que suponga un pesimista de 1 mm.

¿Dices 3 IR en serie pero luego 1 R por LED IR? ¿No muestra ninguno en serie?

Lo siento si no he sido claro. Quise decir una resistencia por 3 LED en serie, este es el diseño actual (abajo). Lo que quise decir es que no puedo ponerlos en serie si quiero controlarlos por separado.

En total tengo 90 sensores, por lo que este patrón se repite 30 veces.

Diseño actual

Los comentarios no son para una discusión extensa; esta conversación se ha movido a chat . Cualquier conclusión a la que se llegue debe volver a editarse en la pregunta y/o cualquier respuesta.
Si está utilizando CMOS para controlar los LED (lado alto o bajo), el requisito del CMOS puede variar de 20 a cada 60 ohmios según el Vdd del chip ARM o Microchip, etc. (Vol/Iol=Req) @ Vdd varía con Vdd
Aproximadamente igual es todo lo que necesito. Simplemente no quiero que un ADC mida 3000 en el punto cercano y otro mida 3500. Sé que esto no es lo que pediste, pero podría ser más simple hacer que todos los LED tengan el mismo brillo desde una fuente de alimentación bien regulada, y luego simplemente calibre las lecturas del ADC en el inicio y post-procese sus lecturas para compensar lo que midió durante la calibración. Es posible que pierda un poco de precisión de esa manera para algunos objetos, pero dudo que esa sea la mayor fuente de imprecisión de todos modos. Solo tú puedes hacer esta llamada, pero vale la pena considerarlo :)
@marcelm Bueno, pedí sugerencias ;) - Así que sí, puedo hacer eso. Solo hay un problema que persistirá, y es que no puedo hacer nada si mis valores se recortan, es decir, mi brillo es demasiado alto para un objeto. Pero como no hay otra solución viable en este momento, creo que no tengo una opción real aquí, ¿verdad?

Respuestas (1)

¿Qué tal una fuente de corriente OPAMP alimentada por un voltaje variable modulado de PWM?

esquemático

simular este circuito : esquema creado con CircuitLab

La idea es hacer que el OA1 regule la corriente de una manera que haga que el voltaje en Rsense sea igual a Vin, haciendo así que la corriente a través del LED sea proporcional a Vin. OA2 actúa como un amplificador de búfer para ese voltaje variable que puede ser generado por PWM y filtrado a cuasi-DC.

OA2 proporciona una forma de modular Vin con su señal digital Vmod. La modulación se invierte: cuando Vmod es alto, Vin cae a cero, mientras que Vmod = 0 hace que Vin se establezca proporcionalmente al ciclo de trabajo de PWM.

Realmente aprecio su respuesta, pero me parece una buena solución solo para algunos LED, ya que necesitaría proporcionar constantemente 100 señales PWM diferentes en mi caso, una para cada uno de estos circuitos por LED. Si no quiero hacer esto desde un µC, tendría que obtener adicionalmente un IC temporizador para cada uno de estos y usar el potenciómetro digital que he mencionado, que retiene el valor programado. En general, esto parece volverse muy complicado y costoso a esta escala. Esperaba poder hacerlo con solo unos pocos componentes adicionales.
@nyronium, aún puede usar sus potenciómetros digitales en lugar del PWM y el filtro de paso bajo, usando divisores de voltaje triviales. No creo que encuentres una solución usando sustancialmente menos componentes, a menos que haya un IC específico que haga exactamente lo que quieres. Necesita modulación que no puede prescindir de un componente activo. Puede colocar OA1 y conectar Q1 directamente a Vin, dejando que la resistencia actúe como una fuente de corriente controlada por voltaje de un hombre pobre, pero eso es todo lo que puede simplificar.
Inicialmente pensé que podría haber una manera realmente fácil, de la cual no estaba al tanto. Pero esto parece ser tan simple como parece y aunque este diseño es demasiado grande para mi caso de uso, creo que responde la pregunta. Gracias.
@nyronium Tenga en cuenta que no tiene que aceptar mi respuesta si realmente no ayuda. Si bien no conozco una mejor manera de hacer esto, alguien más podría hacerlo. No tener una respuesta aceptada puede llamar un poco más la atención sobre su pregunta, aunque en mi experiencia, pocos usuarios pasan por una lista de preguntas sin respuesta aceptada cuando buscan un nuevo desafío. Lamentablemente, la mayoría de las personas (incluyéndome a mí) generalmente revisan la lista HNQ y otra respuesta inútil a una pregunta que ya se respondió más de 10 veces.
Bueno, acepté tu respuesta porque respondiste la pregunta que te hice. Soy consciente de que esto reducirá la probabilidad de otras respuestas, pero mientras discutía noté que las personas se pierden en detalles que no importan, porque creo que he proporcionado demasiada información no relacionada. Supongo que mi pregunta habría sido mejor recibida si hubiera preguntado algo como "Fuente de corriente más simple para 10-30 mA regulada por un potenciómetro de 5k" . Eso eliminaría todas las preguntas de seguimiento innecesarias. Pero supongo que es demasiado tarde para eso, ya que inmediatamente se marcaría como duplicado.
@nyronium Las preguntas que se enfocan en una sola solución y no brindan suficiente contexto también se reciben mal a veces (piense "¿es esta tarea?" y "¿estás casado con esa olla?" tipo de comentarios). Oh bien.