Informe V2.0 PDF

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 37

TECNICAS DIGITALES II

Dpto. ELECTRÓNICA
UNIVERSIDAD TECNOLÓGICA NACIONAL
FACULTAD REGIONAL MENDOZA

TITULO
Plantilla de Documentos de Trabajo Final
TITLE

REF. UTN-FRM-TDII-Plantilla Trabajo Final-2015

EDICIÓN
A B
ISSUE

FECHA
20-Oct-15 10-Nov-15
DATE

NOMBRE Y CARGO FIRMA FECHA


NAME &POSISTION SIGNATURE DATE

ESCRITO POR GUSTAVO MERCADO


WRITTEN BY [email protected]

VERIFICADO POR
CHECKED BY

G. de CALIDAD
PRODUCT ASSURANCE

AUTORIZADO POR
AUTHORISED BY

UNIVERSIDAD TECNOLOGICA NACIONAL (UTN)


FACULTAD REGIONAL MENDOZA (FRM)
TÉCNICAS DIGITALES II Tel: +54 261 4239 119 / 596
Rodríguez 273 (5500) Mendoza www.frm.utn.edu.ar
ARGENTINA
TECNICAS DIGITALES II Proyecto final: TD 2 y Medidas Electrónicas 1
Dpto. Electrónica
FRM UTN Pag: ii Ulloa Gabriel – Quiroga Sykes Emiliano

La Universidad Tecnológica Nacional – Facultad Regional Mendoza tiene los derechos sobre este
documento, el cual es confidencial y no será usado para ningún otro propósito, salvo para el que fue
suministrado y no será reproducido, copiado o transmitido en todo o en parte sin el permiso de su dueño.
Cualquier otra persona diferente de la persona autorizada, que consiga el documento por haberlo
encontrado o por otra causa, deberá enviarlo junto con su nombre y dirección en sobre cerrado a:

The National Technical University at Mendoza owns the copyright of this document which is supplied in
confidence and which shall not be used for any purpose other than that for which it is supplied and shall
not in whole or in part reproduced, copied or communicated to any person without permission from the
owner.
Any person other than the authorized holder obtaining possession of this document by finding or otherwise,
should send it, together with his name and address, in a sealed envelope to:

Dpto de Electrónica
Universidad Tecnológica Nacional – Facultad Regional Mendoza
Rodríguez 273 (5500)
Mendoza ARGENTINA
TECNICAS DIGITALES II Proyecto final: TD 2 y Medidas Electrónicas 1
Dpto. Electrónica
FRM UTN Pag: iii Ulloa Gabriel – Quiroga Sykes Emiliano

Entrega de Proyecto
PD (Project Delivery)
Fecha

Autores
Presentación de Documento de Proyecto (este documento versión
final)
Respuesta y corrección de los RFA del FPR
Documentación Presentada

Nombre Nombre
Profesores
Firma Firma
TECNICAS DIGITALES II Proyecto final: TD 2 y Medidas Electrónicas 1
Dpto. Electrónica
FRM UTN Pag: 1 Ulloa Gabriel – Quiroga Sykes Emiliano

INDICE

1. INTRODUCCIÓN ................................................................................................................. 2
1.1. OBJETO ........................................................................................................................ 2
1.2. ALCANCE ..................................................................................................................... 2
1.3. ABREVIATURAS ............................................................ Error! Bookmark not defined.
1.4. DEFINICIONES .............................................................. Error! Bookmark not defined.
2. DOCUMENTOS APLICABLES ............................................. Error! Bookmark not defined.
2.1. DOCUMENTOS MANDATORIOS .................................. Error! Bookmark not defined.
2.2. DOCUMENTOS DE REFERENCIA ................................ Error! Bookmark not defined.
3. DESARROLLO .................................................................................................................... 3
3.1. High level design: ............................................................................................................. 3
3.2. Program/hardware design: ................................................................................................ 9
3.3. Results of the design: ..................................................................................................... 15
4. CONCLUSIONES .............................................................................................................. 20
5. ANEXOS ............................................................................... Error! Bookmark not defined.
TECNICAS DIGITALES II Proyecto final: TD 2 y Medidas Electrónicas 1
Dpto. Electrónica
FRM UTN Pag: 2 Ulloa Gabriel – Quiroga Sykes Emiliano

1. INTRODUCCIÓN
1.1. OBJETO
El objetivo principal del proyecto es realizar un instrumento de medición capaz de
diagnosticar el estado de una línea de tensión domiciliaria (220v) monofásica (extensible a
trifásico en un futuro), es decir, deberá ser capaz de proveer mediciones de valores
instantáneos y eficaces tanto de tensión como de corriente así como también información sobre
el factor de potencia (coseno fi, armónicos). También contará con la capacidad de generar
señales de advertencia en caso de funcionamiento atípico de la línea, ya sean sobre tensiones,
sub tensiones, corrientes excesivas, etc.

En un principio se prevé la visualización de los parámetros se realice por medio de una


pantalla de cristal líquido de 20x4 (LCD2004) extensible en un futuro a una interfaz gráfica en
pantalla TFT de 2.8’’ touch.

1.2. ALCANCE
El proyecto se realizará íntegramente sobre un microprocesador ARM CORTEX M4
(Discovery board STM32F407VG) el cual cuenta con los periféricos necesarios y la capacidad
de procesamiento suficiente. Se eligió este procesador debido a su soporte para funciones de
DSP, entre las que se encuentran la FFT para la detección y medición de armónicos, así como
también posee 3 conversores A/D cuya frecuencia máxima de muestreo supera con creces la
necesaria para analizar una señal senoidal de 50Hz, como es la tensión alterna domiciliaria.
La programación se realizará en lenguaje C y se utilizarán, principalmente, las librerías
CMSIS y HAL.

Además del hardware mencionado anteriormente, será necesario para la realización del
proyecto el uso de:
• Transformadores de tensión y corriente para adaptar los niveles de línea a unos más
adecuado para realizar las mediciones.
• Divisores resistivos de bajo error.
• Circuitos activos (Op. Amp) necesarios para realizar la adaptación de los niveles de
tensión y corriente negativos a valores positivos. Esto se debe a que los conversores
A/D de la placa de trabajo, solo funcionan con tensiones positivas. Es decir, su
tensión de referencia mínima es 0v, (siendo la máxima 3,3v), debido a esto, no se
puede tener excursión negativa en las magnitudes a medir.
• Pantalla de cristal líquido 20x4.
• Pulsadores y leds de indicación ya integrados en la placa de trabajo (Discovery
STM32F407VG).

Durante la realización del proyecto, seguramente esta lista de hará más extensa.
TECNICAS DIGITALES II Proyecto final: TD 2 y Medidas Electrónicas 1
Dpto. Electrónica
FRM UTN Pag: 3 Ulloa Gabriel – Quiroga Sykes Emiliano

2. DESARROLLO

2.1. High level design:


Determinación de la frecuencia mínima de muestreo

Para definir la frecuencia mínima de muestreo necesaria para lograr la resolución y


capacidad de medición deseada, se debe comenzar por definir la frecuencia necesaria
para la medición más exigente.

El mayor condicionante de la frecuencia de muestreo se encuentra en el hecho de que


el desfasaje entre la señal de tensión y corriente se calculará digitalmente a partir del
array de muestras obtenidos tanto de la señal de voltaje como de corriente.
Para tener una resolución mínima de 1º a la hora de detectar el desfasaje, las muestras
deberán representar un tiempo tal de la señal (en un período) que se calculará a
continuación:

20mseg _____360º
Xmseg _____ 1º  1º = 55,55µseg

Es decir, un grado de la señal estará representado por un corrimiento en el tiempo de


55,55 µseg, esto equivale a una frecuencia de muestreo mínima de:
1
𝑓𝑠 𝑚𝑖𝑛 = = 18𝐾𝐻𝑧
55,55µ𝑠𝑒𝑔

Ahora bien, con una frecuencia de muestreo de 18KHz obtenemos una cantidad de
muestras por ciclo (390 muestras) que no es apropiada para la aplicación de la
transformada rápida de Fourier, necesaria para analizar la señal. La razón de esto se
expondrá más adelante.

Para corregir lo anteriormente dicho, se fija un número de 512 muestras por ciclo, y a
partir de allí se calcula la frecuencia de muestreo:
512
𝑓𝑠′ = = 25,6𝐾𝐻𝑧
20𝑚𝑠𝑒𝑔
1
𝑇𝑠′ = = 39,06µ𝑠𝑒𝑔
25,6𝐾ℎ𝑧

Esto significa que para obtener 512 muestras por cada ciclo de la señal (20mseg) se
debe muestrear a una frecuencia de 25,6KHz. Para lograr esta frecuencia de muestreo
se deberá configurar el ADC.

Estando el periférico ADC alimentado del bus PCLK2 el cual está seteado en 6.25MHz,
se configura el “clock prescaler” del ADC en PCLK/4, esto nos proporciona una
frecuencia de trabajo del ADC de 3,125Mhz.
1
Siendo el período: 𝑇 = 3,125𝑀ℎ𝑧 = 0,32µ𝑠𝑒𝑔

Para obtener una muestra cada 𝑇𝑠′ = 39,06µ𝑠𝑒𝑔, se deberá muestrear cada 122 ciclos
del ADC.
TECNICAS DIGITALES II Proyecto final: TD 2 y Medidas Electrónicas 1
Dpto. Electrónica
FRM UTN Pag: 4 Ulloa Gabriel – Quiroga Sykes Emiliano

Siendo la resolución de 10 bits, la conversión tomará 13 ciclos de reloj (según el


datasheet del ADC), por ende se configura el sampling time en 112 ciclos, lo que da una
muestra cada 125 ciclos.

Es decir, se muestreará a 25Khz y cada ciclo de la señal ocupará 500 muestras


(40µseg cada muestra). Lo cual es suficiente para salvar la discontinuidad.

En el caso de la obtención de las componentes de frecuencia de la señal por medio de


la FFT, se siguió el siguiente criterio para determinar la frecuencia mínima necesaria:

De acuerdo al ENRE (Ente Nacional Regulador de la Electricidad) - resolución


Nº184/2000, establece los niveles máximos de amplitud admitidos hasta la armónica
numero 25 (n=25), se decidió realizar la FFT de forma tal que permita obtener
información hasta dicha armónica.

Estando la armónica n=25 situada en la frecuencia: fn=25= 50Hz * 25 = 1250Hz

Por ende, para poder medir hasta la armónica número 25, deberíamos muestrear
mínimo a 3KHz.

Se concluye que con la elección de la frecuencia de muestreo necesaria para lograr la


resolución necesaria en el tiempo (y así calcular correctamente el desfasaje entre
señales), es decir, 25KHz, se sobre muestrea para el caso de la transformada rápida de
Fourier.

Determinación de la máxima impedancia de entrada a los ADC

La impedancia máxima de entrada al ADC para garantizar un error menor a ¼ LSB está
dada por:

10 − 0,5
𝑅𝐴𝐼𝑁 = − 6𝐾Ω = 3,5KΩ
30𝑀ℎ𝑧 ∗ 4𝑝𝐹 ∗ ln(210+2 )

El cumplimiento de la 𝑅𝐴𝐼𝑁 no será problema debido a la utilización de una etapa como


buffer antes del ADC, la cual sitúa la impedancia de entrada al mismo en el orden de los
80Ω.

Cálculo de la FFT

Siendo la transformada de Fourier una transformada formulada para señales periódicas,


sus resultados al aplicar una señal aperiódica provocan resultados erróneos en el
espectro de frecuencias (energía en armónicos altos en los que en verdad no la hay). Es
por esto que a la hora de calcular la frecuencia de muestreo se tuvo en cuenta el hecho
de obtener un número entero (lo más entero posible) de periodos por cada array
muestreado.
TECNICAS DIGITALES II Proyecto final: TD 2 y Medidas Electrónicas 1
Dpto. Electrónica
FRM UTN Pag: 5 Ulloa Gabriel – Quiroga Sykes Emiliano

Siendo 𝑓𝑠 = 25𝐾ℎ𝑧, podremos medir hasta el armónico en la frecuencia:


25000𝐻𝑧
𝑓max 𝐹𝐹𝑇 = = 12,5𝐾𝐻𝑧
2
Es decir, tendremos información hasta el armónico:
12,5𝐾ℎ𝑧
𝑛º𝑎𝑟𝑚ó𝑛𝑖𝑐𝑜 𝑚á𝑥 = = 250
50𝐻𝑧
Lo cual es demasiado y probablemente esto se deba limitar mediante el uso de un filtro
pasa bajos. Esto se verá más adelante.

Para el cálculo de la FFT se utilizarán 512 o bien 1024 muestras (N=512 o N=1024),
esto se decidirá de acuerdo a los resultados obtenidos en la práctica. En el caso de
utilizar 512 muestras estaríamos analizando poco más de un período completo
(20,48mseg). Si utilizáramos 1024 sería poco más de dos períodos.

Suponiendo N=512, cada punto -bin- de la transformada representará en frecuencia:


𝑓𝑠 25𝐾ℎ𝑧
∆𝑓 = = = 48,82𝐻𝑧 ≅ 50𝐻𝑧
𝑁 512

Lo cual resulta perfecto siendo que lo que nos interesa principalmente son los
armónicos impares.
Fuentes:
http://www.ni.com/white-paper/4844/es/
https://www.gaussianwaves.com/2015/11/interpreting-fft-results-complex-dft-frequency-bins-and-fftshift/

Cálculo de valores RMS de tensión y corriente

Los valores eficaces de tensión y corriente se calcularán sobre un array de 512


muestras. Es decir, 1 o 2 ciclos de la señal.

El cálculo se realiza por medio de la siguiente fórmula:


TECNICAS DIGITALES II Proyecto final: TD 2 y Medidas Electrónicas 1
Dpto. Electrónica
FRM UTN Pag: 6 Ulloa Gabriel – Quiroga Sykes Emiliano

Donde:

• n: cantidad de muestras
• xi: valor en volts de la señal en el instante “i”

El algoritmo aplicado es el siguiente:


Xrms = sqrt(((pSrc[0] * pSrc[0] + pSrc[1] * pSrc[1] + ... +
pSrc[blockSize-1] * pSrc[blockSize-1]) / blockSize));

Cálculo del desfasaje entre tensión y corriente

El algoritmo está diseñado para detectar desfasajes entre -90º≤ ᶿ ≤ +90º


Es decir, podrá detectar cargas puramente capacitivas así como puramente inductivas.

Para obtener la muestra de tensión y corriente se utilizan conversores analógico digital


individuales (uno para cada señal). Ambos conversores se disparan por medio de la
misma señal y están configurados para funcionar exactamente a la misma velocidad
(Dual Simultaneous Mode). Es por esto que se puede garantizar que las muestras de
tensión y corriente se toman en el mismo instante de tiempo.
Fuente: STM32's ADC modes and applications - AN3116.

Gracias a esto, se puede calcular sin errores el desfasaje entre la señal de tensión y
corriente.

Se explicará el funcionamiento del algoritmo mediante el siguiente gráfico:


TECNICAS DIGITALES II Proyecto final: TD 2 y Medidas Electrónicas 1
Dpto. Electrónica
FRM UTN Pag: 7 Ulloa Gabriel – Quiroga Sykes Emiliano

Cero en corriente “p”

Cero en tensión “j”

[Rojo: Onda de tensión] [Azul: Onda de corriente]

El algoritmo lo que hace es buscar el primer cruce por cero de pendiente positiva de la
onda de tensión (roja), esto lo logra mediante la comparación de valores de la onda en
el instante [i-1] y [i+1]. Entonces si:

• [i-1] > [i+1] será pendiente negativa (la onda viene en decrecimiento)
• [i-1] < [i+1] será pendiente positiva (la onda viene en crecimiento)

Una vez detectado este cero, supongamos, en la posición “j”, se procede a buscar el
cero más próximo a la posición “j” pero en la onda de corriente (azul). Es decir, se
comienza a recorrer la onda de corriente desde la posición “j” en forma positiva, hasta el
próximo cruce por cero. En este caso se busca indistintamente un cero de pendiente
positiva como negativa.

Suponiendo que se encuentra el cero en la onda de corriente en la posición “p”, la


pendiente de la onda en dicha posición indicará si el desfasaje es positivo o negativo.

El grado de desfasaje se calcula haciendo la resta de “j” menos “i”, es decir, se obtiene
la diferencia (en cantidad de muestras) entre el cero en corriente y el cero en tensión.

𝐷𝑒𝑠𝑓𝑎𝑠𝑎𝑗𝑒𝑒𝑛 𝑚𝑢𝑒𝑠𝑡𝑟𝑎𝑠 = 𝑗 − 𝑖

Siendo que cada muestra representa un tiempo específico que dependerá de la


frecuencia de muestreo. Siendo la frecuencia de muestreo de 25Khz:
1 1
𝑡𝑠 = = = 40µ𝑠𝑒𝑔
𝑓𝑠 25000

Multiplicando esto por el desfasaje en cantidad de muestras obtendremos el desfasaje


entre la onda de tensión y corriente en unidades de tiempo.
TECNICAS DIGITALES II Proyecto final: TD 2 y Medidas Electrónicas 1
Dpto. Electrónica
FRM UTN Pag: 8 Ulloa Gabriel – Quiroga Sykes Emiliano

Podemos calcular también el desfasaje en grados que representa cada muestra de la


siguiente forma:

20mseg _____360º

40µseg _____ Xº  Xº = 0,72º

Es decir, cada muestra de desfasaje representa 0,72º.

Factor de cresta

El factor de cresta es un factor de deformación, que relaciona el valor eficaz y el valor


pico según la siguiente expresión:
𝑉𝑝𝑖𝑐𝑜
𝐶𝐹 =
𝑉𝑟𝑚𝑠

Una vez calculado el valor RMS de la onda mediante la fórmula previamente dicha, se
busca el valor máximo de la onda (Vpico) en el mismo período de cálculo del valor RMS y
se procede a realizar el cociente para obtener el factor de cresta.

En una señal de tensión no deformada, CF deberá valor 1,414. Esto indica que el valor
de pico es 1,414 veces mayor al valor RMS. Si la señal se encontrara deformada, CF
sería mayor a este valor.

Tasa de distorsión armónica (THD)

Se calculará el THDf el cual representa la distorsión armónica total con respecto a la


componente fundamental, es decir, a la señal que deberíamos tener sin armónicos.

√(ℎ2 )2 + (ℎ3 )2 + ⋯ + (ℎ𝑛 )2


𝑇𝐻𝐷𝑓 = ∗ 100%
ℎ1

El algoritmo aplicado es el siguiente:

Xrms = sqrt(pSrc[1] * pSrc[1] + pSrc[0] * pSrc[0] + ... +


pSrc[blockSize-1] * pSrc[blockSize-1]) / pSrc[1];
TECNICAS DIGITALES II Proyecto final: TD 2 y Medidas Electrónicas 1
Dpto. Electrónica
FRM UTN Pag: 9 Ulloa Gabriel – Quiroga Sykes Emiliano

2.2. Program/hardware design:

Hardware etapa de entrada señal de tensión

La señal de tensión se obtiene por medio del siguiente módulo:

Fuente: http://www.interplus-industry.fr/index.php?option=com_content&view=article&id=52&Itemid=173&lang=en

Este módulo cuenta con un transformador de tensión de alta precisión (ZMPT101b)


especialmente diseñado para mediciones de tensión.

Si bien el módulo entrega una señal alterna montada sobre un offset de continua, sus
niveles no son los apropiados para realizar la conversión en el ADC del Cortex M4. Es
por esto que la señal se debe tratar.

Se diseño el siguiente circuito con la finalidad de restar un nivel de continua de la señal


entregada por el módulo de sensado, de forma de que los niveles sean los apropiados
para el conversor analógico digital.

El circuito se encuentra diseñado para que el amplificador operacional sature en el caso


de valores excesivos de tensión, para así proteger la entrada del ADC.

Consiste de un amplificador operacional (LM324A) funcionando como amplificador


restador de ganancia unitaria.
TECNICAS DIGITALES II Proyecto final: TD 2 y Medidas Electrónicas 1
Dpto. Electrónica
FRM UTN Pag: 10 Ulloa Gabriel – Quiroga Sykes Emiliano

Esto entrega a la salida (ADC1_V) una tensión alterna senoidal (coincidente con la
señal de voltaje de la red) con una excursión de 1,4Vp montada sobre un offset de
continua de 1,5v.

Siendo:

• Verde: Señal de entrada al circuito. Es decir, salida del módulo


ZMPT101b

• Roja y Azul: Señal de salida y referencia, respectivamente, para verificar


que el circuito no produzca distorsión alguna.
TECNICAS DIGITALES II Proyecto final: TD 2 y Medidas Electrónicas 1
Dpto. Electrónica
FRM UTN Pag: 11 Ulloa Gabriel – Quiroga Sykes Emiliano

Hardware etapa de entrada señal de corriente

Para realizar el sensado de la señal de corriente se decidió recurrir a un sensor tipo


“pinza amperométrica” debido a la facilidad que este tipo de sensores ofrecen a la hora
de utilizar en un instrumento portátil. El sensor utilizado el siguiente:

Este sensor consiste en un núcleo de ferrite partido, el mismo produce a su salida una
corriente alterna (idéntica en forma a la señal medida) 3000 veces más pequeña.

Si bien el sensor está diseñado para medir corrientes de hasta 150Amperes, en esta
primera etapa del proyecto, se calibrará para realizar una medición máxima de
65Amperes.

La señal de corriente alterna de salida debe ser transformada a una señal de tensión
mediante una resistencia y luego adaptada para ser inyectada a la entrada del ADC. La
adaptación consiste en sumar un nivel de offset a esta señal alterna de forma que a la
entrada del conversor analógico digital tengamos una señal alterna de excursión
puramente positiva y de valor pico no mayor a 3v.

Esto se realizó mediante el siguiente circuito:


TECNICAS DIGITALES II Proyecto final: TD 2 y Medidas Electrónicas 1
Dpto. Electrónica
FRM UTN Pag: 12 Ulloa Gabriel – Quiroga Sykes Emiliano

El circuito recibe a su entrada una señal de tensión senoidal de 3Vpp con excursión
tanto positiva como negativa (centrada en 0v).

A la salida entrega esta misma señal invertida y montada sobre un nivel de continua de
1.5v:

Determinación de la resistencia conversora corriente-tensión:

Siendo el tope de escala de 47.7Arms (67.50A pico), y la relación de transformación del


sensor de corriente n=1/3000.

Si el sensor está midiendo una corriente de 1Amp a la salida entregará una corriente de
333,33µAmp.

El fondo de escala estará representado por una corriente de 6,66mA, lo que se deberá
traducir en una tensión alterna cuya excursión pico a pico sea 2.7v.
2,7𝑣
𝑅𝑠𝑒𝑛𝑠𝑜𝑟𝑎 = = 120Ω
22.5𝑚𝐴

Notas sobre el hardware en el sensado de corriente y tensión

Se decidió utilizar el circuito operacional LM324A debido a su baja corriente de offset y


a la posibilidad de ser utilizado con una sola fuente. Gracias a esto se redujo
sustancialmente el tamaño de diseño.

Tanto la señal de tensión como de corriente se encuentran invertidas respecto de la


original a la entrada de los conversores analógico~digital, esto se tiene en cuenta en el
software y por lo que es indistinto.
TECNICAS DIGITALES II Proyecto final: TD 2 y Medidas Electrónicas 1
Dpto. Electrónica
FRM UTN Pag: 13 Ulloa Gabriel – Quiroga Sykes Emiliano

La parte más sensible del circuito y la que mayor error introduce en las mediciones tanto
de tensión como de corriente, es el hecho de que todas las mediciones que se realizan
se basan en que el nivel de continua sobre el cual se encuentran montadas las señales
no varíe. Esto no es así debido a que la fuente sufre pequeñas variaciones de tensión
prácticamente imperceptibles, si bien a la hora de realizar el muestreo a una frecuencia
de 25KHz, esto no pasa tan desapercibido.
Se trató de minimizar el efecto de estas fluctuaciones sobre la medición haciendo que la
fuente de tensión de estos voltajes de referencia sea la misma que la referencia de los
conversores A/D. Es decir, las fluctuaciones que sufren las referencias de los
operacionales también las sufren los conversores y por ende su efecto en la medición
se ve disminuida.

Interfaz de usuario

Para la visualización de las mediciones se utiliza un display de 20x4 del siguiente tipo:

El usuario podrá navegar por los distintos menús de la interfaz mediante un único
pulsador.

Las posibles pantallas que verá el usuario y la información contenida en cada una de
ellas es la siguiente:

1. Información de tensión y corriente


• VRMS
• IRMS

2. Valores máximos de tensión(Vp) y corriente(Ip)

• VMAX
• IMAX

3. Información de potencia

• Potencia activa
• Potencia reactiva
TECNICAS DIGITALES II Proyecto final: TD 2 y Medidas Electrónicas 1
Dpto. Electrónica
FRM UTN Pag: 14 Ulloa Gabriel – Quiroga Sykes Emiliano

• Potencia aparente
• Coseno fi

4. Información sobre armónicos y CF

• Distorsión armónica total en tensión


• Factor de cresta en tensión
• Factor de cresta en corriente

Diseño de PCB

El diseño de la PCB se realizó íntegramente en Altium Designer 2016. Para esto se


debió crear footprints personalizados para ciertos componentes, como el header
conector del sensor de corriente y los trimmer.
Se muestra a continuación una captura del circuito terminado:

Como se observa, el diseño se realizó con la idea de hacer las veces de “shield” para la
placa Discovery STM32F407VG. Para esto el diseño se debió realizar en función de las
dimensiones de la placa
TECNICAS DIGITALES II Proyecto final: TD 2 y Medidas Electrónicas 1
Dpto. Electrónica
FRM UTN Pag: 15 Ulloa Gabriel – Quiroga Sykes Emiliano

2.3. Resultados del diseño:


Calibración en el laboratorio

Debido a que las señales (entiéndase tensión y corriente) antes de ingresar al conversor
analógico~digital debieron ser tratadas, no se puede disponer de una “constante
matemática” la cual nos indique la relación exacta entre las variables a medir y las
señales de entrada a los conversores. Esto se debe a que la ganancia de los
amplificador no es exactamente unitaria, así como a que el nivel sobre el cual se
montan las señales finales (offset) depende de divisores resistivos los cuales deben ser
ajustados manualmente.

El procedimiento de calibración es similar tanto en el caso de la tensión como de la


corriente. Y es el siguiente:

1. Constatación visual de que la señal no sufra ninguna deformación durante su


paso por los circuitos de acondicionamiento: esto se realizó utilizando un
osciloscopio y verificando que la resta entre las señales de entrada y de salida
de los operacionales sea cero. Esto significa que ambas señales son idénticas.

2. Verificación de amplitud de señales a las entradas de los conversores: en el


caso de la señal de tensión se verificó que para una tensión de red de 220v
(311vp) la señal a la entrada de los ADC se encontrara con el nivel de amplitud
esperado. Para la tensión nominal (220Vrms), el pico tanto positivo, como
negativo, de la señal a la entrada del ADC debe dejar un margen superior e
inferior de 100mV. El ajuste de este nivel se logra variando la tensión de offset
que se suma a las señales así como la ganancia de los operacionales de ser
necesario.
En el caso de la corriente se debió simular (mediante un generador de ondas)
las condiciones para la corriente máxima (65Amp) debido a la imposibilidad de
lograr esta corriente en el laboratorio.

3. Obtención de la relación entre señales medidas y señal en la entrada a los


conversores:

• Señal de tensión: Se utilizó el multímetro disponible en laboratorio de


electrónica “Tektronix TX1 TRMS” (especificaciones en anexo III)
como instrumento patrón debido a ser el instrumento con mejores
especificaciones disponibles al momento. El procedimiento se basó
en conectar el instrumento como medidor de tensión alterna a la red y
obtener la lectura del instrumento para luego aplicar la fórmula:

Vppred = √2 ∗ 𝐿𝑒𝑐𝑡𝑢𝑟𝑎 ∗ 2

El valor obtenido se comparó con el valor pico a pico de la señal de


entrada al ADC (obtenida de la misma toma de la que tomaba la
lectura el multímetro) en ese mismo instante para obtener una
relación aproximada. Una vez obtenida esta relación se fue ajustando
manualmente hasta lograr una lectura lo más parecida posible a la del
instrumento.
TECNICAS DIGITALES II Proyecto final: TD 2 y Medidas Electrónicas 1
Dpto. Electrónica
FRM UTN Pag: 16 Ulloa Gabriel – Quiroga Sykes Emiliano

• Señal de corriente: Debido a que la corriente depende de la carga y a


la imposibilidad de conseguir una carga que nos permita lograr
elevadas corrientes, la calibración se realizó con dos cargas: una
lámpara incandescente de 75W y un balasto (que alimentaba a un
sodio de 400W). Aquí vale recalcar que, según las especificaciones
del balasto, éste era de 250W (según su vendedor era de 400W), sin
embargo, el foco de vapor de sodio al que alimenta es de 400W.
El procedimiento fue similar al del caso de la tensión, solo que en este
caso el multímetro se configuró en la escala de 10Amp y se dispuso
en serie con la carga a medir. El sensor de corriente se colocó sobre
el mismo conductor del cual se estaba tomando la medición de
corriente.
En el caso del sodio, se lograron corrientes (en régimen permanente)
de 1.6Amp aproximadamente y en el caso de la bombilla
incandescente, de 0.35Amp aproximadamente.
Se adjunta imagen del momento de la calibración con la bobilla.
Cabe destacar que en dicho momento ya se encontraba calibrado el
medidor de tensión y que en la imagen el valor de tensión se estaba
tomando con un multímetro que no es de verdadero valor eficaz.

Especificaciones del diseño


A la hora de lograr mejores resultados el limitante fue el tiempo y no así el hardware
asociado al proyecto. El microprocesador utilizado (Cortex M4) tiene capacidades para
realizar holgadamente todo lo solicitado así como sus periféricos (entiéndase conversor
analógico digital). El ritmo impuesto por la facultad y las 6 materias de 4to año cursadas
por los integrantes del grupo, en conjunto con las reformas aplicadas este año respecto
a la modalidad de evaluación, provocaron que los tiempos no fueran los suficientes
como para pulir y lograr un proyecto como ambas cátedras (técnicas digitales II y
medidas electrónicas 1) merecen. Por estas razones no se logró lo esperado por los
alumnos al idear inicialmente el proyecto.
TECNICAS DIGITALES II Proyecto final: TD 2 y Medidas Electrónicas 1
Dpto. Electrónica
FRM UTN Pag: 17 Ulloa Gabriel – Quiroga Sykes Emiliano

➢ Valores máximos: valores máximos medidos por el instrumento.


▪ Tensión: 240Vrms
▪ Corriente: 47,7Arms

Cabe destacar que estos valores máximos son prácticos y no están definidos por
limitaciones de los sensores ni del hardware. El sensor de corriente está
diseñado para realizar una medición máxima de 150Amp rms en tanto que el
sensor de tensión el máximo valor capaz de medir son 1000v rms.
El aumentar el rango de medición significaría tener que aumentar la resolución
de los conversores AD para no perderla en las mediciones. Esto no es una
limitación para la placa, simplemente al inicio del proyecto se definió una
resolución a utilizar y unos valor máximos a medir para evitar la complejidad.

➢ Resolución: es la cantidad más pequeña que se puede medir o discriminar.


Debido a la falta de información respecto a esto de los sensores de tensión y
corriente, se toma como la resolución la mínima cantidad capaz de discriminar el
conversor analógico digital. Esta cantidad depende de la resolución del mismo,
la cual está configurada en 10 bits.

Siendo 2.94v la máxima tensión medida por los conversores (comprobada


experimentalmente), la resolución de ambos AD será:
2.94𝑣
𝑅𝑒𝑠𝑜𝑙𝑢𝑐𝑖ó𝑛𝐴𝐷𝐶 = = 2,87𝑚𝑉
1024

En el caso de la corriente, siendo la excursión máxima de la onda de señal


producida para una medición de 67,5Amp (pico a pico) de 2,7vpp. La variación
de tensión en la entrada del ADC por cada amper medido será:

2,7𝑉𝑝𝑝
= 0,04𝑣 = 40𝑚𝑉
67,5𝐴𝑚𝑝

Siendo la resolución del ADC de 2,93mV, éste podrá detectar:

40mV _____ 1Amp


2,87mV_____ XAmp => 2,87mV/40mV = 71,75mApp

Dado que este valor se refiere a valores pico a pico, la resolución en valores
RMS será:
71,75𝑚𝐴
= 25,36𝑚𝐴 𝑅𝑀𝑆
2 ∗ √2

Es decir, la resolución teórica del conversor AD en corriente, es de 25,36mA


RMS.

En el caso de la tensión, siendo 2,7Vpp la excursión para una entrada de


240Vrms (339,41Vp), la resolución será:

2,7Vpp _____ 339,41Vp*2


2,87mV_____XVpp => (2,87mV*678,82V) / 2,7v = 0,72Vpp
TECNICAS DIGITALES II Proyecto final: TD 2 y Medidas Electrónicas 1
Dpto. Electrónica
FRM UTN Pag: 18 Ulloa Gabriel – Quiroga Sykes Emiliano

La resolución en valores RMS de tensión será:

0,72𝑉𝑝𝑝
= 0,25𝑉𝑟𝑚𝑠
2 ∗ √2

Cabe destacar que ambas resoluciones calculadas, tanto para el caso de la


tensión como de la corriente, se refieren a mínima variación en valores RMS
detectables por el ADC. Se deberá tener en cuenta que una variación tan
pequeña en las lecturas no es atribuible a una efectiva variación de la magnitud
medida. Es decir, variaciones tan pequeñas se pueden deber a diversas causas
como:
• Variación de las tensiones de referencia internas del ADC.
• Variación de las tensiones de referencia para los valores de offset
agregados a la señal. Estas a sí mismas dependerán de la
temperatura debido a que dichas tensiones de referencias se logran
mediante el uso de divisores resistivos los cuales varían sus valores
con la temperatura.
• Presencia de ruido en los conductores ya sea de los transductores
como de la propia línea, así como inducido en la misma placa.

Debido a esto, la resolución del ADC no se toma como la exactitud del


instrumento.

• Exactitud: es el mayor error permitido de la lectura.

Este parámetro se obtuvo experimentalmente utilizando como patrón el


multímetro Tektronix TX1 disponible en el laboratorio de electrónica. Esto
quiere decir que los valores de exactitud presentados a continuación no
deberían ser tomados como absolutos o reales debido a que dependen,
además del error propio del instrumento aquí desarrollado, del error del
instrumento tomado como patrón.

• Tensión: Valor medido ± 1v


• Corriente mayor a 1Amp: Valor medido ± 100mA
• Corriente menor a 1Amp: Valor medido ± 10mA

En el caso de la corriente el valor de exactitud debería ser especificado por


rangos, si bien debido debido a la imposibilidad de lograr altos valores de
corriente, se especifica para los rangos ensayados.
Para el rango de corriente mayor a un amper (ensayado en 1,6Amp) se
utilizó como carga un balastro (carga inductiva) se pudo verificar en el
osciloscopio el alto contenido de armónicos (deformación de la onda) en
dicho caso. El error de ±100mA se debe a la continua variación de los
valores leídos de corriente. Esta variación continua no se observó en el caso
de la carga puramente resistiva con la cual se verificó el rango menor a
1Amp (bombilla incandescente), es por esto que se concluyó una mayor
exactitud para el rango inferior.
TECNICAS DIGITALES II Proyecto final: TD 2 y Medidas Electrónicas 1
Dpto. Electrónica
FRM UTN Pag: 19 Ulloa Gabriel – Quiroga Sykes Emiliano

A continuación, se presentan dos imágenes de la forma de onda en el caso


de la carga resistiva y de la inductiva:

Onda de corriente carga inductiva Onda de corriente carga resistiva

La lectura de estas formas de onda se obtuvo a la entrada del conversor AD.


La forma de la onda muestreada por el ADC se contrastó con la observada
en el osciloscopio por medio de la utilización del software STM STUDIO
utilizado para debuggear y visualizar variables en tiempo real. Se verificó
visualmente que la forma de la onda muestreada por el conversor es, en
efecto, la observada en el osciloscopio.
TECNICAS DIGITALES II Proyecto final: TD 2 y Medidas Electrónicas 1
Dpto. Electrónica
FRM UTN Pag: 20 Ulloa Gabriel – Quiroga Sykes Emiliano

3. CONCLUSIONES
El diseño en general cumplió con las expectativas, si bien hay muchas cosas que se
pueden y se van a mejorar. Debido a falta de tiempo no se pudo ampliar la funcionalidad,
así como la exactitud del mismo.

Lamentablemente al realizar el diseño de la PCB se cometió el error de confundir las


posiciones de los headers donde va montada la placa de desarrollo Discovery Board,
debido a esto se debieron montar los headers del lado del cobre (como si fuese montaje
superficial) y a sí mismo, colocar la placa del lado contrario de la plaqueta en el que estaba
pensado y diseñado para ir. Esto provocó que no se pudiera cerrar correctamente el
gabinete debido a que al no estar todo correctamente ordenado como estaba previsto en el
diseño, no entraron los componentes debidamente. Este error ya fue corregido en el diseño
del PCB, si bien debido a la falta de tiempo no se logró realizar otra plaqueta para entregar
el proyecto en forma. Por esto, pedimos disculpas.

Durante el desarrollo del proyecto fueron surgiendo problemas que fueron superados en su
mayoría. Sin embargo, uno de los últimos problemas que surgieron fue el de la necesidad
de aumentar notablemente la frecuencia de muestreo debido a la necesidad de tener mayor
resolución en el tiempo y así poder calcular desfasajes entre ondas de tensión y corriente
con un error menor o igual a 1º. Este aumento de la frecuencia de muestreo (de 5KHz a
25KHz) introdujo un nuevo problema y fue el de la necesidad de tener que filtrar la señal de
entrada para evitar ruido de alta frecuencia. Debido a que esto se presentó una vez ya
armada la PCB no se pudo disponer de un filtro adecuado a tiempo.
El hecho de que el cálculo de distorsión armónica total (THDf) sea mayor a lo esperado en
algunos casos se le atribuye a esto y al hecho de que la onda sobre la cual se aplica la FFT
no es exactamente un período por lo que puede tener pequeñas discontinuidades en sus
extremos. Estas discontinuidades provocan la presencia de armónicos que en realidad no
existen en altas frecuencias, lo que provoca un cálculo erróneo de la THDf.

Otro de los mayores problemas que se presentaron fue durante la etapa inicial del proyecto,
durante la etapa de investigación principalmente. La documentación sobre el uso del
conversor AD en el modo utilizado aquí (Dual simultaneous mode) se encuentra poco
documentado y con pocos ejemplos sobre su utilización. Es por esto que esta primera
etapa fue especialmente difícil de zanjar. Una vez superada el desarrollo del resto del
proyecto fue más fluido.

Durante y para el desarrollo del proyecto fue necesario consultar cientos de fuentes de
información distintas: foros, datasheets, documentación, ejemplos de código, etc. En el
anexo IV se trata de adjuntar cada una de dichas fuentes de información, si bien muchas no
fueron registradas en su momento. Cabe destacar que si no fuera por el dominio del idioma
inglés este proyecto hubiera sido imposible de realizar de la forma en que se realizó, ya que
la documentación y la gran mayoría de los foros donde se puede encontrar información útil
sobre la placa de desarrollo utilizada (Discovery Board STM32F407VG) se encuentran
exclusivamente en inglés.

En el software no se utilizó ninguna porción de código ajeno más allá de las librerías y el
código de configuración generado mediante el software proveído por ST Microelectronics:
STM32 Cube MX.
Todos los derechos reservados a ARM Limited por las librerías standard utilizadas, así
como a STMicroelectronics por sus librerías HAL.
TECNICAS DIGITALES II Proyecto final: TD 2 y Medidas Electrónicas 1
Dpto. Electrónica
FRM UTN Pag: 21 Ulloa Gabriel – Quiroga Sykes Emiliano

ANEXO I: Manual de usuario

Medidor de calidad de energía

Especificaciones
• Alimentación

Conector tipo Mini USB. Tensión: 5v – Corriente: 1Amp o mayor

• Valores máximos
Valor máximo de tensión RMS 240Vrms

Valor máximo de corriente 47Amp rms

• Error
Error en lectura de tensión. Todo el rango Valor leído ±1v

Error en lectura de corriente. I ≤ 1Amp rms Valor leído ± 10mA

Error en lectura de corriente. I > 1Amp rms Valor leído ± 100mA

Error en desfasaje Valor leído ± 1º


TECNICAS DIGITALES II Proyecto final: TD 2 y Medidas Electrónicas 1
Dpto. Electrónica
FRM UTN Pag: 22 Ulloa Gabriel – Quiroga Sykes Emiliano

Modo de uso
• Conexión de sensores:

La ficha macho correspondiente al sensor de tensión deberá ser enchufado en la línea a evaluar.

El sensor de corriente tipo transformador de núcleo partido, deberá ser colocado en uno solo de
los dos cables que alimentan a la carga a analizar. No es necesario abrir el circuito. Se deberá
tener la precaución de que el sensor “abrace” a uno solo de los conectores y no a los dos, de lo
contrario la lectura de corriente será nula.

Es indistinto primero conectar los sensores y luego energizar el medidor o viceversa.

• Navegación por menús:

La navegación por los distintos menús disponibles es sumamente sencilla debido a que el
instrumento sólo posee un botón.
Una vez energizado el aparato, aparecerá la pantalla de bienvenida (inicialización) luego de
2,5segundos se mostrará la pantalla principal donde se podrán visualizar las mediciones de
tensión y corriente de estar conectados los sensores.
La disposición de los menús es la siguiente:

• Menu 1:
▪ Valor RMS de tensión
▪ Valor RMS de corriente
• Menu 2:
▪ Valor máximo de tensión
▪ Valor máximo de corriente
▪ Factor de cresta (CF)
• Menu 3:
▪ Potencia aparente
▪ Potencia reactiva
▪ Potencia activa
▪ Factor de potencia Cos(Φ)
• Menu 4:
▪ Distorsión armónica total THDf en tensión
▪ Factor de cresta (CF)

Para avanzar por los menús, sólo se deberá presionar el botón rojo una sola vez y aguardar a que
cambie la pantalla.
TECNICAS DIGITALES II Proyecto final: TD 2 y Medidas Electrónicas 1
Dpto. Electrónica
FRM UTN Pag: 23 Ulloa Gabriel – Quiroga Sykes Emiliano

ANEXO II: Costos

PARTE COSTO
Placa de desarrollo Discovery STM32F407VG $1000
Gabinete de proyecto 15x10 [cm] $140
Sensor de corriente núcleo partido 150Amp $300
Sensor de tensión 1000v $250
Amplificador operacional LM324A $40
Tira de headers 2x25 por dos unidades $80
Display 20x4 $200
Componentes varios $100
PCB con mascara de componentes y anti-soldante $175
TOTAL $2285

Cabe aclarar que los costos se pueden reducir, como sería en el caso de la placa de desarrollo. No es
estrictamente necesario hacer uso de dicha placa la cual cuenta con gran cantidad de periféricos
(amplificadores AB, micrófono, giróscopo, acelerómetro, etc).

En esta clase de proyectos los sensores son uno de los mayores costos. El sensor de corriente aquí
utilizado se consiguió a muy buen precio, siendo los precios de sensores similares superiores a $400
TECNICAS DIGITALES II Proyecto final: TD 2 y Medidas Electrónicas 1
Dpto. Electrónica
FRM UTN Pag: 24 Ulloa Gabriel – Quiroga Sykes Emiliano

ANEXO III: Especificaciones multímetro Tektronix TX1


TECNICAS DIGITALES II Proyecto final: TD 2 y Medidas Electrónicas 1
Dpto. Electrónica
FRM UTN Pag: 25 Ulloa Gabriel – Quiroga Sykes Emiliano
TECNICAS DIGITALES II Proyecto final: TD 2 y Medidas Electrónicas 1
Dpto. Electrónica
FRM UTN Pag: 26 Ulloa Gabriel – Quiroga Sykes Emiliano

ANEXO IV: Enlaces y documentación utilizada


Paginas webs:
How to interpret FFT results – obtaining magnitude and phase information:
https://www.gaussianwaves.com/2015/11/interpreting-fft-results-obtaining-magnitude-and-phase-information/
How to Interpret FFT results – complex DFT, frequency bins and FFTShift:
https://www.gaussianwaves.com/2015/11/interpreting-fft-results-complex-dft-frequency-bins-and-fftshift/
Floating Point (Real Numbers): http://www.dspguide.com/ch4/3.htm
Tutorials for STM32F4 microcontroller: http://www.electronics-homemade.com/STM32F4.html
STM32F0 Tutorial 6: ADC single channel measuring reference voltaje: https://www.youtube.com/watch?v=1UPf-
Z8ol50
Tutorial CubeMX- 8-ADC_DMA+USART_DMA STM32F4 Discovery:
https://www.youtube.com/watch?v=oidnujpelvI
STM32F4-workarea: https://github.com/g4lvanix/STM32F4-workarea
DC with DMA triggered by ADC Watchdog (Signal Peak Recording): https://community.st.com/thread/34441-adc-
with-dma-triggered-by-adc-watchdog-signal-peak-recording
A detailed tutorial on STM32 ADC: https://visualgdb.com/tutorials/arm/stm32/adc/
STM32F4 and “Most” of What You Ever Wanted to Learn about Its Analog Digital Converter (ADC):
http://survivalengineer.blogspot.com.ar/2013/03/stm32f4-and-most-of-what-you-ever.html
FFT Zero Padding: http://www.bitweenie.com/listings/fft-zero-padding/
Using ADC with DMA on STM32 micrcontroller: http://tunizem.blogspot.com.ar/2014/09/using-adc-with-dma-on-
stm32.html
STM32 ANALOGUE-TO-DIGITAL CONVERTER (ADC): http://embedded-lab.com/blog/stm32-adc-2/7/
STM32F0 ADC - Tutorial 6: https://letanphuc.net/2016/07/stm32f0-adc/
Reading multiple analog pins simultaneously: https://community.particle.io/t/reading-multiple-analog-pins-
simultaneously/26389
Problems with ADC and dma: https://community.st.com/thread/35982-problems-with-adc-and-dma
Bug in STM32CubeMX v 4.22.0 with dual ADC mode: https://community.st.com/thread/42104-bug-in-
stm32cubemx-v-4220-with-dual-adc-mode
Usage of two DMA ADC channels in dual regular simultaneous mode STM32:
https://stackoverflow.com/questions/45153640/usage-of-two-dma-adc-channels-in-dual-regular-simultaneous-mode-
stm32
changing hex value to decimal: http://www.keil.com/forum/19104/changing-hex-value-to-decimal/
Create a differential Op Amp Subtractor With Single Supply?:
https://electronics.stackexchange.com/questions/310049/create-a-differential-op-amp-subtractor-with-single-supply
STM32F4 HD44780 LCD Driver Documentation: https://eartoearoak.com/software/stm32f4-hd44780-lcd-
driver/stm32f4-hd44780-lcd-driver-documentation
ZMPT101B Ultra Micro Voltage Transformer: http://www.interplus-
industry.fr/index.php?option=com_content&view=article&id=52&Itemid=173&lang=en

Documentos:
STM32F407VG Datasheet
LM324N Datasheet
ADC modes and application - AN4195
STM32's ADC modes and applications - AN3116
DSP on STMF429 - AN4841
How to get the best ADC accuracy in STM32 - AN2834
Understanding and minimising ADC conversion errors - AN1636
Watt-hour meter based on the STM32F101 - AN3322
Getting started discovery STMF407VG
HAL & LL - User Manual
Keil_Debugging
Calidad de energía: Medición de armónicas de tensión en una instalación urbana. Editorial de la Universidad
Tecnológica Nacional. Diego M. Ferreyra y Alejandro D. Gudiño
Single supply OP amp design techniques – Texas Instruments
ZMPT101B - Mejorando la medición
ANEXO A LA RESOLUCIÓN ENRE Nº 184/2000
TECNICAS DIGITALES II Proyecto final: TD 2 y Medidas Electrónicas 1
Dpto. Electrónica
FRM UTN Pag: 27 Ulloa Gabriel – Quiroga Sykes Emiliano

ANEXO V: Código principal


Se aclara que no se incluye el código de inicialización.
/* USER CODE BEGIN PV */
/* Private variables ---------------------------------------------------------*/
///////////////////////
/// Display HD44780 ///
//////////////////////
int LCD_Page=0;
#define UDG 0
//////////////////////

/////////////////////
/// Muestreo ADC ///
/////////////////////
uint32_t ADC_Buffer[512]; //Buffer ADC valores finales
float32_t ADC_Buffer_I[512]; //Buffer valores de corriente finales
float32_t ADC_Buffer_V[512]; //Buffer valores de tensi󮠦inales
float32_t ADC_Buffer_I_scaled[512]; //Buffer valores de corriente finales - ENTRADA AL ADC
float32_t ADC_Buffer_V_scaled[512]; //Buffer valores de tensi󮠦inales
float32_t ADC_Buffer_I_scaled_S[512]; //Buffer valores de corriente finales - ANTES DEL SENSOR
float32_t ADC_Buffer_V_scaled_S[512]; //Buffer valores de tensi󮠦inales
float32_t Vin_ADC[512]; //Niveles de tensi󮠦 corriente en la entrada del ADC
para debugear.
float32_t Iin_ADC[512];
float32_t Vrms_acumulado[20];
float32_t Vrms_acumulado_prom=0;
float32_t Irms_acumulado[20];
float32_t Irms_acumulado_prom=0;
float32_t scale_V_ADC = 0.003223; //Esto es 3.3/1024 (el 3.3 deber�ser din᭩co para mayor precisi󮠦
float32_t scale_I_ADC = 0;
/////////////////////

/////////////////////
///Valores finales///
/////////////////////
float32_t V_rms; //Valor rms de la tensi󮠦float32_t I_rms;
//Valor rms de la corriente
float32_t V_max; //Maximos de tensi󮠦 corriente
float32_t I_max;
float32_t V_min; //M󮠦mos de tension y corriente
float32_t I_min;
uint32_t index; //No se usa pero es necesario para ciertas funciones

//TEMPORALES//
float32_t POT_s;
float32_t POT_q;
float32_t POT_p;
float32_t COSFI;
float32_t SENFI;
float32_t Desf_Grados;
float32_t THDf;
float32_t CF1=0;
float32_t f=0;
int acumulado=0;
/////////////////////

/////////////////////
/// Calibraci󮠦///
/////////////////////
uint32_t Offset_Calibration; //Variable para calibrar el offset
/////////////////////

/////////////////////
///FFT - Arm󮠦os///
/////////////////////
float32_t RFFT_V_Buffer[512];
float32_t RFFT_V_Mag_Buffer[512]; //Buffer de la magnitud de la RFFT. VERIFICAR EL TAMAя DE BUFFER
float32_t Max_Mag_Value;
int Max_Mag_Value_index;

//const static arm_cfft_instance_f32 *S;


arm_rfft_fast_instance_f32 S;

/////////////////////

/* USER CODE END PV */


/* USER CODE BEGIN 0 */
TECNICAS DIGITALES II Proyecto final: TD 2 y Medidas Electrónicas 1
Dpto. Electrónica
FRM UTN Pag: 28 Ulloa Gabriel – Quiroga Sykes Emiliano

void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc){

HAL_ADCEx_MultiModeStop_DMA(&hadc1);

void Muestrear(uint32_t* ADC_Buffer,int Buffer_Size){

uint32_t temporal = ADC_Buffer[Buffer_Size - 1]; //Seteamos la varible temporal igual al valor del ultimo
elemento del array.
uint32_t i=0;

HAL_ADC_Start(&hadc2);
HAL_ADCEx_MultiModeStart_DMA(&hadc1,(uint32_t*)ADC_Buffer,Buffer_Size);

//Se queda esperando en el bucle hasta tomar la ltima muestra


/* while(temporal == ADC_Buffer[Buffer_Size - 1]){
i++;
}

if(temporal != ADC_Buffer[Buffer_Size - 1]){


HAL_ADCEx_MultiModeStop_DMA(&hadc1);
}
*/

//HAL_Delay((uint32_t)ceil(0.00019*Buffer_Size));// Toma una muestra cada 188,68ns - useg? -, por ende


necesitamos 98ms para obtener las 512 muestras.
// HAL_Delay(25);
// HAL_ADCEx_MultiModeStop_DMA(&hadc1);
//redondea hacia arriba y convierte en entero (para la funci󮠦elay)

float32_t Separar_Valores(uint32_t* ADC_Buffer, float32_t* Buffer_value1,float32_t* Buffer_value2,int


Buffer_Size){

for(int i=0 ; i<Buffer_Size ; i++){


Buffer_value1[i] = ADC_Buffer[i] & 0x0000FFFF; // Primeros 16 bits a Buffer_value1
Buffer_value2[i] = ADC_Buffer[i] >> 16;
}
}

int Desfasaje(float32_t* ADC_Buffer_V_scaled , float32_t* ADC_Buffer_I_scaled,int Buffer_Size){

int i=100,pendiente,j; //"i" debe ser igual a "j"


int i_v_m =-1; //Posicion de la tensi󮠦n la que esta el cero (pendiente positiva)
int i_i_m =-1; //Posici󮠦e la corriente en la que estᠥl cero (pendiente negativa)
float32_t desfasaje;

for(j=5 ; j<=(Buffer_Size-1) ;j++,i++){ //Inicia en 100 para evitar indices negativos

/* CERO EN TENSION */
if(i_v_m == -1){ //Si ya se encontr󮠦 cero en la tensi󮠦entonces salta.

//PENDIENTE POSITIVA (venimos de positivo a negativo)


if(ADC_Buffer_V_scaled[i] <= 0 && ADC_Buffer_V_scaled[i+1] >0){ //Si la muestra actual es <0 y la
siguiente >0
if(ADC_Buffer_V_scaled[i-5] < 0 && ADC_Buffer_V_scaled[i+5] >0){

i_v_m = i;//Entonces venimos del ciclo negativo al positivo (pendiente positiva)


j=Buffer_Size; //Salimos del for.

}
}
}
}

/* CERO EN CORRIENTE */

//i = i_v_m; //igualamos los dos coeficientes


for(j=i_v_m ; j<=(Buffer_Size-1) ; j++,i++){ //Empezamos a recorrer la onda de corriente desde la
posici󮠦el cero de tension

if(ADC_Buffer_I_scaled[i] <= 0 && ADC_Buffer_I_scaled[i+1] >0){ //Si la muestra actual es <0 y la


siguiente >0
if(ADC_Buffer_I_scaled[i-5] < 0 && ADC_Buffer_I_scaled[i+5] >0){

i_i_m = i;//Guardamos la posici󮠦el cero de pendiente positiva en i_i_m


TECNICAS DIGITALES II Proyecto final: TD 2 y Medidas Electrónicas 1
Dpto. Electrónica
FRM UTN Pag: 29 Ulloa Gabriel – Quiroga Sykes Emiliano

pendiente = 1;
j=Buffer_Size;
}
}

if(ADC_Buffer_I_scaled[i] >= 0 && ADC_Buffer_I_scaled[i+1] < 0){ //Buscamos el cero de pendiente


negativa
if(ADC_Buffer_I_scaled[i-5] > 0 && ADC_Buffer_I_scaled[i+5] < 0){

i_i_m = i;
pendiente = -1;
j=Buffer_Size;
}

}
}

//Aqu󮠦a tenemos las posiciones de los ceros en i_v_m y en i_i_m, as󮠦omo la pendiente del cero de corriente
en pendiente (1 ; -1)

//Calculamos la diferencia de de posiciones entre el cero de tensi󮠦 corriente.

desfasaje = i_i_m - i_v_m; //Corriente menos tensi󮠦


desfasaje = (desfasaje * 0.72)*pendiente; //0.72 es lo que representa cada muestra de defasaje en grados.
VER EN INFORME

desfasaje = desfasaje * (-1); //Esto se debe a que ambas ondas se encuentran defasadas 180 debido a los OP
AMP

return desfasaje;

//El defasaje final (tiempo) serᠥsta diferencia multiplicada por el tiempo que toma cada muestra.

//defasaje = defasaje * 0.000188679; //Periodo para 5300Hz, verificar

/*En este punto tenemos los valores de los ceros en i_i_pos o neg y en i_v_pos o neg*/

//Verificar verificar que el defasaje no sea +90 o -90. TENER EN CUENTA EL DEFASAJE DE 180 EN LA TENSIӎ (op
amp)
//Viendo
http://fooplot.com/?lang=es#W3sidHlwZSI6MCwiZXEiOiIyc2luKHgpIiwiY29sb3IiOiIjMDAwMDAwIn0seyJ0eXBlIjowLCJlcSI6IjJ
zaW4oeCszMCkiLCJjb2xvciI6IiNGRjAzMDMifSx7InR5cGUiOjAsImVxIjoiMnNpbih4LTMwKSIsImNvbG9yIjoiIzAwMDBGRiJ9LHsidHlwZS
I6MTAwMCwid2luZG93IjpbIi0zIiwiNyIsIi00LjI5NzI3OTk5OTk5OTk5NyIsIjMuNzAyNzE5OTk5OTk5OTk4Il0sInNpemUiOlsxMDUwLDYwM
F19XQ--
//Para verificar si los defasajes son positivos o negativos se deberᠲealizar el siguiente procedimiento
//
}

//Calculo del factor de cresta


//Verificar que no sea necesario declarar la variable ADC_Buffer_X_scaled
float32_t CF(float32_t* ADC_Buffer_X_scaled,int Buffer_Size){

float32_t CF; //Valor a retornar


float32_t RMS;
float32_t MAX;
uint32_t index;

arm_rms_f32(ADC_Buffer_X_scaled,Buffer_Size,&RMS);
arm_max_f32(ADC_Buffer_X_scaled,Buffer_Size,&MAX,&index);

CF = (MAX / RMS);

return CF;
}

//Adaptacion de la funcion RMS para calcular THDf


float32_t THDf_50(float32_t * RFFT_X_Mag_Buffer)
{
//Se calcularᠬa FFT para las primeras 50 arm󮠦as.
//La fundamental se encuentra en RFFT_X_Mag_Buffer[2].

float32_t Acumulador;
float32_t THDf;

for(int i=3;i<50;i++){ //Comienza en i=3 debido a que es la posici󮠦e la primer arm󮠦a

Acumulador += RFFT_X_Mag_Buffer[i] * RFFT_X_Mag_Buffer[i];


TECNICAS DIGITALES II Proyecto final: TD 2 y Medidas Electrónicas 1
Dpto. Electrónica
FRM UTN Pag: 30 Ulloa Gabriel – Quiroga Sykes Emiliano

//Una vez hecho la suma de cuadrados...

THDf = (sqrtf(Acumulador) / RFFT_X_Mag_Buffer[2]) * 100;

return THDf;

/* USER CODE END 0 */

/* USER CODE BEGIN 2 */

/////////////////////
/// DISPLAY ///
/////////////////////
char phi[] = {0x06 , 0x05 , 0x5 , 0x15 , 0x0e , 0x04 , 0x04 , 0x04};
char buffer[16]; /* size of line on display */

hd44780_init(GPIOE, GPIO_PIN_7, GPIO_PIN_8, GPIO_PIN_9, GPIO_PIN_10,GPIO_PIN_11, GPIO_PIN_12, GPIO_PIN_13,


HD44780_LINES_2,HD44780_FONT_5x8);
/*GPIO_TypeDef *gpio, const uint16_t rs, const uint16_t rw,
const uint16_t e, const uint16_t db4, const uint16_t db5,
const uint16_t db6, const uint16_t db7, const hd44780_lines_type lines,
const hd44780_font_type font
*/
//////////////////////
// PANTALLA INICIAL //
/////////////////////
hd44780_position(0, 3);
hd44780_print("PROYECTO FINAL");
hd44780_position(1, 1);
hd44780_print("TD 2 & Medidas E 1");
hd44780_position(2,4);
hd44780_print("Integrantes:");
hd44780_position(3,0);
hd44780_print("Ulloa G -- Quiroga E");

HAL_Delay(2500);

/////////////////////
/// FFT REAL ///
/////////////////////
//Inicializacion de la RFFT para 512.

arm_rfft_fast_init_f32(&S , 512);

/* USER CODE END 2 */

/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
/* USER CODE END WHILE */

/* USER CODE BEGIN 3 */

while(acumulado<20){

Muestrear((uint32_t*)ADC_Buffer,512); //Toma las muestras de tensi󮠦 corriente

HAL_Delay(30); //Delay de 30ms esperando el Completed callback del adc

Separar_Valores((uint32_t*)ADC_Buffer , (float32_t*)ADC_Buffer_V , (float32_t*)ADC_Buffer_I , 512);

scale_V_ADC = 2.94/1024; //2.94v se deber�calibrar

//CORRIENTE
scale_I_ADC = 2.94/1024; //Resoluci󮠦el ADC

//Escalamos por 3.3v/1024. VERIFICAR QUE ES EFECTIVAMENTE, 3.3 Y NO 3V


arm_scale_f32(ADC_Buffer_V,scale_V_ADC,Vin_ADC,512); //Se guarda en Vin_ADC[512]

//CORRIENTE
arm_scale_f32(ADC_Buffer_I,scale_I_ADC,Iin_ADC,512);

//OFFSET GABI
TECNICAS DIGITALES II Proyecto final: TD 2 y Medidas Electrónicas 1
Dpto. Electrónica
FRM UTN Pag: 31 Ulloa Gabriel – Quiroga Sykes Emiliano

arm_offset_f32(Vin_ADC,-1.535,ADC_Buffer_V,512); //Aplica offset de 1.58v que es la tensi󮠦obre


la cual se monta la senoidal
//arm_offset_f32(Vin_ADC,-1.67,ADC_Buffer_V,512); //Offset PC EMI
arm_offset_f32(Iin_ADC,-2.416,ADC_Buffer_I,512);

arm_scale_f32(ADC_Buffer_V,260.07,ADC_Buffer_V_scaled,512); //Escala por 258 que es la


relaci󮠦proximada respecto de la tensi󮠦e l󮠦a.
arm_scale_f32(ADC_Buffer_I,7.7387,ADC_Buffer_I_scaled,512); //6.44 sale como factor de escala
prᣴico al ver en la onda un pico de 0,3316v siendo la corriente 1,51Amp

arm_rms_f32(ADC_Buffer_V_scaled,512,&V_rms);
arm_rms_f32(ADC_Buffer_I_scaled,512,&I_rms);

Vrms_acumulado[acumulado] = V_rms;
Irms_acumulado[acumulado] = I_rms;
acumulado++;

acumulado = 0;

arm_mean_f32(Vrms_acumulado,20,&Vrms_acumulado_prom);
arm_mean_f32(Irms_acumulado,20,&Irms_acumulado_prom);

//LIMPIEZA DE VALORES EN CASO DE SENSORES DESCONECTADOS

if(Vrms_acumulado_prom <= 30){


Vrms_acumulado_prom = 0;
}

if(Irms_acumulado_prom <= 0.05){


Irms_acumulado_prom = 0;
}

switch(LCD_Page){

//Valores RMS de tensi󮠦 corriente


//Bienvenida
case 0:

//Valores RMS de tensi󮠦 corriente


//PRIMERA "PAGINA" DEL DISPLAY

hd44780_clear();
hd44780_position(0, 3);
hd44780_print("PROYECTO FINAL");
hd44780_position(2, 0);
sprintf(buffer, "%.3f", Vrms_acumulado_prom);
hd44780_print(buffer);
hd44780_position(2, 7);
hd44780_print("V");
hd44780_position(2, 11);
sprintf(buffer, "%.4f", Irms_acumulado_prom);
hd44780_print(buffer);
hd44780_position(2, 18);
hd44780_print("A");
HAL_Delay(400);
break;

//Valores mḩmos de tensi󮠦 CP


case 1:
arm_max_f32(ADC_Buffer_V_scaled,512,&V_max,&index);
arm_max_f32(ADC_Buffer_I_scaled,512,&I_max,&index);
//arm_min_f32(ADC_Buffer_V_scaled,512,&V_min,&index);
//arm_min_f32(ADC_Buffer_I_scaled,512,&I_min,&index);

CF1 = CF(ADC_Buffer_V_scaled,512);

//Valores maximos y minimos de tensi󮠦 corriente


//SEGUNDA "PAGINA" DEL DISPLAY
if(V_max <= 45){ //30*sqrt(2)
V_max = 0;
}

if(I_max <= 0.09){


I_max = 0;
}

hd44780_clear();
hd44780_position(0, 0);
hd44780_print("Max tension=");
TECNICAS DIGITALES II Proyecto final: TD 2 y Medidas Electrónicas 1
Dpto. Electrónica
FRM UTN Pag: 32 Ulloa Gabriel – Quiroga Sykes Emiliano

hd44780_position(0, 13);
sprintf(buffer, "%.2f", V_max);
hd44780_print(buffer);
hd44780_position(0, 18);
hd44780_print("Vp");
hd44780_position(1, 0);
hd44780_print("Max corriente=");
hd44780_position(1,15);
sprintf(buffer, "%.2f", I_max);
hd44780_print(buffer);
hd44780_position(1, 18);
hd44780_print("Ap");
// hd44780_position(2, 0);
// hd44780_print("Factor de cresta");
hd44780_position(3,0);
sprintf(buffer, "CF = %.2f", CF1);
hd44780_print(buffer);
// sprintf(buffer, "%.2f", V_min);
// hd44780_print(buffer);
// hd44780_position(2, 6);
// hd44780_print("Vmin");
// hd44780_position(2, 11);
// sprintf(buffer, "%.2f", I_min);
// hd44780_print(buffer);
// hd44780_position(2, 16);
// hd44780_print("Amin");
HAL_Delay(1000);
break;

//Defasaje y factor de potencia


//Potencia aparente, reactiva y activa
case 2:

POT_s = Vrms_acumulado_prom * Irms_acumulado_prom; //Potencia Aparente

Desf_Grados = Desfasaje(ADC_Buffer_V_scaled,ADC_Buffer_I_scaled,512);

arm_sin_cos_f32(Desf_Grados, &SENFI, &COSFI);

POT_q = SENFI * POT_s; //Potencia Reactiva

POT_p = COSFI * POT_s; //Potencia Activa

hd44780_clear();
hd44780_position(0, 0);
sprintf(buffer, "%.2f", POT_s);
hd44780_print(buffer);
hd44780_position(0, 6);
hd44780_print("Watt");
hd44780_position(0, 11);
sprintf(buffer, "%.2f", POT_q);
hd44780_print(buffer);
hd44780_position(0, 16);
hd44780_print("VAR");
hd44780_position(2, 0);
sprintf(buffer, "%.2f", POT_p);
hd44780_print(buffer);
hd44780_position(2, 6);
hd44780_print("VA");
hd44780_position(2, 11);
sprintf(buffer, "%.3f", COSFI);
hd44780_print(buffer);
hd44780_position(2, 16);
hd44780_print("Cos");
hd44780_cgram(UDG, phi);
hd44780_position(2, 19);
hd44780_put(UDG);
HAL_Delay(1000);

break;

//Distorsi󮠦rm󮠦a total
case 3:

CF1 = CF(ADC_Buffer_V_scaled,512);

// Calculate Real FFT


arm_rfft_fast_f32(&S,ADC_Buffer_V_scaled,RFFT_V_Buffer,0);//El cero es porque es la transformada
(no la inversa)
// VERIFICAR EL TAMAя DEL BUFFER DE OUTPUT DE LA RFFT
TECNICAS DIGITALES II Proyecto final: TD 2 y Medidas Electrónicas 1
Dpto. Electrónica
FRM UTN Pag: 33 Ulloa Gabriel – Quiroga Sykes Emiliano

// Calculate magnitude
arm_cmplx_mag_f32(RFFT_V_Buffer,RFFT_V_Mag_Buffer,512);

// Get maximum value of magnitude


//arm_max_f32(RFFT_V_Mag_Buffer, 512, &Max_Mag_Value, &Max_Mag_Value_index);

// Scale magnitude values


for(int i=0; i<512; ++i){
RFFT_V_Buffer[i] = 100 * (RFFT_V_Mag_Buffer[i]/RFFT_V_Mag_Buffer[2]); //En el 2 se encuentra la
fundamental.
}

//Factor de cresta calculado sobre la tensi󮠦

THDf = THDf_50(RFFT_V_Mag_Buffer); //Calcula el THDf de las primeras 50 arm󮠦as.

hd44780_clear();
hd44780_position(0, 0);
hd44780_print("Calidad de tension");
hd44780_position(1, 0);
hd44780_print("THDf=");
hd44780_position(1, 5);
sprintf(buffer, "%.2f", THDf);
hd44780_print(buffer);
hd44780_position(1, 9);
hd44780_print("%");
hd44780_position(3, 0);
hd44780_print("CF=");
hd44780_position(3, 3);
sprintf(buffer, "%.2f", CF1);
hd44780_print(buffer);
/* hd44780_position(2, 0);
hd44780_print("frec=");
hd44780_position(2,6);
sprintf(buffer, "%.2f", f);
hd44780_print(buffer);
*/
HAL_Delay(200);

break;

default:
break;
}

}
/* USER CODE END 3 */

En stm32f4xx_it.c (control de interrupciones):


/**
* @brief This function handles EXTI line3 interrupt.
*/
void EXTI3_IRQHandler(void)
{
/* USER CODE BEGIN EXTI3_IRQn 0 */
for(int i=0;i<5050000;i++); //Anti bounce

if(HAL_GPIO_ReadPin(GPIOE,GPIO_PIN_3)){

if(LCD_Page == 3){ //Si estamos en la ltima pantalla del menu, volvemos a la primera
LCD_Page = 0;
}else if (LCD_Page < 3){ //Sino, solo cambia a la pr󮠦a.
LCD_Page++;
}

if(HAL_GPIO_ReadPin(GPIOD,GPIO_PIN_15) == GPIO_PIN_SET){
HAL_GPIO_WritePin(GPIOD,GPIO_PIN_15,GPIO_PIN_RESET);
}else{
HAL_GPIO_WritePin(GPIOD,GPIO_PIN_15,GPIO_PIN_SET);
}
}

/* USER CODE END EXTI3_IRQn 0 */


HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_3);
/* USER CODE BEGIN EXTI3_IRQn 1 */

/* USER CODE END EXTI3_IRQn 1 */


}
TECNICAS DIGITALES II Proyecto final: TD 2 y Medidas Electrónicas 1
Dpto. Electrónica
FRM UTN Pag: 34 Ulloa Gabriel – Quiroga Sykes Emiliano

ANEXO II: Esquemático

También podría gustarte