TODOPIC
Microcontroladores PIC => - Flowcode - => Mensaje iniciado por: Fer_TACA en 14 de Abril de 2021, 13:09:00
-
Hola amigos,
A ver si alguien me puede echar una mano con el problema que paso a describir:
Estoy intentando captura una tensión analógica y dependiendo del valor activar un led. Por otra parte al actuar sobre un pulsador se produce una nueva lectura de la tensión analógica y se guarda en la EEprom.
Inicialmente el programa lee el valor de la EEprom y se compara con el valor de la entrada analógica y si es menor se activa el led hasta que supere el valor guardado, en que el led se apaga. Al accionar el pulsador se captura el valor, se guarda y se sigue con el proceso de la comparación.
Bien el programa, en principio funciona correctamente Digo en principio por que al inicio nada mas dar tensión, el led empieza a parpadear hasta que los valores se igualan, momento en que deja de parpadear y luego ya el funcionamiento es correcto como he indicado. es decir ese efecto solo pasa al inicio de dar tensión.
Si simulo el programa tanto con Proteus como con el simulador que trae incorporado Flowcode ese efecto no se produce.
¿algún consejo o idea de lo que puede estar pasando?
Dejo los ficheros de Flowcode y Proteus.
F.
-
Tal vez dejando un delay para la estabilización de las tensiones del sistema se evitaría hacer visible esa alternancia de estados, no se evitará pero no quedaría visible.
-
Eso creo que ya lo había probado, pero volveré a probarlo.
F.
-
Una cosa muy curiosa que he comprobado y es lo siguiente:
Si memorizo que el luzca a 2V, pues el led luce perfectamente, pero si voy subiendo el voltaje el led comienza a parpadear, es verdad que al subir mas de 2.30V el led se apaga, y luego da el mismo síntoma cuando comenzamos a bajar la tensión, quiere decir que cuando voy bajando y llega a 2.30V el parpadeo comienza y el parpadeo desaparece al llegar a los 2V memorizados quedando el led totalmente fijo.
He colocado un condensador de 470uF en paralelo con el led y el síntoma desaparece y la verdad no comprendo porque puede suceder ese efecto.
¿Alguien se le ocurre que puede pasar?
F.
-
Más que por certeza por decir algo, si es en físico quizá el consumo del led modifique instantaneamente la referencia por una pequeña caida de tensión, ello se produciría hasta que logre estabilizarse el voltajeen esa parte del circuito, sobre todo si no tiene histeresís de funcionamiento. Como dije, solo por arriezgar algo.
-
Gracias Santiago,
Mañana seguiré comprobando cosas a ver porque sucede esa situación.
De todas formas intentaré añadirle también una buena histéresis y ver si así se elimina. En caso afirmativo luego iré afinando.
F.
-
He colocado una histéresis para cuando se supere el valor pre-ajustado y ahora, por ejemplo, programo un nivel de 2V, pues el led comienza a parpadea cuando supera los 2.2V, y no se apaga hasta no superar 2.5V mas, esto es cuando subo la tensión a comparar.
Luego a la inversa hace lo siguiente, cuando la tensión comienza a bajar el led parpadea al llegar a 2.5V, y no queda fijo hasta alcanzar los 2.2V.
Lo que ha hecho la histéresis es desplazar el punto del parpadeo los 0,2 voltios, pero sigue manteniendo la diferencia con el parpadeo en 0,3 voltios.
Creo que eso no es normal, dado que la aproximarse al llegar al punto de comparación, el nivel se reduce en 0,2 voltios y por lo tanto, al menos el parpadeo se debería de haber reducido solo a 0,1V.
¿Alguna idea de porque pasa eso?. Es la primera vez que me sucede.
F.
-
Fermín, a riezgo de ser un sonso al preguntar esto, realmente creo recibir una respuesta que heche por tierra mi interrogante, la fuente ¿es confiable 100%?, digo esto porque habiendo establecido una ventana amplia de inacción, donde los cambios en el nivel no influyen en el estado de salida, el que siga parpadeando sollo puede ser debido a una variación en la tensión, o en una rutina que se ejecute en ese lapso e incida de algún modo en el voltaje. realmente te lo pillaste amigo, si es por ahí será difícil el tema. Filtros imagino que has probado, pero ...
-
Santiago,
Evidentemente la alimentación está más que probada.
Para probar he utilizado una fuente de alimentación de laboratorio bastante buena y precisa. Vamos que con la carga irrisoria de un led y del pic, la fuente no se entera que tiene algo conectado.
Y si, las tensiones en todas las partes del circuito de mantienen estables sin modificar en nada su Valor, salvo la salida cuando oscila.
Creo que esto ya lo había comentado.
Por eso digo que es muy extraño. Solo me da por pensar que como éste Pic, tiene un comparador analógico, pues que Flowcode no lo deje deshabilitado al inicio cuando no se usa y por eso este provocando ese efecto.
F.
-
Es totalmente normal lo que te está pasando.
Si pudieses ver el valor del adc en una pantalla lcd por ejemplo, o enviado por jartan a una terminal, verías que si por ejemplo das 2,5 voltios al puerto adc, el valor no da 512 clavados sino que va oscilante entre 510 y 513 más o menos según la calidad de la alimentación y filtrado del circuito. Por muy buena que sea el valor no es clavado nunca. Siempre oscila.
Por eso para subsanar eso yo haría tres cosas:
1- ponderar un número de lecturas del adc y luego dividirlas entre el número de lecturas tomadas y sumadas. ( una media) de muchas lecturas consecutivas. Cuantas más, más estable será el valor adc.
Hasta aquí ya tienes un valor adc bastante más estable y menos oscilante. Pero aún no es suficiente.
2- Para ejecutar el cambio de estado del led que no baste con que (adc>vset) para encender y que (adc < vset) para apagarlo, sino que además, tiene que permanecer un tiempo por encima de ese valor. Por ejemplo, imagina que a 512 quiero activar el led, pues cuando valga 512 incremento un contador.
Tomo otra lectura, si vuelve a ser 512 vuelvo a incrementar el contador. Cuando el contador valga 100 (por ejemplo) activo el led.
Sin embargo, si una sola lectura cae a 511 por ejemplo, el contador pasa a cero y vuelta a empezar. No se toma ni una sola acción hasta que obtenga mis 100 veces consecutivas con adc por encima de vset.
Lo mismo para luego apagar el led.
Y por último:
3- Una histeresis. Encender el led a los 514 y apagarlo a los 511. Por ejemplo.
Con esto te quitas todos los problemas.
-
Gracias por tu respuesta Remi, estoy de acuerdo en todo lo que has planteado.
De hecho, el punto 3º ya está implementado, incluso con una histéresis mayor. Pero el funcionamiento sigue igual de errático.
con respecto al punto 1º estoy intentando implementarlo y viendo la forma de llevarlo a cabo con Flowcode.
Como me gusta ir paso a paso comprendiendo como suceden las cosas, una vez implementado el unto 1º lo probaré y después intentaré pasar al punto 2º que relatas.
F.
-
Bueno después de realizar las pruebas pertinentes, resolví el problema.
La solución, como indicó remi ((:-)) ((:-)) ((:-)), era el realizar un número determinado de muestras y sacar el promedio de las mismas.
Gracias a todos por la ayuda prestada.
F.
-
Bien!!! ((:-))
Ahora eso indicaría inestabilidad en la lectura del ADC. Que seguramente se debe a fluctuaciones de la señal. Físicamente se solucionaría añadiendo un filtro RC, calculando valores capaz de filtrar la fcia. menor estimada.