Resistiva. De hecho lo quiero para mi temo eléctrico.
No, la temperatura ya la tengo controlada. La variable a controlar es la potencia porque quiero alimentar el temo solo con la energía sobrante de mis placas fotovoltaicas. Me da igual el tiempo que tarde en calentarse, lo que quiero es hacerlo gratis.
Voy a investigar si es que puedo acelerar el ADC, o gestionarlo directamente leyendo los registros del micro en lugar de usar la función analogRead.
...Mi intención era leer la potencia haciendo una lectura analógica del sensor en cada uno de esos trocitos.No hace falta quedarse esperando. Al comienzo del intervalo de 100uS lees el ADC y luego inicias otra conversión, que recién se leerá en el siguiente intervalo.
Pero ahora resulta que el ADC del ESP8266 tarda 97us en devolver una lectura, así que me deja el micro ocupado todo ese tiempo sin poder hacer otra cosa.
...
Yo creo que puedes hacer una lectura del sensor 100 veces por segundo (en cada fin de ciclo) y debería ser suficiente para definir el PWM del siguiente ciclo.¿100 veces por segundo?, teniendo en cuenta que en cada segundo hay 100 semiciclos (a 50Hz) eso me daría sólo una lectura en cada semiciclo. No veo de qué manera puedo calcular la potencia con tan pocas muestras, pero si se puede hacer sería ideal.
Edito:
Por lo que he leído resulta difícil leer el ADC a bajo nivel con el ESP8266.
https://hackaday.io/page/7136-esp8266-adc-read-nonblocking
Actualmente lo tengo montado con un proceso "cooperativo". La interrupción del Timer marca el ritmo de las lecturas y la interrupción Externa marca el ritmo de los cruces por cero de la señal alterna. El problema es que la lectura del ADC provoca que la función llamada por la interrupción del Timer dure mucho más de lo que dura un ciclo, por lo que desborda y forma el lío.Voy a investigar si es que puedo acelerar el ADC, o gestionarlo directamente leyendo los registros del micro en lugar de usar la función analogRead.
¿Por qué no haces procesos cooperativos o en tal caso recurrir a la interrupción del ADC para evitar la sincronicidad?
No hace falta quedarse esperando. Al comienzo del intervalo de 100uS lees el ADC y luego inicias otra conversión, que recién se leerá en el siguiente intervalo.¿Y cómo se hace eso?, con la instrucción AnalogRead que es la que estoy usando no se puede.
Yo creo que puedes hacer una lectura del sensor 100 veces por segundo (en cada fin de ciclo) y debería ser suficiente para definir el PWM del siguiente ciclo.¿100 veces por segundo?, teniendo en cuenta que en cada segundo hay 100 semiciclos (a 50Hz) eso me daría sólo una lectura en cada semiciclo. No veo de qué manera puedo calcular la potencia con tan pocas muestras, pero si se puede hacer sería ideal.
Edito:
Por lo que he leído resulta difícil leer el ADC a bajo nivel con el ESP8266.
https://hackaday.io/page/7136-esp8266-adc-read-nonblocking
Mi intención es leer 100 muestras en cada semiciclo (10.000 en un segundo) de manera que puedo ir sampleando con bastante resolución la forma de la curva, y a partir de ahí, calcular la potencia RMS.
No he leído ese artículo de hackaday pero lo miraré. Si finalmente es imposible acelerar el ADC del ESP8266, tendré que considerar cambiarme a un ESP32, aunque es una pena porque sería matar moscas a cañonazos.
...No hace falta quedarse esperando. Al comienzo del intervalo de 100uS lees el ADC y luego inicias otra conversión, que recién se leerá en el siguiente intervalo.¿Y cómo se hace eso?, con la instrucción AnalogRead que es la que estoy usando no se puede.
while(adcBusy(sensorPin)); // Espera que haya terminado la conversion
LecturaADC = adcEnd(sensorPin); // Lee el ADC
adcStart(sensorPin); // Inicia otra conversion
.......... // El programa continua.
// El valor se leerá recién cuando indique
// de nuevo el timer.
pero habrá que buscar una librería que las contemple :(
¿Realmente lo ves necesario?, tampoco voy a necesitar una precisión altísima.Es que la onda de tensión suele estar distorsionada y se pierde precisión al calcular la potencia. No sé cuanta precisión se pierde, ni si será aceptable para lo que necesitas.
Yo creo que para esta aplicación no necesitas determinar la potencia consumida instantánea siguiendo la señal punto a punto como quieres por que es que eso , aunque sea una señal periódica de 50 hz, quererla samplear de esa manera ya roza casi la obligatoriedad de usar micros con DSP como algunos pic24 o dspic. Posible es, pero lo veo muy “a cañonazos como dices” para un simple dimmer online.
Creo que si a la salida analógica del integrado HALL le colocas un condensador electrolítico pequeño al que le colocas una carga constante y conocida con resistencias de precisión, consigues una especie de “hold” de un valor medio que varía según el consumo.
Entonces ya no tienes que andar sampleando constantemente a ese ritmo, sino que puedes ir a leer ese voltaje “hold” de vez en cuando (cada segundo por ejemplo)y luego lo relacionas con el consumo.
Es una sugerencia.
¿Realmente lo ves necesario?, tampoco voy a necesitar una precisión altísima.Es que la onda de tensión suele estar distorsionada y se pierde precisión al calcular la potencia. No sé cuanta precisión se pierde, ni si será aceptable para lo que necesitas.
Prueba a utiilizar un medidor de potencia y comparas los valores obtenidos.
https://www.amazon.es/medidor-potencia/s?k=medidor+de+potencia
Yo creo que para esta aplicación no necesitas determinar la potencia consumida instantánea siguiendo la señal punto a punto como quieres por que es que eso , aunque sea una señal periódica de 50 hz, quererla samplear de esa manera ya roza casi la obligatoriedad de usar micros con DSP como algunos pic24 o dspic. Posible es, pero lo veo muy “a cañonazos como dices” para un simple dimmer online.
Creo que si a la salida analógica del integrado HALL le colocas un condensador electrolítico pequeño al que le colocas una carga constante y conocida con resistencias de precisión, consigues una especie de “hold” de un valor medio que varía según el consumo.
Entonces ya no tienes que andar sampleando constantemente a ese ritmo, sino que puedes ir a leer ese voltaje “hold” de vez en cuando (cada segundo por ejemplo)y luego lo relacionas con el consumo.
Es una sugerencia.
Tenía entendido que si la carga que va a controlar el Dimmer es resistiva, el factor de potencia siempre sería 100% ya que no hay desfase entre la tensión y la corriente.Esto es cierto solo cuando tensión y corriente son senoidales. Acá claramente la corriente no es senoidal,
Como podéis observar, en todos los casos, la corriente está perfectamente sincronizada con el cruce por cero de la alterna, no hay desfase alguno.El factor de potencia se define como Fp=Pactiva/(Vrms Irms) , cuando V,I son senoidales se reduce al coseno del desfasaje, pero cuando no lo son, hay que recurrir a integrales o en el caso de un instrumento, calcular la potencia activa , tensión y corriente RMS.
Sin embargo, mi lector de consumos de Velleman me pone unos factores de potencia de 33%, 57%, 80% y 98% respectivamente, crecientes mientras mayor es la regulación del dimmer.
¿Cuál puede ser la causa?