desktop

[Aporte] Fuente doble lineal con medición/protección digital

Para poder medir las distintas lineas de tensión es necesario reducir el voltaje a valores permitidos por las entradas de ADC que tiene el uC Atmega16. Como el el uC está alimentado con 5v, su tolerancia máxima será de 5,5v (ver hojas de datos), es decir que medirá bien hasta 4,99v y hasta 5,5v saturará sin peligro de quemarse.

Volviendo con las linea de tensiones ya subidas y viendo de donde se alimenta el uC:

Ver el archivo adjunto 94678

Vemos que las lineas de tensiones a medir respecto al uC irán:

  • VGND: 18v*raiz(2)=25,45v.
  • Vout(+): desde 18v*raiz(2)+1,25v=26,7v hasta como máximo 51v, yo lo limité hasta 45,45v (20v máximo entre GND y V+).
  • Vout(-): desde 0v hasta 18v*raiz(2)-1,25v=24,2v, en este ramal no puedo limitar la tensión máxima.

Atenuador para Vout(+):

Aprovechando los foot-prints libres de la resistencia que iban a formar parte del rango automático, usé 4 resistencias para fijar el factor de atenuación con mayor precisión.

[LATEX]R_{28}=1M \Omega[/LATEX]
[LATEX]R_{29}=120k \Omega[/LATEX]
[LATEX]R_{30}=3k3 \Omega[/LATEX]
[LATEX]R_{32}=150 \Omega[/LATEX]

[LATEX]V_{ADC.out(+)_{max}}=\frac{120k \Omega+3k3 \Omega+150 \Omega}{120k \Omega+3k3 \Omega+150 \Omega+1M \Omega}.45,45v=4,99v[/LATEX]

Atenuador para Vout(-):

[LATEX]R_{16}=1M \Omega[/LATEX]
[LATEX]R_{17}=220k \Omega[/LATEX]
[LATEX]R_{18}=39k \Omega[/LATEX]
[LATEX]R_{31}=1k2 \Omega[/LATEX]

[LATEX]V_{ADC.out(+)_{max}}=\frac{220k \Omega+39k \Omega+1k2 \Omega}{220k \Omega+39k \Omega+1k2 \Omega+1M \Omega}.24,2v=4,99v[/LATEX]

Atenuador para GND:

Este atenuador no estaba previsto originalmente como mencioné, pero cuando empecé a ver que las mediciones eran muy erráticas no me quedó otra que agregar esta línea de tensión, por eso no figura en el PCB.

[LATEX]R_{33}=100k \Omega[/LATEX]
[LATEX]R_{34}=22k \Omega[/LATEX]

[LATEX]V_{ADC.out(+)_{max}}=\frac{22k \Omega}{22k \Omega+100k \Omega}.25,45v=4,58v[/LATEX]

Se puede ver que los valores no están del todo optimizados para medir a fondo de escala, esto se debe a que esos eran los valores de resistencias que tenía a mano, entonces esa medición puede aún mejorarse fácilmente.

Resumiendo el esquema de atenuadores en conjunto con las líneas de tensión, quedaría así:

Niveles de tensión y atenuadores.jpg

Protección de las entradas ADC:

El Atmega16 viene en todos sus puertos con protección de sobre-tensión mediante diodos clamping, además de los 5,5v originales que mencioné antes, podemos mejorar la protección usando resistencias limitadoras en la entrada de ADC.

Pines_uC.png

Esas resistencias limitadoras son las que figuran como 10kOhms en el esquema de atenuadores en conjunto con las líneas de tensión.

¿Cómo se calcula el valor de esas resistencias?

Necesitamos averiguar cuanta corriente máxima pueden conducir esos diodos cuando hay sobre-tensión. Atmel recomienda no sobrepasar 1mA (ver nota de aplicación doc2508.pdf página 7) y en base a eso calcular la resistencia mínima que deberemos colocar en serie.

Sabemos que la corriente máxima es 1mA, en el diodo de protección caerán 0,5V (por eso 5,5v) y nuestra tensión máxima en el circuito será de 51v =>que luego de atenuarse serán 5,6v, entonces el cálculo será.

[LATEX]R_{limitadora.ADC}=\frac{V_{in}-\left(V_{cc.uC}+0,5V\left)}{1mA}=\frac{5,6v-5,5v}{1mA} \approx 100 \Omega[/LATEX]

Con una resistencia de 1kOhm hubieramos estado cubiertos, con 10kOhms estamos mucho más cubiertos.

Pero no todo es así de fácil, hay un límite en el valor de la resistencia en serie y es que a medida que aumentamos dicho valor, más significativo se vuelve frente a la impedancia de entrada del ADC, ocasionando errores en la medición (es como si hubiera un divisor resistivo).

Podríamos decir que 10kOhms es un valor aceptable, frente a la impedancia de entrada del ADC que se encuentra en el orden del Mohm.

En el próximo mensaje voy tratar con mayor detalle, la placa del uC.
 

Adjuntos

  • doc2508.pdf
    95.1 KB · Visitas: 5
Última edición:
No veo las de los post Nº 1 y Nº 38

En el mensaje 38 hasta hace poco levantaba bien la fotos, ahora se perdieron... :confused:

Las subo de nuevo.

La variación de tensión en función del valor del potenciómetro antes de cambiar el valor de las resistencias R13/R14 (ramal positivo) y R25/26 (ramal negativo):

Tensiones_vs_potenciometro_original.png

La variación de tensión en función del valor del potenciómetro después de cambiar el valor de las resistencias R13/R14 (ramal positivo) y R25/26 (ramal negativo):

Tensiones_vs_potenciometro_final.png

En cuanto a las fotos del mensaje #1, están alojadas en imageshack, acá te paso los links:

Alguna mediciones:

http://imageshack.com/i/ghia61j

http://imageshack.com/i/15u6j7j

http://imageshack.com/i/nlcggj

Gabinete y placas ya instaladas:

http://imageshack.com/i/0k7vfpj

http://imageshack.com/i/jnid8hj

http://imageshack.com/i/1fpdslj

Placa del uC soldada:

http://imageshack.com/i/mzk5o1j

http://imageshack.com/a/img23/6873/e3ev.jpg

Placa del uC sin soldar:

http://imageshack.com/a/img404/571/s46x.jpg

http://imageshack.com/i/n1iq4zj

Esquemático del uC:

http://imageshack.com/i/49rop

http://imageshack.com/i/0mjulup

http://imageshack.com/i/nl7z3dp

http://imageshack.com/i/gva6sip

http://imageshack.com/i/0sy9vcp

http://imageshack.com/i/59wo0p

http://imageshack.com/i/jovgp

Placa reguladora de tensión soldada:

http://imageshack.com/i/n9yf53j

Placa reguladora de tensión sin soldar:

http://imageshack.com/i/jntlslj

Esquemático de la placa reguladora:

http://imageshack.com/i/5nhevp

http://imageshack.com/i/5f8p4p

http://imageshack.com/i/0a4ygp

http://imageshack.com/i/nezfip

http://imageshack.com/i/0ot7sp

http://imageshack.com/i/mrqpv2p

Placa filtro de línea soldado:

http://imageshack.com/i/111uuaj

Placa filtro de línea sin soldar:

http://imageshack.com/i/jjsjj7j

Esquemático del filtro de línea:

http://imageshack.com/i/mq9z8p

Todavía no subí el proyecto porque prefiero explicar bien los cálculos por si surge alguna duda o error, tal como pasó con las corriente del transformador, paro luego hacer un mensaje sobre las correcciones y modificaciones que haría.
 
Hardware:

Como ya mencioné antes, usé un Atmega16 (en mi caso SMD, pero se consiguen en DIP40) con el oscilador interno en 8MHz.

En cuanto a las conexiones del uC, lo más destacable es:

y9vc.png


  • Reset conectado a un pull-up de 4k7 recomendado por el fabricante y a un pulsador “S1” a masa que no es accesible para el usuario, pensado solo para probar el soft.
  • Tiene la conexión ISP, para poder programarlo mediante una tira de 6 pines (no es un header).
  • El puerto A se usa exclusivamente como entradas analógicas, traté de evitar que se mezcle con las señales digitales. Con el ADC medirá la tensión, la diferencia de tensión obtenida por el shunt y la ºT de c/ramal, por últimos se usa un potenciómetro de 100kOhms para usarlo como cursor en el menú.
  • El puerto B se usa para controlar el LCD 2x16 mediante la conexión de 4bits, sin usar el busy flag (retardo por soft).
  • El puerto C manda las señales de control a la placa reguladora, como mencioné antes los atenuadores variables para el cambio de escala no funcionaron bien, por lo tanto esas lineas de control dejan de ser útiles, quedando solo útiles las habilitaciones de c/ramal.
  • El puerto D maneja los pulsadores para entrar/salir del menú, la habilitación del backlight del LCD (podría obviarse, en su momento lo pensé para darle una mejor señal de advertencia al usuario, pero realmente no lo termine usando), la salida de PWM para los coolers, los dos leds que indicarán cuando c/rama se encuentra deshabilitada.

Alimentación:

Mediante la línea de 25,5v obtenida entre masa y la tensión negativa (placa regulador), alimento un 7805 con un disipador (chico de apenas unos 20ºC/W). Uso un diodo de protección en caso de que se conecte al revés la alimentación.

vg.png


Las alimentaciones pasan por un filtro que recomienda el fabricante, separando bien la masa digital con la masa analógica (unidas en un único punto, el regulador de alimentación). Vean que las alimentaciones digitales pasan primero por un capacitor de tantalio (importante respetar ese orden en el PCB), que funcionará como filtro "PI" para todo el ruido digital que venga del uC y el LCD.

wo0.png


El pin de referencia del ADC tiene un capacitor a masa para eliminar el posible ruido.

LCD:

a6si.png


  • El brillo se controla mediante el divisor resistivo R4/R5, particularmente dejé colocado un pull-down con una resistencia de 1kOhm (R4 no lo coloque), de esta forma se obtiene un buen brillo.
  • El backlight se controla mediante el puerto PD.4 con un transistor. El led del backlight conectado a 25,5V se limita a 10mA con una resistencia de 2k2Ohms (R3).
  • Los pines no utilizados fueron conectados a masa.

Cooler:

7z3d.png


  • Mediante un bd437 sin disipador (similar al bd135), controlo el PWM de dos coolers de 12v conectados en serie a la linea de 25,5v. El bd437 no especifica bien su rise-time (dato importante cuando se "switchea" un transistor), por lo tanto queda medio “en el aire” si la potencia que disipa le da o no, en la práctica comprobé que funciona bien y no levanta ºT, de todas formas, se podría usar un TIP o incluso un mosfet IRF para no correr riesgo alguno.
  • Se utiliza un diodo 1N4001/4007 para evitar el pico inverso que tiran los motores del cooler cuando se desactivan por el PWM. Para mejorar el diseño se podría agregar una red Snubber para evitar que el transistor sufra demasiado el pico inverso.

Conectores (pulsadores, sensores de ºT, potenciómetro y leds):

julu.png


Pulsadores para el menú:

La conexión de los pulsadores a PD.2/3 es directa a masa sin usar ningún filtro anti-rebote capacitivo, ya que el anti-rebote se lo implementa en el software.

Sensores de ºT:

Básicamente son 4 diodos en serie (idea tomada de este foro del usuario BlackTiger) que varían su tensión en función de la ºT, a mayor ºT menor tensión. Entonces para obtener una buena variación utilizo 4 diodos.

Lamentablemente por tiempo no calibre la tensión vs ºT, por lo tanto su medición no será del todo exacta, pero si lo bastante buena para activar/apagaro los coolers.

Usé 1mA para polarizar los diodos, por lo tanto R6/7 serán de 2k2 a 2k7 Ohms aproximádamente.

Potenciómetro cursor:

El potenciómetro conectado a PA.7 es usada como cursor en el menú, es decir por ej. cuando se necesite limitar la corriente, en función del potenciómetro aparecerá en LCD la corriente límite. Lo mismo ocurrirá con la tensión.

Leds habilitación:

Los leds conectados a PD.6/7 en caso de estar encendidos indicarán si un ramal se encuentra deshabilitado. La corriente de polarización será un poco menor a 10mA (si soy un poco tacaño con la corrientes :D).

Software:

Usando el Avr Studio 5/6 (gratuito), usé código C, para luego programar el uC con el pony-prog mediante el puerto serie. Lo más destable:

  • Todas las tensiones y corrientes previamente pasan por una tabla de calibración. Para medir tensiones esa tabla contiene 32 pts (c/500 mV en el rango de 2 a 18v), para medir corrientes esa tabla contiene 26 pts (c/50 mA).
  • Sin filtrar se comprueba que las tensiones/corrientes no pasen los límites máximos establecidos por el usuario. En caso de superarlos, se tomarán 4 muestras más antes de deshabilitar el ramal (en total 5 muestras). Esto se debe a que en caso de tener cargas muy inductivas tipo un motor, durante el arranque la corriente puede ser elevada y superar el límite establecido.
  • Luego pasan por un filtro pasa bajos mediante un promedio móvil de 16 muestras.
  • Cada 1 segundo se muestrea los sensores de ºT, en función de la tensión de los sensores se establecerá la velocidad de los coolers. En caso de superar los 95º (margen suficiente para los TIP's), el ramal se deshabilitará.
  • Los coolers tendrán una habilitación tipos Schmitt, es decir superada temperatura 1 arranca y por debajo de (temperatura 1-5ºC) se deshabilita. El duty mínimo será de 15% para evitar problemas de arranque con coolers “baratos” (a pesar de darles 2 seg. de arranque con duty al 100%), dicho duty aumentará en forma proporcional con la ºT hasta 80ºC donde se alcanza el máximo duty.
  • El menú permitirá establecer las tensiones y corrientes máximas de c/ramal en forma individual. Originalmente pensé en almacenar en la memoria EEPROM el último límite ingresado, pero después cambie de opinión dejando establecidos los límites máximos c/vez que se encienda la fuente.
  • Los pulsadores tendrán una rutina de anti-rebote importante (tiempos elevados) debido al tipo de pulsador que elegí.

Si bien hay cosas que podrían obviarse en el proyecto para hacerlo más simple y obtener el mismo "beneficio", como por ej. el control de los motores por PWM, pensé en sacarle el mayor jugo posible al proyecto y tratar de aprender al máximo a partir de los posibles errores que podía cometer durante su diseño.

Para no hacer demasiado largo este mensaje, en el próximo voy a subir un par de videos para mostrar como funciona la fuente, y ahí si prometo poner que mejoras le haría y todo el proyecto con sus esquemáticos y PCB con el software.
 
Videos

Control de tensión:


  • Medición de la tensión de la fuente vs Tester.
  • Protección contra corto circuitos.
  • Protección contra sobre tensión.
  • Menú.
  • Limitación de la tensión máxima de operación.

Control de Tensión sobre un led:


Se usó un led amarillo limitado en corriente por una resistencia, para luego conectarlo directamente a una tensión de alimentación de 2,1v (tensión nominal de un led amarillo).

Por último se pone a prueba la protección contra sobre-tensión de la fuente, aumentando la tensión de alimentación por arriba de los 3v (sin resistencia limitadora).

La función principal de la protección por sobre-tensión, es la de proteger aquellos semiconductores que están siendo probados en el circuito de prueba para evitar que el usuario (o sea yo :)) supere las tensiones máximas que soportan.

Control de corriente (acá se vé mejor el LCD):


  • Medición de la corriente de la fuente vs Tester para distintas cargas.
  • Limitación de la corriente máxima de operación.


Mejoras y correcciones que le haría a la fuente:

Placa regulador de tensión:

  • Cambiar Q3 por un BD437 y Q7 por un BD438 con sus foot-prints correspondientes.
  • Cambiar Q4 por un BC546B (ojo con la tensión de colector de este, recomiendo uno que se soporte 65v en caso de no encontrar el 546B) y Q6 puede ser cualquiera (BC337 o BC548).
  • Agregar un diodo en inversa contra GND a la salida del ramal “+”.
  • Sacar del PCB Q8, Q9, Q10 y Q11, no sirven para realizar un auto-rango.
  • Corregir los atenuadores por los valores que publique en el mensaje #41.
  • Corregir R13/R14 y R25/26 para mejorar la excursión de tensión del pre-regulador publicados en el mensaje #32 (gráficos en el mensaje #43).
  • Para corregir el problema con la polarización del Shunt positivo, reemplazar R3 por un preset de 1kOhm en serie con una resistencia de 470 Ohms, hacer lo mismo con R8. Luego con todo soldado, calibrar las tensiones de los zener tal que sin carga la diferencia de tensión sea lo más cercana a 0.
  • Agregar el divisor de GND para que pueda ser medida en la placa del uC.
  • Al sacar el auto-rango tal vez se recupere área en el PCB y sea conveniente llevar los 2 coolers en serie a la placa reguladora. Esto se debe a que así como lo pensé originalmente, estoy llevando mucha corriente que switchea a 33kHz (PWM) con cables muy largos, esto trae problemas de ruido.

Placa regulador del uC:

  • De la linea de GND atenuada desde la placa reguladora, llevarla a la entrada del ADC disponible (PA6).
  • Sacaría los coolers de esta placa y los llevaría al regulador, mandando solo la línea de PWM para controlarlos.
  • Sacar las pistas innecesarias para el manejo del auto-rango.

Subo el proyecto completo con el código fuente en “C”, todos los proyectos de c/placa en Altium más un PDF de c/u.

Del proyecto creo que lo más jugoso que pueden sacar es la placa del uC, que les permite hacer el control total de la fuente, la placa reguladora dependerá de c/u según el transformador que tenga disponible, los disipadores y las tensiones/corrientes de salida que busque.

Con esto doy por terminado el proyecto y cualquier mejora será bienvenida.
 

Adjuntos

  • Proyecto completo.zip
    4.6 MB · Visitas: 31
Última edición:
Atrás
Arriba