Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - FAQ - Zum CC1-Forum - Zum CC-Pro-Forum

Interruptbehandlung + PID-Regler Kategorie: Programmierung (von Erich - 19.04.2006 12:14)
Ich nutze:
C-Control II Unit, CC2-Application-Board, OSOPT V3.0
Guten Tag,

zu meinem alten Thread hat ja noch keiner was gesagt, deswegen schieb ich gleich noch einen nach ;)

man betrachte erstmal meinen - noch unfertigen - Quältext:


//------------
  thread main
//------------
{
  lcdext.init();

  int
  timBrt0, timBrt1, timBrt2, timPer,
  RAbstand, RBreite, VWickel, LWickel,
  Hoehe[3], Hoehesoll,
  p0i, p1i, p2i, tTor;

  long
  timerPuls, timerTor, tA, tAvgl,
  port0cnt, port1cnt[3], port2cnt[3];

  ports.deact(8);
  ports.deact(9);
  ports.deact(10);

  ports.set(0, 1);
  ports.set(1, 1);
  ports.set(2, 1);
 
  timPer = 100;
  timBrt0 = 0;
  timBrt1 = 0;
  timBrt2 = 50;
 
  port0cnt = 0;
  port1cnt = 0;
  port2cnt = 0;
 
  timerPuls = system.timer();
  tAvgl = system.timer();
  timerTor = system.timer ();

  tTor = 1500;
  tA = 500; // nur, damit mal was als Abtastzeitkonstante drinsteht...
  Hoehesoll = 500; // dito
 
  loop
  {
 
// verstehe ich nicht - die Zahlen habe ich einfach so mal reingeschrieben,
// damit ich keine Fehlermeldungen bekomme
    system.hook(system.EVENT_P1H0, 1, 1,2);
      p0i = p0i + 1;
    system.hook(system.EVENT_P1H1, 1, 1,2);
      p1i = p1i + 1;
    system.hook(system.EVENT_P1H2, 1, 1,2);
      p2i = p2i + 1;

    wait (system.timer()-timBrt0) == timerPuls;
      {
        ports.toggle(0);
      }
    wait (system.timer()-timBrt1) == timerPuls;
      {
        ports.toggle(1);
      }
    wait (system.timer()-timBrt2) == timerPuls;
      {
        ports.toggle(2);
      }
    wait (system.timer()-timPer) == timerPuls;
      {
        ports.toggle(0);
        ports.toggle(1);
        ports.toggle(2);
        timerPuls = system.timer();
      }

//Steuerung der gebenden Trommel abhängig von derHöhe des Abstandsmessers

    wait (system.timer()-tA) == tAvgl;
      {
        Hoehe[0] = ports.adc(0);
        p0i = 0;
//--------------------------
/* hier Regelalgorithmus für die Kraft (PID)
 als Basis wird diese digitale Ã?bertragungsfunktion verwendet:

 v[k] = v[k-2] - a*u[k] + b*u[k-1] + c*u[k-2]
 
 wobei a = (R1*R2*C1*C2 + 2*R1*C1*tA + 2*R2*C2*tA)/(2*R0*C2*tA)
       b = (R1*R2*C1*C2)/(2*R0*C2*tA)
       c = (4*R1*R2*C1*C2 - 2*R1*C1*tA - 2*R2*C2*tA)/(2*R0*C2*tA)
       
 die Schaltung, aus der ich diese Algorithmen per bilinearer/Tustin-
 Transformation zusammengestöpselt habe, sind auf dem Link ganz unten zu ersehen
 */

//--------------------------

//Achtung: Reihenfolge
        Hoehe[2] = Hoehe[1];
        Hoehe[1] = Hoehe[0];
        tAvgl = system.timer();
      }


// Abtasten - Encoder der "Zugtrommel". Steuerung der Wickelführung
// abhängig von der Faserstärke. Vergleich mit Encoderwert der Wickelführung
    wait (system.timer()-tTor) == timerTor;
      {
        port1cnt[0] = p1i;
       
// port1cnt = port0cnt*x/y ... x ist abhängig von der Faserstärke,
// y ist ein noch zu ermittelnder WErt abhängig von der Schneckensteigung
        port0cnt = p0i;
        p0i = 0;
        p1i = 0;
//--------------------------
// hier "standard"Regelalgorithmus (PID)
//--------------------------

//Achtung: Reihenfolge!
        port1cnt[2] = port1cnt[1];
        port1cnt[1] = port1cnt[0];
        timerTor = system.timer();

      }
     
// Abtasten des "Selbstbau-Encoders" an der Führungsrolle.
// Steuerung der Zugtrommel
     
    wait (system.timer()-tTor) == timerTor;
      {
        port2cnt[0] = p2i;
        p2i = 0;
//--------------------------
// hier "standard"-Regelalgorithmus (PID)
//--------------------------

//Achtung: Reihenfolge!
        port2cnt[2] = port2cnt[1];
        port2cnt[1] = port2cnt[0];
        timerTor = system.timer();

      }


  }


  halt;
}


hier der Link:

http://www.uni-stuttgart.de/ilr/dateien/rt2/ueb/Aufgabe10_doppel.pdf

verwendet wird natürlich die Schaltung von Bild 5.

Es gilt noch zu beachten, dass die Sache noch nicht fertig und längst nicht erprobt ist, ich mich
aber über Tipps zum PID (v.a. von krassos, dem sowas Spa� macht) und zum Interrupt freuen würde
zu den von André genannten "fast interrupt"-Geschichten etc. habe ich im Handbuch leider nichts
gefunden.

Vielen Dank!

Erich


    Antwort schreiben


Antworten:

jemand da? (von Erich - 21.04.2006 21:23)
    hmm.... gibts vielleicht noch ein CC2-Forum im Internet? (von Erich - 24.04.2006 15:53)
        Re: hmm.... gibts vielleicht noch ein CC2-Forum im Internet? (von Sascha - 24.04.2006 22:02)
            Re: hmm.... gibts vielleicht noch ein CC2-Forum im Internet? (von Holger - 24.04.2006 22:23)
                Re: hmm.... gibts vielleicht noch ein CC2-Forum im Internet? (von Erich - 24.04.2006 22:45)
                    Re: hmm.... gibts vielleicht noch ein CC2-Forum im Internet? (von ingo - 30.04.2006 9:46)
                       Re: hmm.... gibts vielleicht noch ein CC2-Forum im Internet? (von Erich - 2.05.2006 9:09)