Medidor de Energía

From Qi-Hardware
Jump to: navigation, search

Fredy Alexander Macias, Diego Felipe Barreto, Victoria Eugenia Martinez.


Contents

[edit] Calificación

Porcentaje Presentación 20% Informe 30% Funcionamiento 50%
1 Entrega 10% 0.5 0.5 0.5
2 Entrega 30% 1.8 1.8 1.8
3 Entrega 30% 0 0 0 NO ASISTIERON A LA ENTREGA NOV 5 / 2010


4 Entrega 30% -- -- --

[edit] Objetivo del Proyecto

Se creara un dispositivo capaz de medir la energía utilizada en un domicilio, de mostrar los datos de consumo y costo (gráfica y numéricamente), y de mantener un registro de consumo total de los últimos meses. En el LCD se desplegará un menú que permitirá visualizar las diferentes opciones del sistema. Utilizaremos un MicroSD para actualizar los valores ($) del Medidor de consumo.

[edit] Especificaciones del sistema

[edit] Funcionamiento

Se acoplara la señales de tensión y de corriente de la red eléctrica (en principio monofásica) de tal forma que puedan ser tratadas por SIE, luego se representaran estas señales en arreglos de bits los cuales serán leídos por la fpga que los usara para obtener la potencia relacionada a las señales de entrada. Esta información sera guardara en un registro para posteriormente obtener el costo y consumo total a la fecha.

El usuario podrá acceder a la información de costos y consumo por medio de un menú representado en un LCD. El sistema contara con una protección de perdida de datos que se activara con la caída de tensión en la red eléctrica

Diagrama de flujo

[edit] Diagrama de bloques

Diagrama de Bloques Medidor de Emergía.
  • ACDC. Configura el conversor Análogo-Digital (TLV1548IDBRG4) para que entregue los valores adecuados de medida, además recibe la información entregada por el conversor y entrega lo necesario al bloque de Medición de energía.
  • Medición de Energía. Recibe los datos de salida del bloque ACDC y los trata para obtener datos de potencia activa y costo de energía, igualmente recibe datos del bloque Actualización de costos para cobrar siempre el valor actual de la energía. Los valores que obtiene este bloque son enviados tanto a Interfaz de Usuario como a Registro de datos.
  • Interfaz de Usuario. Controla tanto las características de visualización de los datos entregados por Medición de energía , como el control de opciones con el que el usuario decide que visualizar.
  • Registro de Datos. Guarda el dato que recibe inmediatamente de Medición de Energía en la SDRAM, además cada mes guarda la información de consumo y costo mensual en la memoria NAND.
  • Seguro de Datos para Apagón. Envía un bit para activar el registro inmediato de datos a la memoria NAND cuando percibe una caída de tensión en la línea.
  • Actualización de Costos.

[edit] División de tareas HW y SW

HW SW
ADC Interfaz de Usuario
Medición de Energía Registro de Datos
Seguro de Apagón Actualización de Costos


[edit] Cronograma de Actividades

Fecha Actividad
31 agosto- 06 septiembre Diseño de PCB
23 - 30 septiembre Prueba y ensamble de PCB
9 - 17 octubre Creación código en C y verilog
3 - 10 de noviembre Prueba montaje y cálculo de gastos
19 - 26 de noviembre Entrega final

[edit] Esquemáticos y PCB de la tarjeta hija (diseñados en Kicad)

[edit] Esquematico General

A continuacion mostramos un esquematico de alto nivel en el cual se ve el proceso de acoplamiento de las señales.

Ahora analizaremos las diferentes formas para realizar las mediciones de corriente y se escogera aquella que se adapte mejor al proyecto.

Elemento Ventajas Desventajas
Shunt Muy bajo costo, bajo error en la medicion dificil adquisicion en Colombia
Transformador de corriente Bajo costo, preciso (debidamente caracterizado) Se debe caracterizar detalladamente para obtener un alto rendimiento
Sensor de corriente ACS714LLC Extremadamente preciso, facil adquisicion en Colombia, implementacion sencilla Muy alto costo en comparacion a los anteriores

Ya que la idea del proyecto es que la elaboracion sea lo mas economico posible la eleccion del grupo seria un shunt, sin embargo por su dificil adquisicion no podremos implementarlo, por ende se elige la segunda opcion mas economica que es el transformador de corriente.

[edit] Resumen analisis

Para la medición de la tensión utlizaremos un divisor capacitivo, el cual consiste en un circuito cuyo voltaje de salida es proporcional a la tension de entrada, esto es necesario ya que el conversor analogo-digital (ADC) no podria manejar la tension directa de la red (Max 3.3V). Algo similar sucede con la corriente asi que utIlizaremos un transformador de corriente (debidamente caracterizado) por medio del cual mediremos la corriente entregada por la red y representarla en un valor que el ADC pueda manejar.

[edit] Esquemático Funcional Tarjeta Hija

En este se detalla las configuraciones mencionadas en el esquemático general (alimentación de SIE, adaptación de señales, conectores). Consta principalmente de 3 partes:

  • Alimentación SIE: en esta etapa se rectifica la tensión entregada por el transformador por medio de un puente de diodos, luego a la salida del puente colocamos un condensador el cual se encarga de mantener la tensión de la señal en un valor casi constante (aprox. Vpico transformador), y con esta tensión se alimenta el regulador de +5V (Mc3326) cuya salida es la tensión de alimentación de SIE.
  • Generacion de offset (1.5v): Despues de rectificar la señal de salida del transformador y obtener una señal DC alimentamos tambien el regulador variable (Lm317), configurado para tener una tension de salida de 1.5v que se sumara a las señales que entraran al ADC.
  • Sumador: Por medio de una configuración de sumador, usando amplificadores operacionales (Lm324) se le dara el offset a las señales que procesara el ADC.
Esquematico tarjeta hija del medidor V2.

[edit] Simulación Del Circuito

A continuación presentamos los resultados obtenidos de la simulación realizada en ORCAD PSPICE, en los cuales se comprueba el funcionamiento de la configuración del OPAMP como sumador y que el LM317 este en el punto de operación deseado (1.5V). Aquí está el circuito simulado:

Circuito simulado.

Y este fue el resultado grafico:

Resultado Grafico de la simulacion.

Analizando el resultado se puede ver que la salida del LM317 se encuentra situada en exactamente 1.4999V, también se ve que la señal sobre R6 tiene un nivel DC en 0.5V debido a que el LM317 ve una carga de 3 resistencias de 1kohm (R1, R2 y R6) las cuales funcionan como un divisor de tensión que sitúa sobre cada una de ellas 1.5/3 = 0.5V, este nivel DC tendrá que ser tenido en cuenta cuando se trabaje con esta señal. Y por ultimo vemos la señal de salida del OPAMP la cual presenta la suma entre los 1.5V y la tensión en R6, la cual está en el rango de operación del ADC (0 - 3.3V) así se comprueba el correcto funcionamiento de las diferentes configuraciones.

[edit] PCB del Medidor

Este es el diseño del pcb de la tarjeta hija, la cual tiene 88 mm de ancho y 80 mm de largo.

Llevando a forma física el diseño de la pcb versión 3, se obtuvo la tarjeta hija mostrada a continuación, ademas se muestra la salida de onda de la tensión que entrega la red eléctrica luego de ser modificada (Tensión red eléctrica modificada) para poder ser suministrada al ADC de la tarjeta sie, en esta ultima el osciloscopio tiene 1v por recuadro de amplitud.

[edit] Parametros de calidad eléctrica

Armónicos e interarmónicos

Las perturbaciones llamada armónicas son causadas por la introducción en la red de cargas no lineales como los equipos que forman parte de la electrónica de potencia (variadores, onduladores, convertidores estáticos, puestos de soldadura,...).

Se llama armónico a una superposición en la onda fundamental de 60 Hz, de ondas igualmente sinusoidales pero de frecuencia múltiples a la de la fundamental. Con el fin de medir los armónicos de corriente o de tensión, se emplea una función matemática llamada “transformada de Fourier” que permite descomponer una señal periódica en una suma de señales sinusoidales múltiples de la frecuencia fundamental.

Todos estos armónicos se pueden sumar: el resultado es el THD (Tasa de Distorsión Armónica). El campo de frecuencias que corresponde al estudio de los armónicos generalmente está comprendido entre 100 y 2000 Hz, es decir desde el armónico 2 hasta el armónico de rango 40. Los niveles máximos rango por rango se definen en las normas CEI 61000-2-2 para Baja Tensión y CEI 61000-2-12 para Media tensión. La norma EN 50160 define los límites máximos de distorsión armónica con la que el distribuidor de energía debe suministrar la tensión, tanto en THD , < 8 % comprendiendo todos los armónicos hasta el rango 40, como en valores rango a rango hasta el rango 25

Los límites de distorsión que establece CENELEC en su norma EN 50160. Se estableció como límite máximo de la distorsión de tensión el 8%, variando los porcentajes de componentes de órdenes 3, 5 y 7 de forma que no se superase en ningún caso este límite y que tampoco se superasen los niveles máximos permitidos para cada armónico individual considerado.

Este medidor de consumo corresponde a un medidor tipo 2, esta clasificación básica incluye los medidores monofásicos y trifásicos para medir energía activa en casas, oficinas, locales comerciales y pequeñas industrias con cargas menores de 55 kW. El índice 2 significa los límites de error porcentual admisible para todos los valores de corriente entre el 10% nominal y la I máxima con un factor de potencia igual a uno. Se rige bajo la norma NTC 4052 “Medidores Estáticos de Energía Activa para corriente alterna clase 1 y 2”. El índice de clase es el número que expresa el límite de error porcentual admisible para todos los valores de corriente entre 0,1 veces la corriente básica y la corriente máxima ó entre 0.05 veces la corriente nominal y la corriente máxima con un Cos ϕ = 1.

Para la norma IEEE-519, eL Límites de corriente para Cargas Monofásicas ≤ 16 A con un TDH de tension <=8 %, Y Las mediciones de armónicos están dentro de la precisión Clase A según la norma IEC 1000-4-7 y un Error total para valores rms < 0,1 %


Variaciones lentas : huecos de tensión, sobretensiones y cortes

La amplitud de la tensión es un factor crucial para determinar la calidad de la electricidad, ya que constituye el principal compromiso contractual del distribuidor de energía. Se definen varios tipos de defectos : la sobretensión, los huecos de tensión y el corte. La norma EN-50160 permite como variación máxima de la amplitud un ±10% de la tensión declarada (230 V entre fase-neutro en sistemas trifásico con neutro o 230 V fase-fase en sistemas trifásicos de 3 conductores).

Las sobretensiones se miden en amplitud y en duración cuando se supera el umbral superior del valor máximo permitido (253 Vrms). 
Los huecos de tensión se contabilizan cuando la tensión es inferior al umbral inferior (207 Vrms). Habitualmente estas variaciones tienen una duración inferior a 0,2s en Media Tensión y Alta tensión. 
Los cortes breves, no excederán una duración de 1 segundo. 


Las sobretensiones de duración inferior a 10 ms se denominan sobretensiones transitorias. Estas sobretensiones son provocadas por fenómenos de origen atmosférico (caída de rayos) o, con mayor frecuencia, por el funcionamiento de equipos eléctricos (conmutaciones de cargas mas o menos inductivas que producen sobretensiones transitorias de alta frecuencia).

El tiempo de ascenso de puede durar de algunos microsegundos a varios milisegundos. Estas variaciones en Baja Tensión son generalmente inferiores a 800 V, pero pueden llegar a sobrepasar los 1000 V con la consiguiente fusión de un fusible.


[edit] Componente Hardware

En esta seccion se presentara el desarrollo de la parte hardware (FPGA) realizado en diferentes fases en las cuales se iran explicando y desarrollando cada uno de los componentes hardware.

[edit] Fase 1: ADC

El objetivo de esta fase es realizar el controlador del ADC, el cual debe configurar el ADC y guardar los datos de la conversion en una memoria implementada en la FPGA para su posterior analisis, para probar el correcto funcionamiento tambien se desarrollara una pequeña aplicacion la cual muestre en la terminal el valor RMS de la señal medida.

Dicho esto empezaremos por el diagrama funcional de esta fase:

Diagrama funcional fase 1


[edit] Top

Este es el modulo en donde se instancian el controlador del ADC, la memoria RAM-DUAL y los diferentes modulos presentados en la figura del diagrama funcional fase 1 (Sincronizacion, buffer tristate, etc). eh aqui el codigo:

module top(clk, data, eoc, do_adc, addr, nwe, ncs, noe, reset, led, cs_o, io_clk, di_adc, adc_cstart
    );
 
parameter     B = (7);
 
input clk, nwe, ncs, noe, reset;
input [10:0]     addr;
input eoc;
input do_adc;
inout [B:0] data;
output led;
output cs_o;
output adc_cstart;
output io_clk;
output di_adc;
 
//inicializacion de señales sincronizadas
reg    sncs, snwe;
reg    [10:0] buffer_addr;
reg    [B:0] buffer_data;
 
//señales ram interna
reg    we;
reg    w_st;
wire [7:0] wrBus2;
wire [10:0] addr2;
wire we2;
 
reg    [B:0] wdBus;
wire   [B:0] rdBus;
 
//buffer tri-state
wire   read = ~noe | ncs;
assign data = read?8'bZ':rdBus;
 
//sincronizacion
 
always  @(negedge clk)
	 begin
		sncs   <= ncs;
		snwe   <= nwe;
		buffer_data <= data;
		buffer_addr <= addr;
	 end
 
//write pulse generator
 
always @(posedge clk)
begin
  if(~reset) {w_st, we, wdBus} <= 0;
    else begin
      wdBus <= buffer_data;
      case (w_st)
        0: begin
            we <= 0;
            if(sncs | snwe) w_st <= 1;
        end
        1: begin
          if(~(sncs | snwe)) begin
            we    <= 1;
            w_st  <= 0;
          end	
          else we <= 0;
        end
      endcase
    end
end
 
//instanciacion de perifericos
 
top_medidor top_medidor(
	.clk_sie(clk),
	.reset(reset),
	.eoc(eoc),
	.do_adc(do_adc),
	.cs_o(cs_o),
	.io_clk(io_clk),
	.di_adc(di_adc),
	.wrBus2(wrBus2),
	.addr2(addr2),
	.we2(we2)
    );
 
RAMB16_S9_S9 ba0(
            .DOA(rdBus),         // Port A 8-bit Data Output
            .DOB(),               // Port B 8-bit Data Output
            .DOPA(),              // Port A 1-bit Parity Output
            .DOPB(),              // Port B 1-bit Parity Output
            .ADDRA(buffer_addr[10:0]),   // Port A 11-bit Address Input
            .ADDRB(addr2[10:0]),  // Port B 11-bit Address Input
            .CLKA(~clk),          // Port A Clock
            .CLKB(~clk),          // Port B Clock
            .DIA(wdBus[7:0]),     // Port A 8-bit Data Input
            .DIB(wrBus2[7:0]),    // Port B 8-bit Data Input
            .DIPA(1'b0'),          // Port A 1-bit parity Input
            .DIPB(1'b0'),          // Port-B 1-bit parity Input
            .ENA(1'b1'),           // Port A RAM Enable Input
            .ENB(1'b1'),           // Port B RAM Enable Input
            .SSRA(1'b0'),          // Port A Synchronous Set/Reset Input
            .SSRB(1'b0'),          // Port B Synchronous Set/Reset Input
            .WEA(we),               // Port A Write Enable Input
            .WEB(we2) );          // Port B Write Enable Input 
 
 
 
//led indicador
 
reg [24:0]  counter;
always @(posedge clk) 
begin
   if (~reset)
     counter <= {25{1'b0'}};
   else
     counter <= counter + 1;
end 
 
assign led = counter[24];
assign adc_cstart = 1'b1';
 
endmodule

RTL Top

Este es el RTL de la fase 1 completa.

RTL Fase 1.

Mirando mas detenidamente y como mostraremos en la siguiente figura podemos ver las etapas de sincronizacion de señales de entrada, la memoria RAM y el buffer tristate para el bus de datos que es bidireccional.

Modulos de Sincronizacion y la RAM.
Bufer tristate.


[edit] Control ADC

Este es el periferico encargado de la correcta lectura y configuracion del ADC, y guarda los datos leidos en la RAM por el puerto B.eh aqui los modulos que lo componen y sus codigos en verilog.

Modulos que lo componen:

Bloques que componen el controlador del ADC.
[edit] Maquina de control

Es la encargada del manejo de las señales que controlan los submodulos de recepcion y transmicion de datos, en la siguiente gráfica se ve exactamente que hace y como funciona.

Diagrama de estados mauqina de control.
module maq_control(
     done,
	  eoc,
	  clk_sie,
	  reset,
	  cs_o,
	  cr_cs,
	  ld_cs,
	  tr_cs
    );
input done;
input eoc;
input clk_sie;
input reset;
output cs_o;
output cr_cs;
output ld_cs;
output tr_cs;
 
reg cs_o = 1, cr_cs = 0, ld_cs = 0, tr_cs = 0;
reg [2:0] next=0;
reg [2:0] state=0;
 
parameter inicio=0,datos1=1,datos2=2,espera=3,e_muerto_1=4,e_muerto_2=5,e_muerto_3=6;
 
always @(posedge clk_sie)
 
begin
case (state)
inicio:
	begin
	  cs_o = 1;
	  cr_cs = 0;
	  ld_cs = 0;
	  tr_cs = 0;
     next=datos1;
	end
datos1:
	begin
	  cs_o = 0;
	  cr_cs = 1;
	  ld_cs = 0;
	  tr_cs = 0;
	  next = datos2;
	end
datos2:
	begin
	  cs_o = 0;
	  cr_cs = 1;
	  ld_cs = 1;
	  tr_cs = 1;
	  if (done == 0)     next = datos2;
	  else next = espera;
	end
espera:
	begin
	  cs_o = 1;
	  cr_cs = 0;
	  ld_cs = 0;
	  tr_cs = 0;
	  if (eoc == 0)     next = espera;
	  else next = e_muerto_1;
	end
e_muerto_1:
	begin
	  cs_o = 1;
	  cr_cs = 0;
	  ld_cs = 0;
	  tr_cs = 0;
	  next = e_muerto_2;
	end
e_muerto_2:
	begin
	  cs_o = 1;
	  cr_cs = 0;
	  ld_cs = 0;
	  tr_cs = 0;
	  next = e_muerto_3;
	end
e_muerto_3:
	begin
	  cs_o = 1;
	  cr_cs = 0;
	  ld_cs = 0;
	  tr_cs = 0;
	  next = datos1;
	end
endcase
end
 
always @(negedge clk_sie)
 
begin
	if (reset == 1)	state = inicio;
	else	state = next;
end
 
endmodule


[edit] Lector de datos

Recive la informacion enviada por el ADC y la direcciona a la memoria RAM.

module lector_de_datos(ld_cs, io_clk, do_adc, reset, wrBus2, addr2, we2
    );
input ld_cs, io_clk, do_adc, reset;
output reg [7:0] wrBus2=0; 
output reg [10:0] addr2=0;
output reg we2=0;
 
parameter comp=11;
 
reg done=0;
reg [1:0] estado=0;
reg [9:0] valor_conv;
reg [3:0] contador=0;
 
always @(posedge io_clk or posedge reset)
begin
	if (reset)
	begin
		we2=0;
		addr2=0;
		wrBus2=0;
		estado=0;
		valor_conv=0;
	end
	else
	begin
		if (ld_cs)
		begin
			contador=contador+1;
			if(contador<comp)
			begin
				valor_conv = valor_conv << 1;
				valor_conv[0] = do_adc;
				done=0;
				if (contador==4`b1010)
				begin
					done = 1;
					estado=0;
				end
			end
		end
		if (done)
		begin
			case (estado)
			0:
			begin
				wrBus2[7:0] = valor_conv[7:0];
				addr2=addr2+1;
				we2 = 1;
				estado = 2`b01;
			end
			1:
			begin
				we2 = 0;
				estado = 2`b10;
			end
			2:
			begin
				wrBus2[7:0] = valor_conv[9:8];
				addr2=addr2+1;
				we2 = 1;
				estado = 2`b11;
			end
			3:
			begin
				we2 = 0;
				estado = 0;
				done=0;
				contador=0;
			end
			endcase
		end
	end
end
 
endmodule


[edit] Transmisor de Datos

Esta encargado de la configuracion del adc, es decir de configurarlo en el modo rapido de conversion y de indicarle de que canal queremos la informacion.


module Transmisor(
	io_clk,
	data_reg,
	tr_cs,
	reset,
	done,
	di_adc,
	clk_sie
    );
 
	input io_clk;
	input [3:0] data_reg;
	input tr_cs;
	input reset;
	input clk_sie;
	output done;
	output di_adc;
 
	reg done = 0, di_adc = 0;
	reg [3:0] di_reg = 0;
	reg [3:0] n = 0;
	reg [3:0] b = 0;
 
	always @(posedge io_clk)
 
	begin
		if(reset == 1)
			begin
				b = 0;
			end
		else if(tr_cs == 1)
			begin
				di_reg = data_reg << n;
				di_adc = data_reg [4-n];
				b=b+1;
				if(b>11) b=0;
			end
	end	
 
	always @(negedge clk_sie)
 
	begin
		if (n == 11) 
			begin
					done=1;
					n=0;
			end
		else if(tr_cs == 1 && n == b-1)		n = b;
		else if(reset == 1)	
			begin
					n=0;
					done=0;
			end
		else begin 
				done=0;
			  end
	end
 
endmodule


[edit] Control de Registro

En este modulo se enuentra los registros necesarios para la configuracion del ADC, es decir, selecciona entre el canal deseado o el registro de configuracion rapida, este modulo es leido por el transmisor el cual envia al ADC el registro seleccionado.

module ctrl_reg(cr_cs, reset, data_reg
    );
input cr_cs, reset;
output reg [3:0] data_reg=0;
 
reg configurado=0,sig_canal=0;
 
always @(posedge cr_cs or posedge reset)
begin
	if (reset)
	begin
		data_reg=4`b0000;
		configurado=1`b0;
	end
	else
	begin
		if (configurado==1`b1)
		begin
			if (sig_canal==1`b0)
			begin
				data_reg=4`b0100;
				sig_canal=1`b1;
			end
			else
			begin
				data_reg=4`b0110;
				sig_canal=1`b0;
			end
		end
		else 
		begin
			data_reg=4`b1001;
			configurado=1`b1;
		end
	end
end
 
endmodule
Personal tools
Namespaces
Variants
Actions
Navigation
interactive
Toolbox
Print/export