PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Linie Folgen



BlackDevil
02.08.2008, 18:26
Servus

Mich würde mal Interessieren wie man generell einer Linie folgt. Gehen wir mal von Zwei "Liniensensoren" aus die nebeneinander gepackt sind und genau die Breite einer "Norm-Linie" abdecken. Komm ich dann mit meinem Diagramm weiter? Würde eben Prüfen ob Sensorspannung_Lins>(<)Soll ist und entsprechend Reagieren...

http://img410.imageshack.us/img410/1158/linienfolgento6.th.jpg (http://img410.imageshack.us/my.php?image=linienfolgento6.jpg)

Das ist auch das erste Diagramm dieser Art, kA wie richtig oder falsch es ist ...

Grüße

BlackDevil
03.08.2008, 20:09
50 Leser und keiner Kritik?

Hubert.G
04.08.2008, 12:48
Was soll daran falsch sein?
Das Problem wird in der Ausführung liegen, wie schnell und intensiv die Reaktion auf die Abweichung ist.

BlackDevil
04.08.2008, 12:51
Ich frage mich nur ob die Überlegung generell richtig ist. Hab mich damit noch nicht befasst.

Was ich mich nur frage, ist was ist wenn der Streifen zu Schmal ist oder so breit ist, dass es eine große Abweichung geben muss damit die Messung schief geht - dann ist der geradeauslauf ja gefährdet.

Die Programmierung stell ich mir jetzt nicht so schwer vor. Man braucht ja nur die Spannung für Schwarz und die Referenzspannung zu wissen, den rest macht der Comparator (denke ich)

Hubert.G
04.08.2008, 13:25
Wenn der Streifen zu schmal oder zu breit ist musst du das im Programm berücksichtigen. Was ist wenn er den Streifen verliert weils ums Eck geht?
Der Comparator sagt nur ja oder nein, denken, wie du schon geschrieben hast, musst du und alle Eventualitäten einplanen.

BlackDevil
04.08.2008, 14:25
Das mit der Ecke ist genau das was ich noch überlege wie ich das Anstelle...

Ich steh noch ein wenig auf dem Schlauch, hab sowas noch nie Konzeptioniert

KiwiJoghurt
04.08.2008, 14:45
Also ich weiß nicht ob dir das hilft, aber hier mal die Programierung(Leider kann ich dir nicht helfen wie das nun genau angesteuert wird, aber ich glaube das hilft dir schon mal):

while(true)
{
if(sensor_links == schwarz) //wenn der linke sensor schwarz sieht, soll
{ // nach links geschwenkt werden
Motor_links.forward;
Motor_rechts.backward;
}

if(sensor_rechts == schwarz) //wenn der rechte sensor schwarz sieht,
{ // soll nach rechts geschwenkt werden
Motor_links.backward;
Motor_rechts.forward;
}

else
{
Motor_links.forward;
Motor_rechts.forward;
}
}

Wenn Beide Sensoren Schwarz sehen(zb. bei 90 Grad Kurven und enger)
soll er ein stück forfahren, und nach links und rechts schwänken um die Abzweigung zu finden.

Hubert.G
04.08.2008, 15:03
Noch einfacher wäre die Programmierung wenn es drei Sensoren gäbe. Der Mittlere würde am Streifen sein. Die anderen beiden würden die Abweichungen und auch die Ecken erkennen.

KiwiJoghurt
04.08.2008, 15:13
nein, das glaube ich nicht, den der Roboter meines Robocup Teams (wir nehmen seid drei Jahren am Rescue Wettbewerb teil) fährt auch mit zwei Sensoren neben der Linie, und wenn beide auf schwarz sind dreht er sich wie beschrieben, das klappt gut.

BlackDevil
04.08.2008, 15:15
Nur weis ich dann nicht was ich mit dem Mittleren machen soll - der ist ja im Prinzip Unnütz. Wenn der kein Schwarz mehr sieht und die anderen beiden keine Abweichung zu Schwarz stimmt was nciht ^^

KiwiJoghurt
04.08.2008, 15:17
Richtig, auch für uns war das reine Portverschwendung, wo wir doch nur 4 haben :)

Hubert.G
04.08.2008, 15:24
Solange die Linien gerade verlaufen ist der Mittlere nicht wichtig. Bei stärkeren Abweichungen kann man aber die Reaktionsgewschwindigkeit besser anpassen.

KiwiJoghurt
04.08.2008, 15:29
Meinst du, das man besser weiß, wie sehr das drehen not tut?
Also die Rektionsgeschwindigkeit, wozu soll man die denn einschätzen können? Wenn ein Sensor auf der Linie ist dreht man einfach bis ers nicht mehr ist, so mach ich das zumindest, aber ich kann mich auch irren was die Effektivität angeht ;)

BlackDevil
04.08.2008, 15:41
Oder 4 Sensoren ... im Dreieck - wenn der Linke halb weiß halb schwarz, der vordere weiß, der mittlere schwarze und der rechte schwarz abdeckt, muss der karren nach rechts schwenken. Wobei man da den Mittleren auch haken kann und die beiden einfach so nach ausen rücken muss das sie den Abstand haben als wenn der Mittlere drin wäre ... Der Mittlere hat ja eh immer Schwarz unter sich, wenn nicht melden das die anderen Sensoren...

Sollte man das jetzt über die Komparatoren machen oder über was anderes?

KiwiJoghurt
04.08.2008, 16:12
Willst du das nicht mit einem Controller machen? ansonsten fersteh ich deine Fragestellung nicht so ganz, mag aber an meiner mangelnden Kenntnis in Elektrotechnik liegen *Komparator googel*

oberallgeier
04.08.2008, 16:41
... Noch einfacher wäre die Programmierung wenn es drei Sensoren gäbe. ...
nein ... der Roboter meines ... Teams (wir nehmen seid drei Jahren am Rescue Wettbewerb teil) fährt auch mit zwei Sensoren ... das klappt gut.
Na ja, das Bessere ist des Guten Feind. Stell Dir vor, wie unnütz erst die fünf Sensoren auf dieser Scheibe sind.

http://www.youtube.com/watch?v=fl0CJhPiEfY

Blos - mit den fünf Sensoren ist diese Scheibe s..schnell - gell ?

fhs
04.08.2008, 16:46
Hi,

pretty much along the sames line(s) (pun intended): http://www.youtube.com/watch?v=mJV-KDqHgDQ

Viele Grüße

Fred

BlackDevil
04.08.2008, 16:48
... Noch einfacher wäre die Programmierung wenn es drei Sensoren gäbe. ...
nein ... der Roboter meines ... Teams (wir nehmen seid drei Jahren am Rescue Wettbewerb teil) fährt auch mit zwei Sensoren ... das klappt gut.
Na ja, das Bessere ist des Guten Feind. Stell Dir vor, wie unnütz erst die fünf Sensoren auf dieser Scheibe sind.

http://www.youtube.com/watch?v=fl0CJhPiEfY

Blos - mit den fünf Sensoren ist diese Scheibe s..schnell - gell ?

Die dinger sind krass. Die Sensoren gibts nur irgendwie nur auf Platinen zu 10€ zu kaufen :( Wobei man auch sagen muss das die 5 Sensoren verbaut haben, um eine gewisse Fläche abdecken zu können. Zudem sind die Sensoren sehr schnell (was man so liest).

Mich würde nur mal Interessieren wie der Algorithmus generell Funktioniert und zu Programmieren ist - ist mein erstes Projekt.

Und soweit ich Informiert bin hat der MEga32 Komparatoren Inside ...


Hmm über was könnte man sonst gehen als über die Komparatoren? Glaub nicht das die Sensoren wie im Video oder der CNY eine 1 für Schwarz und eine 0 für Weis ausgeben oder? Wäre ja nich so prickelnd bei einer Schwarzen kante auf Weißem Grund - welchen Zustand hat er dann?

fhs
04.08.2008, 17:16
Hi,

ist jetzt das 2. Mal, dass ich hier diesen Link (http://elm-chan.org/works/ltc/report.html) einstelle (er ist es aber durchaus wert, doppelt gepostet zu werden...) - dort findest Du einen Linienverfolgungsalgorithmus.

Viele Grüße

Fred

KiwiJoghurt
04.08.2008, 17:18
Er gibt eine Spannung aus, je nach dem, wie viel licht einstrahlt. Das hängt nun wieder damit zusammen, wie viel licht eine Farbe absorbiert. Schwarz zb. absorbiert das licht, es wird wenig Licht zurückgeworfen und die Spannung ist dem entsprechend klein. Genau das Gegenteil ist der Fall, wenn Licht auf eine weiße Oberfläche fällt. Fast alles wird reflektiert und der Lichtsensor hat viel Einstrahlung. Dann ist auch die Spannung hoch. Also: je höher die Spannung, desto heller ist die Oberfläche. Den lichtsensor klemmste dann einfach an einen Analogen Port deines Controllers an und liest den Wert aus. das sins 10 bit. Das entspricht im Dezimalsystem 0-1023. Also 0 = 0V und 1023 = 5V. und alles dazwischen sind dann die Farben zwischen Schwarz und Weiß. soweit klar? (hoffe ich hab keinen Mist geschrieben)

oberallgeier
04.08.2008, 17:47
Hi Fred,


... das 2. Mal, dass ich hier diesen Link einstelle (er ist es aber durchaus wert, doppelt gepostet zu werden...) ...
Den ersten LInk hatte ich mal gesehen und dann gesucht und gesucht . . . . . Das ist ja das ultimative Ding. Zwar Assembler (hatte ich letztes Jahr etliche hundert Zeilen geschrieben) - aber die Grafiken zeigen ja, wo´s lang geht. Und die Motoren sind wohl die von den Servos, oder? Zumindest sehen die aus meinen Servos so aus:

............................https://dl.dropbox.com/s/5llnwlgft2r7s4x/hserv-mm_von_u_1439.jpg?dl=0
Leider kenne ich die Sensoren nicht, die auf dieser Briefmarke verbaut wurden. Die würden mich sehr interessieren, nach denen suche ich auch. Übrigens ist dieses Rennplättchen schon wegen des minimalistischen Schaltungsaufwandes bewundernswert.

Hast Du so etwas gebaut?

BlackDevil
04.08.2008, 18:38
Der link ist mir oben nicht aufgefallen, ich kenne ihn aber und wollte ihn schon vor längerem mal lesen. Das werde ich dann jetzt tun.

Liege ich eigentlich Prinzipiell richtig mit meiner überlegung?

fhs
04.08.2008, 19:55
Hallo Joe und BlackDevil,

gebaut habe ich so etwas noch nicht, habe es aber vor. Im Prinzip will ich nur den mechanischen Aufbau grob übernehmen und den Rest (Sensoren und Software) selbst machen; plane auch eine H-Brücke für jeden Motor, damit das Teil auf der Stelle rotieren und rückwärts fahren kann. Anstelle der Sensoren kann man sicher SMD-LEDs in Kombination mit SMD-Fototransistoren (evtl. die im schwarzen Gehäuse, die bevorzugt IR durchlassen) nehmen (muss eigentlich nicht mal SMD sein, obwohl ich das bevorzuge). Als Motoren Handy-Vibrationsmotoren (z.B. bei Pollin zu bekommen). Ich habe hier (http://78514.homepagemodules.de/t1139f69-Gewicht-von-Vibrationsmotor-entfernen.html) mal einen Link zu Methoden zum Entfernen der Unwucht von diesen Motoren gepostet und dort auch ein Bild von meiner Methode eingestellt (modifizierter Ritzelabzieher). Motor-Durchmesser: ca. 6mm.

Ein PD-Algorithmus sollte (wie bei dem zitierten Mini-Linienverfolger aus Japan) optimal sein.

Viele Grüße

Fred

BlackDevil
04.08.2008, 20:48
PD oder PID Algorithmus sagt mir relativ wenig aber der scheint zum Regeln des Kreises (ist ja ein Regelkreis) ziemlich gut zu sein. http://de.wikipedia.org/wiki/Regler#PID-Regler auser dem finde ich nichts und ich steh ein wenig auf dem Schlauch wie ich das Programmieren soll.

Das Assembler File habe ich mir mal angesehen aber da versteh ich nur Bahnhof ^^

fhs
04.08.2008, 20:59
Hi,
Microchip hat hier (http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=1824&appnote=en021807) eine komplette C-Software für einen PID-Regler (natürlich für einen PIC) publiziert; es gibt noch viele ander Beispiele im Netz, z.B. dieses gute Tutorial (http://www.embedded.com/2000/0010/0010feat3.htm).

Viele Grüße

Fred

oberallgeier
04.08.2008, 22:30
PD oder PID Algorithmus sagt mir relativ wenig ... Dann guck Dir das mal an. (https://www.roboternetz.de/wissen/index.php/Regelungstechnik) Ich hatte mir mit dieser Hilfe (https://www.roboternetz.de/wissen/index.php/Regelungstechnik#Realisierung_mit_digitalem_Regler ) einen Regler gebaut, der zwei ziemlich ungleiche Motoren - Zeitkonstanten 12 und 8 ms - prächtig gleich laufen lässt. Und das ohne floating point - aber in einem genauen 100 Hz Takt.


... Das Assembler File ... da versteh ich nur Bahnhof ...Na ja, geht mir auch so :)

BlackDevil
05.08.2008, 08:44
Ich freu mich auf Regelungstechnik im vierten Semester, im moment ist das doch sehr sehr harter Tobak *g* Aber ich schaus mir mal an - ansonsten wird das erste Projekt eben nicht direkt ein Linienfolger *g*


Edit: Ich muss zugeben ich versteh die PID Regelung nicht ganz. Ich gebe zu das es Sinn macht und ich es Brockenweise Verstehen kann - aber der C Code geht mir überhaupt nicht in die Rübe .... Alles etwas too much. Ich denke der einfachste weg - den ich einschalgen wollte - ist fürs erste der beste. Wobei ich da auch auf den Schlauch stehe weil ich mit 2 Sensoren kein Schönes Ergebnis erziele und mit 3en schon wieder sehr Kompliziert fahre ....

Als erstes Projekt mit 0 Ahnung von Regelungstechnik ist das viellicht doch nicht geeignet ...

Edit:
http://www.robotmaker.de/bilder/linie/liniensensor2.jpg

Das ist doch sowas wie ich es im Prinzip gesucht habe: Linie da - Linie nicht da. Jetzt bleibt nur die Frage: Was ist wenn die Linie halb da ist? Ich denke ich bau den Spaß einfach mal auf und schau was passiert. Ansonsten kann man damit mit 3 Sensoren alles abdecken denke ich und es ist einfacher als ein Dynamisches Regelgungssystem :)

oberallgeier
05.08.2008, 10:24
Hi, BlackDevil,


Ich freu mich auf Regelungstechnik im vierten Semester ...Du freust Dich? ? ? Bist ein Masochist, oder ? Ich war irgendwie in die Klausurausgabe RT hineingeraten (wollte garnicht hin... 4Loch reichte mir völlig - siehe unten) "Ach SIE sind das. . .!" (...sagte der Assi. Da hatte ich dämlich geguckt) "Na ja, von 46 bearbeiteten Punkten sind 45 richtig - und sogar DIESE Aufgabe, die fast alle falsch haben! Warum haben sie nicht mehr Punkte bearbeitet?" Antwort: "Ach wissen sie - eine Woche Winterpiste ist mir lieber als ne 1 Loch in Regelungstechnik". Nun hatte ER dämlich geguckt :).


... im moment ist das doch sehr sehr harter Tobak *g* Aber ich schaus mir mal an ...Tu das. Bitte. Es ist wirklich soooo easy - - wenn man es mal glaubt, dass es nicht schwer ist. Ich hatte mir dazu ein paar Notizen in den Ausdruck gemacht (um es besser zu verstehen):

.............................https://dl.dropbox.com/s/3i26qdd3b7w3ovb/regel-notiz.jpg?dl=0
Dann hatte ich auch mal die Sprungantwort gemessen.

.............................https://dl.dropbox.com/s/rg2rbfh8p3sb5mx/sprungantwort.jpg?dl=0

Einfach Motoren auf einen bestimmten Wert stellen, und Deine Geschwindigkeitsangaben so schnell festhalten, wie es nur geht. Danach ausgeben über die RS232 (dazu hat man die in der Entwicklungsphase) und z.B. Export nach Excel. Die Tangente an den Kurvenbeginn schneidet den maximalen Geschwindigkeitswert => daraus die Zeitkonstante ablesen. Die (maximale) Geschwindigkeit im Verhältnis zum Ansteuerwert gibt die Reglerverstärkung. <<== Diese Erklärungen sind hier stark vereinfacht :), lies dazu das Tutorial.

Was kommt heraus? Dieser Code:
/* ================================================== ============================ */
/* === Regelungsroutine für Motor 12 ========================================== */
/* Die gemessene Zeitdifferenz Iz_diff0 zwischen zwei Encodersignalen
aus extINT0 wird zur Regelung verwendet */
void rgl_mo_12(void) // Regelung für Motor 12
{
if (stupsi12 <= 5) // Soll überhaupt gefahren werden?
{
OCR0A = 0; // Wenn nicht, dann PWM auf Null
return;
}

tupsi12 = Iz_diff0; // Übernahme Iz-Wert in Regelung
ndrz12 = stupsi12; // Sollwert Drehzahl
if ( tupsi12 > 100 ) { tupsi12 = 100; } // Eingrenzen Encoderwert=Fehler abfangen
idrz12 = 1000 / tupsi12; // Istwert Drehzahl
ie_mot12 = ndrz12 - idrz12; // Vergleich => Regelabweichung
iesum12 = iesum12 + ie_mot12;
if (iesum12 < -10) { iesum12 = -10;}
if (iesum12 > 500) { iesum12 = 500;}
iy12 = iesum12/2;
iy12 = iy12 + ie_mot12 + ie_mot12 + ie_mot12 + ie_mot12 + ie_mot12;
// Diese Rechenoperation benötigt in float 0,20 bis 0,25 ms!
// daher wird hier alles integer gerechnet
if ( iy12 < 0 ) { iy12 = 0;} // PWM-Minimum abfangen
if ( iy12 > 255 ) { iy12 = 255;} // und Maximum

OCR0A = iy12; // Ansteuerung der PWM direkt
return;
}
/* ================================================== ============================ */
Und damit läuft mein Miniroboter. (https://www.roboternetz.de/phpBB2/zeigebeitrag.php?p=388981#388981) Und jetzt sag noch mal, dass das schwer sei. Wirklich nicht (ok, ich hatte viele Tage für diese Erkenntnis gebraucht ;-).


... weil ich mit 2 Sensoren kein Schönes Ergebnis erziele und mit 3en schon wieder sehr Kompliziert fahre ... Ich hatte doch gesagt: fünf ist recht gut :).

So - nun noch etwas zur Entspannung. Soweit ich die Linienspezialisten verstanden habe, braucht ein Linienfolger keine Geschwindigkeitsregelung nach obigem Muster. Der wird auf die Abweichung von der Linie geregelt. Daher ändert sich schon ein bisschen was . . .

Trotz allem viel Glück und Erfolg

Nachtrag: Habe grad Dein Posting gesehen:

... Ich denke ich bau den Spaß einfach mal auf und schau was passiert. ...So findest Du Dich sicher gut rein. So ähnlich hatte ich vor ein paar Monaten auch angefangen.

BlackDevil
05.08.2008, 11:08
Mein Problem ist derzeit zu verstehen was die Störgröße ist, wie die Berechnung Schlussendlich abläuft und wie ich 3 oder mehr Sensoren in die Regelstrcke unterbring, hier ist eigentlich immer die Rede von einem. Oder Summier ich die auf?

Ein Teil meines Ichs freut sich auf Regelungstechnik, weil es Interessant ist und vieles ermöglicht und mein Täglich Brot werden wird, ein anderer teil scheut davor weil es das erste Neue und richtig Schwere sein wird ...


https://www.roboternetz.de/wissen/index.php/Regelungstechnik#Realisierung_mit_digitalem_Regler

Das heißt ich gebe einen Wert w vor - welcher das ist weis ich nicht - und Bilde die Abweichung mit meinem Analogen Spannungssignal x von meinem Sensor

Danach geh ich einfach den PID Algorithmus durch, also Begrenzen, Differenzieren und Integrieren, Beschränke das ganze noch auf 8 Bit und freue mich meines PWM Signals im 8Bit Format.

Richtig verstanden?

oberallgeier
05.08.2008, 12:19
Mein Problem ist derzeit zu verstehen was die Störgröße ist ...
... Dann guck Dir das mal an. (https://www.roboternetz.de/wissen/index.php/Regelungstechnik) ...... und das war ernst gemeint.

Mein Browser (IE7) hat eine pfiffige Funktion: [Strg]-[f] - dann kommt ein lustiges Popup - da schreibste (wenn Du Dich endlich mal über den oben genannten Link bequemt hast) "Störgrö" rein, drückst auf [Weiter] und dann - ei guckk emol do - "Störgröße z: Eine von außen wirkende Größe, die eine Änderung des Istwertes der Regelgröße bewirkt und einen Regelvorgang auslöst. " - - - übrigens lohnt es, den Button [Weiter] weiter zu drücken - da kommt noch mehr :). Das will auch gelesen sein.


... wie ich 3 oder mehr Sensoren in die Regelstrcke unterbring, hier ist eigentlich immer die Rede von einem. Oder Summier ich die auf? ...Natürlich regelt ein Regler nur immer ein Objekt. Nix aufsummieren. Oder summierst Du beim Gehen die Schiefstellung beider Füße auf um einen Fuß richtig zu kriegen?

Du machst abhängig von den Sensoren unterschiediche Aktionen. Nehmen wir an, Du hast die Sensoren l (links), m (mitte) und r (na was wohl). Die sind in dieser Reihenfolge ausgewertet: l m r als digitaler Wert "Sensor sieht Linie = 1" und "Sensor sieht keine Linie = 0".

001 . . also die Linie ist rechts -> entweder ist ein rechter Bogen zu fahren oder das Followline driftet links ab. Fazit: rechts Tempovorgabe verringern.

010 . . die Linie ist mittig. Alles ok. Fazit: Gib Gummi! Gib Gummi! Gib Gummi!

100 . . dies ist eine Übungsaufgabe. Löse sie selber.

Uuuuups - wirste sagen. Wo ist jetzt die Regelung, da hier nur Tempovorgabe steht? Die Regelung hat die Aufgabe, die vorgegebenen Geschwindigkeiten einzuhalten. ABER: setzt Dich in Dein Auto und gib 400 kmh vor. Wird problematisch. Fazit: die Tempovorgabe muss sinnvoll und erreichbar sein. Sinnvoll: daher wird beispielswese bei Sensorstatus 001 das Tempo rechts verringert - weil durch die Kurve nicht soooo schnell gefahren werden soll.

Das ist doch verständlich, oder?


... Das heißt ich gebe einen Wert w vor - welcher das ist weis ich nicht - und Bilde die Abweichung mit meinem Analogen Spannungssignal x von meinem Sensor... Genau. W, die Führungsgröße, ist die zu fahrende Sollgeschwindigkeit (hast Du denn wenigstens meinen Code gelesen?). Aus dem analogen Spannungssignal wär es sinnvoll einen Wert für eine Ist-Geschwindigkeit abzuleiten (hast Du denn wenigstens meinen Code gelesen?). Sonst musst Du vorher aus Deiner Sollgeschwindigkeit einen Sollwert für Dein Spannungssignal ausrechnen: Du darfst ja nicht Äpfel mit Birnen vergleichen.


... Danach geh ich einfach den PID Algorithmus durch, also Begrenzen, Differenzieren und Integrieren, Beschränke das ganze noch auf 8 Bit und freue mich meines PWM Signals im 8Bit Format.
Richtig verstanden?
So einigermassen. Blos mit den Leseempfehlungen hapert es.

BlackDevil
05.08.2008, 12:53
Deinen Code habe ich gelesen, ich werde nur nicht ganz schlau draus. Das "Regelungstechnik" habe ich nicht ganz gelesen, nur den Link den ich dann auch gepostet habe.

Was du geschrieben hast wurde mir inzwischen auch klar - macht ja auch sinn.

Ich hätte jetzt gesagt: (Angenommen die Sensoren sind so angebracht das die Mitte immer über eine LInie ist, Links und Rechts gerade so nicht über einer LInie sind, y ist Stellgröße l-Sensor, x ist Stellgröße r-sensor)
lmr
000 > Bleib stehen, da stimmt was nich
010 > Allet klar, gerade aus marsch marsch
011 > Linksdrift, mehr nach rechts korrigieren (mit der Stellgröße x)
110 > Polizei! Nein: Rechtsdrift, mit y korrigieren
111 > Geht nicht ^^

Wobei ich bei 011 und 110 Prüfen würde ob der Zustand zB 2ms bleibt - dann soll er nach Links/Rechts Schwenken und Geradeaus fahren (Links-/Rechtsknick).

oberallgeier
05.08.2008, 13:42
Hallo Sportsfreund,

es wird jetzt notwendig, dass ich Dir sage, dass meine Linienverfolgungstheorie noch nicht durch eigene Erfahrung belegt ist (bis auf ein paar wenige Experimente mit dem asuro).

Aber - doch, Du hast es doch ziemlich verstanden!

Deinen Code habe ich gelesen, ich werde nur nicht ganz schlau draus. Das "Regelungstechnik" habe ich nicht ganz gelesen ...Für mein Selbstbewusstsein wär es hilfreich, wenn Du den code wenigstens nach der Lektüre der RN-Regelungs-Tutorials verstehst.


... Was du geschrieben hast wurde mir inzwischen auch klar - macht ja auch sinn ...Schön, danke.


... y ist Stellgröße l-Sensor, x ist Stellgröße r-sensor)NEIN, NEIN, NEIN. "l", "m" und "r" sind Sensorwerte - keine Stellgrössen.


Stellgröße y: Ausgangsgröße der Regeleinrichtung und zugleich Eingangsgröße der Strecke. Sie überträgt die steuernde Wirkung des Reglers auf die Strecke. Die Stellgröße ist der Wert, mit dem die P WM für die Motoren eingestellt wird, im obigen Code der Wert iy12, der in OCR0A geschrieben wird. Schau doch mal oben in meine handschriftlich verunzierte Skizze. Diese Größe wird vom "Regler" errechnet, das ist das, was in meinem code von "iesum12 = iesum12 + ie_mot12" bis "// daher wird hier alles integer gerechnet" steht. Dieser Code gilt nur für einen Motor (hier den rechten), der linke hat fast den gleichen code, natürlich mit anderen Indizes für die verschiedenen Werte.

Die Vorgabe der beiden Antriebsräder wird durch die "lmr"-Information gesteuert. Das ist keine Regelung mehr! ! ! !


lmr
000 > Bleib stehen, da stimmt was nich
010 > Allet klar, gerade aus marsch marsch
011 > Linksdrift, mehr nach rechts korrigieren (mit der Stellgröße x)
110 > Polizei! Nein: Rechtsdrift, mit y korrigieren
111 > Geht nicht ^^
000 > Doch das geht. Beispielsweise, wenn das Followline von der Piste total weg ist. Hier wäre es hilfreich zu wissen, nach welcher Seite das Ding wegfuhr - und das musst Du Dir merken (das Teil muss es sich merken) um wieder zur Linie zurück zu finden . . . . . eine hübsche Aufgabe für "später", wenn das Teil wenigstens halbwegs vernünftig der Linie folgt. Also zweite Ausbaustufe!
010 > genau - Gummi! Gummi! Gummi!
011 > na ja, bei einer breiteren Fahrlinie kommt das vor. Stimmt - Linksdrift.
110 > wie eben, aber für Rechtsdrift.
111 > Followline steht quer auf der Linie (z.B. vom Wiedereinfahren nach dem Verlassen, siehe oben) - und muss irgendwie zurück. Eine hübsche Aufgabe für "später".
001 und 100 ist ja klar!?!?!??


... Wobei ich bei 011 und 110 Prüfen würde ob der Zustand zB 2ms bleibt - dann soll er nach Links/Rechts Schwenken und Geradeaus fahren (Links-/Rechtsknick). 2 ms? Kommt darauf an, wie schnell das Teil fahren soll. Aber 2 ms ist ein guter Wert. Mein kleiner Roboter fährt 60..80 mm/s und wird alle 10 ms geregelt. Wie gesagt, 011 und 110 sind für breite Linien - oder für enge Sensorabstände. Das ist sozusagen der Übergang von 010 nach 001 - und eine Auskunft darüber, dass Du mal entsprechend gegensteuern sollst. Bei 001 bzw. 100 wird dann voll gegen gesteuert.

Steuerung: Du gibst für den linken oder den rechten Motor (verschiedenen) Sollgeschwindigkeiten vor (oder Drehzahlen oder so). Die Steuerung ist meist eine Routine die eher im main bzw. in dort aufgerufenen Routinen läuft.

Regelung: Die erzielte Motorgeschwindigkeit (Rad-Ist-Geschwindigkeit oder Motordrehzahl - ein ISTwert) wird so lange "nachgeregelt" durch den Regelalgorithmus, bis die Abweichung vom Sollwert möglichst Null ist. Die Regelung läuft am Besten natürlich in einer Interruptroutine, dann stimmt das Zeitraster!

BlackDevil
05.08.2008, 17:56
Wir sind uns schon relativ einig - ich denke wir meinen das gleiche.

Mir ist die Zuweisung der Stellgröße zum PWM erst spät aufgefallen - sorry - das macht einiges klarer.

Mit lmr mein ich die Sensoren - y ist der Errechnete Stellwert für den Linken Motor der aus l-Sensor Wert berechnet wird, x entsprechend.

Ich denke mir zwei, da ich ja zwei Motoren habe. Driftet es nach Rechts ab muss Links nachgeregelt werden, driftet der Spaß nach Links ab entsprechend.

So dachte ich ...

oberallgeier
05.08.2008, 18:45
Wir sind uns schon relativ einig ...Hoffentlich stimmen wir dann mit den Grundlagen der IT und denen der Physik überein. Sonst gibts Murks.


... da ich ja zwei Motoren habe. Driftet es nach Rechts ab muss Links nachgeregelt werden, driftet der Spaß nach Links ab entsprechend ...
Vorsicht!!! Ich glaube ich habe das falsch dargestellt. Ich spreche eigentlich von zwei Regelkreisen: Geschwindigkeit und Lage.

Geschwindigkeit: Nachgeregelt wird nur die Abweichung der Ist-Geschwindigkeit von der Sollgeschwindigkeit - jeweils völlig getrennt und unabhängig für jeden Motor. Die Geschwindigkeitssollwerte - Führungsgröße - werden vorgegeben.

Lage: Nachgeregelt wird die jeweilige Abweichung der Sensoren von der vorgegebenen Linie durch entsprechende Vorgabe von sinnvollen Geschwindigkeitssollwerten für die beiden Motore.

Diese Kopplung der beiden Regelkreise sollte nicht verwirren. Die Ausgangsgröße der Lageregelung ist (auch) die Eingangsgröße der Geschwindigkeitsregelung. Für die Lageabweichung ist sicher ein separater Regelalgorithmus sinnvoll, möglicherweise gibt es aber eine Regelung "über alles" - das weiß ich nicht. Das hatte ich mir nie zurechtgelegt, weil ich das Problem noch nie hatte. Daher kann ich dazu jetzt nichts sagen.

Allerdings habe ich den Eindruck, dass manche Leute von dem Ergebnis der Sensoren direkt auf die Motor-PWM gehen. Ohne dass sie sich um die tatsächliche Drehzahl der Motoren kümmern. Das sind Feinheiten die ich nicht kenne.

BlackDevil
05.08.2008, 20:11
Ich hätte jetzt gesagt:
Motor(100,100) -> 010 > Vollgas vorraus
Motor(100,y) -> 110 > nach links driften, also rechts etwas die geschwindigkeit verringern

Aber ich dachte mir schon das ich da falsch liege :)

BlackDevil
06.08.2008, 19:52
Niemand mehr?----

Hubert.G
07.08.2008, 08:37
Wenn du die Geschwindigkeit so wählst das du auf jeden Fall alle Kurven schaffst, dann ist das richtig. Wenn du aber die Geschwindigkeit optimierst, dann bist du in den Kurven und Ecken zu schnell und musst entsprechend reagieren.

BlackDevil
07.08.2008, 09:09
Meine Überlegung war ja mit der Abweichung der Linie den Sollwert des Entsprechenden Rades so zu Korrigieren das es Langsamer läuft und ich damit in die andere Richtung gegensteuer ...


edit:
https://www.roboternetz.de/phpBB2/viewtopic.php?p=262761#262761

Wenn ich das richtig sehe wird das hier doch genauso gemacht, oder?

BlackDevil
12.08.2008, 11:10
Und? Was nutzt mir nun der y wert in hinblick auf die beiden Motoren? 100% PWM Speed auf die Motoren, dann kommt ein links Knick => Ich muss den Motor links langsamer und den Motor rechts genauso schnell laufen lassen und voilá ich fahr ums eck...

Hubert.G
12.08.2008, 12:14
Solange du nur so schnell bist das du ums Eck kommst, ist das richtig. Das habe ich im meinem letzten Beitrag schon geschrieben. Du hast aber dann auf der Geraden auch nur die max. Kurfengeschwindigkeit. Ab einer gewissen Geschwindigkeit sollte man die Trägheit nicht ausser Acht lassen.

oberallgeier
12.08.2008, 12:19
Hallo Sportsfreund,


Und? Was nutzt mir nun der y wert in hinblick auf die beiden Motoren? ...Also um es mal ätzend trocken zu sagen: im Hinblick auf beide Motoren nutzt es nix.

Sieh Dir bitte (noch mal) das Bild oben an (https://www.roboternetz.de/phpBB2/zeigebeitrag.php?p=389526#389526) (ich will nicht den Thread mit ein und demselbem Bild zumüllen). Dieses Bild gilt nur für einen Motor. Und "das y" ist eben - nur für einen Motor. Der Regler sorgt dafür, dass die von Dir vorgegebene Geschwindigkeit dieses einen Motors eingehalten wird, egal ob der Motor ne schlechte Tagesform hat (Reibung u.ä.), ob der Untergrund "schlechter läuft" und ob die Versorgungsspannung höher oder niedriger ist (in Grenzen). Ein "y" für einen Motor. Deshalb habe ich auch eine erweiterte Bezeichnung, schau mal in meinen Code. Dort gibt es das "iy12" - das ist für den Motor 12, für den Motor 34 habe ich ein anderes y, das heisst dann iy34 - klar!. 12 bzw. 34 heißt das bei mir wegen des Motorcontrollers - das regelt eben z.B. die Ausgänge 12 des Controllers. Der Buchstabe i ist für mich eine Kennung dafür, dass das ein ganzzahliger Wert (integer) ist.


... dann kommt ein links Knick ...Dann musst Du den entsprechenden Vorgabewert ändern. Schau bitte wieder ins Bild: dort ist das die Führungsgrösse "w" bzw. der Sollwert. Du änderst für den entstprechenden Motor, also nur für einen, die Vorgabe: entweder langsamer oder schneller, je nach Deiner Systemplanung. Bei mir heisst der Vorgabewert stupsi12 - Soll Timer Units Per Sensor Interrupt 12 - weil die Anzahl der timer units von einem Interrupt des Encoders bis zum nächsten ein Mass für die Motordrehzahl ist: je weniger timer units desto schneller dreht sich der Motor. Bei mir ist eine dieser Zeiteinheiten 50 µs lang. Sie wird sehr präzise in einer gesonderten ISR (Interrupt Service Routine) bereitgestellt.

Und ich kümmere mich nur um die Vorgabe - der Regler kümmert sich darum, dass der Motor diese Vorgabe erfüllt. Natürlich gibt es für jeden Motor eine gesonderte Regelungsroutine. Die laufen bei mir zwar im gleichen Rhythmus, aber zu unterschiedlichen Zeiten, sprich versetzt. Das liegt daran, dass ich diese Interuptroutinen sehr kurz halte, damit ich keine Schwierigkeiten mit anderen ISR bekomme. Aber das ist ein anderes Thema :).

Ist das so klarer?

BlackDevil
12.08.2008, 13:45
Hey

Da sind doch direkt ein paar unklarheiten aufgetaucht und gelöst worden:
1. Habe ich deinen Code aufgrund der Variablennamen nicht richtig Verstanden
2. Habe ich die ganze Zeit den Code von seiner "Funktion" her misverstanden, ich dachte der sei ebenfalls zum Linienfolgen, aber er regelt lediglich einen Motor - das dieser IMMER die gleiche Geschwindigkeit fährt.
3. Wenn ich stupsi12/34 durch meinen Sensorwert ersetze, habe ich rein vom Prinzip her meinen Linienfolger, seh ich das richtig? Denn immer wenn mein Wert abweicht wird gegen geregelt. Nee irgendwie finde ich noch nich so ganz den Draht zwischen "Motor rechts langsamer drehen wenn eine Linkskurve kommt" und dem w bzw Sensorwert :(

Grüße

oberallgeier
12.08.2008, 16:26
... 1. Habe ich deinen Code aufgrund der Variablennamen nicht richtig Verstanden ...Das liegt an mir, sorry, oder daran, dass Regelungstechnik nicht allzu einfach ist.


... 2. Habe ich die ganze Zeit den Code von seiner "Funktion" her misverstanden, ich dachte der sei ebenfalls zum Linienfolgen ...Hmmm, ich hatte über Regelung aber nur deshalb geschrieben, weil

PD oder PID Algorithmus sagt mir relativ wenig aber der scheint zum Regeln ... gut zu sein ... Macht ja nix. Jetzt scheint es Dir ja klar zu sein, dass Regelung der Geschwindigkeit und Linienfolgen nicht ein und dasselbe Ding sind.


... aber er regelt lediglich einen Motor - das dieser IMMER die gleiche Geschwindigkeit fährt.Jein. "Der Code" oder besser gesagt "die Regelung" führt dazu, dass der Motor eine vorgegebene Drehzahl einhält. Die kann ich zu beliebigen Zeiten variieren. Korrekt müsste es also heissen: "... dass dieser IMMER die vorgegeben Geschwindigkeit einhält..."

(Nicht zum Lesen gedacht: Dies gilt nur im Rahmen der Betriebsgrenzen und der Zulässigkeit der Vorgaben. Wird eine zu hohe oder eine zu niedrige Geschwindigkeit vorgegeben, bekommt der Motor auch mit "Regelungscode" Probleme. Klar. Wer mit dem Auto oder Moped halbes Schritttempo fahren möchte, muss die Kupplung schleifen lassen, da reicht es nicht, das Gas wegzunehmen - dies ist nur ein ungefähres Beispiel, weil die Regelung hier vom Fahrer her gemacht wird - der kennt die Vorgabe und regelt mit Gasgeben die Geschwindigkeit.)

Es kann aber auch eine genügend langsame Geschwindigkeit vorgegeben werden und trotzdem funktioniert es nicht - weil z.B. die Steigung zu gross ist oder die Spannung des Akkus zu niedrig usf.

Stimmen aber die Betriebsgrenzen, dann kannst Du Dich darauf verlassen, dass Deine Vorgaben eingehalten werden. Genau dafür - und nur dafür - sorgt der Regelalgorithmus. Und warum soll das nützlich sein? Weil so die Bewegung doch "berechenbarer" wird. Ich weiß zum Beispiel, dass bei einer bestimmten Vorgabe (meines) "stupsi"-Wertes mein Gefährt eben 50 mm/sec fährt und nicht 51, 52 oder 49 und bei einem anderen Wert entsprechend anders. UND es fährt auch jedes einzelne Rad entsprechend gleich wie das andere => das Gefährt fährt bolzengeradeaus ! ! ! >>> Und ich musst mich dabei nicht darum kümmern, welchen genauen PWM-Wert ich für jeden einzelnen der beiden Motoren benötige - das macht der Regler "von alleine". Warum? Eben wegen dieser Regelungsschleife in der genannten Skizze oben. <<<


... 3. Wenn ich stupsi12/34 durch meinen Sensorwert ersetze, habe ich rein vom Prinzip her meinen Linienfolger, seh ich das richtig? ...Na ja, ich wills nicht zu sehr ausbreiten aber wir müssen jetzt schonc mal unterscheiden.

A) Du braucht zum Linienfolgen keine Regelung wie oben beschrieben. Wie gesagt - die kam ins Spiel wegen Deiner Aussage . . . siehe oben. Es ist sicher möglich, die beiden Motoren (die PWM´s für den Motorcontroller) direkt aufgrund der Abweichungen vom "Soll" anzusteuern. Dies könnte so ungefähr wie folgt aussehen:

. Sensor .| PWM |PWM
. 1 bis 5 .| links |rechts
0 0 1 0 0 | 120 | 120 . . . . . . . Gib Gummi, gib Gummi . . . .
0 1 1 0 0 | 110 | 120 . . . . . . . Fahrzeug weicht leicht rechts ab oder Kurve li beginnt, li Motor langsamer als re => zieht nach links
0 1 0 0 0 | 080 | 100 . . . . . . . Stärkere Abweichung re od. Kurve links , insgesamt langsamer und linker Motor langsamer als rechts
1 1 0 0 0 | 070 | 100 . . . . . . . Aktion oben reichte nicht, links noch langsamer
1 0 0 0 0 | 060 | 100 . . . . . . . Aktion oben reichte nicht, links noch langsamer
...
0 0 0 1 1 | 100 | 070 . . . . . . . sinngemäß wie oben, aber Rechtskurve
...
Dies ist aber, genaugenommen, auch eine Regelung, denn es wird mit Rücksicht auf die Größe der Abweichung immer stärker gegengesteuert. Aber dies ist eben kein konventioneller Regler (der wäre hier auch möglich, aber dann müsste ich ein paar Stunden drüberhocken - und es ist ja Dein Problem).

B) Du kannst die oben genannten PWM-Werte durch konkrete Geschwindigkeitsvorgaben od. ä. (z.B. wie meine stupsi12/~34 - Werte) ersetzen. Dann werden eben die Vorgaben genauer befolgt. Und wozu soll das jetzt gut sein? Du könntest durch entsprechende Geschwindigkeitswerte (Vorgaben ähnlich wie oben für die li/re PWM) einfach ausrechnen, welche Geschwindigkeit Du für die beiden Räder bei welchem Kurvenradius vorgeben musst. Damit könntest Du vielleicht bei einem vorgegebenen Parcours sicherer auf die Abweichungen reagieren. Ein wesentlicher Vorteil, besonders bei langen Geraden wird es sein, dass das Gefährt besser geradeausfährt - weil eben die Geschwindigkeit der Räder geregelt wird - und der Regler - siehe oben - ohne mein Zutun die erforderlichen PWM-Werte ausrechnet. Dies ist im Beispiel A) nicht der Fall ! ! !


Ich vermute, dass ich in so einem Fall aber eher die erste Variante nehmen würde - ohne Regelung der Motordrehzahl oder -Geschwindigkeit mit einem der PD- oder PID-Algorithmus. Wenns so funktioniert - - - - -


... Denn immer wenn mein Wert abweicht wird gegen geregelt. Nee irgendwie finde ich noch nich so ganz den Draht zwischen "Motor rechts langsamer drehen wenn eine Linkskurve kommt" und dem w bzw Sensorwert ...Da hast Du das richtige Gespür! Du musst bei der "Regelung" entsprechend der Abweichung vom Sensormuster, siehe oben, den Sollwert w einstellen. Du musst also den Werte w vorgeben. Getrennt für jeden Motor! Ähnlich wie die obere PWM-Liste.

Ich hoffe, dass dies jetzt verständlicher ist.

BlackDevil
12.08.2008, 17:44
Aaaaaaaaaaaaaaaaaaaaah jetzt ist der Groschen gefallen! Aber nicht in den Gulli ;)

Wir haben die ganze Zeit ein wenig aneinander vorbeigeredet, ein wenig zumindest, und ich hatte einen Denkfehler.

Der Übergang zwischen Linie und keine Linie ist - logischerweise wie ic hfinde, nicht fliesend, sondern "abrupt", mehr oder weniger.

Dann dachte ich die ganze Zeit schon - wozu den Regelalgo. wenn es auch mit 1en und 0en geht.

Das heist: Ich leg mir eine art Tabelle zurecht in der ich die w-Sollwerte vorgebe. Gerade aus, leichte Abweichung, Starke Abweichung, Verfluchte Abweichung, Apokalypsische Abweichung und entsprechend mit der Vorgabe die PID-Algorithmen für die Motoren Füttern.

So hätte ich das die ganze Zeit auch gemacht, nur hatte ich die Diskussion die ganze Zeit so verstanden, dass der Algo. dafür gedacht ist, dass ich der Linie folge und nicht einfach nur die Geschwindigkeitsvorgabe einhalte.

Das heist:
- Linie "messen" und "Digitalisieren
- 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)

oberallgeier
12.08.2008, 18:22
Hi, BlackDevil


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


... Der Übergang zwischen Linie und keine Linie ist - logischerweise wie ic hfinde, nicht fliesend, sondern "abrupt", mehr oder weniger ...
- Linie "messen" und "DigitalisierenDie 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!


... 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.

BlackDevil
12.08.2008, 21:10
Ach Diskussionen sin doch Super. Wir haben nur aneinander vorbeigeredet.

Ich werd mir jetz die Tage einfach mal Sensoren und kram kaufen und versuchen ins Studi Labor zu kommen und Testen.

Danke soweit

BlackDevil
14.08.2008, 13:32
Ich hab mal was kleines in C++ geschrieben um den Spaß zu Simulieren und zu versuchen es zu versthen:


#include <iostream>
#include "..\GITFrameworkW32.h"


using namespace std;

int main()
{
int esum=0;
int ist[6]={9,10,8,1,15,20};
int e;
int y;
int Kp=5;
int Ki=5;
int Kd=5;
int Ta=5;
int soll=15;
int ealt=0;

for(int i=0;i<6;i++){
e=soll-ist[i];
esum += e;
y=Kp*e+Ki*Ta*esum+Kd*Kd*(e-ealt)/Ta;
ealt = e;

git_printf("Soll Wert: %i\r\nIst Wert: %i\r\nRegel Wert: %i\r\n\r\n", soll, ist[i], y);

}
return 0;
}


An dem GIT Kram nicht stören, das ist eine Oberfläche von der Hochschule, so ein kleines nettes Fenster das man nich immer in der Konsole arbeitet.

Ausgabe ist:


Soll Wert: 15
Ist Wert: 9
Abweichung: 6
Regel Wert: 210

Soll Wert: 15
Ist Wert: 10
Abweichung: 5
Regel Wert: 295

Soll Wert: 15
Ist Wert: 8
Abweichung: 7
Regel Wert: 495

Soll Wert: 15
Ist Wert: 1
Abweichung: 14
Regel Wert: 905

Soll Wert: 15
Ist Wert: 15
Abweichung: 0
Regel Wert: 730

Soll Wert: 15
Ist Wert: 20
Abweichung: -5
Regel Wert: 625


Wie interpretier ich das jetzt auf mein PWM Signal? Würde ich den spaß auf 8 bit begrenzen würde er ja immer 100% fahren :-s Oder wo ist der denkfehler?


Edit: Mir fällt grad ein das Kd Ki etc. ausschlaggebend für den Regler sind und ich die willkürlich zum test auf 5 gelegt hab, das kann logischerweise Variieren. Das tu ich gerade mal

Edit2: Bzw wie stell ich den Spaß so ein das ein Sinnvoller PWM wert bei y herrauskommt (den ich ja ggf. Nach oben und unten je nach Bitbreite des Timers begrenzen kann)? Oder liegt der wurm noch wo anders? Ich bin bei "Ist" von einer Drehzahl ausgegangen die von einem Sensor kommt

BlackDevil
17.08.2008, 12:44
Niemand mehr? Das obige Schwingt ja noch, das muss man Korrigieren, das ist klar, aber wie Interpretier ich dieses allgemein?