TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: halowin en 25 de Agosto de 2012, 04:16:04
-
Hola a todos.
Estoy haciendo unas pruebas para mejorar mi anemómetro que se basan en lo siguiente:
1.- Tengo como hélice un ventilador nuevo de ordenador, este ventilador lo hago girar por el efecto del viento de por ejemplo un secador de pelo y mido la FCEM que me genera en un polímetro; observo que manteniendo siempre la misma distancia al secador u otro ventilador que use para generar el viento, el multímetro me indica un abanico entre 800 y 850 mV.
2.- Ahora paso a la realidad y meto ese voltaje en el conversor ADC de un PIC16F818 con salida a un LCD. Meto el negativo (del motor) a la masa del circuito y el positivo al RA0/AN0 (Ch 0). y veo unas oscilaciones enormes; mientras que en el multimetro veia una oscilacion de unos 50 mV, aqui con el PIC veo que a veces sube hasta 1200 y otras baja hasta 400 mV y no comprendo por que puede ser.
Tengo configurado el ADC asi:
CCP1CON = 0; //no capture/compare/pwm
INTCON = 0;
ADCON0 = 5; //101
ADCON1 = 0x80; //Righ justif.
y el bucle que lee asi:
ADCON0.GO_DONE = 1; //inicia conversion
while(1){
Delay_ms(1000); //para que no se muestren los num tan rapido
if(ADCON0.GO_DONE == 0){
valor_leido = ADC_Read(0);
etc etc etc
}
}
No tengo muy claro si el bit ADCS2 de ADCON1 debo ponerlo a 0 o a 1 y que frecuencia de oscilacion debo coger con el ADCON0 segun esto:
bit 7-6 ADCS1:ADCS0: A/D Conversion Clock Select bits
If ADCS2 = 0:
00 = FOSC/2
01 = FOSC/8
10 = FOSC/32
11 = FRC (clock derived from the internal A/D module RC oscillator)
If ADCS2 = 1:
00 = FOSC/4
01 = FOSC/16
10 = FOSC/64
11 = FRC (clock derived from the internal A/D module RC oscillator)
Ahora como veis está en FOSC/2
Pues esa es mi duda, a ver por que ese abanico tan grande de fluctuación.
Gracias como siempre
-
Halowin:
Generalmente se hacen muchas mediciones y luego las promedian para obtener valores estables.
Vos estás haciendo eso?
Saludos.
Jukinch
-
Tienes que tener en cuenta que los motores, al funcionar como generador, no generan a su salida una señal DC, sino una AC. Deberías adaptar y filtrar la señal antes de introducirla a la entrada analógica del uC.
Un saludo.
-
Halowin:
Generalmente se hacen muchas mediciones y luego las promedian para obtener valores estables.
Vos estás haciendo eso?
Saludos.
Jukinch
Hola Jukinch
Si, tengo en mente hacer un promedio pero cuando el abanico sea mas estrecho.
Tienes que tener en cuenta que los motores, al funcionar como generador, no generan a su salida una señal DC, sino una AC. Deberías adaptar y filtrar la señal antes de introducirla a la entrada analógica del uC.
Un saludo.
Ya se que generan una señal analogica, por eso la paso por el ADC, Tisco.
Mi pregunta es saber por que con el polimetro hay una fluctuacion pequeña y midiendo con el ADC la hay tan grande, si es problema del programa, o qué estoy haciendo mal.
????
-
¿Tienes puesto un condensador a tierra en la entrada del ADC que te amortigüe esas oscilaciones?
-
¿Tienes puesto un condensador a tierra en la entrada del ADC que te amortigüe esas oscilaciones?
No, Nocturno, pero si me dices el valor y donde va exactamente ahora miiiiiiiismo lo pongo y te cuento.
Gracias
-
Un multimetro te esta midiendo aproximadamente el valor eficaz de la tensión alterna generada y tu con el microcontrolador estas midiendo la tensión instantanea en un punto cualquiera de la señal generada :rolleyes: Ahora, esa señal que se genera no tiene componente negativa? O sea, le estas metiendo tensión por debajo de los GND-0.3 V que soporta el ADC! Para medir el valor eficaz debes muestrear en el periodo de la señal generada cierta cantidad de puntos y calcular con ello su valor: http://es.wikipedia.org/wiki/Valor_eficaz
Pero para ello o debes montar la señal sobre una componente DC para poder muestrear todo el rango de tensiones en el periodo o utilizar otro tipo de conversor.
Si colocas un capacitor como dice Nocturno no vas a notar cambio, pero si colocas un filtro pasa-bajos (resistencia-capacitor) vas a pasar a tener el valor medio, o sea 0 V.
Saludos!
-
Un multimetro te esta midiendo aproximadamente el valor eficaz de la tensión alterna generada y tu con el microcontrolador estas midiendo la tensión instantanea en un punto cualquiera de la señal generada :rolleyes: Ahora, esa señal que se genera no tiene componente negativa? O sea, le estas metiendo tensión por debajo de los GND-0.3 V que soporta el ADC! Para medir el valor eficaz debes muestrear en el periodo de la señal generada cierta cantidad de puntos y calcular con ello su valor: http://es.wikipedia.org/wiki/Valor_eficaz
Pero para ello o debes montar la señal sobre una componente DC para poder muestrear todo el rango de tensiones en el periodo o utilizar otro tipo de conversor.
Si colocas un capacitor como dice Nocturno no vas a notar cambio, pero si colocas un filtro pasa-bajos (resistencia-capacitor) vas a pasar a tener el valor medio, o sea 0 V.
Saludos!
Ufff, Suki, muchas gracias, pero yo de electronica ando muy justo y si te digo la verdad me pierdo en tu explicacion.
Si te puedo decir que no hay componente negativa.
-
Si te puedo decir que no hay componente negativa.
Has colocado un osciloscopio en el "positivo" del motor con referencia a GND de tu circuito? Con tu multimetro mides AC o DC?
-
Si te puedo decir que no hay componente negativa.
Has colocado un osciloscopio en el "positivo" del motor con referencia a GND de tu circuito? Con tu multimetro mides AC o DC?
No tengo osciloscopio, el multimetro lo tengo en DC a escala de 2v.
He puesto un condensador de 1uF entre la entrada del ADC y masa y nada oscila igual, luego he puesto otro de 0.22uF y oscila exactamente lo mismo. ---- mal rollo---
-
Coloca una resistencia de 10k y un capacitor de 10uF, o sea: Positivo motor ----- Resistencia-----Capacitor--- GND.
Ahora medí la tensión sobre el capacitor respecto a GND.
-
Coloca una resistencia de 10k y un capacitor de 10uF, o sea: Positivo motor ----- Resistencia-----Capacitor--- GND.
Ahora medí la tensión sobre el capacitor respecto a GND.
420 mV recibiendo viento, 340 mV sin viento.
Si la salida de la resistencia la meto en el ADC parece que las oscilaciones se reducen bastante pero incluso sin vntilador el LCD marca 475 mV (sin viento alguno).
-
No sirve para entender que es lo que tienes. Tendrías que conseguir un osciloscopio para ver exactamente que señal estas generando :? Seguramente una señal AC montada sobre una componente DC.
Eso si, las variaciones bruscas se generan por los métodos de medición. Uno mide "como un promedio" y el otro es instantáneo.
Saludos!
-
Si te puedo decir que no hay componente negativa.
Has colocado un osciloscopio en el "positivo" del motor con referencia a GND de tu circuito? Con tu multimetro mides AC o DC?
Coincido con Suky en que el motor te debe de estar entregando una tensión AC con su correspondiente parte negativa.
Prueba a poner un diodo (a poder ser schottky) al positivo del motor y justo después un condensador como te comenta nocturno. El ánodo del diodo al positivo del motor y el cátodo al positivo del condensador y a la entrada analógica.
Un saludo.
-
Hola halowin, la configuración que estás utilizando no es muy fiable que digamos, por lo que te han explicado los colegas y además porque un cooler de PC es un ventilador electrónico, básicamente es un oscilador triple que genera tres señales desfasadas 120º en tres bobinas del estator, lo que genera un campo rotativo.
En el rotor tienes un imán que intenta seguir dicha rotación lo que lo hace girar.
Lo que quiero decir con todo esto es que el cable positivo que utilizas para sensar es la alimentación de un circuito electrónico no lineal, y que además la tensión de "salida" sea una oscilación en las bobinas generada por el acercamiento y alejamiento de cada polo del imán que hace girar el viento en este caso. Osea difícilmente la tensión de salida sea linealmente proporcional a la velocidad de giro del rotor.
Perdón mi intención no es tirar malas ondas, yo te aconsejo otra solución con el mismo transductor, sin renegar mucho con la "analógica" y es
que dichos ventiladores tienen un cable aparte (color amarillo) que envía pulsos a la placa madre del pc para saber la velocidad del cooler.
Sólamente tienes que contar una cantidad de pulsos en un cierto tiempo y obviamente eso te dará un valor proporcional a la velocidad de giro.
-
Prueba a poner un diodo (a poder ser schottky) al positivo del motor y justo después un condensador como te comenta nocturno. El ánodo del diodo al positivo del motor y el cátodo al positivo del condensador y a la entrada analógica.
Un saludo.
Gracias Tisco por tu interés, eso lo estabiliza bastante.
Voy a ver si lo afino mas con todo lo que me habeis contado.
Con este ultimo intento, al parar el viento el LCD se queda en el ultimo valor, quizas porque el condensador se quede cargado.
Sigo investigando.
-
Efectivamente, el condensador se queda cargado, deberías descargarlo podiendo el pin AN como salida a nivel 0 (ojo con la corriente que pueda generar el motor para no quemarlo) o mediante un transistor si la corriente que genera el motor es más de la que admite el uC (unos 25mA aunque depende del modelo).
-
Conseguí un osciloscopio y fíjate que intentas medir!!! Coincido con flacoclau que debe ser algo bien raro :mrgreen:
-
Hola halowin, la configuración que estás utilizando no es muy fiable que digamos, por lo que te han explicado los colegas y además porque un cooler de PC es un ventilador electrónico, básicamente es un oscilador triple que genera tres señales desfasadas 120º en tres bobinas del estator, lo que genera un campo rotativo.
En el rotor tienes un imán que intenta seguir dicha rotación lo que lo hace girar.
Lo que quiero decir con todo esto es que el cable positivo que utilizas para sensar es la alimentación de un circuito electrónico no lineal, y que además la tensión de "salida" sea una oscilación en las bobinas generada por el acercamiento y alejamiento de cada polo del imán que hace girar el viento en este caso. Osea difícilmente la tensión de salida sea linealmente proporcional a la velocidad de giro del rotor.
Perdón mi intención no es tirar malas ondas, yo te aconsejo otra solución con el mismo transductor, sin renegar mucho con la "analógica" y es
que dichos ventiladores tienen un cable aparte (color amarillo) que envía pulsos a la placa madre del pc para saber la velocidad del cooler.
Sólamente tienes que contar una cantidad de pulsos en un cierto tiempo y obviamente eso te dará un valor proporcional a la velocidad de giro.
Muy interesante lo que dices flacoclau.
En efecto, el cooler tiene 4 cables, ( dos negros uno rojo y uno amarillo) el primer dia intenté medir por uno negro y el rojo, pero no llegaba chicha al mico. Despues ya probé con el otro negro y el amarillo que es la combinacion que tengo ahora y es la unica que da voltios al micro.
Tambien es cierto lo que dices, algo de electronica tiene, porque se ve un integrado de 4 patas con la forma de un transistor (no se que será).
Gracias de todas formas. Si consigo que se estabilice la cosa y parece que va bien con la ultima sugerencia de Tisco, el resto lo puedo "pulir" por software.
Muchas gracias a todos.
-
Ese integrado que mencionas puede ser el que gestiona las bobinas o un sensor hall (sensor de campo magnético), o puede que ambos.
lo ideal sería poder anular la parte que mueve las bobinas y trabajar con dicho sensor que debe tirar uno o dos pulsos por vuelta del imán externo.
La otra es trabajar con algún sensor igual puesto por tí, pegado en la placa. o desconectar algunas de las bobinas y usarla como sensor y rectificar la señal con un diodito rápido (schottky) como te comentaron.