Hi Leute!
Ich mache derzeit ein Projekt von meiner FH aus, in dem eine Kugel zum schweben gebracht werden soll, sowas kennen einige von euch eh sicher schon.
Hier ein Bild vom damaligen Aufbau, jetzt hat sich ein bissl was verändert:
Hatte früher das EVALBOARD mit C167, welches ich aber leider geschossen habe.
Daraufhin einen Arduino Duemilanove besorgt.
Jetzt hab ich leichte Probleme bei dem Übertragen des Codes von C167 KEIL-Umgebung auf ATMEGA328P in der Arduino Umgebung.
Das Programm ist durch die Arduino Umgebung recht eingeschränkt worden, Interrupts hab ich keine gefunden und sonst wird das Programm auch in ein paar Punkten eingeschränkt was Schaltgeschwindigkeiten angeht.
Programmierkenntnisse... sagen wir so: ich verstehe das Programm, das ich weiter unten angehängt habe, aber selber hätte ich es nicht so gut/durchdacht hinbekommen (ein Freund hat mir dabei geholfen).
Hier der vorläufige Schaltplan, getestet wurde die Schaltung noch nicht, wird sie aber heute Mittag bis Nachmittag, zumindest mal die Positionserkennung:
(Aja, sind die Optokoppler überhaupt notwendig?, hier ist ja gar keine Galvanische Trennung möglich, da ja alles über einen Akku läuft, reichen einfache Widerstände? Wenn ja wie hoch?)
Den Code kann ich denke ich leider nicht so einfach posten, da ich eine Bachelorarbeit drüber schreiben muss, ich verwende den Code in der Arbeit... und wenn ich den hier direkt poste, würde das die Plagiatsprüfung finden denke ich. (oder weiß jemand mit SICHERHEIT, das wenn ich den Code mit dem Code-Fenster einfüge, dass er dann NICHT von der Plagiatsprüfung gefunden werden kann?)
Hey, hier kann man ja gar keine Files/Textdateien anhängen, oder irre ich mich da? Das ist ja echt blöd...
Na dann halt vorläufig mal als Bilder:
Hier der alte C167 Code:
Hier der neue Arduino-Code un der Versuch so nahe wie möglich an die Funktionsweise des alten Programms ranzukommen:
Aja, die Funktion ADEinlesen im Arduino Programm gehört glaub ich VOR die PID Regler-Funktion, oder?
Hier noch ein Schaltbildild des Motortreibers und die Ansteuerung:
Ich denke da muss ich im Programm noch ein bissl was ändern, dritten Pin für ansteuerung (Brake) hinzufügen?
Das System soll rückspeisefähig sein, d.h. die Spannung wird umgedreht und der Reststrom in der Spule fließt entgegen der Spannung in den Akku zurück.
Das hat den Vorteil, dass der Reststrom schneller stehen bleibt und die Spule somit schneller auf die Steuerbefehle vom Regler reagiert.
Vielleicht kann mir auch wer beim Implementieren der Current-Sense funktion helfen...(ich mein wenn's schon ein Sensor-output gibt, warum nicht verwenden?)... die könnte recht praktisch sein, ich hab bis jetzt einen 150? yC und einen 10? Motortreiber geschossen :-/
Hier eine schnelle Zeichnung wie die Regelung von statten gehen soll:
-
Praktisch ein ständiges Umschalten zwischen Forward und Brake (Rückspeisen).
-
Die x-Achse stellt den gewünschten Regelpunkt dar, in dem die Kugel nicht angezogen werden muss
-
y Achse ist VSpule, entspricht auch Position der Kugel.
-
Wenn y(Abstand) kleiner als Nullpunkt, soll der Duty Cycle kleiner 0 werden (=Anziehen)
-
Wenn y größer null, soll der Treiber auf Reverse schalten (=>Direction) also die Forward-Stromrichtung umgedreht werden... (das ist im Programm noch nicht implementiert, hatte vorher einen anderen Treiber, der anders funktionierte) (hier wären also auch Tipps nicht schlecht)... die Kugel soll also Abgestoßen werden.
Ich denke diese Angehensweise ist nicht optimal. Wenn die Regelposition exakt im Nullpunkt ist, schwingt das System viel mehr auf. Denn die Kugel wandert rauf, bis sie den 0-Punkt überschreitet und droht hinaufzuschnalzen, wird nach unten abgestoßen - wandert runter, bis sie wieder angezogen werden muss um nicht ganz runter zu fallen - das kann sich aufschwingen.
Da gibts sicher eine bessere Lösung... nur wie man das implementiert ist die Frage, ich denk es ist nicht soo schwer aber ich hab kaum zeit, ich muss bis Mi. mit dem Projekt + 25 Seiten Bacc. Arbeit fertig sein
Könntet ihr so nett sein und mir helfen liebschau
Danke!!!
lg,
Grisu.
Weitere Infos (eher elektrotechnischer Natur) gibts in diesem Thread