Está en la página 1de 30

UNIVERSIDAD NACIONAL DE LA

MATANZA

ELECTRÓNICA DE POTENCIA

PROYECTO
Medición de corriente sobre una carga enchufada a
la red domiciliaria

Alumno: Lucas Garbarino


Profesores: Guillermo Miquel
Oscar Pugliese

Año: 2022
Universidad Nacional de la Matanza Electrónica de Potencia

Índice
Descripción.............................................................................................................. 2
Funcionamiento ....................................................................................................... 3
Cálculo de componentes ......................................................................................... 4
Modos de funcionamiento ....................................................................................... 5
Pruebas realizadas .................................................................................................. 6
Prueba del sensor – Tensión de salida sin corriente............................................ 6
Medición del tiempo de conversión del ADC (predeterminado) ........................... 6
Toma de muestras de corriente ........................................................................... 7
Cálculo del valor medio, valor eficaz, mínimo y máximo (corriente alterna) ....... 11
Cálculo del período y la frecuencia .................................................................... 12
Rectificador de media onda ............................................................................... 14
Software ................................................................................................................ 15
Prueba del sensor – Tensión de salida sin corriente.......................................... 15
Medición del tiempo de conversión del ADC (predeterminado) ......................... 16
Toma de muestras de la corriente...................................................................... 17
Código final ........................................................................................................ 18
Esquemático.......................................................................................................... 25
ANEXO 1: Imágenes adicionales .......................................................................... 27
ANEXO 2: Videos .................................................................................................. 29

1
Universidad Nacional de la Matanza Electrónica de Potencia

Descripción
Este proyecto consiste en la medición de la corriente que circula a través de una
carga conectada a la red eléctrica domiciliaria. Originalmente este proyecto incluía
el diseño de un rectificador controlado, pero por cuestiones de tiempo, no se ha
podido implementar físicamente. No obstante, se ha incluido un diodo rectificador
en el circuito para implementar un rectificador de media onda, junto con un
interruptor para conmutar entre la señal rectificada y la señal de CA.
La medición de corriente se realizará con un sensor de corriente por efecto Hall
ACS712, el cual estará conectado en serie con la carga. Se utilizará la versión de
este sensor que permite medir una corriente de ±5 A.

Imagen 1: Sensor de corriente ACS712


La carga utilizada es una plancha que consume una corriente eficaz de aprox. 3,45
A, lo que da como resultado una corriente pico de aproximadamente 4,88 A.

Imagen 2: Plancha utilizada como carga

2
Universidad Nacional de la Matanza Electrónica de Potencia

Por otro lado, se empleará un optoacoplador tipo PC817 para la detección del cruce
por cero de la señal de CA. A su vez, se utilizará un microcontrolador Arduino Nano
para muestrear la señal de corriente y graficarla a través del serial plotter (graficador
serie). El microcontrolador también realizará los cálculos del valor medio y valor
eficaz para luego mostrar dichos valores a través del monitor serie.

Imagen 3: Arduino Nano

Funcionamiento
La carga se enchufa a la tensión de la red domiciliaria de 220 V. Debido a que la
carga es resistiva, la forma de onda de la corriente en la carga coincide con la forma
de onda de la tensión. El sensor de corriente, como dijimos antes, se conecta en
serie con la carga.
En paralelo con la carga se conecta el optoacoplador. El fotodiodo se conecta a la
tensión alterna de 220 V mediante un resistor cerámico de potencia de 10 W, el cual
permite limitar la corriente que circula sobre el fotodiodo para que no supere el valor
máximo especificado en la hoja de datos. Por otro lado, el fototransistor se conecta
a una tensión continua de 5 V mediante un resistor común de ¼ W, que limita la
corriente sobre el colector del transistor. A su vez, se conecta el fototransistor a un
transistor bipolar externo BC548, el cual permite obtener una señal cuadrada para
ser detectada por el microcontrolador.
El optoacoplador realiza la detección de cruce por cero de la siguiente manera:
cuando se produce el cambio del semiciclo positivo al semiciclo negativo de la señal
de CA, la salida del optoacoplador (que se toma del colector del fototransistor) pasa
de 0 a 5 V, debido a que el fotodiodo deja de conducir y por ende el fototransistor
se apaga. Esto se traduce en un flanco ascendente de la señal del optoacoplador,
el cual genera una interrupción por flanco ascendente que es leída por el
microcontrolador. Por otro lado, en el cambio del semiciclo negativo al semiciclo
positivo de la señal de CA, la salida del optoacoplador pasa de 5 a 0 V, ya que el
fotodiodo empieza a conducir. Esto corresponde a un flanco descendente de la

3
Universidad Nacional de la Matanza Electrónica de Potencia

señal del optoacoplador, generando una interrupción por flanco descendente la cual
es leída por el microcontrolador. Estas dos interrupciones permiten calcular el
período y la frecuencia de la señal de CA, como veremos más adelante.
El sensor de corriente entrega una tensión analógica equivalente a la corriente
muestreada. Según la hoja de datos del sensor, la tensión de salida es de 2,5 V
para una corriente de 0 A. Cuando la corriente sobre la carga es positiva, la tensión
de salida es superior a 2,5 V; en cambio, cuando la corriente es negativa, la tensión
de salida es inferior a 2,5 V. La corriente sobre la carga se puede calcular a partir
de la tensión de salida y la sensibilidad del sensor.
El microcontrolador toma muestras de la corriente repetidamente para luego calcular
el valor medio y valor eficaz de la corriente sobre la carga. Se debe tomar una
cantidad considerable de muestras por ciclo para que el cálculo sea lo más preciso
posible. La toma de muestras de corriente es iniciada por el usuario, ya sea
enviando algún comando a través del monitor serie o presionando algún pulsador.

Cálculo de componentes
Como dijimos anteriormente, se utilizará un optoacoplador PC817, cuyo fotodiodo
está conectado en serie con un resistor cerámico de potencia para limitar la
corriente. Para seleccionar el resistor, debemos tener en cuenta la máxima corriente
que puede circular por el fotodiodo.
Según la hoja de datos del PC817, la corriente máxima del fotodiodo en directa (IF)
es de 50 mA. Si tomamos este valor como valor pico, la tensión eficaz máxima es
de aprox. 35 mA. Suponiendo que la caída del tensión del fotodiodo polarizado en
directa es de aprox. 0 V, podemos calcular la máxima potencia que debe disipar el
resistor:
0,05 𝐴
𝑃 =𝑉 𝐼 = 220 𝑉 ∗ = 7,778 𝑊
√2
Esto significa que debemos seleccionar un resistor capaz de disipar 7,778 W de
potencia. Elegimos entonces un resistor de 10 W.
Hallamos ahora la resistencia que debe tener el resistor, a partir de la potencia
máxima del resistor seleccionado (10 W):
𝑉 𝑉 220 𝑉
𝑃 = →𝑅 = = = 22 𝑘Ω
𝑅 𝑃 10 𝑊
Esto significa que debemos seleccionar una resistencia de 22 kΩ. Sin embargo,
debido a que no había disponible un resistor cerámico de ese valor, se optó por
utilizar dos resistores de 47 kΩ en paralelo, de manera que la resistencia
equivalente da como resultado 23,5 kΩ, un valor cercano al calculado
anteriormente.

4
Universidad Nacional de la Matanza Electrónica de Potencia

Hallamos la corriente eficaz y la corriente pico que circula por el fotodiodo con ese
valor de resistencia:
𝑅 = 𝑅 //𝑅 = 23,5 𝑘Ω
𝑉 220 𝑉
𝐼 = = = 9,36 𝑚𝐴
𝑅 23,5 𝑘Ω

𝐼 =𝐼 √2 = 13,237 𝑚𝐴
Como vemos, los valores de corriente sobre el fotodiodo se encuentran por debajo
del máximo de corriente que puede soportar.
Para el fototransistor y el transistor externo, se debe conectar entre el terminal de 5
V y el colector un resistor que limite la corriente que circula por ambos dispositivos
cuando se encuentran en conducción. Se elige un resistor de carbón de 10 kΩ y ¼
W, de manera que la corriente de colector del fototransistor y el transistor externo
es de 0,5 mA cuando se encuentran en conducción.
𝑉 5𝑉
𝐼 = = = 0,5 𝑚𝐴
𝑅 10.000 Ω
Ahora procedemos a hacer los cálculos correspondientes para elegir el diodo
rectificador. Calculamos la corriente media sobre la carga conectada al rectificador
de media onda:
𝑉 𝑉
𝐼 = =
𝑅 𝜋𝑅
La resistencia de la plancha (RL) fue medida con el multímetro, obteniéndose un
valor aproximado de 63 Ω.
𝑉 311 𝑉
𝐼 = = ≅ 1,571 𝐴
𝜋𝑅 𝜋 ∗ 63 Ω
Debemos elegir un diodo rectificador que soporte una corriente media de 1,571 A.
A su vez, el diodo debe soportar una tensión pico inversa de 311 V (que es la tensión
pico de la red domiciliaria). Elegimos el diodo BY399, el cual soporta una tensión
máxima de pico inverso de 800 V y una corriente media rectificada de 3 A.

Modos de funcionamiento
La carga puede conectarse directamente a la tensión de red de CA sin rectificar, o
bien puede conectarse a la salida de un rectificador monofásico de media onda
(RMMO) o un rectificador monofásico de onda completa (RMOC). Para conmutar
entre estos tres modos de funcionamiento, es necesario utilizar un circuito adicional
que contiene dos relés. Uno de los relés permite conmutar entre el modo rectificador
y la señal sin rectificar, mientras que el otro relé permite conmutar entre RMMO y
RMOC.

5
Universidad Nacional de la Matanza Electrónica de Potencia

El circuito adicional para conmutar entre los tres modos de funcionamiento no ha


sido implementado físicamente. Sin embargo, este circuito se ha incluido en el
diagrama esquemático del sistema, el cual se verá más adelante. El control de los
relés se hace enviando un 1 lógico o un 0 lógico desde un pin digital del
microcontrolador. De esta manera, los contactos de los relés se abren y se cierran,
permitiendo realizar la conmutación. Tampoco se incluirá en el código final el control
de los relés por parte del microcontrolador.
Si bien no se ha implementado físicamente el circuito para elegir el modo de
funcionamiento, se ha agregado un diodo rectificador en paralelo con un interruptor
para conmutar entre la señal rectificada de media onda y la señal de CA sin
rectificar. De esta manera, cuando el interruptor está abierto, el circuito se comporta
como un rectificador de media onda, ya que la corriente circula sobre el diodo y la
carga sólo durante el semiciclo positivo. En cambio, cuando el interruptor está
cerrado, se pone en cortocircuito el diodo y la corriente alterna circula por el
interruptor y la carga.

Pruebas realizadas
Se realizaron distintas pruebas para verificar el funcionamiento del sistema. A
continuación se hará una descripción de las distintas pruebas realizadas. Luego, en
la sección de software, se mostrará el código fuente de Arduino correspondiente a
dichas pruebas.
Prueba del sensor – Tensión de salida sin corriente
La primer prueba del sensor de corriente realizada consistió en hallar la tensión
media de salida que entrega el sensor cuando no circula corriente sobre la carga.
Si bien como dijimos anteriormente el sensor entrega una tensión de salida de 2,5
V cuando la corriente que circula es 0 A, dicha tensión puede experimentar
variaciones en torno a ese valor (la tensión medida puede ser 2,48 V, 2,49 V o 2,51
V). Para el cálculo de la corriente a partir de la tensión muestreada, se requiere
conocer la tensión de salida del sensor cuando la corriente es nula (V0). Si tomamos
una V0 de 2,5 V y el valor real de V0 es, por ejemplo, de 2,52 V, la corriente calculada
no será lo suficientemente precisa.
Para el cálculo del valor medio de la tensión V0, se toman 100 muestras de dicha
tensión, y luego se promedian dichas muestras. La tensión media V0 se representa
a través del monitor serie para visualizar el valor obtenido. Dicho valor luego se
utiliza para realizar los cálculos de corriente.
Medición del tiempo de conversión del ADC (predeterminado)
Para saber la cantidad máxima de muestras que podemos tomar en un ciclo
completo de la señal de CA, es necesario saber cuánto demora el ADC en tomar
una sola muestra. Para ello debemos medir el tiempo de conversión.

6
Universidad Nacional de la Matanza Electrónica de Potencia

Según la descripción de la función analogRead() en la página de Arduino, el ADC


tarda aproximadamente 100 µs en leer una entrada analógica. Para verificar esto,
medimos el tiempo de conversión registrando el instante en que se inicia la
conversión con la función micros(). Luego, al finalizar la conversión, se realizó la
diferencia entre el instante de tiempo actual y el instante de tiempo en que comenzó
la conversión, para obtener el tiempo de conversión. El valor obtenido se mostró a
través del monitor serie.

Imagen 4: Tiempo de conversión del ADC


Como podemos apreciar, el tiempo de conversión medido es de aprox. 155 µs, es
decir, 55 µs de lo que debería demorar la conversión según la página de Arduino.
Sin embargo, debemos tener en cuenta que no se realizó solamente la medición de
la demora en la ejecución de la función analogRead(), sino que se realizó la
medición de la conversión del valor cuantificado entero al valor de tensión en V.
Toma de muestras de corriente
Para saber cuántas muestras se pueden tomar en un ciclo completo de la señal de
CA, dividimos el período de la señal por el tiempo de conversión obtenido
anteriormente:
𝑇 20 𝑚𝑠
𝑁= = = 129,03 → 𝑵 ≅ 𝟏𝟑𝟎 𝒎𝒖𝒆𝒔𝒕𝒓𝒂𝒔
𝑡 0.155 𝑚𝑠
Como podemos apreciar, en teoría podemos tomar un máximo de 130 muestras por
ciclo con el ADC del Arduino. Lo ideal sería tomar 360 muestras por ciclo, para que
el cálculo del valor medio y el valor de eficaz de la corriente sea lo más preciso
posible. Pero es evidente que con la velocidad de conversión predeterminada del
ADC, no podemos llegar a las 360 muestras.

7
Universidad Nacional de la Matanza Electrónica de Potencia

Se realizó la toma de muestras de la corriente sobre la carga. La toma de muestras


puede realizarse al presionar un pulsador o al enviar un comando a través del
monitor serie. En nuestro caso, primero se tomaron las muestras al presionar un
pulsador, y luego enviando la letra ‘C’ a través del monitor serie.
El cálculo de la corriente medida por el sensor responde a la siguiente fórmula:
𝑉 −𝑉
𝐼=
𝑆
Siendo I la corriente sobre el sensor, Vout la tensión analógica, V0 la tensión de salida
del sensor para una corriente de 0 A y S la sensibilidad del sensor.
La sensibilidad del sensor depende del rango de corriente que puede medir. Existen
tres versiones del ACS712, las cuales poseen distintos rangos de corriente y por
ende distintos valores de sensibilidad. En nuestro caso, utilizamos la versión que
mide una corriente en un rango de ±5 A, la cual posee una sensibilidad de 185 mV/A
según la hoja de datos.
Se tomó una determinada cantidad de muestras de corriente, y se realizó la gráfica
correspondiente en el serial plotter. Se varió la cantidad de muestras para hallar la
gráficamente cuántas muestras se necesitan para abarcar un ciclo completo de la
señal.

Imagen 5: Gráfica de la corriente instántanea en la plancha para N=105

8
Universidad Nacional de la Matanza Electrónica de Potencia

Imagen 6: Gráfica de la corriente instantánea en la plancha para N=130

Imagen 7: Gráfica de la corriente en la plancha para N=210


Como podemos observar, a pesar de que teóricamente podemos tomar 130
muestras por ciclo, con N=130 no logramos cubrir un ciclo completo. En cambio,
con N=105 se llega a cubrir un ciclo completo de la senoidal. Por lo tanto, con N=210
(el doble de 105) se toman muestras durante dos ciclos completos. Esto significa
que el máximo de muestras que podemos tomar en un ciclo es 105.
La razón por la cual no se llegan a tomar exactamente 130 muestras por ciclo, como
sugiere el cálculo teórico, se debe al cálculo de la corriente sobre la carga mediante
la fórmula anterior, el cual le lleva un cierto tiempo al microcontrolador. Es evidente
que la cantidad máxima de muestras por ciclo que se pueden tomar es muy limitada.
Por lo tanto, se debe buscar la manera de aumentar el número de muestras por

9
Universidad Nacional de la Matanza Electrónica de Potencia

ciclo para lograr mayor precisión. Para lograr esto, es necesario aumentar la
velocidad de conversión del ADC.
Para aumentar la velocidad de conversión, se realiza una modificación del registro
interno correspondiente al ADC. Dicho registro es el ADC Control and Status
Register A (Registro de estado y control del ADC). Se trata de un registro de 8 bits
en el cual los tres bits menos significativos (2:0) corresponden a los bits de selección
del prescaler, los cuales determinan el factor de división entre la frecuencia del reloj
del sistema y el reloj de entrada al ADC. Configuramos dicho registro de manera tal
que aumentamos el tiempo de conversión a 12 µs por medición.
Luego de configurar dicho registro, otra modificación que hacemos al programa es
quitar el cálculo de la corriente equivalente al momento de tomar la muestra. En su
lugar, se hará solamente el cálculo de la tensión muestreada a partir del valor entero
cuantificado por el ADC (valor entre 0 y 1023), y los valores de tensión se irán
guardando en un vector. Esto permitirá agilizar el programa para tomar la mayor
cantidad de muestras posible. La corriente equivalente se obtiene luego a partir de
la tensión al momento de mostrar las mediciones por pantalla, o al momento de
realizar los cálculos de valor medio y eficaz, como veremos más adelante.
Hechas estas modificaciones, procedemos a graficar la corriente instantánea en la
plancha:

Imagen 8: Gráfica de la corriente instantánea para N=385 (luego de


incrementar la velocidad de conversión)

10
Universidad Nacional de la Matanza Electrónica de Potencia

Como podemos apreciar, luego de haber aumentado la velocidad de conversión,


logramos tomar 385 muestras en un ciclo completo de la señal senoidal. Calculamos
el tiempo de conversión:
𝑇 20.000 𝜇𝑠
𝑡 = = → 𝒕𝒄𝒐𝒏𝒗 ≅ 𝟓𝟐 𝝁𝒔
𝑁 385
El tiempo de conversión es algo superior al tiempo de conversión teórico (12 µs).
Esto se debe a que la conversión del valor entero cuantificado al valor de tensión
requiere de un cierto tiempo, como sucedía cuando medimos el tiempo de
conversión original del ADC.
A pesar de que ahora podemos tomar 385 muestras por ciclo, hay que tener en
cuenta que el vector declarado como variable ocupa mucho espacio en la memoria
dinámica. Al ejecutar el programa que toma las 385 muestras, el vector definido
como variable global para guardar dichas muestras ocupa aproximadamente un
90% de la memoria dinámica.
Cálculo del valor medio, valor eficaz, mínimo y máximo (corriente alterna)
Una vez definida la cantidad de muestras que se van a tomar, procedemos al cálculo
de la corriente media, eficaz, mínima y máxima sobre la carga.
La toma de muestras ahora es iniciada por el usuario al enviar un comando por el
monitor serie. Al enviar la letra ‘A’, se obtienen las muestras, luego se calculan los
valores medio, eficaz, mínimo y máximo, y se muestran dichos valores por pantalla.
El valor medio de la corriente se calcula sumando todos los valores de corriente
muestreados y dividiendo dicha suma por la cantidad de muestras:
∑ 𝑖
𝐼 =
𝑁
El valor eficaz de la corriente se obtiene a partir de la raíz cuadrada del valor
cuadrático medio. Es decir, se realiza la sumatoria del cuadrado de los valores de
corriente dividida por la cantidad de muestras, y a dicha sumatoria se le aplica la
raíz cuadrada:

2
∑𝑁
𝑘=0 𝑖𝑘
𝐼 =
𝑁

Por otro lado, el valor máximo corresponde al valor pico de la señal de corriente,
mientras que el valor mínimo correspondiente al valor pico negativo de la corriente.
Comparamos la corriente eficaz sobre la carga con el valor teórico:
𝑉 220 𝑉
𝐼 = = = 3,492 𝐴
𝑅 63 Ω

11
Universidad Nacional de la Matanza Electrónica de Potencia

Imagen 9: Valores medio, eficaz, mínimo y máximo de corriente


Cálculo del período y la frecuencia
A partir de las interrupciones generadas por el optoacoplador en el cruce por cero
de la señal de CA, podemos calcular el período y la frecuencia de dicha señal, así
como también el tiempo en alto y el tiempo en bajo de la señal cuadrada que se
genera a la salida del optoacoplador.
Para realizar estos cálculos, debemos registrar el instante en que se produce la
interrupción por flanco ascendente, y el instante en que se produce la interrupción
por flanco descendente. Cuando se produce una interrupción por flanco
ascendente, la señal de salida del optoacoplador (tomada del fototransistor) pasa
del estado bajo (0) al estado alto (1). Por otro lado, cuando se produce una
interrupción por flanco descendente, la salida del optoacoplador pasa de un nivel
lógico alto (1) a un nivel lógico bajo (0).
El tiempo en el cual la señal de salida del optoacoplador permanece en nivel alto
(TH) se calcula cuando se recibe una interrupción por flanco descendente, y se
obtiene como la diferencia entre el instante de tiempo actual y el instante de tiempo
en que se produjo la interrupción por flanco ascendente previa. Por otro lado, el
tiempo en el cual la salida del optoacoplador permanece en nivel bajo (TL) se calcula
al momento de recibir una interrupción por flanco ascendente, y se obtiene como la
diferencia entre el instante de tiempo actual y el instante de tiempo en que se
produjo la interrupción por flanco descendente previa.

12
Universidad Nacional de la Matanza Electrónica de Potencia

𝑇 =𝑡 −𝑡
𝑇 =𝑡 −𝑡
 tintf1: Instante en que se recibe una interrupción por flanco descendente en el
1° ciclo de la señal cuadrada
 tintr1: Instante en el que se produce una interrupción por flanco ascendente en
el 1° ciclo de la señal cuadrada
 tintr2: Instante en el que se produce una interrupción por flanco descendente
en el siguiente ciclo de la señal cuadrada
El período de la señal de CA se obtiene como la suma de los tiempos en alto y en
bajo de la señal cuadrada (cuyo período coincide con el de la señal senoidal),
mientras que la frecuencia es la inversa del período:
𝑇=𝑇 +𝑇
1
𝑓=
𝑇
Para mostrar en pantalla el tiempo en alto, tiempo en bajo, el período y la frecuencia,
el usuario debe enviar un comando a través del monitor serie. En este caso, el
comando enviado debe ser la letra ‘B’.

Imagen 10: Tiempo en alto, tiempo en bajo, período y frecuencia

13
Universidad Nacional de la Matanza Electrónica de Potencia

Rectificador de media onda


Como dijimos anteriormente, se ha agregado un diodo rectificador para implementar
un rectificador de media onda. A continuación se muestra la forma de onda de la
corriente rectificada sobre la carga. Como podemos apreciar, el diodo sólo deja
pasar el semiciclo positivo de la señal de CA.

Imagen 11: Corriente de salida rectificada


Ahora procedemos a calcular la corriente media y eficaz rectificada sobre la carga,
así como también la corriente mínima y máxima. Para ello nuevamente enviamos el
comando ‘A’ a través del monitor serie.
Verificamos los valores de corriente media y eficaz rectificada obtenidos mediante
el software haciendo los cálculos teóricos correspondientes.
𝑉 𝑉 311 𝑉
𝐼 = = = ≅ 1,571 𝐴
𝑅 𝜋𝑅 𝜋 ∗ 63 Ω
𝑉 𝑉 311 𝑉
𝐼 = = = ≅ 2,468 𝐴
𝑅 2𝑅 2 ∗ 63 Ω
Como podemos apreciar, la corriente media y eficaz calculada por software es
ligeramente superior a la corriente media y eficaz rectificada teóricamente, pero
debemos tener en cuenta que estas diferencias se deben a que la resistencia de la
plancha no es exactamente 63 Ω, sino que puede tomar un valor ligeramente
inferior.
14
Universidad Nacional de la Matanza Electrónica de Potencia

Imagen 12: Corriente media, eficaz, mínima y máxima del RMMO


Calculamos ahora los valores medio y eficaz de tensión rectificada a partir de la
corriente media y eficaz obtenida mediante el software:
𝑉 =𝐼 𝑅 = 1,64 𝐴 ∗ 63 Ω = 103,32 𝑉
𝑉 =𝐼 𝑅 = 2,55 𝐴 ∗ 63 Ω = 160,65 𝑉
Ahora comparamos los valores anteriores con los valores teóricos:
𝑉 311 𝑉
𝑉 = = = 99 𝑉
𝜋 𝜋
𝑉
𝑉 = = 155 𝑉
2
Dado que la corriente media y eficaz sobre la carga difiere ligeramente de los
valores teóricos, la tensión media y eficaz también presenta ligeras diferencias.

Software
A continuación se mostrará el código fuente correspondiente a las pruebas
realizadas y el código fuente final.
Prueba del sensor – Tensión de salida sin corriente
#define A0 0

#define N 100

15
Universidad Nacional de la Matanza Electrónica de Potencia

float vol0[100]; // Tensión analógica del sensor de corriente muestreada en la entrada A0

float sumvol0=0;

int cant=0;

float vol0prom; // Promedio de las 100 muestras de tensión

void setup() {

// Configuramos el monitor serie

Serial.begin(19200); // Configuración de la comunicación serial (19200 baudios)

void loop() {

/* Se toman 100 muestras de la tensión de salida del sensor cuando no circula


corriente, con un tiempo de muestreo igual al tiempo de conversión

* del ADC (no utilizamos delay ni temporización). Al finalizar la toma de muestras, se


promedian las mismas para saber cuál es la tensión promedio

* que entrega el sensor cuando no hay corriente

*/

vol0[cant]=analogRead(A0)*5.0/1023.0; // Tomamos la muestra de tensión del sensor de


corriente

sumvol0=sumvol0+vol0[cant];

cant++;

if(cant==(N-1)){

vol0prom=sumvol0/N;

cant=0;

sumvol0=0;

Serial.print("Tensión muestreada: ");

Serial.print(vol0prom,2);

Serial.println(" V");

Medición del tiempo de conversión del ADC (predeterminado)

#define A0 0

16
Universidad Nacional de la Matanza Electrónica de Potencia

float vol0; // Tensión analógica del sensor de corriente muestreada en la entrada A0

float intconversion; // Intervalo en el cual el ADC realiza la conversión

float inicioconversion; // Instante en el que el ADC comienza la conversión

void setup() {

// Configuramos ahora el monitor serie

Serial.begin(19200); // Configuración de la comunicación serial (19200 baudios)

void loop() {

/* Para saber la cantidad de muestras que debemos tomar para el cálculo del valor
medio y eficaz de la corriente, debemos saber cuánto tiempo demora el ADC en

* realizar la conversión. Para ello registramos el instante en el que comienza la


conversión con la función micros() y lo guardamos en una variable. Luego, al

* finalizar la conversión, hallamos el tiempo de conversión haciendo la diferencia


entre el instante de tiempo actual y el instante de tiempo en que comenzó la

* conversión. El tiempo de conversión del ADC limita la cantidad de muestras que


podemos tomar en un ciclo completo de la señal de CA.

*/

inicioconversion=micros();

vol0=analogRead(A0)*5.0/1023; // Tomamos la muestra de tensión del sensor de


corriente

intconversion=micros()-inicioconversion;

Serial.print(intconversion);

Serial.println("us");

Toma de muestras de la corriente


#define A0 0 // Entrada analógica A0 (para la toma de muestras del sensor de corriente)

#define sensibilidad 0.185 // Sensibilidad del sensor de corriente (185 mV/A o 0.185 V/A)

#define V0 2.50 // Tensión de salida del sensor de corriente cuando la corriente es nula

#define N 385 // Número de muestras a tomar

float vol0[N]; // Tensión analógica correspondiente al sensor de corriente (vector de N


posiciones)

float i0; // Corriente analógica del sensor de corriente muestreada en la entrada A0

17
Universidad Nacional de la Matanza Electrónica de Potencia

int i=0;

void setup() {

// Configuramos ahora el monitor serie

Serial.begin(19200); // Configuración de la comunicación serial (19200 baudios)

ADCSRA &= B11111000; // Realizamos una máscara para modificar los últimos tres bits
del registro ADCSRA (AD Status and Control Register)

ADCSRA |= B011; // Modificamos los últimos tres bits para aumentar la velocidad
de conversión a 12 us

void loop() {

/* Tomamos una determinada cant. de muestras de la tensión que entrega el sensor, las
convertimos a corriente y las guardamos en un vector.

* Luego, mostramos esos valores a través del monitor serie */

if(Serial.available() > 0){

for(i=0;i<N;i++){

vol0[i]=analogRead(A0)*5.0/1023; // Tensión analógica muestreada

for(i=0;i<N;i++){

i0=(vol0[i]-V0)/sensibilidad; // Corriente equivalente

Serial.println(i0);

Código final
#define A0 0 // Entrada analógica A0 (para la toma de muestras del sensor de corriente)

#define D2 2 // Entrada digital D2 (para las interrupciones del optoacoplador)

#define D3 3 // Entrada digital D3 (para las interrupciones del optoacoplador)

#define sensibilidad 0.185 // Sensibilidad del sensor de corriente (185 mV/A o 0.185 V/A)

#define V0 2.49 // Tensión de salida del sensor de corriente cuando la corriente es nula

#define N 385 // Número de muestras a tomar

18
Universidad Nacional de la Matanza Electrónica de Potencia

float vol0[N]; // Tensión analógica correspondiente al sensor de corriente (vector de N


posiciones)

float i0; // Corriente analógica del sensor de corriente muestreada en la entrada A0

bool flag_ascendente; // Bandera para indicar que llegó una interrupción por flanco
ascendente

bool flag_descendente; // Bandera para indicar que llegó una interrupción por flanco
descendente

float instascendente; // Instante en que llegó una interrupción por flanco ascendente

float instdescendente; // Instante en que llegó una interrupción por flanco descendente

void setup() {

pinMode(D2, INPUT_PULLUP); // Configuramos el pin D2

pinMode(D3, INPUT_PULLUP); // Configuramos el pin D3

/* Configuramos primero las interrupciones. Las interrupciones de cruce por cero


funcionan de la siguiente manera:

* - Int. por flanco ascendente --> Cruce por cero al pasar del semiciclo positivo al
semiciclo negativo

* - Int. por flanco descendente --> Cruce por cero al pasar del semiciclo negativo al
semiciclo positivo

*/

// Configuramos la interrupción por flanco ascendente del pin D2.

attachInterrupt(digitalPinToInterrupt(D2),IRQ_Handler_Rising,RISING);

// Configuramos la interrupción por flanco descendente del pin D3

attachInterrupt(digitalPinToInterrupt(D3),IRQ_Handler_Falling,FALLING);

// Configuramos ahora el monitor serie

Serial.begin(19200); // Configuración de la comunicación serial (19200 baudios)

/* Modificamos un registro interno del ADC para aumentar la velocidad de conversión y


de esa manera aumentar la cantidad de muestras por ciclo */

ADCSRA &= B11111000; // Realizamos una máscara para modificar los últimos tres bits
del registro ADCSRA (AD Status and Control Register)

19
Universidad Nacional de la Matanza Electrónica de Potencia

ADCSRA |= B011; // Modificamos los últimos tres bits para aumentar la velocidad
de conversión a 12 us

void loop() {

char caracter; // Carácter que se recibe a través del monitor serie

float i0prom; // Valor medio de la corriente

float i0rms; // Valor eficaz de la corriente

float i0max; // Valor máximo de la corriente

float i0min; // Valor mínimo de la corriente

float TH; // Tiempo en alto de la señal

float TL; // Tiempo en bajo de la señal

float T; // Período de la señal de CA

float f; // Frecuencia de la señal de CA

/* Debemos calcular el tiempo en alto y en tiempo en bajo de la señal de salida del


optoacoplador, así como también el período

* y la frecuencia de la señal de CA. Para ello debemos registrar el instante de


tiempo en que se producen las interrupciones

* por flanco ascendente y flanco descendente de la señal cuadrada */

if(flag_ascendente==1){

TL=micros()-instdescendente; // Tiempo en bajo (en us)

instascendente=micros(); // Instante en que se produce la interrupción por flanco


ascendente

flag_ascendente=0;

if(flag_descendente==1){

TH=micros()-instascendente; // Tiempo en alto (en us)

instdescendente=micros(); // Instante en que se produce la interrupción por flanco


descendente

flag_descendente=0;

T=TH+TL; // Período (en us)

20
Universidad Nacional de la Matanza Electrónica de Potencia

f=(1/T)*1000000; // Frecuencia (en Hz)

if(Serial.available() > 0){

caracter=Serial.read(); // Leemos el caracter recibido a trvés del monitor serie

switch(caracter){

case 'A':{

/* Se toman muestras y luego se informa por pantalla los valores medio, eficaz,
mínimo y máximo de la corriente en la carga,

* junto con la cantidad de muestras */

TomarMuestras();

i0prom=ValMedyValRms(1);

i0rms=ValMedyValRms(0);

i0max=MaxyMin(1);

i0min=MaxyMin(0);

MostrarCorriente(i0prom,i0rms,i0max,i0min);

break;

case 'B':{

/* Se informa por pantalla el tiempo en alto, tiempo en bajo, el período y la


frecuencia */

MostrarTiempos(TH,TL,T,f);

break;

case 'C':{

/* Se toman muestras y se grafica la corriente instantánea en la carga a través del


serial plotter */

TomarMuestras();

int i=0;

for(i=0;i<N;i++){

i0=(vol0[i]-V0)/sensibilidad;

Serial.println(i0);

break;

21
Universidad Nacional de la Matanza Electrónica de Potencia

/* Función que toma muestras de la tensión de salida del sensor y las guarda en un vector
*/

void TomarMuestras(){

int i=0;

for(i=0;i<N;i++){

vol0[i]=analogRead(A0)*5.0/1023; // Tensión analógica muestreada

/* Función que calcula el valor eficaz y el valor medio de la corriente. Retorna el valor
medio si le enviamos como parámetro un 1, y devuelve el

valor eficaz si el parámetro que le enviamos es un 0 */

float ValMedyValRms(bool num){

int j=0;

float sumi0=0; // Suma de todas las muestras de corriente (para el cálculo del valor
medio)

float sumsqi0=0; // Suma del cuadrado de las muestras de corriente (para el cálculo del
valor eficaz)

float prom;

float sqprom;

for(j=0;j<N;j++){

i0=(vol0[j]-V0)/sensibilidad;

sumi0=sumi0+i0; // Sumamos todos los valores de corriente muestreados

sumsqi0=sumsqi0+sq(i0); // Sumamos el cuadrado de los valores de corriente


muestreados

prom=sumi0/N; // Valor medio de la corriente

sqprom=sqrt(sumsqi0/N); // Valor eficaz de la corriente

sumi0=0;

sumsqi0=0;

if(num==1){

22
Universidad Nacional de la Matanza Electrónica de Potencia

return prom;

else {

return sqprom;

/* Función que calcula el valor máximo y valor mínimo de corriente. Retorna el valor
máximo si le mandamos como parámetro un 1, y retorna el

valor mínimo si le mandamos un 0 como parámetro */

float MaxyMin(bool tipo){

int k=0;

float maxi;

float mini;

/* Para calcular el valor mínimo y el valor máximo, se toma como referencia el primer
valor de corriente muestreado, y luego se comparan

los valores restantes con dicho valor de referencia */

maxi=(vol0[0]-V0)/sensibilidad;

mini=(vol0[0]-V0)/sensibilidad;

for(k=0;k<N;k++){

i0=(vol0[k]-V0)/sensibilidad;

if(maxi<i0){

maxi=i0;

if(mini>i0){

mini=i0;

if(tipo==1){

return maxi;

else {

return mini;

23
Universidad Nacional de la Matanza Electrónica de Potencia

/* Función que muestra a través del monitor serie los parámetros vinculados con la
corriente sobre la carga, junto con la cantidad de muestras

* por ciclo */

void MostrarCorriente(float med, float rms, float maximo, float minimo){

int cant=N;

Serial.print("Imed: ");

Serial.print(med,2);

Serial.println(" A");

Serial.print("Irms: ");

Serial.print(rms,2);

Serial.println(" A");

Serial.print("Cant. de muestras: ");

Serial.println(cant);

Serial.print("Imax: ");

Serial.print(maximo,2);

Serial.println(" A");

Serial.print("Imin: ");

Serial.print(minimo,2);

Serial.println(" A");

/* Función que muestra a través del monitor serie los parámetros temporales de la señal
senoidal de CA (período, frecuencia, tiempo

* en alto y tiempo en bajo) */

void MostrarTiempos(float th, float tl, float per, float frec){

Serial.print("Tiempo en alto: ");

Serial.print(th,0);

Serial.println(" us");

Serial.print("Tiempo en bajo: ");

Serial.print(tl,0);

Serial.println(" us");

Serial.print("Período: ");

Serial.print(per,0);

24
Universidad Nacional de la Matanza Electrónica de Potencia

Serial.println(" us");

Serial.print("Frecuencia: ");

Serial.print(frec);

Serial.println(" Hz");

void IRQ_Handler_Rising(){

flag_ascendente=1; // Registramos la interrupción por flanco ascendente

void IRQ_Handler_Falling(){

flag_descendente=1; // Registramos la interrupción por flanco descendente

Esquemático
Se realizó el esquemático del circuito completo del proyecto en KiCad. En él se
incluyen los componentes utilizados para las pruebas (sensor de corriente,
optoacoplador, etc.) así como también los componentes necesarios para que el
circuito pueda funcionar como un RMMO o RMOC (puente de diodos, relés, etc.).
El circuito conmutador entre los tres modos de funcionamiento descritos
anteriormente no se ha implementado físicamente. A su vez, se incluye en el
esquemático el Arduino Nano junto con los pines utilizados para la conexión de
componentes.

Imagen 13: Esquemático del proyecto completo


25
Universidad Nacional de la Matanza Electrónica de Potencia

A continuación se muestra el diagrama esquemático del circuito implementado


físicamente, el cual presenta un diodo rectificador en paralelo con un interruptor que
permite conmutar entre la señal rectificada de media onda y la señal sin rectificar.

Imagen 14: Esquemático del circuito implementado físicamente

26
Universidad Nacional de la Matanza Electrónica de Potencia

ANEXO 1: Imágenes adicionales

Imagen 15. Vista del optoacoplador montado sobre una placa universal,
junto con el sensor de corriente y el tomacorriente para enchufar la plancha

Imagen 16. Vista del Arduino Nano montado sobre un protoboard junto con
el regulador de tensión

27
Universidad Nacional de la Matanza Electrónica de Potencia

Imagen 17: Corriente eficaz en la plancha medida con una pinza


amperométrica

Imagen 18: Resistencia sobre la plancha

28
Universidad Nacional de la Matanza Electrónica de Potencia

Imagen 19. Vista de todos los componentes utilizados para las pruebas

ANEXO 2: Videos
Se realizaron varios videos para verificar el correcto funcionamiento del sistema.
Dichos videos se encuentran en una lista de reproducción de Youtube, denominada
“Proyecto Electrónica de Potencia – 1°C 2022 – UNLAM”. A continuación se adjunta
el link de la lista de reproducción:
Proyecto Electrónica de Potencia - 1°C 2022 - UNLAM - YouTube

29

También podría gustarte