Hi, BlackDevil

Zitat Zitat von BlackDevil
Aaaaaaaaaaaaaaaaaaaaah jetzt ist der Groschen gefallen! ...
Prima, dann ist unsere Mühe nicht vergeblich gewesen.

Zitat Zitat von BlackDevil
... Der Übergang zwischen Linie und keine Linie ist - logischerweise wie ic hfinde, nicht fliesend, sondern "abrupt", mehr oder weniger ...
- Linie "messen" und "Digitalisieren
Die Linie ist "mehr oder weniger abrupt". Das kommt darauf, an, welche Sensoren Du verwendest. Ein analoger Sensor wird eben ein analoges Signal ausgeben, und ein digitaler ein digitales. Also je nachdem, wie Du die Sache hardwaremässig anlegst!

Zitat Zitat von BlackDevil
... Das heist:
...
- Drehzahl der beiden Motoren messen
- Gemessene, Digitalisierte Linie mit "Regeltabell" abgleichen
-- Entsprechend den Motoren einen neuen Sollwert vorgeben
-- Den Sollwert möglichst exakt mit PID versuchen einzuzhalten (PWM)
Du musst Dich noch an diese Art von Programmierung gewöhnen! Die Verwendung von Interruptroutinen lässt Programme "im Hintergrund" laufen.

WENN Du eine interruptgetriebene Regelung hast, dann musst Du - um bei meinem obigen digialen Beispiel zu bleiben - die Linie beobachten und entsprechend dem Bit-Muster der Sensoren aus einer im Programm enthaltenen Tabelle zwei Sollwerte für Mot-li und Mot-re vorgeben.

Daneben laufen (bei mir) vier interruptgetriebene Routinen.

INT0 und ~1 wird aufgerufen, wenn der Encoder0 bzw. ~1 eine Unterbrechung meldet (weil der Motor eine Umdrehung gemacht hat). D.h. diese Routinen sind ereignisgesteuert. Die Routine stellt für den jeweiligen Motor den aktuellen Zeitwert fest und subtrahiert ihn von dem alten Zeitwert. Ergebnis: der Zeitbedarf für die Motorumdrehung.

Die Regelroutinen für Mot12 und Mot34 laufen zeitgesteuert durch einen entsprechenden Timer - bei mir im Takt von rund 400 Hz (das wird bei der Gesamtplanung eben in einem sinnvollen Raster festgelegt - und auch mit Rücksicht darauf, was grad verfügbar ist!). Diese Routinen gucken nach dem aktuellen Zeitbedarf und nach Deiner Vorgabe (wenn Du Drehzahlen ausgerechnet hast eben nach diesen). Dann wird entsprechend dem obenstehenden Bild verfahren - und "die Regelung" rechnet einen aktuellen PWM-Wert für den jeweiligen Motor aus.

Du - bzw. das sogenannte eigentliche Programm hat damit dann nichts mehr am Hut!

Wie Du das Ganze ohne Interrupts realisierst, steht im vorherigen Posting.

Ich glaube, dass wir das jetzt genug durchgehechelt haben. Wenn Du noch Fragen hast, dann arbeite mal den Abschnitt Regelungstechnik durch - siehe mein Link - und programmiere Dir so etwas. So im Trockenen ist es einfach - trocken.

Viel Glück und Adieu.