OBJETIVO
La creación de un medidor de voltaje y corriente el cual podra enviar, guardar e imprimir las mediciones.El medidor deberá permitir el paso de la señal a una carga, es decir, será intermedio.
FASE DE MEDICIÓN
Al circuito entra un voltaje entre 0 y 20V, pasa por un divisor de voltaje, de modo que de un rango de 0-20V tengamos uno de 0-5V para poder usar el PSoC. posteriormente pasa por seguidores y un amplificador operacional en configuración de diferenciador para que el voltaje quede referenciado a tierra. posteriormente pasará por un seguidor, y un sumador en el cual añadiremos un voltaje pequeño compensando las perdidas de los diodos de la ultima fase. Entre los diodos hay un inversor que volverá positivo el voltaje después de la salida del sumador-inversor.Para medir la corriente, se mide el voltaje de una resistencia Shunt de 0.1Ohms, bajo la misma metodología, añadiendo esta ocasión un operacional de aislamiento.
LECTURA DE DATOS
La parte de software y datos se hizo mediante PSoC 5LP.Para leer la parte de voltaje (que ya esta referenciado a tierra) se usó un ADC de 8bits, que solo leerá la entrada analógica y la convertirá en a digital.
Figura . ADC Voltaje
Para leer la corriente se midió la caída de potencial en una resistencia fija (shunt) de 0.1 Ohms, la diferencia de potencial de la Resistencia shunt pasa por un Amplificador de aislamiento, que tiene un rango de entrada de ±250mV con una ganancia de 8 para que a la salida tenga un rango de salida de la siguiente forma.
int main()
{
CyGlobalIntEnable;
int16 valadc1,valadc2;
float voltaje,corriente;
char8 str1[50],str2[50],str11[50];
VDAC_Start();//inica el VDAC configurado a 2496mV
ADC_1_Start(); //inicia el ADC que mide voltaje
ADC_2_Start(); //Inicia el ADC que mide el voltaje en la Shunt (corriente)
LCD_Start(); //Inicia el ADC
UART_Start(); // Inicia el UART
ADC_1_StartConvert(); //inicio de conversión
ADC_1_IsEndConversion(ADC_1_WAIT_FOR_RESULT);
ADC_2_StartConvert(); //inicio de conversión
ADC_2_IsEndConversion(ADC_1_WAIT_FOR_RESULT);
for(;;)
{
valadc1 = ADC_1_GetResult16(); //Se guardan los resultados en una variable de 16b
voltaje=(ADC_1_CountsTo_Volts(valadc1))*(4); // conversión a voltaje y convirtiendo al rango de entrada
valadc2 = ADC_2_GetResult16();
corriente=(ADC_2_CountsTo_Volts(valadc2))/(10*0.01); //conversión a corriente
LCD_Position(0,1);
sprintf(str1,"V=%.2fV ",voltaje);
LCD_PrintString(str1);
LCD_Position(1,1);
sprintf(str11,"C=%.2fA ",corriente);
LCD_PrintString(str11);
LCD_Position(0,10);
LCD_PrintString("Proto");
LCD_Position(1,10);
LCD_PrintString("type"); //Impresión de los datos en LCD
sprintf(str2,"V=%.2fV C=%.2fA\n\r ",voltaje,corriente); //envío de los datos por UART al lector de serial
UART_PutString(str2);
}
}
Figura 2: amplificador de aislamiento
Para leer el voltaje que pasa por la Resistencia shunt (ya referenciado a tierra) se usó otro ADC de 8 bits, solo que esta vez, con una referencia a 2.5V. Lo anterior debido a que para voltajes negativos el operacional arroja un voltaje de 0 a 2.5V. de esta forma cuando le entren 2.5 V al adc, sera un nuevo 0.
Figura : ADC corriente
Las mediciones se observan en un LCD y son enviadas por Bluetooth a un lector de comunicación serial, en la PC o en este caso en un celular.
Figura : UART y LCD
CÓDIGO
{
CyGlobalIntEnable;
int16 valadc1,valadc2;
float voltaje,corriente;
char8 str1[50],str2[50],str11[50];
VDAC_Start();//inica el VDAC configurado a 2496mV
ADC_1_Start(); //inicia el ADC que mide voltaje
ADC_2_Start(); //Inicia el ADC que mide el voltaje en la Shunt (corriente)
LCD_Start(); //Inicia el ADC
UART_Start(); // Inicia el UART
ADC_1_StartConvert(); //inicio de conversión
ADC_1_IsEndConversion(ADC_1_WAIT_FOR_RESULT);
ADC_2_StartConvert(); //inicio de conversión
ADC_2_IsEndConversion(ADC_1_WAIT_FOR_RESULT);
for(;;)
{
valadc1 = ADC_1_GetResult16(); //Se guardan los resultados en una variable de 16b
voltaje=(ADC_1_CountsTo_Volts(valadc1))*(4); // conversión a voltaje y convirtiendo al rango de entrada
valadc2 = ADC_2_GetResult16();
corriente=(ADC_2_CountsTo_Volts(valadc2))/(10*0.01); //conversión a corriente
LCD_Position(0,1);
sprintf(str1,"V=%.2fV ",voltaje);
LCD_PrintString(str1);
LCD_Position(1,1);
sprintf(str11,"C=%.2fA ",corriente);
LCD_PrintString(str11);
LCD_Position(0,10);
LCD_PrintString("Proto");
LCD_Position(1,10);
LCD_PrintString("type"); //Impresión de los datos en LCD
sprintf(str2,"V=%.2fV C=%.2fA\n\r ",voltaje,corriente); //envío de los datos por UART al lector de serial
UART_PutString(str2);
}
}
Implementación
PCB
Parte frontal
Parte Posterior |
Las imágenes anteriores son Fotos de la placa final y de una simulación que se hizo del programa en una placa experimental, alimentando 2 potenciometros con 5 volts, variando el voltaje que entra al ADC. A continuación la comunicación, la cual se puede ver en vivo y guardar un log para posteriormente compartirlo.
A la derecha la aplicación BLUETERM leyendo el puerto serial, a la izquierda, el archivo txt que se puede compartir desde el celular a cualquier red social, correo electrónico o PC.
Descarga nuestro PCB!
https://drive.google.com/file/d/0B9PN6ywyXIrDbXVVSUd1aXJkYVk/view?usp=sharing
recuerda revisar el esquemático para hacer los puentes que faltan