TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: ALE1973 en 30 de Mayo de 2006, 09:11:39
-
Hola, me gustaria me den su opinion a fin de saber si es realmente posible realizar esto con el 18F452, la idea es... adquirir una señal de 50Hz para poder calcular el valor TRMS (verdadero valor eficaz), la configuracion tentativa es usar un cristal + el pll del micro a fin de hacerlo correr a la maxima frecuencia.
Todo esto aparte de manejar un display grafico y una comunicacion serie.
A medida que tenga mas datos los ire subiendo, por lo pronto, tengo andando el pic con el display y quiero empezar a ver el tema del muestreo, para continuar o cambiar de micro.
Desde ya gracias.
Saludos.
Alejandro
-
Hola, me gustaria me den su opinion a fin de saber si es realmente posible realizar esto con el 18F452, la idea es... adquirir una señal de 50Hz para poder calcular el valor TRMS (verdadero valor eficaz), la configuracion tentativa es usar un cristal + el pll del micro a fin de hacerlo correr a la maxima frecuencia.
Todo esto aparte de manejar un display grafico y una comunicacion serie.
A medida que tenga mas datos los ire subiendo, por lo pronto, tengo andando el pic con el display y quiero empezar a ver el tema del muestreo, para continuar o cambiar de micro.
Desde ya gracias.
Saludos.
Alejandro
El 18F452 te puede entregar 10Mips de perfomance con un cristal externo de 10Mhz y el PLLx4.
De todas formas, desconozco de que tipo de señal consta el cálculo del valor eficaz que pretendes calcular (solo puedo asumir que es la de algun consumo por lo que mencionas de los 50Hz) y con que precisión deseas obtenerlo.
He visto equipos que usan un simple transoformador y tomando el valor de pico calcular el valor eficaz asumiendo que la onda es una sinusoidal perfecta. Si necesitas mayor precisión, entonces tal vez debas usar otro método para poder integrar la señal, recurriendo a teoría de señales, lo cual puede realmente complicar mucho el cálculo y tal vez debas hasta usar un microcontrolador más potente.
Si acotas mas el problema en cuanto a precisión y explicas un poco más el fenómeno a controlar tal vez te podamos echar mas luz al problema.
Saludos
-
Gracias por contestar...
El proyecto completo es mas o menos asi... El nombre le queda grande pero seria algo asi "Analizador de Red"
Deberia medir 3 tensiones y 3 corrientes, a 50 Hz, (tensiones nominales de red de un sistema trifasico), calcular P, Q y S (potencia activa, reactiva y aparente), Cos Fi, plus, si da, captura de forma de onda para enviar por puerto serie a un programa en la pc, por ahora me interesan las mediciones...
La precision, deberia ser para que cumpla con la Clase 0,5 o 1, la que mejor se llegue.
Pensaba tambien en utilizar directamente un conversor RMS, DC, de analog device, pero no se si se consigue en Argentina.
Espero haber aclarado un poco las cosas, luego ire subiendo algunos datos mas...
Saludos
-
Echale un vistazo a este post.
Tal vez te de alguna idea y puedes aclarar mas tu punto.
http://www.todopic.com.ar/foros/index.php?topic=8329.0 (http://www.todopic.com.ar/foros/index.php?topic=8329.0)
Si todas las señales tienen el mismo cruce por cero, creo que la cosa se simplifica bastante.
Si además usas un detector de cruce por cero que no sea por software , la cosa se mejora aún más.
Luego con los tiempos que midas a posterior del cruce por cero te determinaran el t que tienes que basado en una tabla (asi no pierdes tiempo haciendo el calculo) puedes obtener el coseno fi correspondiente.
Saludos
-
Maunix, realmente, las tensiones y las corrientes, no van a estar en fase... las tensiones entre si estaran defasadas 120 grados (sistema trifasico), la idea que me ronda es utilizar solo 2 detectores de cruce por cero, uno para la corriente y otro para la tension, con el metodo que plantean en el post que me pasaste, luego ir cambiando de par tension corriente hasta leer todos los valores...
Voy a seguir viendo esto y les cuento...
Para solucionar el tema del calculo del valor rms, encontre en analog device un conversor rms to dc.... hay que ver si se consigue en argentina...
Saludos.
-
Muy bien, espero puedas solucionarlo y si se te puede ayudar en algo, no dudes en postear tu duda.
Saludos
-
Hola de nuevo, estoy preparando para el muestreo de la señal de alterna, la capacidad que tiene el CCP module del pic de hacer un disparo del AD, asi con el Timer3 cada vez que "rebalse", dispara la conversion AD, configuro para que el AD proboque una interrupcion y asi voy tomando las muestras... Esta es mi idea, cuando la pruebe, les cuento, pero esto me genera una duda... supongamos que quiero hacer 1000 muestras en 20 ms, pensaba hacer una array de int16 para almacenar los resultados del AD, y con un puntero cargar ese array, luego a medida que se va cargando, lo voy transmitiendo por rs232 con otro puntero... como ven esto...
Ahora me encuentro con otro problema... la medicion de corriente, pensaba hacerlo con unos sensores de efecto hall, pero el precio en Argentina, es descabellado... u$s40 cada uno... alguien sabe si se consiguen transformadores de corriente comunes (bobinados), para plaqueta, o de que otra forma segura podemos medir la corriente.... he visto en un instrumento de square D, que usan unos, pero supongo que han de ser fabricados por ellos mismos.
Bueno, seguire comentando mis avances... (cuando avance....)
Saludos.
Alejandro.
-
Hola de nuevo, estoy preparando para el muestreo de la señal de alterna, la capacidad que tiene el CCP module del pic de hacer un disparo del AD, asi con el Timer3 cada vez que "rebalse", dispara la conversion AD, configuro para que el AD proboque una interrupcion y asi voy tomando las muestras... Esta es mi idea, cuando la pruebe, les cuento, pero esto me genera una duda... supongamos que quiero hacer 1000 muestras en 20 ms, pensaba hacer una array de int16 para almacenar los resultados del AD, y con un puntero cargar ese array, luego a medida que se va cargando, lo voy transmitiendo por rs232 con otro puntero... como ven esto...
Lo veo imposible, te paso a explicar las razones.
1) 1000 muestras en 20 mseg es como una muestra cada 20useg. Al A/D no le da la velocidad para tanta velocidad.
2) Si haces eso, estarias todo el tiempo empleando la lectura A/D, de nada te sirve usar interrupciones porque demorarias tiempo en ir y venir del vector de interrupcion. Eso demora algunos microsegundos que te seran utiles para guardar los datos.
3) 1000 datos de 16 bits = 2000 bytes. Ese pic tiene 1536 bytes.
4) Transmitirlo a la PC? a que velocidad? Las mediciones seran continuas sin parar? Es para tu fase de prueba? Tenia entendido que querias hacer un equipo autonomo sin PC, es decir que el PIC calcule el valor eficaz.
Respeto al precio de los sensores y de transformadores no te puedo ayudar pero seguro consigues quien te arme uno 'casero' mas que suficiente para las pruebas. Ademas en 50Hz no hay exigencias del nucleo a utilizar ni nada por el estilo.
Saludos
-
Maunix, si, es solo fase de prueba, el equipo tendria un comando que haria una captura de la forma de onda, pero de todos modos, casi que lo estoy descartando, debido a lo que mencionas... primero por la memoria del pic aunque el array no es para todos los datos, la idea era la de un buffer circular, con un puntero para escribirlo (AD) y otro para leerlo (tx), segundo por lo que dices del tiempo que estaria haciendo esto, y suponiendo que lo logre, el micro estaria 20ms solo capturando y enviando a la pc (115200).
Respecto a los Ti, supongo que tendre que solucionarlo por ahora de esa forma...
Gracias de nuevo.
Saludos.
-
Muy bien Alejandro, no dejes de contarnos tus novedades :)
El tema es que asi uses un buffer circular no te daria el tiempo para todo lo que pretendes en 20useg.
Si amplias las muestras a 100useg (el cual es un tiempo mas razonable) habras obtenido unas 200 muestras en 20mseg.
Eso equivale a 360/200 = 1.4 , es decir un punto por grado y medio (pensando en que un ciclo completo de la onda sinusoidal sean 360 grados) lo cual
Saludos
-
Maunix, estoy haciendo los calculos con 256 muestras, para ver la presicion del calculo RMS, lo que da una muestra cada 78us con el micro a 48mhz(el f4520), sobra tiempo de instruccion, lo que me falta calcular es si da el AD, que necesita 12Tads, a 1,6us minimo (sugerido por el datasheet)+ 2us de carga de capacitor, da algo asi como 21,2us por convesion, quedarian casi 57us (683 instrucciones) para hacer calculos.
Podrias corroborar si he calculado bien....(jeje segunda opinion).
Bueno, despues sigo.
Gracias.
Saludos.
-
Maunix, estoy haciendo los calculos con 256 muestras, para ver la presicion del calculo RMS, lo que da una muestra cada 78us con el micro a 48mhz(el f4520), sobra tiempo de instruccion, lo que me falta calcular es si da el AD, que necesita 12Tads, a 1,6us minimo (sugerido por el datasheet)+ 2us de carga de capacitor, da algo asi como 21,2us por convesion, quedarian casi 57us (683 instrucciones) para hacer calculos.
Podrias corroborar si he calculado bien....(jeje segunda opinion).
El Datasheet del 18F4520 dice --> Two External Clock modes, up to 40 MHz.
Operating Frequency: DC-40MHz
Por lo que el cálculo que haces a 48Mhz es incorrecto.
El otro cálculo es estimativo, , es decir los 1.6useg son certeros porque lo defines con la configuración del clock del A/D pero el tiempo de carga del capacitor es dependiente de tu circuito.
Luego supongamos 25useg para estar seguros.
Además de esto, fijate lo siguiente que nos dice el datasheet:
After the A/D conversion is completed or aborted, a 2 TAD wait is required before the next acquisition can be started. After this wait, acquisition on the selected channel is automatically started.
si bien es algo que no te afecta directamente (porque puedes hacer otra cosa) sí es algo que tienes que tener en cuenta en tu software, que no DEBES disparar nuevamente el A/D hasta no haber transcurrido esos 2 TAD que serían algo así como 3.2useg.
Por último, a máxima velocidad tu ciclo de instrucción será de 100nseg (10Mips). Si supones entre 57 a 53 useg disponibles tendrás algo mas que 500 instrucciones. El tiempo te 'alcanza' para hacer otra cosa pero deberás emplearlo muy bien y si solo son 256 muestras (512 bytes) no tendrás ningun inconveniente. Yo que tu 1ro haría la medición y luego tranquilo la paso a la PC.
Saludos
-
Tenes razon Maunix, estaba confundido con el f4550.
La idea para el calculo no seria almacenar los 256 datos en memoria, ya que seria demasiada memoria en datos, la idea era ir calculando a medida de que se obtiene, entre muestra y muestra, para ello tengo que ver cuanto tiempo tarda las operaciones, en C, despues lo verifico...
Bueno, gracias por las respuestas.
Saludos.
Alejandro.
-
Tenes razon Maunix, estaba confundido con el f4550.
La idea para el calculo no seria almacenar los 256 datos en memoria, ya que seria demasiada memoria en datos, la idea era ir calculando a medida de que se obtiene, entre muestra y muestra, para ello tengo que ver cuanto tiempo tarda las operaciones, en C, despues lo verifico...
Ok, solo como un unico consejo. No se que calculo pretendes realizar pero si te puedo aconsejar que trates de usar operaciones con enteros y evites las operaciones en coma flotante.
El compilador puede retrasar 'algo' con respecto a hacerlo en ensamblador pero lo que mas importancia tiene a la hora de los delays es la de tener muy en cuenta que tipo de operandos uno utiliza.
Saludos
-
Si Maunix, es lo que me preocupa de "C", no pude sentarme todavia a revisar los tiempos, pero los calculos que se deberian realizar son los de las areas por debajo de la curva para poder luego calcular el valor del rms, eso incluye por lo menos un calculo del seno de un angulo, y sinceramente no creo que alcance el tiempo, cada vez me gusta mas la idea de un CI externo para el calculo del RMS, a menos que salte a un DSPic, con lo cual la historia seria otra.
Saludos.
-
Si Maunix, es lo que me preocupa de "C", no pude sentarme todavia a revisar los tiempos, pero los calculos que se deberian realizar son los de las areas por debajo de la curva para poder luego calcular el valor del rms, eso incluye por lo menos un calculo del seno de un angulo, y sinceramente no creo que alcance el tiempo, cada vez me gusta mas la idea de un CI externo para el calculo del RMS, a menos que salte a un DSPic, con lo cual la historia seria otra.
Saludos.
El cálculo del seno lo puedes hacer por tablas.
y como te dije antes, el C no tiene la culpa sino la forma en qeu tu uses tus variables antes que nada
Por ej:
Si tienes una variable que vale 1.4 y otra 2.6
y tu haces
rtdo = 1.4 * 2.6 // esto demorará mucho!, cientos de instrucciones!
si en vez de manejar tus variables como 1.4 y 2.6 la almacenas como 14 y 26
Rtdo = 14 * 26 // esto es muuuuuy rapido
Es por eso que te decía antes, lo ppal no es el lenguaje sino como armes tu código o como te la ingenies para sobrepasar las limitaciones que el hardware te impone.
Saludos
-
Hola, me parece muy interesante tu proyecto. No se si podrias ampliar un poco mas la info.
En fin para tu pregunta de los sensores de corriente te recomiendo los sensores de http://www.allegromicro.com/ (http://www.allegromicro.com/) los cuales son economicos y a la salida tienes un voltaje de corriente directa( 0 - 5 VDC) proporcional a la cantidad de corriente q circula por el, y los rangos de corriente son muy variados desde 5 [A] hasta 200 [A] y los puedes conseguir en Farnell In one o no se como se llame alla en argentina, ya q aqui en mexico se llaman Newark inone y cuestan 4 dolares mas o menos.
La salida de 5 Volts la puedes muy bien pasar por el A/D del pic ... bueno suerte y siguenos contando de tu proyecto
:-/ :-/ :-/ :-/ :-/
-
kuauhtemok, habia visto esos sensores, voy a ver si se consigue en argentina, gracias por la info.
La idea del equipo es un equipo que mida tensiones de linea, de fase, corrientes de linea, potencia activa, reactiva, etc, parametros tipicos de una red trifasica industrial, representar esto en un display grafico y reportarlos a una pc por medio de modbus.
Estoy en la etapa de entrada, la comunicacion, el manejo del display, esta andando, faltaria la parte de adquisicion de las corrientes y las tensiones, calcular el valor rms y otros datos, por ahora esta todo en protoboard, pero quiero probar todo por partes antes de hacer un ensamble...
Gracias por tu opinion.
Saludos.
-
Q interesante q lo hagas con Modbus.... mira yo estoy empezando a trabajar con DNP3 (supongo q los has oido) y es un lio demadiado complicado para 16 bytes de info q tengo q enviar al PC. Pero bueno q le vamos a hacer...
Esta bien q lo hagas en el proto porq asi aseguras q cuando hagas la PCB no tengas lios, yo asi siempre le hago.
Suerte con tu proyecto !!!
-
Hola como estás ALE1973:
La idea de usar el chip de analog devices me parece buena, puesto que (a manera de info, por si no sabías) analog da muestras gratis.
En mi proyecto de grado usé todo tipo de CI´s de Analog y a trevés de los "samples" ahorré dinero y tiempo de desarrollo, lo que si hay que tener en cuenta es que se demoran de 1 a 3 semanas en que los componentes te lleguen. Lo mejor es que son sin cargo de envio!.
En definitiva, y creo que te lo sugirieron; si la señal es senoidal yo lo que haría es hacer el cálculo externo; un simple filtro y un detector de pios te podría solucionar el problema.... (alguna vez hice un proyecto para discriminar formas de onda a una frecuencia fija y lo hacía de con el rms de la forma que te acabo de indicar).
Tengo algo de duda con respecto al número de muestras, pero dejame aclararme un poco y te digo bien de que trata...
Suerte con tu proyecto.
Andros!
-
Andros, pense en las muestras, pero para Argentina, no envian muestras, me dicen que me contacte con el proveedor local, el cual me pide u$s 22 por cada uno, con ese precio me conviene mudarme a un DSPic y hacer el calculo con el micro que aca en Argentina cuesta algo de u$s11, por lo pronto estoy esperando que me lleguen los ci para medicion de corriente para empezar las pruebas...
Respecto a si la señal es sinusoidal, no puedo asumir que sea asi, ya que el medidor puede ir colocado en CCM (centro de control de motores), el cual seguro tiene variadores de vel y soft starter, los cuales introducen innumerables cantidad de armonicos, y para desarrollar algo "nuevo", y que no sea rms, no me parece bueno.
Saludos.
Alejandro.
-
Andros, pense en las muestras, pero para Argentina, no envian muestras, me dicen que me contacte con el proveedor local, el cual me pide u$s 22 por cada uno, con ese precio me conviene mudarme a un DSPic y hacer el calculo con el micro que aca en Argentina cuesta algo de u$s11, por lo pronto estoy esperando que me lleguen los ci para medicion de corriente para empezar las pruebas...
Respecto a si la señal es sinusoidal, no puedo asumir que sea asi, ya que el medidor puede ir colocado en CCM (centro de control de motores), el cual seguro tiene variadores de vel y soft starter, los cuales introducen innumerables cantidad de armonicos, y para desarrollar algo "nuevo", y que no sea rms, no me parece bueno.
Saludos.
Alejandro.
Alejandro de todas formas necesitaras algún sensor o equipo que te permita medir el True RMS, sino ¿cómo sabes que estas midiendo bien? Y si no mides bien.. al menos saber con que precisión cuenta tu algoritmo o circuito.
De esa forma podrías hacer 2 equipos el económico con no tanta precisión y el más caro con mayor precisión.
Saludos
-
Maunix, para la contrastar la medicion, tengo un osciloscopio fluke si a eso te refieres...
No puedo avanzar, ya que todavia no recibo el pic, ni los sensores, aparte me tiene ocupado un trabajito....
Saludos.
Alejandro
-
Maunix, para la contrastar la medicion, tengo un osciloscopio fluke si a eso te refieres...
No, no me referia a un osciloscopio en lo específico sino a un instrumento que te permita medir valor True RMS de una señal. Si tu osciloscopio te permite hacer eso, entonces tienes todo lo que hace falta para estar seguro de que tu rutina funciona bien.
No puedo avanzar, ya que todavia no recibo el pic, ni los sensores, aparte me tiene ocupado un trabajito....
Me alegro que tengas trabajo!, de todas formas nadie te está apurando a que respondas con celeridad. Maneja tus tiempos como te plazca. :) :)
Eso si, cuando avances en tu proyecto, si tus avances son sobre este mismo tema, sería mejor que tu post se agregue en este tema y no abrir otro nuevo. 8)
Saludos
-
Asi sera maunix, en cuanto tenga algo probado, lo publico...
Saludos.
-
Bueno, hay gente decidida a facilitarnos las cosas.... Analog Devices, tiene en su haber el ADE7754, un completo sistema de medicion polifasica de potencia activa, reactiva, aparente, corriente, tension, etc.... con comunicacion spi... asi que este integrado junto con los transductores de efecto hall para la corriente, seran parte de la etapa de entrada de este proyecto... Ya pedi unas muestras, asi que en cuanto comience con las pruebas, comento mas...
Saludos.
Alejandro
-
Bueno, hay gente decidida a facilitarnos las cosas.... Analog Devices, tiene en su haber el ADE7754, un completo sistema de medicion polifasica de potencia activa, reactiva, aparente, corriente, tension, etc.... con comunicacion spi... asi que este integrado junto con los transductores de efecto hall para la corriente, seran parte de la etapa de entrada de este proyecto... Ya pedi unas muestras, asi que en cuanto comience con las pruebas, comento mas...
Saludos.
Alejandro
Que bueno alejandro, me alegro.
Es cierto que hay muchos IC que resuelven muchas cosas y es una buena decisión utilizarlos cuando el presupuesto lo permite ;) ;)
Saludos