Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: javitrito en 7 Noviembre 2016, 17:20 pm



Título: Necesito ayuda con mi programa
Publicado por: javitrito en 7 Noviembre 2016, 17:20 pm
Buenas tardes, estoy realizando un programa en C cuyo objetivo es controlar un péndulo invertido.
Las ecuaciones de mi sistema son 5 y van de delta[0] a delta[4]. Mi problema surje a la hora de poner mis condiciones iniciales (ts[0]=-2, ts [1]=0, ts [2]=0, ts [3]=0 y ts [4]=0).
Le he dado el valor antes de mis ecuaciones pero no se si está bien, ya que así me temo que influirá tambien en ts[0] = ts[0] + delta[0] y en las demás. Solo quiero que me afecte a las ecuaciones y no se como ponerlo. Si alguien me echa un cable me vendría genial. Aclarar que te son las tensiones de entrada y ts las de salida.
Un saludo

Código
  1. void procesar(double te[], double ts[])
  2. {
  3. double delta[5];
  4.  
  5. ts[0] = -2;
  6. ts[1] = 0;
  7. ts[2] = 0;
  8. ts[3] = 0;
  9. ts[4] = 0;
  10.  
  11.  
  12. delta[0] = (0.6 * ts[0] - 8 * ts[1] + 1.5 * ts[2] + 1.5 * ts[3] - 0.6 * ts[4] + te[0]) * 0.001;
  13. delta[1] = (0.5 * ts[0] - 3.8 * atan(28 * ts[1])) * 0.001;
  14. delta[2] = (-0.8 * ts[0] - 1.5 * ts[3]) * 0.001;
  15. delta[3] = (0.19 * ts[2] - 0.6 * ts[4] + te[1]) * 0.001;
  16. delta[4] = (0.9 * ts[3]) * 0.001;
  17.  
  18. ts[0] = ts[0] + delta[0];
  19. ts[1] = ts[1] + delta[1];
  20. ts[2] = ts[2] + delta[2];
  21. ts[3] = ts[3] + delta[3];
  22. ts[4] = ts[4] + delta[4];
  23.  
  24. ts[0] = -10;
  25. ts[1] = -5;
  26. ts[2] = +1;
  27. ts[3] = +5;
  28. ts[4] = +9;
  29. }

MOD: Etiqueta GeSHi.


Título: Re: Necesito ayuda con mi programa
Publicado por: MAFUS en 7 Noviembre 2016, 19:04 pm
Explica como debe ser el algoritmo. Ten en cuenta que no sabemos nada de lo que debe hacer.


Título: Re: Necesito ayuda con mi programa
Publicado por: javitrito en 7 Noviembre 2016, 20:24 pm
Gracias por responder. Pues mira el programa sirve para controlar un pendulo invertido. Las ecuaciones del péndulo son las que aparecen ahí pero escritas según el método de euler con los incrementos. Tengo una placa montada con dos convertidores, uno analogico-digital, que se comunica con un microcontrolador, y otro digital- analogico que recibe lo del microcontrolador. El péndulo iría conectado a mi placa. Lo único que necesito saber es como poner mis condiciones iniciales a dichas ecuaciones, para que afecte solo a las ecuaciones y no a lo demás.
Las condiciones iniciales son estas:
        
Código
  1. ts[0] = -2;
  2. ts[1] = 0;
  3. ts[2] = 0;
  4. ts[3] = 0;
  5. ts[4] = 0;

Quiero saber si poniendolo así tal y como lo puse en mi código, antes de las ecuaciones, afectaria a toda la función    void procesar(double te[], double ts[])  o como ponerlo para que mis condiciones iniciales afecte solo a mis ecuaciones, que son las siguientes:

Código
  1. delta[0] = (0.6 * ts[0] - 8 * ts[1] + 1.5 * ts[2] + 1.5 * ts[3] - 0.6 * ts[4] + te[0]) * 0.001;
  2. delta[1] = (0.5 * ts[0] - 3.8 * atan(28 * ts[1])) * 0.001;
  3. delta[2] = (-0.8 * ts[0] - 1.5 * ts[3]) * 0.001;
  4. delta[3] = (0.19 * ts[2] - 0.6 * ts[4] + te[1]) * 0.001;
  5. delta[4] = (0.9 * ts[3]) * 0.001;

Espero que haya quedado más claro, un saludo.


Mod: Los códigos deben ir en etiquetas GeSHi