Algoritmo de resistencia paralela

Construí un circuito que funciona como una carga variable. Consiste en 4 resistencias en paralelo - llamémoslas R 1 ,R 2 ,R 3 ,R 4 - cada una con un interruptor de activación (implementado con un transistor). R 1 tiene el valor más bajo, las otras resistencias tienen valor: R n = R 1 *2 n-1 . Actualmente estoy tratando de encontrar un algoritmo que calcule la resistencia más cercana que esté por encima de un valor deseado, R des . ¿Alguien tiene una idea de cómo podría implementarse esto, sin pasar por todos los valores posibles?

Bien, encontré una solución aún mejor, muy simple. Simplemente tome el LSB (valor R más alto = R 4 = R 1 2 3 ) y dividir la resistencia deseada, R d mi s y usa la función de suelo: F yo o o r ( L S B R d mi s ) y tiene el patrón de bits deseado que debe estar activado.
¿Puedes explicar un poco más? (1) Si las resistencias están en paralelo obtendrá una curva de caída inversa. Si están en serie, obtendrá una resistencia ascendente lineal con su patrón binario. ¿Seguro que quieres paralelo? (2) La función floor() no puede devolver ningún valor inferior a 1, por lo que descarta cualquier combinación que involucre la resistencia '1'.
(1) parte de la razón para elegir el paralelo es poder manejar una carga más grande. Cada resistencia (de potencia) toma parte de la corriente (en serie, todas tendrían que tomar la corriente completa). Además, en mi caso, la linealidad no es tan importante.
(2) debe tener en cuenta que con la solución sugerida en mi comentario, la resistencia siempre garantizará una resistencia la resistencia deseada. Además, tenga en cuenta que la función de suelo que devuelve en este caso es el patrón de bits de los valores de resistencia activados. Entonces, si quiero la resistencia más alta, es decir, el valor del LSB, conectaría R d mi s = R L S B y obten F yo o o r ( R L S B R L S B ) = 1 , es decir, en el caso de 4 resistencias, el valor de R 4 . ¿Tiene eso sentido?
Debo agregar que lo que quise decir con LSB en mi primer comentario es R L S B
Entonces, si las proporciones de sus resistencias son 1, 2, 4 y 8, entonces R L S B = 8. Si ahora quieres una resistencia de 'X' usas F yo o o r ( R L S B X ) = F yo o o r ( 8 X ) pero las únicas respuestas que puedes obtener son 0, 1 y 2 de tus 16 combinaciones posibles.
La función de piso obviamente solo puede dar valores enteros. El número de posibilidades con 4 resistencias debe ser 2 4 = dieciséis . Este es de hecho el caso. ¡Tienes que darte cuenta de que X no tiene que ser un número entero! De hecho, esto nos da todos los valores posibles (por supuesto, dar un valor que haga que el valor mínimo exceda 15 no será válido). Entonces digamos que quieres X = 0.6. esto te da F yo o o r ( 8 0.6 ) = 13 que en binario es 1101; la combinación correcta. @Transistor, espero que eso responda a tu pregunta.
Para cualquiera que pueda estar interesado en por qué esto funciona, lo anotaré aquí. Transformar todos los valores de resistencia a conductancia, gramo norte = 1 R norte , y tenga en cuenta que gramo norte = gramo yo s b ˙ 2 norte 1 , ahora la conductancia equivalente es: gramo mi q = gramo 1 + gramo 2 . . . gramo 4 = gramo 1 ˙ 2 0 + gramo 1 ˙ 2 1 + . . . + gramo 1 ˙ 2 3 = gramo 1 ˙ ( 2 0 + 2 1 + 2 2 + 2 3 ) El último término es exactamente el patrón de bits que buscamos, llamémoslo x. Resolviendo esto: gramo mi q = gramo 1 ˙ X X = gramo mi q gramo 1 = R 1 R mi q

Respuestas (1)

¿Alguien tiene una idea de cómo podría implementarse esto, sin pasar por todos los valores posibles?

Se llama aproximación sucesiva y se utiliza con bastante eficacia para determinar el valor digital de una señal analógica. Entonces, con 4 resistencias tomarías 4 decisiones para decidir cuál de los 15 valores por encima de cero es el más apropiado: -

ingrese la descripción de la imagen aquí

Para que esto funcione como un ADC, alimenta la resistencia desconocida con una corriente constante y haz lo mismo con la resistencia controlable. Luego, envíe ambas señales a un comparador que "toma la decisión".

Alternativamente, compre un ADC barato y deseche su red de transistores y resistencias a favor de una red R-2R mucho más estable y un algoritmo incorporado.

Esta es una buena solución. En realidad quería implementarlo en un uController, pero esta idea se traduce bien. ¡Gracias! Por cierto, la razón para no usar un DAC es que los transistores/resistencias se eligen para poder manejar potencias bastante grandes, que no es algo de lo que los ADC sean capaces, que yo sepa.