Programar como un electrónico

Programando hoy en día las llamadas librerías nos quitan un montón de trabajo, el mejor ejemplo de esto es programar en el Arduino IDE. En él ni siquiera te tienes que preocupar de importar las librerías más usadas, y puedes cambiar de placa sin tener que cambiar ni un poquito del código que has escrito, es casi magia.

Si no sabes de qué te estoy hablando, no pasa nada, se explicará según avance este hilo.

Pero hubo un tiempo, no muy lejano, en el que las cosas eran más complejas y se programaban con ensamblador. Este es el lenguaje de programación más puro (por describirlo de alguna forma) al que te vas a enfrentar cuando programes algo, aunque estoy seguro de que no lo tendrás que usar porque, como digo, es cosa del pasado. Sin embargo está bien, estuvo bien por mi parte aprender eso, porque da una visión mucho más cercana de lo que es en realidad un sistema de este tipo, un microcontrolador, un procesador, su memoria, por dónde van los datos... Que parece innecesario, pero luego hasta los ordenadores se manejan con esto en el fondo. Y eso es lo que quiero transmitir.

Como decía, el ensamblador es el lenguaje de programación más básico, lo que le transmites al programador con lo que escribes no es más que mover unos bits aquí y allá, hacer operaciones lógicas básicas, todo funciona leyendo y escribiendo registros.

¿Qué es un registro?

Bueno, no me voy a poner ahora a explicar qué tiene un ordenador por dentro (RAM, CPU, almacenamiento, buses de datos), pero sí extender esto a los microcontroladores.

En primer lugar, el programa se escribe en la memoria permanente del micro, ahora por lo general son memorias tipo FLASH, ahí se almacena en unos y ceros todo el programa y es el único lugar donde se mantienen los datos inalterados aunque se apague y se encienda. A no ser que el micro tenga otra memoria para datos del usuario, por ejemplo una EEPROM, que ahí también son permanentes, hasta que los borres.

En los micros la CPU es un concepto un poco abstracto, ya que está desperdigada por el resto de componentes. Se encarga de leer la memoria de programa, mover los datos y llevarlos a la unidad aritmético-lógica (ALU), el lugar donde se realizan operaciones matemáticas o lógicas muy simples, como sumar, multiplicar o hacer AND u OR.

Hay memoria RAM, está por ahí para guardar las variables mientras corre el programa, esas variables que se borran tras el apagado.

Hay vida más allá de estos tres componentes, hay lo que se llama registros. Un registro es como otra memoria que se borra al apagar el micro, y está hecha de la misma forma, de una serie de bits. Además tiene una dirección, a la que la CPU puede ir para leer o escribir los datos. Es igual que una memoria simple, pero los registros tienen funciones especiales. Vamos a ver un ejemplo.

El micro está leyendo el programa en la FLASH, y el programa le dice que escriba dos variables en la RAM, que son dos números en binario 110 (6) y 010 (2), y quiere que esas dos variables se sumen. El proceso no es nada simple.

En primer lugar va a coger uno de esos números y lo va a poner en un registro auxiliar (el registro W por ejemplo en el PIC), para ello tiene que pasar por la ALU sin realizar ninguna operación.

En el siguiente paso va a coger el otro número y lo va a poner en la ALU a la vez que el primer número, que estaba en el registro auxiliar, también entra en la ALU por el otro lado. La ALU tiene la instrucción de sumar y obtiene 1000 (8) que se guarda en, ojo cuidado, el registro auxiliar. Una vez terminada la operación hay un registro de estado (STATUS en el PIC), que tiene un bit que se pone a 1 cuando la ALU ha terminado. Se mira este bit y como ya lo hemos visto, hay que decirle que se ponga a 0 para que avise la próxima vez.

Ya sabemos que el resultado está preparado, ahora se puede mover a la RAM para guardar el resultado o incluso enviarlo a un registro de los periféricos, por ejemplo un pin de salida digital, si se envía al registro del puerto digital (p.ej. PORTB), esto haría que (con otras configuraciones previas) el pin correspondiente al bit número 4 de ese registro se pusiese en 1, y encendería... No sé, digamos que se enciende el LED, que siempre queda bonito.

Espero que con esto más o menos ya tengas una idea de qué es un registro. Es eso, un lugar en las direcciones de memoria del micro donde cambiamos bits para que ocurran ciertas cosas. Ya estamos un poquito más cerca de entender qué hace un código en C.

Direcciones

Ahora hablemos de las direcciones, hemos dicho que los registros son lugares en la memoria y que la CPU puede dirigirse a ellos mediante su dirección. Esta viene dada en las hojas de características del micro, es decir, te lo chiva el fabricante, y en numeración hexadecimal, lo que no lo hace muy amigable pero sí algo más compacto. Y tu se lo transmites al programa previamente, aunque aún no lo sepas.

Continuando con el ejemplo, en ensamblador tu no le dices al programa "manda lo que hay en el registro auxiliar al puerto b", lo que dices realmente es "mueve lo que hay en el registro auxiliar al registro con dirección 0x06". En este caso no tienes que decir la dirección del registro auxiliar porque ya está implícita en la función de ensamblador, MOVWF. Al fin y al cabo casi todo lo que se mueve pasa por ese registro, así se escribe menos. Vamos a escribir esta línea en ensamblador:

MOVWF 0x06

Nota: no todo lo que se mueve en todos los micros pasa por ese registro, pero sí la absoluta mayoría. Los más actuales tienen un módulo llamado DMA (direct memory access) que evita precisamente eso, pasando directamente de un registro a otro o a la memoria, con lo que la CPU puede usar el registro auxiliar para otra cosa mientras tanto.

Librerías

Pero menudo lío, ¿no? Pues llegan al rescate las librerías. ¿Qué hacen las librerías? Predefinir las cosas para que no lo tengas que hacer tu, y con esto me refiero a que, con la tecnología tan avanzada que tenemos, podemos hacer lo siguiente:

MOVWF portb

¿Qué acaba de hacer esta librería? Asignar un nombre bonito a una dirección de memoria, para que no tengamos que recordar los numeritos, ha hecho algo tan simple como esto:

portb equ 0x06

Hagamos otro ejemplo, esta vez vamos a poner a 1 un pin del puerto b directamente, pero sin alterar el estado del resto de los pines como hemos hecho (ups) accidentalmente antes. Para ello el ensamblador tiene que hacer:

  • Leer el puerto b y llevarlo al registro auxiliar W
  • Operar con un número binario cuyo resultado cambie el bit exacto que queremos sin alterar el resto
  • Limpiar el bit de STATUS que indica que ha terminado la operación
  • Llevar el resultado del registro W al registro del puerto b

¿Qué has hecho tu en un código C con librerías? Si estamos en Arduino IDE por ejemplo:

digitalWrite(pin4, HIGH)

Pero la ejecución es exactamente la misma, y esto ya viene hecho de antes por otra persona entonces no tienes que preocuparte.

"Bueno no es para tanto"

Pues no, no es para tanto si hablamos de un micro de 8 bits como es el PIC o los más comunes Atmel de Arduino, en estos la dirección de un registro se puede describir mediante un número hexadecimal de 2 dígitos, por ejemplo el 0x06 que hemos visto antes.

PERO. Luego vienen los micros de 32 bits. Los ordenadores son de entre 32 y 64 bits, recordemos. En estos casos la dirección del registro se tiene que escribir con 8 dígitos. 0x00000000. Ya va empeorando el asunto, pero esto no es nada.

En un micro de arquitectura ARM, la configuración de cada uno de los pines alcanza tal grado de complejidad (resistencias pullup/down, multiplexores, funciones analógicas, pwm, comunicación, velocidad, etc etc etc) que los registros empiezan a tener registros dentro. Y sin embargo, gracias a las librerías, logramos compactarlo todo a una serie de instrucciones muy simples y fáciles de recordar, por ejemplo lo que expliqué aquí.

¿Pero entonces se usa para algo el ensamblador? No, el ensamblador se ha sustituído completamente por las librerías, pero sí que usamos de vez en cuando un sucedáneo. Ya no nos gusta escribir la función movwf, sino que podemos hacer algo como:

portb = 0x08

Y en ocasiones, se da que no existen librerías para lo que quieres o simplemente lo vas a hacer más rápido tu directamente que ponerte a buscarlo, por lo que sí que puede pasar que escribas direcciones a mano...

0x06 = 0x08

Como esto cambiaba todo el puerto voy a hacer algo que sólo cambia el pin 4:

0x06.4 = 1

¿Entonces qué es eso de programar como un electrónico?

La programación que se hace en los ordenadores es muchísimas veces independiente del hardware, es decir, vas a hacerlo funcionar en cualquier ordenador, y no importan sus registros, direcciones, ni su configuración porque eso ya lo han implementado previamente los fabricantes de cada uno de los componentes (drivers) y se ha agrupado todo bajo el sistema operativo para hacerlo funcionar sin que te enteres.

En electrónica programamos microcontroladores muy dependientes del hardware y sus periféricos. Cuando hacemos una placa con un micro, le añadimos una señal de reloj, esta señal tiene que ser tratada previamente para que llegue a todos los periféricos correctamente, y esto se hace a nivel de registros (pero con librerías). Nosotros somos el fabricante. Cuando añadimos las entradas y salidas, configuramos cada uno de los pines para que haga exactamente su tarea. Se trata de saber dónde están y a dónde van los bits que quieres manejar, más que poner una función y dejar que el sistema operativo se preocupe por tí.

Estos métodos tienen ciertas ventajas, un mayor control sobre lo que estás haciendo y muchas veces, en vez de usar una librería que lo hace todo, puedes encender únicamente los periféricos que necesitas, con lo que ahorras energía. Otra ventaja es que durante el diseño tienes libertad de colocar las cosas como mejor te convenga, sin tener que seguir los esquemas del fabricante.

Espero que os haya parecido interesante

Bioelectrónica 2: potencial de acción y ECG

Abrimos un segundo capítulo en la teoría de bioelectrónica. Empezamos fuerte con el primer término:

Potencial de acción

Es una descarga eléctrica que despolariza la membrana de las células excitables (cambia la distribución de las cargas). Es el “quántum” (la unidad) de información en el sistema nervioso.

Algunas células especializadas, como neuronas y células musculares, poseen membranas excitables que presentan grandes cambios transitorios en su conductancia en respuesta a estímulos despolarizantes, produciendo el impulso de potencial intracelular que llamamos potencial de acción.

Este fenómeno sólo se produce si el estímulo es capaz de elevar el potencial intracelular hasta cierto umbral de disparo. Luego el potencial de acción ya evoluciona independientemente de la presencia del estímulo.

Las neuronas, por ejemplo, tienen un umbral típico de -60 mV, y algunos músculos de -30 mV.

La evolución del potencial de acción es la siguiente:

  • Una vez se logra la despolarización suficiente se abren los canales de sodio, de forma que los iones de sodio entran en masa, elevando rápidamente el potencial intracelular, hasta que se llega al potencial de equilibrio (que se mencionó en el anterior capítulo), y se frena la entrada de iones.
  • Después se abren con retardo las vías de potasio, de forma que fluyen iones de potasio hacia el medio extracelular, disminuyendo el potencial de membrana (repolarización), finalmente se alcanza el potencial de equilibrio del potasio, y el potencial de membrana retorna asintóticamente al reposo.

En resumen, el potencial intracelular cambia drásticamente, se hace transitoriamente positivo y luego retorna al reposo.

Según esto, al final habría un exceso de sodio y una falta de potasio, pero se corrige por las bombas electrogénicas (transportadores activos también mencionados anteriormente)

Periodo refractario

Una vez se produce el disparo y se genera un potencial de acción, la membrana no responderá a más estímulos hasta pasado un intervalo de tiempo llamado periodo refractario. El periodo depende de la intensidad del segundo estímulo, así que se define un periodo refractario absoluto como el tiempo durante el cual la membrana no responde a ningún estímulo por potente que sea, y otro relativo, donde todavía se pueden disparar los potenciales de acción.

Propagación del potencial de acción

El potencial de acción no es algo que ocurra localmente, sino que se propaga.

La velocidad depende de la sección o el diámetro del canal por donde se transmita.

Potencial extracelular

El potencial de acción se propaga por fibras nerviosas o musculares, y da lugar a unas corrientes iónicas que cambian el potencial en el medio exterior. Estos potenciales son los que se miden para el diagnóstico clínico.

Para poder calcular este potencial se tienen en cuenta el potencial de acción intracelular y un modelo matemático de la membrana celular, que se modeliza como un dipolo.

Potenciales generados por el corazón

Ya entramos en la parte interesante. El corazón tiene dos fibras capaces de generar potenciales de acción: las fibras musculares responsables de la contracción y unas fibras de conducción especializadas encargadas de propagar los potenciales por todo el miocardio.

Como es muy complejo para hacer cálculos, que no veremos aquí, se recurre a modelos promediados, y se toma el tórax como un conductor ilimitado y homogéneo.

Electrocardiograma

Ahora vamos a hablar del órgano “más importante” de nuestro cuerpo, el que le da vida a todo, bombeando la sangre, tanto oxigenada como no, entre el resto de órganos y extremidades para que las células puedan continuar su funcionamiento.

Las partes que nos interesan son las fibras que transmiten los potenciales, señaladas en azul:

Fuente: wikipedia

Fuente: wikipedia

Estos potenciales de acción pueden provenir tanto del sistema vegetativo del cerebro como del nódulo sinoauricular, el reloj del corazón, por lo que podemos estar tranquilos de que alguno de los dos o incluso el resto de fibras en su defecto cumplan su función y den la señal a tiempo.

Entonces, como ya he comentado antes, el potencial se genera en el nódulo sinoauricular y se propaga por el resto de fibras, dando una señal típica en la que se pueden diferenciar varios tramos:

Fuente: wikipedia

Fuente: wikipedia

Fuente: wikipedia

La onda P: se despolarizan (contraen) las aurículas. Es en realidad la superposición (suma) de la despolarización de la aurícula derecha, al principio, y la aurícula izquierda al final. La repolarización no se observa porque la tapa el complejo QRS.

  • Hay una pequeña parada en el nódulo auriculoventricular, debido a que la geometría de las fibras que lo componen hacen la propagación más lenta.
  • Después el potencial se propaga rápidamente a través del haz de His, que se divide en una rama derecha y otra izquierda y por último en unas fibras llamadas fibras de Purkinje distribuidas por los ventrículos, causando la contracción de los estos (despolarización ventricular), y se observa en un complejo llamado QRS:
    • La onda Q es negativa y representa la pequeña corriente horizontal del potencial de acción que se desplaza a través del septum interventricular.
    • Las ondas R y S indican la contracción.
  • Finalmente, la onda T indica la repolarización de los ventrículos. La U también existe teóricamente pero nunca se observa porque es demasiado pequeña.

No os dejéis engañar por los signos “típicos” del ECG: dependen totalmente de la posición de los electrodos, como se observa en éste:

ecgmulti

Con tantas derivaciones se logra calcular la posición, tamaño y orientación del corazón, que para cada persona son distintas.

Próximamente veremos qué electrodos se usan para tomar las señales bioeléctricas, además de ver los principales circuitos de adecuación, que ya los tengo listos para calcular los componentes y montar en prototipo.

Sensores de temperatura

En la nueva asignatura de sensores, que he fundido con instrumentación, porque están basadas en lo mismo, vemos nuevos sensores y sus características.

En éste apartado veremos los sensores de temperatura existentes, pero no simplemente el LM35...

Elementos bimetálicos

Es un trasductor que transforma cambios de temperatura en deformaciones mecánicas debido al coeficiente de dilatación de los materiales de los que se compone. Normalmente está formado por dos placas de metales distintos unidos, en distintas configuraciones.

Las deformaciones que la temperatura produce en uno de ellos se aprovechan para hacer indicadores de temperatura como éste:

También se usan para interruptores térmicos, termostatos y cebadores, elementos que necesitan partes mecánicas. Es muy importante su aplicación en campos donde no se pueda usar la electricidad o componentes derivados del mercurio, por ejemplo medida en gases inflamables, productos químicos o alimentación.

A pesar de que son bastante económicos y robustos, presentan una respuesta bastante lenta y no muy exacta, y la medida de temperatura no es puntual, sino que se distribuye por toda la superficie bimetálica.

Resistencias termométricas

Como ya se vio en el apartado de puentes de instrumentación, estas resistencias hechas de distintos materiales, generalmente  platino (RTP), por ser  el más lineal, varía su resistencia según la temperatura y el coeficiente del material.

R(T) = Ro(1+aT)

Al ser un elemento tan lineal, una RTP se puede cambiar por otra sin recalibrar el circuito. No todas las RTP tienen los mismos coeficientes, a partir de cierto rango de temperaturas pueden variar. Por lo general, todas tienen una constante
a = 0.00385 ºC^-1

Su rango de temperaturas va desde los -200 a los 850 ºC. A la hora de medir se tiene que tener en cuenta que el paso de corriente por su misma resistencia disipa potencia y aumenta la temperatura del sensor.

Termopares

Éste tipo de sensor aprovecha el efecto Seebeck: en un circuito con dos metales homogéneos distintos unidos en sus extremos, y éstos  a distinta temperatura, aparece una corriente eléctrica en función de la diferencia de la temperatura.

Sin embargo, no aparece el mismo potencial para pares de temperatura distintos, es decir, no es lo mismo medir con la punta 1 a 100ºC y la punta 2 a 0ºC que con la punta 1 a 200ºC y la punta 2 a 100ºC, aunque la diferencia sea de 100ºC igual. Es por ésto que se debe enfriar, o compensar, la "punta 2" o unión fría, a 0ºC.

Aun así, veremos que en la realidad ésta llamada unión fría no existe como tal, porque la unión de un tercer metal cuyas uniones están a la misma temperatura no afecta a la medida, entonces añadimos el cobre del circuito que mide la diferencia de tensión y queda así:

La medida de un termopar no es lineal, sino que tiene muchas curvas, podría llegar a necesitar hasta  9 coeficientes dependiendo del tipo y el rango de temperaturas. A un rango pequeño de temperaturas podría linealizarse, pero como todo ésto es muy complejo se han creado unas tablas que dan la tensión a distintas temperaturas teniendo la unión fría a 0ºC.

Entonces se puede compensar la unión fría mediante un circuito que dé la tensión necesaria para la compensación, o directamente conociendo la temperatura de la unión fría se dirige a las tablas y se suma la tensión de la temperatura de la unión fría a la tensión que está dando el termopar, obteniendo otra tensión que ahora sí, te diriges a su posición en la tabla y obtienes la temperatura real de la unión caliente.

Termistores

Existen dos tipos de termistores

  • NTC: el coeficiente es negativo
  • PTC: el coeficiente es positivo

Se tratan básicamente de semiconductores hechos de óxidos metálicos dopados, como se puede observar, no son lineales y además no tienen mucha repetibilidad ni exactitud. Comparado con una RTP:

Su fórmula es entonces exponencial: \displaystyle R = A \cdot e^{B/T}

También \displaystyle R = R_{0} \cdot e^{B(\frac{1}{T}-\frac{1}{T_{0}})}

Los parámetros A y B se calibran en 3 puntos distintos, obteniendo una tabla según el modelo y fabricante.

Para hacerlos más lineales, se puede poner una resistencia en paralelo, aunque pierda sensibilidad. También se venden pares de termistores integrados en uno solo que mediante un simple circuito se hace lineal. Pero no es lo más común.

Sus aplicaciones suelen estar en la protección de circuitos contra sobrecalentamientos, por ejemplo en muchas fuentes de alimentación se pueden encontrar termistores a la entrada para limitar la corriente.

Sensores integrados

Se basan en la sensibilidad de la unión semiconductora, tienen un coste bajo, una sensibilidad muy alta, aunque un reducido rango de temperaturas (limitado por las propiedades térmicas del encapsulado, principalmente) Como ejemplos tenemos:

  • Lm335: salida proporcional en grados Kelvin 10 mV/K
  • Lm35: salida proporcional en grados celsius 10 mV/ºC
  • AD590: salida por corriente de 1 uA/K, a dos terminales
  • MAX6625: es un sensor con conversión ADC y comunicación serie que además se puede programar

Fotodetectores

Fotodiodos

 

Con la llegada de fotones al semiconductor se crean pares electrón hueco (efecto fotoeléctrico), lo que hace que los electrones se muevan de un sitio a otro debido al campo eléctrico creado por la diferencia de carga en las zonas de huecos.

Si el circuito esta abierto, se observa una diferencia de potencial (tensión), y si está cerrado una corriente. Al fin y al cabo el efecto causa ambas cosas.

Un fotodiodo polarizado de forma directa se comporta de forma normal. Sin embargo, en polarización inversa permitirá el paso de corriente dependiendo de la cantidad de luz que le llegue.

Además, la polarización inversa tiene una respuesta más rápida que la directa.

Como no son perfectos, hay una minúscula corriente inversa incluso cuando está en la oscuridad.

Los fotodiodos pueden ser sensibles para una gama distinta de colores o infrarrojos, dependiendo de la fabricación

Entre sus características se encuentra la sensibilidad en amperios por metro cuadrado dividido por watio, que se complementa con la irradiancia luminosa, energía que la fuente de luz es capaz de proyectar en un metro cuadrado de superficie. Entonces:

Ip = sensibilidad * irradiancia

Al igual que los emisores, el receptor no es capaz de recibir luz en todos los ángulos, sino que tiene un ángulo donde recibe la mayor cantidad y otro donde deja de recibir, determinados por el diagrama que se puede encontrar en las datasheet.

radio

Hay muchas formas de polarizar el fotodiodo. Las más útiles para medidas analógicas vienen con amplificadores operacionales o de instrumentación. Distintas configuraciones pueden lograr una mayor rapidez y rendimiento o un menor ruido debido a corrientes parásitas.

Para hacerse a una idea de los órdenes de magnitud, la corriente máxima es de decenas de nanoamperios. Es importante reducir ruido en ciertas aplicaciones donde la sensibilidad es mucho menor. En estos casos se usan amplificadores de muchísima calidad.

Fototransistores

El aspecto puede ser el mismo que el de un fotodiodo, pero al contrario que estos, tienen mucha más sensibilidad y son capaces de manejar mucha más corriente. Por ello se usan en aplicaciones de conmutación.

Sin embargo no son muy lineales (la ganancia no es constante) y debido a la capacidad parásita tienen un ancho de banda limitado.

Algunos cuentan con una patilla de base que se puede polarizar como un transistor normal, otros no.

Sus otras aplicaciones se dan en optoacopladores (aislamiento de señales, normalmente digitales, todo o nada) o interruptores por barrera (si pasa un objeto entre el emisor y el receptor el haz de luz se corta y cambia el estado) o por reflexión de luz en superficies.

  

Para ello se venden en pares emisor/receptor con una posición óptima de ambos.

Potencia 4: control de fuentes conmutadas

El objetivo del control de una fuente conmutada es mantener al mínimo la variación de tensión a la salida, siguiendo la referencia que le pongamos, a pesar de los cambios en la corriente necesaria, variaciones en la carga, o en la alimentación.

En primer lugar, veamos un esquema básico de un control de tensión:

control

En él podemos ver que la etapa de potencia contiene los parámetros tensión de entrada (Vi), tensión de salida (Vo) y se le añade la acción de control tras un acondicionador, no estrictamente necesario.

Una realimentación, que puede estar formada perfectamente por un divisor resistivo (con ganancia beta), lleva la tensión a un amplificador de error, que toma la referencia de tensión que nosotros elegimos y da a la salida una tensión que es comparada de nuevo con una señal en diente de sierra. Donde el error es mayor que el diente de sierra la salida del comparador es positiva, y por lo tanto activará el conmutador.

Éste es el control más simple y puede llevarse a cabo mediante un integrado tipo SG2524 o SG3524, que incorpora casi todo lo mencionado anteriormente. Aquí tenemos el circuito de una fuente tipo buck:

control2

Sin embargo, éste tipo de integrados no tienen en cuenta las verdaderas propiedades del sistema. Nosotros podemos diseñar un control a medida para el tipo que necesitemos, teniendo en cuenta sus puntos flojos, las inestabilidades, las variaciones mencionadas anteriormente, y podremos hacer que tenga una reacción más rápida y que siga al 100% la referencia, mediante el diseño de un regulador PID que sustituirá el amplificador de error.

Para proceder a diseñar un PID, necesitaremos la función de transferencia del sistema. Tomaremos como ejemplo una fuente tipo Buck. Podemos hallar un modelo en pequeña señal que deja el circuito de la siguiente forma:

control3

"Simplemente" hemos extraido el conmutador y se ha sustituido por un modelo lineal de su funcionamiento.

control4

control5

De ésta forma hemos llegado al circuito anteriormente visto. A partir de éste podremos sacar las funciones de transferencia, por ejemplo, de la tensión de salida respecto a delta cuando ningún otro parámetro está variando (las variaciones de tensión de entrada y carga se consideran nulas).

control6

También se podrán obtener la corriente por la bobina respecto de delta (Gid), la audiosusceptibilidad, que es la tensión de salida respecto a las variaciones de la tensión de entrada (A) y la impedancia de salida (Z)

Todas estas funciones de transferencia dan a conocer parámetros importantes de cada fuente, como son las frecuencias de sus polos y ceros naturales. Datos útiles para el diseño del control con un PID.

Para cada tipo de fuente conmutada la función de transferencia es distinta, por suerte, hace tiempo que las resumí en unas tablas, donde D es delta:

control7

control8

control9

Procedamos al diseño del regulador en modo tensión (solo necesitaremos Gvd). Lo haremos mediante el "método K" de Venable, para ello necesitaremos conocer ciertas condiciones del diseño:

  • Frecuencia de conmutación (Fs): frecuencia a la que se hará conmutar el dispositivo de conmutación, normalmente un transistor. Es un parámetro fijo.
  • Frecuencia de los polos (Fn): es la frecuencia natural del sistema, obtenida de las expresiones de las tablas anteriores (wn/(2*pi)), y cambia según la inductancia y el condensador que se le ha puesto al filtro.
  • Frecuencia de los ceros (Fz): al igual que en el caso anterior viene dado por los componentes. En éste caso lo más normal es que haya dos ceros de frecuencias distintas.
  • Frecuencia de cruce (Fc): es la frecuencia donde el bode de magnitud pasa por 0 dB. Si se le da un ancho de banda grande, tendremos una respuesta más rápida aunque se verá más afectada por los ruidos. Ponemos una frecuencia que estará entre:
    • 0.1*Fs < Fc < 0.2*Fs y que cumpla que Fc > 10*Fn para fuentes sin ceros en el semiplano derecho (Buck, Forward)
    • 3*Fn < Fc < 0.3*Fz (del cero en el semiplano derecho) para fuentes con ceros en el semiplano derecho (Boost, Buck-Boost, Flyback)
  • Margen de fase: la diferencia de desfase que hay entre el punto en el bode de fase a la frecuencia de cruce con -180º. El margen de fase ideal está entre 60 y 75 grados, pero en el peor de los casos hay que asegurar que sea mayor de 45 grados.
  • Modelo del modulador: el comparador que crea la señal PWM a partir de una triangular se modeliza teniendo en cuenta el valor máximo de la señal triangular (Vm), de forma que Fm = 1/Vm

Existen tres tipos de compensadores útiles para éste regulador, y todos se pueden construir mediante un amplificador operacional, resistencias y condensadores:

  • Tipo 1: es un simple integrador, su función de transferencia es Av:

control10

Éste tipo lo único de lo que se encarga es de amplificar cualquier error por pequeño que sea, de forma que se sigue siempre la referencia. Es para lo que se usan los integradores puros. Por lo general hace crecer demasiado la señal de error, por lo que son inestables. Lo único que podemos controlar será la frecuencia de cruce variando wp0c, el margen de fase será la fase obtenida en Gvd(Fc) - 90º + 180º. Por ello se suele utilizar cuando arg(Gvd(Fc)) (fase de Gvd a la frecuencia de cruce) es mayor de -30º.

Wp0c se calcula teniendo en cuenta que la función de transferencia en bucle abierto, a la frecuencia de cruce, debe tener una ganancia de 0  dB:

wp0c3

  • Tipo 2: tiene un integrador, un polo y un cero. Al contrario que en el caso anterior, podemos controlar el margen de fase, pero únicamente se usa con arg(Gvd(Fc)) entre -90 y -30º.

Para conocer la posición del polo y el cero usaremos un invento llamado Aumento de Fase (AUFA), que determinará un factor K que, dividido a la frecuencia de cruce, nos da la frecuencia exacta a la que se deben situar para obtener el margen de fase requerido. También se diseñará wp0c para que la frecuencia de cruce sea la deseada.

En primer lugar se calcula AUFA:

AUFAIntroducimos su valor en la ecuación del factor K:

factorK

Con  éste valor ya podemos calcular la frecuencia a la que se colocará el polo y el cero:

poloyceroo

También calculamos wp0c, teniendo en cuenta que el módulo de la función de transferencia en bucle abierto (Tv) debe ser 1 a la frecuencia de cruce que hemos elegido:

wp0c

Con ésto ya tenemos completa la función de transferencia del regulador:

reg2

Y podemos montarlo físicamente mediante el siguiente circuito:

reg32

Si se piensa, o se simula y se obtiene como resultado, que el tipo 1 es inestable, es aconsejable usar un tipo 2, que también será válido.

  • Tipo 3: éste contiene el integrador, dos polos y dos ceros. El método es igual que el tipo 2 pero el cálculo del factor K y las frecuencias cambia un poco. Se usa para cuando el arg(Gvd(Fc)) está entre -90 y -180:

AUFA2

frec

wp0c2

Con lo que obtenemos la función de transferencia:

func2

Y podemos implementarlo:

tipo3

Aunque diría que éste tipo no es tan estable (ni tan simple, lógicamente) como el tipo 2, sí que es bastante robusto. Lo mejor de éstos dos últimos tipos mostrados es que funcionan, los he comprobado tanto en simulación como en el laboratorio y realmente hacen su trabajo.

En un entorno de computación matemática como matlab, si tenéis la ocasión, podéis comprobar que al construir la función de transferencia en lazo abierto (Tv(s) = Gvd(s)*Fm*beta*Av(s)) y al hacer el bode de ésta, en la frecuencia de cruce diseñada hallaréis que se encuentra la ganancia 0 dB y el margen de fase deseado.

Si bien para fuentes conmutadas es más sencillo usar un integrado simplemente, en el caso de los inversores DC/AC sí que son realmente útiles.

También se puede usar un sistema mixto integrado/regulador en el que el regulador se implementa externamente y el integrado crea una referencia y una modulación por señal triangular con mucha precisión.