Proporcionar un voltaje de CC ajustable lineal de PWM (1,5 V a 3,3 V)

No soy ingeniero eléctrico, por lo que una tarea simple me ha desconcertado durante la última semana más o menos.

Estoy trabajando en un proyecto en el que debo alimentar un dispositivo de caja negra con un voltaje ajustable estable. La caja tomará muestras del voltaje proporcionado por la lectura analógica.

Las lecturas que proporcione serán alrededor de 1,8 y 3,1 V (2 modos de funcionamiento) y cambiarán para valores de 0,01 V a límites de +-0,2 (por lo que en el modo 1 necesito lecturas entre 1,6 y 2,0 y en el modo 2 necesita lecturas entre 2.9 y 3.3) Estas lecturas cambiarán, por lo que Vout debe reflejar los cambios de manera oportuna.

Estoy usando un Arduino para obtener los datos, calcular el voltaje y sacar un PWM.

Estoy usando un pro mini, alimentado por 5V aplicados a su pin sin procesar que pone el dispositivo en modo 3.3V. Por lo tanto, mi ciclo Aref y 100% PWM equivalen a 3.3V

La frecuencia de PWM es de aproximadamente 20 kHz (puedo modificar esto ligeramente si es necesario).

He juntado otro Arduino para que actúe como mi analizador de señal (ya que me falta un osciloscopio), con el que estoy probando la línea Vout (implementa una pantalla LCD y empuja los datos de lectura analógica a la pantalla, con algunos calificadores adicionales puedo hacer que me muestre los valores extremos de Vout).

Entonces, ahora que puedo ver lo que se está escupiendo, puedo comenzar a trabajar en ello. Así que leo mucha literatura sobre filtros, pero la mitad de ella realmente no tiene sentido para mí. Lo que deduje es que necesito implementar un filtro de paso bajo para suavizar Vout.

Así que traté de construir un filtro RC, seleccionando los valores C y R "por suerte", probando diferentes combinaciones y órdenes de filtros RC que puedo lograr para bajar el swing de Vout (inicialmente 3.3-0) a 3.3-2.7 cuando apunta a 3V. Aunque mejor, todavía no está cerca de la precisión que necesito. (Las piezas que tengo a mano en este momento son un poco limitadas, por lo que había 0.1uC, 1/8uC 1uC, 100uC, 1500uC y resistencias de 10K a 0.25K en mis pruebas) IIRC la combinación que he establecido actualmente es 100uC/1K 1er pedido (agregar pedidos me estaba dando mejoras insignificantes, por lo que podría estar malinterpretando ese concepto)

La lectura adicional ha insinuado que podría necesitar un poco más que un filtro para lidiar con esto, hasta ahora, la mejor sugerencia de Internet parece ser una combinación de LM317 como un regulador ajustable y un MOSFET para convertir el PWM en una resistencia variable.

La figura 37 en la hoja técnica del LM317 parece ser la parte del regulador que podría usar para esto, pero parece que no puedo descifrar la parte de resistencia variable que necesito.

Entonces, mi pregunta es doble, ya que asumo que podría haber ido en la dirección equivocada con esto:

  1. ¿Es ésta la mejor manera de hacer ésto? Estoy tratando de mantener bajos los números de piezas y costos, por lo que no quiero seguir todo el camino del regulador MOSFET si resulta que solo estoy usando un filtro incorrecto.

  2. ¿Cómo resuelvo este desafío?

¿Qué tan rápido necesita cambiar la señal final? ¿Cuál es la impedancia de entrada del dispositivo que está manejando?
Si estoy leyendo esto correctamente, está tomando un voltaje analógico, convirtiéndolo en digital a través de un arduino, luego tomando la salida digital del arduino, convirtiéndolo en un voltaje analógico y luego alimentando este voltaje analógico en una 'caja negra' que convertirlo Me parece que estás complicando totalmente el diseño. Un 'voltaje estable y ajustable no significa necesariamente un regulador variable. Resolución (0.01V) no necesariamente significa 'pasos de'.
@DwayneReid: El cambio de señal debería ocurrir en una fracción de segundo, un 1/10 se siente todavía marginalmente aceptable, tal vez 1/2 como límite máximo, pero idealmente por debajo de 1/10. No puedo responder a la pregunta de impedancia, falta conocimiento.
@JImDearden: Creo que está malinterpretando, probablemente debido a mi escritura; El producto es una lectura de arduino de un sensor separado. Este arduino procesa la entrada del sensor y luego envía esta señal al receptor (caja negra). El segundo arduino mencionado solo se usa para crear prototipos para analizar la señal Vout. Una vez que esté satisfecho con Vout, lo eliminaré de la compilación
@DwayneReid: seguimiento de la cuestión de la impedancia; el pin de lectura del receptor estaría en un estado de alta impedancia, una búsqueda exhaustiva de las hojas de datos arroja el número 100Mohm, aunque se sugiere una impedancia de salida de 10K o menos para una mejor precisión.

Respuestas (4)

Hay muchas formas de hacer lo que quieras. Incluso hay circuitos integrados que lo harán por usted (reguladores de voltaje programables).

Pero si desea seguir su camino, primero necesita un PWM con una resolución de más de 8 bits (10 mV es el paso, 3,3 V es el voltaje máximo que desea alcanzar; esto es 330 pasos o 9 bits), asegúrese de que su PWM tiene la resolución correcta.

Entonces necesita filtrar la salida PWM. La solución "más simple" es de hecho RC. Este no es el más eficiente, pero está bien si puede aceptar alguna ondulación. Tome una frecuencia de manguito que sea al menos 10 veces más pequeña que la frecuencia PWM para una atenuación de ondulación razonable (2 kHz en su caso). Para un filtro RC de primer orden, seleccione R de la siguiente manera:

R = 1/(2 x pi x C xf)

Luego, debe almacenar en búfer para la salida del filtro. Esto se puede hacer con un amplificador operacional usado como seguidor. Asegúrese de que la tensión de alimentación del amplificador operacional sea suficiente para evitar la saturación y que el amplificador pueda suministrar suficiente corriente para su aplicación.

Puedes tener algo así:

esquemático

simular este circuito : esquema creado con CircuitLab

Seleccione R1/R2 para establecer la ganancia (o atenuación), seleccione R4/(R3+R4) para establecer la compensación, seleccione C*R2 para establecer la frecuencia del filtro. La salida será opuesta a su configuración de PWM (0 = máx., 255 = mín.).

Estoy tratando de reducir la ondulación en la medida de lo posible, para obtener un Vout consistente, ya que no sé cómo se procesa la señal en el otro lado, de lo contrario, solo promediaría en el receptor y no me molestaría en suavizar , pero esa no es una opción
Entonces, ¿cuál es su objetivo de onda? 10 mV? 1 mV?
Por cierto, el Arduino PWM predeterminado es de 5 V pico a pico y tiene una resolución de 8 bits o 20 mV. Hay un circuito que puede cambiarlo a 1,0 V - 3,5 V con una resolución de 10 mV. Esto puede servir como interfaz "R" para su filtro RC o ser parte de su búfer.
Acabo de notar que omití un detalle anteriormente, estoy ejecutando el arduino en modo 3.3V, por lo que mi pico PWM es 3.3. (OP corregido para reflejar esto) ¿Significaría eso que necesitaría aplicar 3.3 en lugar de 5V en su esquema (por encima de R3)? Tanto 5 como 3.3 están disponibles, por lo que es solo una cuestión de cuál conectar
3,3 V o 5 V están bien. Cambia la configuración de R1-R2 y R3-R4, eso es todo.

Si tiene una señal PWM de 5 V, a 20 kHz, un filtro de paso bajo con un ciclo de trabajo del 10 % a unos 2 kHz debería proporcionarle unos 0,5 V, el 50 % serían unos 2,5 V y el 100 % serían 5 V. Es solo el valor medio en un ciclo PWM.

Una vez que tenga esto en la mano, debe saber cómo escalar y compensar su señal. Si necesita escalar por una ganancia inferior a uno, necesita un divisor de voltaje (es decir, resistencias en serie) o un amplificador inversor (amplificador operacional), que deberá volver a invertir más adelante. La compensación se manejaría con un amplificador operacional.

La otra alternativa es modificar los anchos de pulso PWM para obtener lo que necesita.

Sí, obtengo la ecuación de pwm a voltaje, eso es bastante sencillo, pero necesito que la señal final sea una línea plana
Un filtro RC de 2kHz hará eso
¿Tendría que ser exactamente 10 veces más pequeño que la frecuencia pwm o el truco es hacerlo más de 10 veces más pequeño?
Por lo general, optamos por un factor de diez para un filtro de un polo.

Me parece que un componente llamado Digital to Analog Converter (DAC) haría lo que usted quiere. Probablemente pueda hacer lo que quiera con PWM y un filtro de paso bajo de orden alto, pero el DAC podría ser más simple para usted.

Los DAC están disponibles con entradas digitales en serie y en paralelo. Mencionas Arduino, así que voy a sugerir que quieras usar un DAC en serie porque la interfaz en serie usa menos pines de E / S del Arduino. Sin embargo, las transferencias en serie son más lentas que las paralelas.

Hay MUCHOS dispositivos diferentes para elegir. Al poner la cadena "serial dac" en Google, aparece una gran cantidad de opciones. Dos de las primeras opciones: Linear Technology y Maxim ofrecen muestras gratuitas. Sospecho que la mayoría de los fabricantes de DAC hacen lo mismo.

ok, investigaré más sobre los DAC. Solo teniendo en cuenta lo que escribiste, es posible que deba optar por uno paralelo, ya que la velocidad de las actualizaciones es importante y todavía me quedan muchos pines.

Un filtro de paso bajo es el camino a seguir. Hago exactamente lo mismo en un circuito en el que estoy trabajando en este momento, así que tengo algo que funciona:

ingrese la descripción de la imagen aquí

Básicamente, se trata de un filtro de paso bajo de tercer orden con una frecuencia de corte de alrededor de 350 Hz. Para una señal PWM de 20 kHz, la ondulación estará por debajo de 1 mV.

Si cambia el ancho de pulso, la señal tardará unos 2,5 ms en estabilizarse.