Hallo, ich stehe vor folgender Herausforderung: Für eine Positionierungsaufgabe bekommt ein ATMega die Spannung eines analogen Sensors. Im Verlauf der gesamten Wegstrecke gibt es charakteristische Spitzen und Ebenen (qualitativ im handgezeichneten Diagramm). Die grün gekennzeichneten Punkte muss der Controller später zuverlässig erkennen. Da der genaue Verlauf (zeitlich) als auch die exakten Spannungswerte vorher dem Controller nicht bekannt sind, würde ich gerne eine Kalibrierfahrt implementieren. Der zweite Grund für die Kalibrierfahrt ist, dass sich im Laufe der Zeit durch Alterung usw. die Kurve leicht ändern kann. Da soll man dann auch eine Kalibrierfahrt machen können. Hat jemand von Euch eine Idee, wie ich das ganze anstellen könnte? Meine erste Idee für einen möglichen Ablauf: 1. Die Kurve wird durchgefahren und es werden von der Analogspannung gleitende Mittelwerte erzeugt. Alle 10 ms wird je ein Wert in einem Array im RAM gespeichert. Dafür bräuchte ich dann 500 * 2 Byte = 1000 Byte. Das passt auf jeden Fall ins RAM. 2. Das Array wird durchgegangen und Differenzenquotienten gebildet. Dadurch weiß der Controller, ob er gerade eine Ebene oder eine Spitze hat. 3. Jetzt ist dem Controller die Lage und Spannung der Ebenen, als auch die Lage und Spannung der Spitzen bekannt. 4. Es ist vorher festgelegt, dass die Spannungswerte der Punkte von unten nach oben in der Reihenfolge Punkt 3, 1, 2, 4 kommen muss. Diese Punkte werden mit relativen Koordinaten zueinander im EEPROM gespeichert. Damit ist die Kalibrierung beendet. 5. Im Normalbetrieb werden die Punkte noch mit gewissen Fenstern (Toleranzen) versehen. Das war's. Was haltet Ihr davon? VG, Third Eye
Ich werd nicht schlau draus. Wenn es darum geht, bestimmte Punkte des zu positionierenden Teiles zuverlässig anhand eines Sensors zu erkennen, dann fahr ich eben das Teil händisch in diese Position, drücke einen Knopf und teile dem µC so mit: jetzt gilts, das ist Position 3. In der Robotik nennt man sowas einen "Teach-In". Der Teil, der mir allerdings überhaupt nicht klar ist, ist der Teil "Es handelt sich um eine Positionieraufgabe". Das bedeutet ja doch wohl, dass der µC anhand eines Sensorwertes entscheiden muss, wie er verfahren muss, um einen bestimmten Punkt zu erreichen. Ich seh nicht, wie das bei deiner Kurve möglich sein soll. Die Spannung vom Sensor betrage zb 3V und der µC soll auf Punkt 2 positionieren. Woher weiß der µC, in welche Richtung er verfahren soll? Je nachdem auf welchem Ast der Kurve sich das Bauteil gerade befindet, muss er bei einem Sensorwert von 3V entweder rechts oder links fahren, wobei dann auch noch der Fall dazu kommt, dass sich der Sensormesswert scheinbar auch noch verschlechtert, was allerdings nur temporär ist, solange er weit vom Zielpunkt entfernt ist. Ansonsten: wenn du denkst, dass dein Verfahren grundsätzlich funktioniert - ja dann implementiere es. > 2. Das Array wird durchgegangen und Differenzenquotienten gebildet. > Dadurch weiß der Controller, ob er gerade eine Ebene oder eine Spitze Dazu brauchst du kein Array. Bei 10ms Abtastintervall hast du zwischen den Abtastungen genügend Zeit um den Differenzenquotient zwischen dem jetzigen Messwert und dem vorhergehenden zu errechnen. 10ms sind für einen µC eine halbe Ewigkeit.
fehlt nicht der Zusammenhang von ORT und Sensorspannung? In diesem Graph ist nur die Zeit angetragen - das finde ich verwirrend. gibt es einen monotonen Zusammenhang zwischen Ort und Spannung un das Ding fährt effektiv hin und her? Oder ist bei dem Graph davon ausgegangen, dass mit konstanter Geschwindigkeit verfahren wird?
rava schrieb: > Oder ist bei dem Graph davon ausgegangen, dass mit konstanter > Geschwindigkeit verfahren wird? Genau so ist es. Man könnte sich die Zeitachse auch als Wegachse denken. Karl Heinz schrieb: > Woher weiß der µC, in welche Richtung er verfahren soll? Im Einschaltmoment steht er immer da, wo im Diagramm Zeitpunkt 0 ist. Mir fällt aber gerade ein, dass er ja unterscheiden muss, ob er einen gewünschten Punkt von links oder von rechts anfährt. Ich sehe, dass mein Vorhaben nur auf den ersten Blick einfach ist. "Der Teufel steckt im Detail" bewahrheitet sich immer wieder. Vielleicht wäre ein Teachbetrieb doch das Naheliegendere.
Third Eye schrieb: > Im Einschaltmoment steht er immer da, wo im Diagramm Zeitpunkt 0 ist. Da fällt mir nur ein "berühmte letzte Worte". Wenn jemand behauptet "das ist immer so" oder "das kommt bei uns nicht vor", dann werde ich hellhörig. :-) Was anderes ist es natürlich, wenn nach dem Einschalten die Mechanik erst mal recht zwnagsgesteuert in eine Endlage gefahren wird, bis ein Endschalter anspricht. Dann kann man von gesicherten Verhältnissen ausgehen. > Vielleicht wäre ein Teachbetrieb doch das Naheliegendere. Na ja. Da gehts ja nur darum, die 'Haltepunkte' zu finden. Am Positionierproblem ändert das ja nichts. Was ist das überhaupt für eine Hardware und warum sieht deine Kurve so seltsam aus? Normalerweise hat man da ja einen linearen Zusammenhang zwischen 'Auslenkung aus der 0-Position' und Sensorwert. Aber im Moment kann ich mir keine Positionieraufgabe vorstellen, die ein derartiges Sensorwert/Zeit Diagramm ergeben würde. Das liegt allerdings sicherlich an meiner mangelnden Phantasie.
Third Eye schrieb: > Für eine Positionierungsaufgabe bekommt ein ATMega die Spannung eines > analogen Sensors. Positionieren kann so nicht funktionieren, für bestimmte Y-Werte in deinem Diagramm gibt es bis zu 4 verschiedene X-Werte, da ist eine Positionieraufgabe nicht eindeutig lösbar. Dafür müsste die Funktion des Sensors zwar nicht linear sein, aber zumindest monoton steigend oder fallend. Der Rest deiner Überlegungen, wie man bestimmte Kurvenpunkte findet, ist ok, bloss Positionieren geht halt nicht. Gruss Reinhard
naja ganz so schlimm ist es nicht. Aber der Aufwand ist nicht ganz unerheblich. Zum Thema Selbstlokalisation gibt es einige hilfreiche Infos im Netz, die sich genau mit einer solchen Problemstellung beschäftigen. Stichworte: - Bayes-Filter - Partikelfilter - Lokalisation da sich das allerdings nach Kanonen und Spatzen anhört, würde ich mir erstmal die Frage stellen, warum zum Teufel die Kurve so krumm ist (und ob wirklich t~x). Wenn du weißt, wo du bist, ist die Ableitung der Stellgrößen schon leichter!
Wenn man davon ausgeht, dass die Kurve immer von links nach rechts durchlaufen wird, liegen alle Punkte in einem Bereich, in dem der Differenzquotient (zumindest kurzzeitig) gegen Null geht. Jetzt käme es halt darauf an, ein passendes Kriterium für die Auswertung der letzten n Messwerte zu definieren.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.