Transmisor de FM

Es un circuito muy simplificado de un transmisor de FM que va desde los 60MHz a los 120MHz, hay muchos circuitos simples similares a este pero este tiene una mejora fundamental, en lugar de utilizar un trimmer mecánico que cuesta sintonizar y encontrarle estabilidad, se utiliza un sintonizador en base a un varicap (BB205) y dos potenciometros, el de 100k que es para buscar la estación/frecuencia y el de 1k que es de sintonía fina, es decir una vez que encontramos la frecuencia que queremos podemos ajustar a un mas la estabilidad con el de sintonía fina.
Este tipo de circuito tanque híbrido es el mismo que eh implementado en el receptor con el TDA7000, el tanque es el mismo, misma bobina, mismo capacitor y mismo diodo.
El funcionamiento es el siguiente:
Esta claro que el componente activo es el transistor, por ende es el que se encarga de todo el funcionamiento. para generar la frecuencia se utiliza el circuito tanque, (es una bobina y un capacitor en paralelo de valores tal que se encuentren en sintonía) para diseñar este tanque hay que utilizar las formulas de reactancia inductiva y capacitiva, se en base a estas dos formulas calculamos una Xl y Xc estos dos deben ser iguales para que el circuito sea resistivo puro es decir que se encuentre sintonizado. Para ello hay que tomar un valor de Xl y Xc que como va montado en el colector del transistor tiene que ser similar al de la resistencia de colector que calcularíamos para polarizar el mismo. por ejemplo 4k7, una vez esto, la formula nos pide w (omega) que es 2*Pi*f donde f es la frecuencia de resonancia. luego de realizar estos cálculos obtendremos L y C para saber que capacitor y bobina utilizar.
El resto de la polarización es para mantener el punto Q centrado, para desacoplar la continua y polarizar el micrófono electret.
La bobina son 5 vueltas de alambre de 1mm, con núcleo de aire de 5mm de diámetro.








Reloj de cuarzo LCD con backup y alarma

Este circuito es un simple reloj despertador digital realizado en base a un mcu muy económico y potente (en este caso se eligió por su tamaño y precio, ya que se puede aprovechar mucho mas en otras aplicaciones)
El pic utilizado es el PIC16F883 configurado con oscilador interno y sin interrupciones.
El mismo obtiene los pulsos de reloj y la hora del RTC (Reloj en Tiempo Real) DS1302, este integrado de la firma Maxim nos provee Hora y Fecha, la posibilidad de configurar  y de mantener los datos con una pila de BackUp (en el circuito usamos una CR2032) esto es por si se desconecta de la alimentación.
De esta forma no perderemos la hora, una posible mejora seria la de guardar la alarma en la eeprom del pic por si se desconecta la energía, es muy sencillo, solo es necesario utilizar las instrucciones write_eeprom y read_eeprom, con esas instrucciones una graba el valor seteado como alarma y al momento de compararlo con la hora actual la tome de ahí .
También es posible utilizar interrupción por activación externa para el seteo de la hora, seria mas eficiente.
(estas son mejoras que se me van ocurriendo en el momento) el programa lo eh desarrollado en el recreo de la universidad y con una hora de empeño que me sobraba entre dos materias por esto no lo eh optimizado bien, también decidí subirlo asi porque para los que no tienen mucho conocimiento de C, les resultara mas fácil ver unos cuantos IF sencillos.
El circuito presenta un LCD de 1x16 (es decir una linea/renglón de 16 caracteres, no parecía necesario uno mas grande pero es posible poner otro mas grande y simplemente con la función lcd_gotoxy(X,Y) es posible posicionar el string en donde queramos (Renglón y carácter).
Como se puede notar el circuito se trato de hacer lo mas economicamente posible utilizando MCU económico, LCD el mas chico dentro de lo que nos sea útil, el RTC cuesta un poco mas que el pic, es posible no utilizar el RTC pero habría que utilizar el cristal de 32768KHz con algún arreglo de compuertas como oscilador e ingresarlo en una interrupción por timer del mcu para marcar el tiempo. Pero no viene mal ya que con el RTC también se puede aprender a utilizar el protocolo I2C el cual esta detallado en el código fuente, como también el código de manejo del LCD.
La única librería que resta es la del propio pic pero si lo tienen que compilar ya deberían contar con ella, posible mente también cuenten con la del DS1302.C y LCD.C (siendo así pueden eliminar el código de estos dos del fuente (el de color gris) e incluir las dos librerías, así quedara mas corto el código de programa).
El funcionamiento de este reloj se basa en tres comandos, un interruptor que decide si el reloj esta en modo normal o modo configuración dos pulsadores, uno para incrementar la hora actual, y otro para incrementar la alarma, Si posicionamos el interruptor en normal, el reloj comenzara a funcionar normalmente con la descripción "HORA HH:MM:SS   " en cambio si posicionamos el interruptor en configuración se mostrara   "HORA 00:00:00   " en este estado si presionamos el botón de tiempo aparecerá "ST" quedando de la siguiente manera "HORA 00:00:00 ST" y si lo mantenemos presionado comenzara a incrementar horas y minutos, lo mismo pasa para configurar la alarma, si presionamos el pulsador de alarma mostrara   "HORA 00:00:00 AL"  y luego comenzara a incrementar. Una vez seteado nuevamente ponemos el interruptor en normal y comenzara a funcionar el reloj desde la hora seteada, y en el caso de que la hora de alarma sea igual a la hora actual se encenderá un led. (se puede agregar otra mejora como un interruptor donde esta el led para apagar la alarma... o bien un circuito de alarma sonora temporizado (todo esto se puede hacer con un 555 y un buzzer activo o bien con el mismo pic se puede hacer una subrutina donde se enciende el Led que encienda por un tiempo y luego corte.
También me falto en el diseño ponerle la resistencia a Vcc que alimenta el backlight del lcd, eso nos sirve para poder ver el reloj de noche, claro que si  v a estar en la oscuridad tal vez con un interruptor inversor podemos optar por dos resistencias dif, una que encienda mas brillante el backlight a modo dimmer. eso queda a elección.
El circuito funciona perfectamente pero como les eh comentado es posible mejorarlo y es sencillo mejorarlo también.


ACTUALIZACIÓN:
Se le agrego el control de luminosidad para el backlight con un interruptor inversor para poder elegir entre dos luminosidades diferentes.
Se agrego la grabación de la alarma en la EEPROM interna del mcu para que se retenga si se corta la energía.
Se cambio el display de un renglón por uno de dos renglones ya que el precio es casi el mismo y de esta forma mostramos en la linea 2 el horario de la alarma.





El código fuente (con el control de LCD y DS1302 incluido):
NOTA: el código en Gris es el de las librerías (DS1302.C y LCD.C) que si lo compilan con CCS solo tienen que incluirlas en el encabezado del programa junto a los demas Include las librerías DS1302.C y LCD.C (yo las he modificado levemente para sacarles algunas cosas que interesaban y cambiarle algunas configuraciones, pero es lo mismo si utilizan las de CCS)


#include <16F883.h>
#device adc=8
#FUSES NOWDT
#FUSES INTRC_IO
#FUSES NOPUT
#FUSES MCLR
#FUSES NOBROWNOUT
#FUSES NOLVP
#FUSES NOCPD
#FUSES NOWRT
#FUSES NODEBUG
#FUSES NOPROTECT
#use delay(int=4000000)
#define RTC_RST    PIN_A0
#define RTC_SCLK   PIN_A1
#define RTC_IO     PIN_A2
#include 
#include 
void main()
{
int HH, MIN, SS;
int HHSet, MMset;
int HHAlarm, MMAlarm;
int i;
   lcd_init();
   lcd_putc("Electgpl Clock");
   delay_ms(1000);
   rtc_init();
   lcd_init();
   while(1)
   {
   if (input(PIN_A5)==1)
      {
      if (input(PIN_A4)==1) 
         {
         lcd_gotoxy(15,1);
         lcd_putc("ST");
         rtc_set_datetime(0,0,0,0,HHSet,MMSet);
         MMSet = MMSet + 1;
         if (MMSet > 59)
            {
            delay_ms(100);
            MMSet = 0;
            HHSet = HHSet + 1;
            }  
            if (HHSet > 23)
               {
               HHSet = 0;
               } 
         lcd_gotoxy(1,1);
         printf(lcd_putc,"HORA %02d:%02d:00   ",HHSet,MMSet);               
         }
      else
         {
         if (input(PIN_A3)==1) 
            {
            lcd_gotoxy(15,1);
            lcd_putc("AL");
            MMAlarm = MMAlarm + 1;
            if (MMAlarm > 59)
               {
               delay_ms(100);
               MMAlarm = 0;
               HHAlarm = HHAlarm + 1;
               }  
               if (HHAlarm > 23)
                  {
                  HHAlarm = 0;
                  } 
            lcd_gotoxy(1,1);
            printf(lcd_putc,"HORA %02d:%02d:00   ",HHAlarm,MMAlarm);    
            write_eeprom(8,HHAlarm);
            write_eeprom(9,MMAlarm);
            } 
         } 
      }   
   else     
      {
      rtc_get_time(HH,MIN,SS);
      lcd_gotoxy(1,1);
      printf(lcd_putc,"HORA %02d:%02d:%02d   ",HH,MIN,SS);
      HHAlarm=read_eeprom(8);
      MMAlarm=read_eeprom(9);
      lcd_gotoxy(1,2);
      printf(lcd_putc,"ALARMA  %02d:%02d   ",HHAlarm,MMAlarm);
      if((HH == HHAlarm) && (MIN == MMAlarm))
         output_high(pin_a6);
      else
         output_low(pin_a6);       
      }
   }   
}
#ifndef RTC_SCLK
#define RTC_SCLK PIN_A1
#define RTC_IO   PIN_A3
#define RTC_RST  PIN_A2
#endif
void write_ds1302_byte(BYTE cmd) 
{
   BYTE i;
   for(i=0;i<=7;++i) 
   {
      output_bit(RTC_IO, shift_right(&cmd,1,0) );
      output_high(RTC_SCLK);
      output_low(RTC_SCLK);
   }
}
void write_ds1302(BYTE cmd, BYTE data) 
{
   output_high(RTC_RST);
   write_ds1302_byte(cmd);
   write_ds1302_byte(data);
   output_low(RTC_RST);
}
BYTE read_ds1302(BYTE cmd) 
{
   BYTE i,data;
   output_high(RTC_RST);
   write_ds1302_byte(cmd);
   for(i=0;i<=7;++i) 
   {
      shift_right(&data,1,input(RTC_IO));
      output_high(RTC_SCLK);
      delay_us(2);
      output_low(RTC_SCLK);
      delay_us(2);
   }
   output_low(RTC_RST);
   return(data);
}
void rtc_init() 
{
   BYTE x;
   output_low(RTC_RST);
   delay_us(2);
   output_low(RTC_SCLK);
   write_ds1302(0x8e,0);
   write_ds1302(0x90,0xa4);
   x=read_ds1302(0x81);
   if((x & 0x80)!=0)
     write_ds1302(0x80,0);
}
int get_bcd(BYTE data)
{
   int nibh;
   int nibl;
   nibh=data/10;
   nibl=data-(nibh*10);
   return((nibh<<4)|nibl);
}
int rm_bcd(BYTE data)
{
   int i;
   i=data;
   data=(i>>4)*10;
   data=data+(i<<4>>4);
   return data;
}
void rtc_set_datetime(BYTE day, BYTE mth, BYTE year, BYTE dow, BYTE hr, BYTE min) 
{
   write_ds1302(0x86,get_bcd(day));
   write_ds1302(0x88,get_bcd(mth));
   write_ds1302(0x8c,get_bcd(year));
   write_ds1302(0x8a,get_bcd(dow));
   write_ds1302(0x84,get_bcd(hr));
   write_ds1302(0x82,get_bcd(min));
   write_ds1302(0x80,get_bcd(0));
}
void rtc_get_date(BYTE& day, BYTE& mth, BYTE& year, BYTE& dow) 
{
   day = rm_bcd(read_ds1302(0x87));
   mth = rm_bcd(read_ds1302(0x89));
   year = rm_bcd(read_ds1302(0x8d));
   dow = rm_bcd(read_ds1302(0x8b));
}
void rtc_get_time(BYTE& hr, BYTE& min, BYTE& sec) 
{
   hr = rm_bcd(read_ds1302(0x85));
   min = rm_bcd(read_ds1302(0x83));
   sec = rm_bcd(read_ds1302(0x81));
}
void rtc_write_nvr(BYTE address, BYTE data) 
{
   write_ds1302(address|0xc0,data);
}
BYTE rtc_read_nvr(BYTE address) 
{
    return(read_ds1302(address|0xc1));
}
struct lcd_pin_map 
{                 
BOOLEAN rs;
BOOLEAN rw;
BOOLEAN enable;
BOOLEAN unused;
int     data : 4;         
} lcd;
#if defined(__PCH__)
#if defined use_portb_lcd
   #byte lcd = 0xF81
#else
   #byte lcd = 0xF83
#endif
#else
#if defined use_portb_lcd
   #byte lcd = 6
#else
   #byte lcd = 8
#endif
#endif
#if defined use_portb_lcd
   #define set_tris_lcd(x) set_tris_b(x)
#else
   #define set_tris_lcd(x) set_tris_d(x)
#endif
#define lcd_type 2
#define numero_caracteres 20
#define lcd_line_two 0x40
BYTE const LCD_INIT_STRING[4] = {0x20 | (lcd_type << 2), 0xc, 1, 6};
struct lcd_pin_map const LCD_WRITE = {0,0,0,0,0}; 
struct lcd_pin_map const LCD_READ = {0,0,0,0,15};
BYTE lcd_read_byte() 
{
   BYTE low,high;
   set_tris_lcd(LCD_READ);
   lcd.rw = 1;
   delay_cycles(1);
   lcd.enable = 1;
   delay_cycles(1);
   high = lcd.data;
   lcd.enable = 0;
   delay_cycles(1);
   lcd.enable = 1;
   delay_us(1);
   low = lcd.data;
   lcd.enable = 0;
   set_tris_lcd(LCD_WRITE);
   return( (high<<4) | low);
}
void lcd_send_nibble( BYTE n ) 
{
   lcd.data = n;
   delay_cycles(1);
   lcd.enable = 1;
   delay_us(2);
   lcd.enable = 0;
}
void lcd_send_byte( BYTE address, BYTE n ) 
{
   lcd.rs = 0;
   while ( bit_test(lcd_read_byte(),7) ) ;
   lcd.rs = address;
   delay_cycles(1);
   lcd.rw = 0;
   delay_cycles(1);
   lcd.enable = 0;
   lcd_send_nibble(n >> 4);
   lcd_send_nibble(n & 0xf);
}
void lcd_init() 
{
   BYTE i;
   set_tris_lcd(LCD_WRITE);
   lcd.rs = 0;
   lcd.rw = 0;
   lcd.enable = 0;
   delay_ms(15);
   for(i=1;i<=3;++i) 
   {
      lcd_send_nibble(3);
      delay_ms(5);
   }
   lcd_send_nibble(2);
   for(i=0;i<=3;++i)
      lcd_send_byte(0,LCD_INIT_STRING);
}
void lcd_gotoxy( BYTE x, BYTE y) 
{
   BYTE address;
}

Reloj Digital Discreto

Este reloj digital esta creado en base a circuitos lógicos, como contadores, decodificadores, compuertas y timers.
La base del circuito es el contador Up/Down 4510, este integrado cuenta del 0 al 9 con posibilidad de presetear el código que queremos, este integrado nos entrega el código BCD (binario codificado decimal) de cada numero. Luego de este codificador contador, necesitamos un decodificador que pase el binario a la 7 segmentos para poder activar los displays, en este caso utilizamos el 4511.
Para lograr que el contador de segundos se reinicie al llegar a 60, es decir después del 59 pase a 00, se utiliza una compuerta AND que lo que hace es buscar el binario 110 (numero 6) del segundo 4510, una vez que encuentra este valor reinicia el contador. Al mismo tiempo que se reinicia alimenta el clock del contador de minutos. (Este circuito es igual al de los segundos, ya que también cuenta hasta 60) luego de este aparece el contador de horas (12 horas), el cual también tiene una compuerta AND pero este espera el 1 y el 2 para formar el 12 que casualmente solo es 01 y 10 por ende con una compuerta AND de dos entradas nos alcanza.
Todo esto tiene que funcionar con un clock una señal de 1Hz o 1 segundo, la cual no esta creada muy eficiente mente ya que la base de tiempo la proporciona un 555, que en cálculos da un 1Hz pero como sabemos los componentes tienen otros factores que no son teóricos que hacen que esa frecuencia varie... Es posible hacerlo mas exacto utilizando un cristal de 32768kHz y de ahí empezar a dividir con preescaler hasta llegar a 1Hz.
Por ultimo para aprovechar las cuatro compuertas AND del integrado 4081 la ultima se utiliza como buffer para no sobrecargar el clock y alimentar 2 leds que podrían ir entre los displays de horas, minutos y segundos para marcar el segundero (HH:MM:SS).
El circuito como se ve es sencillo no requiere un nivel de conocimiento elevado y es de bajo costo ya que son integrados CMOS de uso general.
Las mejoras podrían ser principalmente agregarle una base de tiempo a cristal de cuarzo como explicaba antes 32768Hz, y otra mejora es la de agregarle pulsadores en los clock de minutos y horas, para poder setear o poner en hora al reloj, esto se puede hacer solo con pulsadores (mas alguna compuerta antirrepique Schmitt trigger) o bien con algun 555 que genere pulsos cada medio segundo o menos para que al mantener el pulsador apretado incremente el valor de puesta en hora.




Contador Johnson 4017

Este circuito integrado es uno de los caballos de batalla de los que recién comienzan a divertirse con la electrónica, es tan importante como el 555.
El integrado 4017 es un contador johnson (un contador en anillo) esto quiere decir que la secuencia de Q0 a Q9 es reiniciada o "loopeada" (esto quiere decir que cuando llega a Q9 luego sigue con Q0 y así sucesivamente en forma de Loop). Esto puede ser modificado ya que el 4017 cuenta con un Reset, si el Reset se pone a GND la cuenta sera de Q0 a Q9 pero si se pone hacia alguna de sus salidas, este achicara el anillo del loop, es decir, si ponemos el Reset conectado a Q6 el 4017 solo contara hasta Q5, y cuando llegue a Q6 se reiniciara y comenzara nuevamente desde Q0 (Ej. Q0>Q1>Q2>Q3>Q5,   Q0>Q1>Q2>Q3>Q5,   Q0>Q1>Q2>Q3>Q5) .
También posee un Carry out lo que permite concatenar estos integrados y poder generar anillos mas grandes.
Si bien no vamos a nombrar la inmensa cantidad de aplicaciones que posee este integrado, nombraremos las mas comunes.
Se puede observar en los circuitos de ejemplo que se utilizaron 10 leds en el primer circuito donde se van encendiendo ciclicamente de Q0 a Q1 y luego vuelve a empezar (anillo). Luego en la figura de la derecha superior se muestra como es posible reiniciar el 4017 antes de que llegue al final, reiniciando en Q6 la secuencia solo se limita a 5 salidas. Y por ultimo el circuito de abajo es el mismo que el de arriba pero se le agregaron diodos de conmutación 1N4148 esto sirve porque como se puede ver Q6, Q7 y Q8 tienen diodos a la salida y están conectados Q4, Q3 y Q2, esto quiere decir que los leds encenderán en el siguiente orden (L1>L2>L3>L4>L5>L4>L3>L2,  L1>L2>L3>L4>L5>L4>L3>L2,  L1>L2>L3>L4>L5>L4>L3>L2, y así sucesivamente) esto es como las viejas luces que traía el auto fantástico adelante. Los diodos son para que la tensión valla a los leds y no vuelva hacia el generador o hacia el 4017.
Cabe destacar que este integrado tiene cientos de aplicaciones mas, como divisores de frecuencia, control de direcciones en matrices, generadores de pulsos, decodificadores y mas.
A estos circuitos es posible agregarles etapas de potencia para controlar por ejemplo lamparas de 220V utilizando el proyecto (control de potencia con triac).


Contadores 4026 y 4033

Estos integrados 4026 y 4033 poseen en su interior toda la lógica necesaria para lograr mostrar en un display de 7 segmentos una cuenta que va de 0 a 9, entre sus pines de habilitaciones, reset y clock, también encontramos uno muy común "carry out" este pondrá un 1 a su salida cuando pase por cero el contador, osea cuando cuenta 1, 2, 3,...9, 0 (justo ahí pondrá un 1 a su salida). Esto sirve para concatenar contadores porque se puede poner esa salida de carry a la entrada de clock de otro contador y de esta forma cuando el de las unidades pase por cero pondrá en uno el contador de las decenas, de esta forma logramos expandir el contador de 00 a 99, y así sucesivamente.
El circuito solo puede contar en forma ascendente por lo que nos acota algunas posibilidades pero si quieren contar en forma up/down pueden usar el 40110 que es similar a estos dos pero con esa opción.
El 4026 y 4033 como se puede ver en los circuitos son muy similares, se conectan casi de la misma forma, pero tienen unas diferencias eléctricas, el 4026 controla displays de leds o transistores a su salida, pero el 4033 controla transistores a su salida y válvulas del tipo numitron nixie (los viejos "displays" termoionicos).




Vumetro Transistorizado

Este vumetro fue realizado a transistores para reemplazar a los integrados que normalmente son mas costosos, si bien solo tiene 8 etapas, se puede ampliar tanto como queramos, añadiendo mas etapas como las que ya tiene (se repiten), solo que al poner mas etapas hay que tener en cuenta la tensión que van a manejar los diodos, como se ve en el circuito los diodos están en serie, esto quiere decir que si tenemos 10V en el primer diodo, al segundo le llegaran 9.5, el tercero 9, al cuarto 8,5, al quinto 8, y así sucesivamente, (digo intervalos de 0,5V porque los 0,7 son teóricos y en estos diodos de conmutación solo medí 0.5), a medida que ponemos mas etapas menos tensión le va a llegar para excitar al transistor, entonces lo 
que podemos hacer es variar las resistencias de base para que se llegue a fondo de escala.
NOTA: Tener en cuenta que dependiendo de los leds que se usen tendrán menor o mayor intensidad y diferencia de potencial, por ejemplo si se usan colores diferentes es posible que un color encienda mas fuerte que otro, si pasa esto hay que variar el tamaño de la resistencia de emisor de el transistor que comanda ese led.









[Guia] PID

El control PID es una herramienta utilizada en sistemas automáticos para controlar lazos cerrados, por ejemplo sensores de temperatura entre otros tipos de sensores.
Si se requiere controlar automáticamente un sensor de temperatura como si fuese un termostato usualmente se utiliza un amplificador operacional como comparador, comparando la señal que entrega el sensor con una señal de referencia que nosotros ajustamos, de esta forma cuando la señal del sensor es igual a la que seteamos nosotros en la señal de referencia, la salida cambia de estado y se activa la carga, que podría ser un ventilador (para bajar esa temperatura) o desconectar el calefactor de calor (para que baje la temperatura). Claro que la acción puede ser otra, pero este caso es el mas normal, luego cuando la temp desciende vuelve a ser diferente a la que seteamos como referencia y se vuelve a activar la resistencia o se apaga el ventilador para que caliente nuevamente. 
Ese seria el efecto de un control de temperatura de lazo cerrado o re-alimentado que solo setea la temp máxima, ya que existen los que se setean la mínima y la máxima.
Lo que sucede en estos controles como el que se detallo recién es que el tiempo entre encendido y apagado del Ventilador/calefactor es el que se encarga de mantener en temperatura la pieza que el sensor esta controlando, pero esto depende porque si el control se demora mucho en cambiar el estado el material que se controla puede descender mas de lo que debe o menos de lo que debe. 
Es aqui cuando entra a funcionar un PID este control puede ser utilizado como el anterior pero por cuestiones de diseño del mismo posee unas características que mejoran la precisión del
control, ganando de alguna forma velocidad de respuesta o "prediciendo" cuando va a necesitar conectar o desconectar el calefactor/ventilador (del ejemplo anterior). 
Para hacerlo mas gráfico cuando nosotros vamos a abrir una canilla y queremos utilizar el agua a una temp intermedia que sea agradable lo que hacemos es abrir la canilla caliente, luego la fría y vamos graduando las dos para lograr esa temperatura deseada pero cuando abrimos un poco de mas la fría ya intuimos o sentimos rápidamente que nos pasamos entonces casi automáticamente la cerramos un poco, esto es lo que hace el PID, si nosotros controlaríamos la temperatura de la canilla con un control simple de termostato como el que fue detallado al principio, abriríamos la fría ni bien nos quemamos con la caliente por ende no seria agradable, pero el PID lo hace mas eficientemente.
PID significa Proporcional Integral Derivativo, estos tres son bloques de circuito, ya que dependiendo del control que se desee podemos usar P o PI o PID, etc..
Estos tres bloques pueden explicarse matemáticamente y pueden representarse eléctricamente. La sumatoria de los tres da la siguiente exprecion:



Bloque Proporcional:
Es el bloque que amplifica proporcionalmente la señal de entrada o de error de la variable con respecto a la de referencia también llama Setpoint (punto de seteo).




Bloque Integral:
Este bloque aplica la integral a la señal de entrada, sirve para controlar o muestrear la diferencia entre la señal de entrada y setpoint en función de la velocidad, esto se logra integrando ambas señales.




Bloque Derivativo:
Este bloque es similar al integral pero en lugar de controlar la diferencia en velocidad entre la señal de entrada y la de referencia, controla la diferencia en velocidad entre la señal de entrada y la de salida.


A continuación se detalla el diagrama de bloques del PID, podemos ver que ademas de los tres bloques P I D también hay un sumador y un inversor y también agregamos un seguidor, quedando así terminado nuestro diagrama y quedando listo para el funcionamiento en un circuito de control.








Amplificador de Instrumentación

El amplificador de instrumentación es una configuración de amplificadores operacionales que esta diseñada para amplificar una señal débil con una impedancia de entrada muy alta, lo que lo hace indispensable para mediciones donde no queremos que el instrumento afecte a la medición, esto suele pasar cuando la señal que medimos es muy pequeña.
Este circuito a demás de tener el amplificador de instrumentación tiene un amplificador de ganancia variable que nos sirve para amplificar aun mas la señal que estamos midiendo, de esta forma lo hace muy útil en la medición de tensiones del orden del uV.
El circuito esta diseñado para alimentar un milivoltimetro o bien un multimetro variable, pero es posible utilizar instrumental de aguja o digital como el ICL7107 o una barra de leds con LM3914 (claro que con este ultimo la precisión no sera el fuerte del instrumento).
El circuito fue diseñado con valores tal que nos proporcione una amplificación de 100 veces, sabemos que eso es fácil de lograr con solo un amplificador operacional, pero este circuito tiene una impedancia de entrada mucho mas grande que un solo amplificador operacional.
La formula para calcular esta ganancia / amplificación es:
 



 
 

Dimmer de 220Vac con Triac

Este es un dimmer (variador de "tensión" para corriente alterna en 220V) digo "tensión" porque el triac tiene una curva muy especifica de variación, no solo recorta en tensión sino que varia su forma de onda, por lo que no debemos utilizar el circuito con cargas electrónicas, este circuito esta diseñado para carcas resistivas (resistencias, lamparas, etc...) aunque también se puede poner carga inductiva gracias a la red snubber que contiene.
En el circuito no se especifico la nomenclatura del triac ya que se le puede poner cualquiera que sea TO220, 400Vmin.
Por ejemplo: BT137-600 8A (con esto podemos controlar cargas de hasta 1500W)  claro que con un disipador de muy buenas dimensiones. Es posible utilizar otros Triac de mas corriente, pero habría que remarcar las dos pistas anchas del pcb con estaño para que puedan soportar mas corriente.
Los capacitores deben ser de 400V minimo (normalmente vienen en poliester).