Autor Tema: La ecuación trascendental de Kepler y su implementación en lenguaje C  (Leído 1277 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado RodrigoAndres

  • PIC16
  • ***
  • Mensajes: 171
Saludos a todos. Esta es la situacion:

he estado escribiendo las ecuaciones para calcular la potencia  de un motor DC, alimentado por media onda, el cual es controlado por el metodo conocido como  "control de fase". resolviendo la integral,  me ha dado una ecuacion de la forma P = a*sin(b*t) - c*t +d, donde t es el tiempo de disparo del triac y a,b,c,d son constantes. esta ecuacion no es lineal, entonces para linealizarla (o sea que si aumento el tiempo de forma lineal, la potencia en el motor se incremente de forma lineal) aplique una serie de ecuaciones y he llegado a una ecuacion con la siguiente forma donde debo despejar "X"

t = X - sin(X)

esta ecuacion es conocida como la ecuacion de kepler y se resuelve por el metodo aproximado, sin embargo no se como se puede implementar en lenguaje C del CCS, si alguien me puede ayudar se lo agradeceria mucho. ademas tambien me gustaria que me dijeran cuanto tiempo tardaria el microcontrolador PIC18F a 48Mhz en resolver la ecuacion para un valor de t, a ver si vale la pena implementarla.

SALUDOS.

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:La ecuación trascendental de Kepler y su implementación en lenguaje C
« Respuesta #1 en: 26 de Octubre de 2015, 15:18:06 »
No entiendo como lograste despejar t de ahi..

Es decir llegar desde:

P = a*sin(b*t) - c*t +d

a

t = X - sin(X)

Primero me aseguraria que ambas ecuaciones son equivalentes y correctas, estas seguro de eso ?
Si deberias hacerlo con "aproximaciones sucesivas" como queres simplemente repeti tu formula varias veces hasta que el resultado este dentro de los margenes que vos queres.
En Wikpedia se encuentra el mismo. El tema es que tenes que dar un valor inicial de X aproximado.

Luego un

valorviejo = valornuevo = Xi;
while ( abs(valorviejo - valornuevo) <= 0.01 )
{
   valorviejo = valornuevo;
   valornuevo = t + sin(valorviejo);
}

Creo que eso te daria tu valor en el cual tendrias una precision de al menos 0.01
Con lo que tarda hacer el seno y la cantidad de repeticiones que puede dar esto, tal ves te convenga aplicar mas la primer formula y listo.
« Última modificación: 26 de Octubre de 2015, 15:31:46 por KILLERJC »

Desconectado Picuino

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5879
    • Picuino
Re:La ecuación trascendental de Kepler y su implementación en lenguaje C
« Respuesta #2 en: 26 de Octubre de 2015, 17:29:23 »
Eso se suele hacer con una LUT.
Es una tabla. Vas almacenando el tiempo de disparo para cada potencia de motor.
Para resolver la ecuación, buscas el valor de la solución en la tabla.
También puedes hacerlo con una ecuación lineal (linealizando la tabla)
Si quieres tener menos error, haz varios tramos lineales.

Un saludo.

Desconectado RodrigoAndres

  • PIC16
  • ***
  • Mensajes: 171
Re:La ecuación trascendental de Kepler y su implementación en lenguaje C
« Respuesta #3 en: 26 de Octubre de 2015, 19:39:21 »
No entiendo como lograste despejar t de ahi..

Es decir llegar desde:

P = a*sin(b*t) - c*t +d

a

t = X - sin(X)

Primero me aseguraria que ambas ecuaciones son equivalentes y correctas, estas seguro de eso ?
Si deberias hacerlo con "aproximaciones sucesivas" como queres simplemente repeti tu formula varias veces hasta que el resultado este dentro de los margenes que vos queres.
En Wikpedia se encuentra el mismo. El tema es que tenes que dar un valor inicial de X aproximado.

Luego un

valorviejo = valornuevo = Xi;
while ( abs(valorviejo - valornuevo) <= 0.01 )
{
   valorviejo = valornuevo;
   valornuevo = t + sin(valorviejo);
}

Creo que eso te daria tu valor en el cual tendrias una precision de al menos 0.01
Con lo que tarda hacer el seno y la cantidad de repeticiones que puede dar esto, tal ves te convenga aplicar mas la primer formula y listo.

Gracias! ya entendi lo de las aproximaciones, no sabia que era asi. Para llegar a la ecuacion lo que hice fue evaluar las condiciones de frontera, cuando t = 0 la potencia es la maxima porque el triac se dispara en t = 0, y cuando t = 1/2f la potencia es cero porque el triac nunca se dispara.

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:La ecuación trascendental de Kepler y su implementación en lenguaje C
« Respuesta #4 en: 26 de Octubre de 2015, 20:39:40 »
Si vas a hacerlo pensa en el tiempo, sino hacele caso a Picuino.. es mejor hacer una tabla para cada disparo y vas a tener una mayor velocidad.


 

anything