-         

Kommentare

  1. Avatar von Searcher
    Hallo witkatz,

    vielen Dank. Auch zu Deinen Ideen. Bin schon am überlegen, wie ich den Steueralgorithmus abändern kann. Unvorsichtigerweise hast Du geäußert, daß Du die Regelstruktur nicht kennst. Was nun folgt ist mir etwas aus dem Ruder gelaufen und sollte nicht so lang werden. Also:

    Die Lenkung beruht zur Zeit auf einer möglichst schnellen Abtastung der Linie und daraufhin möglichst schneller Ansteuerung der Motore, damit der SLF (Stepping Line Follower) gar nicht anders kann als der Linie zu folgen.

    Es steht eigentlich eine genaue Untersuchung über den Verlauf der Werte aus, die der ADC über die Breite der Linie eigentlich liefert. Es haben die Ausleuchtung der Linie, Abstand der Photodioden voneinander und von der Linie und natürlich der Kontrast Linie - Hintergrund Einfluß. Vorteil scheint mir ein einfacher Aufbau, wenig Einfluß von Fremdlicht durch differentielle Auswertung, Relativ unempfindlich gegenüber verschiedener Linienbreiten. Wohl weniger geeignet für Regelschleifenanwendung. Damit habe ich mich aber noch nicht ernsthaft beschäftigt. Es gibt also keine P, I, D oder sonstige Regelung des Vehikels. Nachfolgend mal Beschreibung des Programms und wie SLF gesteuert wird. Möglicherweise gibt es noch Bugs in der Realisierung.

    Im Augenblick funktioniert der Normallinienmodus also so:

    1. Die Werte der differentiellen Messung des ADCs werden in eine Zahl von 0 bis 126 ohne die Proportionen der eigentlichen Messung zu verändern umgeformt. Sie dienen zusammen mit der Grundgeschwindigkeit, die über die Fernbedienung eingegeben wird, als Eingabe für der Erzeugung der Schrittfrequenz für die Schrittmotore.

    Der Wert 63 ist die Neutralstellung und bedeutet, daß sich das Vehikel mittig über der Linie befindet. Bei Übergabe an die Schrittmotorsteuerung soll der SLF damit geradeaus fahren. Liniensensorprogramm wie im vorletzten Blogeintrag mit Ausnahme der CNY Auswertung gepostet. Die ADC Werte werden vor der Übergabe nur etwas geglättet. Und zwar wird jede neue Messung in einem Array mit 8 Elementen abgespeichert. Die älteste Messung wird überschrieben und die verbleibenden acht Werte addiert und 3 mal nach rechts geschoben, also durch 8 geteilt. Das unterdrückt sporadisch auftretendes Zittern vom SLF. Wird der Mittelwert über 16 oder 32 Werte gebildet, kann man schon ein trägeres Lenkverhalten beobachten.

    2. Die Ansteuerung für die Schrittmotore erfolgt folgendermaßen:
    a. Grundgeschwindigkeit von der Fernbedienung vorgegeben. Es gibt Werte von 0 bis 126(127). Als Beispiel mal Wert 60 hergenommen und im Folgenden GStufe genannt.
    Das Vehikel bewegt sich ohne Einlenkung dann mit ca. 25cm/s geradeaus.

    Berechnung:
    16Bit Timer1 des Mega88 läuft mit 1Mhz.
    Schrittmotore haben pro Vollschritt 18° Drehwinkel und laufen im Halbschritt (40 Halbschritte für eine Motorwellenumdrehung)
    Getriebeübersetzung = 15:1, Raddurchmesser ist ca. 4cm entspricht etwa 12,6cm Umfang.
    Code:
    50000/GStufe = 50000 / 60 = 833,333 auf 833 abgerundet und als Vergleichswert zur Erzeugung eines Halbschritts im Timer1 benutzt.
    833 Timer1 Ticks entsprechen einem Halbschritt pro 833 * 1/1000000Hz = 0,000833s
    In einer Sekunde gibt es dann 1 / 0,000833s = 1200,48 Halbschritte
    1200,48Hz / 40 = 30,01 rps (revolutions per second wg. 40 Halbschritte für eine Umdrehung)
    30,01rps / 15 = 2rps (Getriebeübersetzung eingerechnet gibt es 2 Radumdrehungen pro Sekunde)
    2rps * 12,6cm = 25,2cm/s (Radumfang eingerechnet ergibt das die Geschwindigkeit)
    Diese Geschwindigkeit ist auch die Maximalgeschwindigkeit, auf die ein kurvenäußeres Rad eingestellt wird und immer versuchen wird zu erreichen. Beim Einlenken von einer Geraden in eine Kurve wird das kurveninnere Rad verlangsamt - das kurvenäußere Rad bleibt bei seiner Maximalgeschwindigkeit. Wird eine direkte Folge von engegengesetzten Kurven abgefahren, wird gleichzeitig beide Räder in der Geschwindigkeit verändert. Das kurvenäußere Rad mit der Maximalgeschwindigkeit wird verlangsamt und das langsamere Rad auf Maximalgeschwindigkeit beschleunigt.

    Die Dauer der Beschleunigung (und Verlangsamung = negative Beschleunigung) wird durch eine Rampe bestimmt und ist auf ein GStufe alle 4,8ms eingestellt. Ist die gegenwärtige Geschwindigkeit GStufe=50 und soll auf 60 beschleunigt werden, dauert es 4,8ms * (60-50) = 48ms bis die GStufe 60 erreicht ist. Falls eingelenkt werden muß und neben der Beschleunigung des einen Rades von 50 auf 60 gleichzeitig das andere Rad um 20 gebremst werden muß, dauert das 4,8ms * 20 = 96ms (Ich bin mir nicht im Klaren, ob sich die ungleiche Dauer der Beschleunigungszeiten von 48ms und 96ms sehr negativ auf das Fahrverhalten auswirken kann?) Falls während der Beschleunigung, also innerhalb der Rampe und vor vor Erreichen der Endgeschwindigkeit, neue Endgeschwindigkeiten gefordert werden, wird die neue Endgeschwindigkeit innerhalb der Rampe sofort wieder mit einer GStufe alle 4,8ms pro Rad zu erreichen versucht.

    b. Einlenken. Bisher gab es eine Einstellung von der FB für die Geschwindigkeit, hier als Beispiel 60.
    Von dem Liniensensor kommt als Einlenkgröße ein Wert von 0 bis 126 zur Schrittmotorsteuerung. Davon wird erstmal 63 subtrahiert und ergibt Werte von (-63) über 0 bis (+63). 0 für geradeaus und die negativen bzw. positiven Werte für Stärke der Lenkeinschläge nach links bzw. rechts.

    Dieser Wert wird mit einem experimentell bestimmten Wert multipliziert. Im Normallinienmodus ist die Konstante 0,022 (Leider eine Fließkommazahl - Single in BASCOM). Sie ist praktisch das Übersetzungsverhältnis des Lenkgetriebes. Je größer die Konstante, desto kräftiger reagiert das Vehikel auf die Einlenkwerte vom Liniensensor. Mal angenommen vom Liniensensor kommt eine 30.

    30 - 63 = (-33)
    (-33) * 0,022 = (-0,726)
    (-0,726) ist negativ, also Vehikel soll nach links lenken.

    c. Die vorher eingestellte Geschwindigkeit war 60 und beide Motore drehen also mit dieser GStufe. Nun wird einfach von der GStufe des linken Motors das Produkt von 0,726 und der GStufe subtrahiert. 60 - (0,726 * 60) = 16,44. 16,44 ist also die GStufe der neuen Endgeschwindigkeit des linken Motors nach Ablauf der Bremsvorgangs in der Rampe. Der rechte Motor bleibt auf GStufe 60.

    Code:
    Gstufe 60 entsprach einer Geschwindigkeit des Vehikels von 25cm/s.
    GStufe 16,44 entspricht
    50000/GStufe = 50000 / 16,44 = 3041,36 abgerundet = 3041. (Vergleichswert für Timer1)
    3041 * 1/1000000Hz = 0,003041s (pro Halbschritt)
    1 / 0,003041s = 328,83Hz (Halbschritte pro Sekunde)
    328,83Hz / 40 = 8,22rps (Motorwellenumdrehungen pro Sekunde)
    8,22rps / 15 * 12,6cm = 6,9cm/s
    Die linke Seite des Vehikels fährt also langsamer als die rechte Seite und wird wegen der starren Verbindung der beiden Seiten in eine Kurve gezwungen

    Grobe Rechnung im Dreisatz wegen linearer Abhängigkeit aber ohne Rundung auf Ganzzahlen für Timer1 Vergleichswerte:
    GStufe 60 entspricht 25,2cm/s
    Gstufe 1 entspricht 25,2cm/s / 60 = 0,42cm/s
    Gstufe 16,44 entspricht 16,44 * (25,2cm/s / 60) = 6,9cm/s


    Ich hatte auch andere Lenkalgorithmen, nicht Steuer- oder Regelalgorithmen versucht, jedoch wieder verworfen. Sie hatten einen größeren Code und damit auch mehr Rechenzeit verursacht. Da ich immer noch die BASCOM Demoversion benutze, bin ich da begrenzt und die Rechenzeit darf auch nicht ins Unendliche wachsen, da ich bei einigen Versuchen meine schon an Timingprobleme in der Zusammenarbeit mit Hauptschleife - Rampe - Stepperinterrupts war. Steht außerdem der schnellen Datenanforderung vom Liniensensor-µC und deren Verarbeitung entgegen.

    Im ATTiny für den Liniensensor ist jedoch noch einiges frei für das Aufbereiten der Lenksignale. Da könnte ich Deinem Vorschlag folgen und an dem Verhältnis von ADC-Messung und Lenkwerten drehen.

    Hoffe es gibt Dir eine Vorstellung von der Funktion. Ist im Grunde sehr simpel und der Teufel steckt NUR im Detail. Keine Ahnung wie oft ich geflasht habe, bis offensichtliche Bugs beseitigt waren und das Ding so läuft wie es im Video zu sehen ist. Bin gerade dabei den Liniensensor, also den Kabelverhau vorne auf einer Platine zu zivilisieren. Grundplatte, das, wo der Batterietrog draufsteht und die Elektronik und Antriebsblock dranhängt, ist schon erneuert. Die war bei einem unfreiwilligen Sturz vom Tisch angebrochen. Zum Glück keine sonstigen Schäden.

    Außerdem überlege ich das Poti für die Lenkung auf der Fernbedienung durch einen Drehencoder zu ersetzen. Das Poti gibt absolute Werte aus und wenn man den Linienmodus des SLF abschaltet, also wieder zur Fernbedienung zurückkehrt, macht sich das manchmal durch abrupte Lenkbewegungen bemerkbar. Das Poti steht eben manchmal ganz anders als der momentane Lenkeinschlag aus der Linien(ver?folgung. (Verfolgung manchmal, wenn die geringe Bodenfreiheit die losen, auf dem Boden liegenden Papplinien mal wieder vor sich her schiebt) Es gibt echt noch viel zu tun ...

    Gruß
    Searcher
    Aktualisiert: 25.01.2016 um 16:29 von Searcher (Kommafehler und Zwischenschritt in Berechnung berichtigt)
  2. Avatar von witkatz
    Hallo Searcher, es gefällt mir ganz gut, wie dein Vehikel fährt. Ein super Video! =D>

    Ohne jetzt die Regelstruktur zu kennen ist es schwierig einen Tipp zu Verbesserung zu geben. Nur so auf Verdacht vielleicht mal etwas zum Ausprobieren.
    Wenn im normalen Linienbetrieb der Regler einen Regelanteil zu den beiden Winkelgeschwindigkeiten der Antriebsräder addiert/subtrahiert, dreht sich das Fahrzeug in Bezug zu der Linie. D.h. die Regelabweichung wächst kontinuierlich, wenn man die Richtung als Regelgröße annimmt. Das ist ein I-Verhalten der Regelstrecke. Das Schlingern ließe sich mit einem D-Anteil vielleicht etwas minimieren. Würde dann in der Praxis bedeuten - und das ist mein Tipp zum Ausprobieren - Gegensteuern proportional zu Änderung des Sensorwertes.
    Aktualisiert: 24.01.2016 um 23:58 von witkatz
  3. Avatar von Searcher
    Zitat Zitat von witkatz
    Eine interessante DÜ Technik und verspricht auch vom Ansatz her störungssicher zu sein.
    Die Technik wurde zB in der Telekommunikation eingesetzt. Find ich auch interessant und weiß noch nicht so recht was ich hier auf meinem Linienstepper davon halten soll.

    Denke auch das es störungssicher ist. Ich habe noch 1kΩ Widerstände in Reihe in den Verbindungsleitungen zwischen den µC falls mal durch Programmfehler zwei Ausgänge gegeneinander arbeiten. Die können noch entfallen und die relativ hochohmigen internen Pullup-Widerstände könnten noch durch externe unterstützt werden. Dadurch, daß jedes Bit quittiert wird, ist es vermutlich sehr schwer die Verbindung zu stören. Man könnte noch Zeiten einbauen, die ein Bit anstehen muß um als sicher erkannt zu gelten. Soviel will ich aber gar nicht und bis jetzt läuft es mit meiner wackeligen Stromversorgung im Linienstepper mit den stromfressenden Schrittmotoren prima. Weiß allerdings nicht, wieviele Bits verfälscht werden. Durch die pure Anzahl der Meßwerte gehen die möglicherweise unter und schlagen nicht sichtbar auf die Lenkung des Linienfolgers durch.

    Die 4Bit Codierung könnte eigentlich entfallen, weil es sowieso nur Point-To-Ponint geht, oder?
    Stimmt. Hab ich bisher noch nicht näher drüber nachgedacht. Wenn auf der Sende- und der Empfangsseite klar ist, wieviele Bits übertragen werden und welche Bedeutung die haben kann der "Funktionscode" wegfallen. zB nutze ich vom ADC nur ein 8 Bit Ergebniswert, der auch noch durch 2 shifts auf 6 Bit beschitten wird. Es würde reichen, nur diese 6 Bits, vielleicht 7 zu übertragen - müßte da in der Aufbereitung und im Fahrprogramm noch was anpassen, aber die 6 Bit würden reichen.

    Den Funktionscode habe ich ja noch von der Fernbedienung mitgeschleppt. Da werden ja über Infrarot mit RC5-Code mittlerweile fünf Funktionen übertragen: Motorstrom ein-/ausschalten, vorwärts/rückwärts, Lenken, Geschwindigkeit und Linienmodus ein/aus. Dort möchte ich nicht auf den Funktionscode verzichten.

    Mal sehen, ob es notwendig wird, die Paketlänge zu kürzen. Dadurch, daß Sende- oder Empfangsseite die Übertragung unterbrechen kann um dringendere Aufgaben zu erledigen, sehe ich das im Augenblick noch nicht.

    Grund für die Einführung eines solchen Protokolls bei mir war ja, daß vom Mega88 die Schrittmotore über ISRs gesteuert werden. Damit die ISRs einen gleichmäßigen Takt liefern können, sollten sie nicht durch anderes gestört werden. Bei BASCOM kam die Störung durch die RC5 Empfangsroutine, die ja jetzt auf den RC5-Tiny ausgelagert ist und die Datenübertragung von dort getrost durch die Stepper ISRn unterbrochen werden kann.
    Aktualisiert: 27.10.2015 um 22:42 von Searcher
  4. Avatar von witkatz
    Eine interessante DÜ Technik und verspricht auch vom Ansatz her störungssicher zu sein. Die 4Bit Codierung könnte eigentlich entfallen, weil es sowieso nur Point-To-Ponint geht, oder?
  5. Avatar von Searcher
    Mittlerweile habe ich auch die Empfangsseite der zweiadrigen seriellen Übertragung fertig geschrieben. Leider noch nichts Positives zu berichten. Geht natürlich nicht ABER positiv bei der Fehlersuche ist, daß man auch Fehler findet, die man gar nicht gesucht hat

    Gruß
    Searcher
  6. Avatar von witkatz
    Ich mach dich nur drauf aufmerksam, dass ich deine Idee, eine Art asynchrones Handshakeverfahren zur Datenübertragung zu nutzen unbedingt interessant finde und mit Zuversicht auf positive Errfahrungsberichte warte.

    Gruß
    witkatz
  7. Avatar von Searcher
    Hi PICture ,
    danke für die netten Worte. Ich hätte ja auch gerne nur ein µC verwendet aber weil der IR Empfang eines Datenpaketes von der Fernbedienung so lange gedauert hat, war entweder der Empfang nicht gut oder das Timing der Steppersteuerung im Mega88 kam durcheinander. Da kam dann der erste Tiny25 ins Spiel. Der eingezeichnete Tiny45 mit dem Liniensensor ist jetzt sozusagen eine modulare Erweiterung . Soll später noch durch einen Tiny25 ersetzt werden, der vollkommen ausreichend sein wird - hoffentlich.

    Gruß
    Searcher
  8. Avatar von PICture
    Hi Searcher !

    So wie's auschaut hast du das sehr einfach mit drei µC geplannt und dein Schaltplan finde ich toll.

    Ich würde es nie verstehen, warum die meisten Bastler bei Spielzeugen alles mit nur einem µC erledigen versuchen. Angeblich weil sie Probleme und alles kompliziert mögen.
  9. Avatar von Searcher
    Der Heißkleber, mit dem der Taster befestigt ist, hat sich immer wieder von dem glatten Bremshebelhorn gelöst . Er hat aber auf dem Leiterplattenstückchen, auf dem der Taster aufgelötet ist, die gewölbte Form hinterlassen. Ideal für doppelseitiges Klebeband. Hatte noch "fix-o-moll" rumliegen und damit klebt es jetzt schon ca. eine Woche.
    Aktualisiert: 23.07.2015 um 08:01 von Searcher
  10. Avatar von Searcher
    Ich habe noch Platz auf der DCU entdeckt und wahrscheinlich werde ich den nutzen um noch das ISP Interface des RC5-Tinys dort herauszuführen.
    So, ist erledigt und das ISP Interface leicht erreichbar. Außerdem habe ich auf dem Fernsteuersender noch einen weiteren Taster angebracht und das dritte Poti vorbereitend verdrahtet. Jetzt gibt es also drei Taster und drei Potis mit denen ich das Vehikel fernbedienen kann. Könnte jetzt beginnen zu programmieren - man wird aber immer wieder durch den Sommer unterbrochen
  11. Avatar von Searcher
    Zitat Zitat von witkatz
    ... Also bitte mit dem Bloggen nicht bis zu nächsten großen Roboter-Erfolg warten...
    Stöhn . Hab im Augenblick irgendwie eine Schaffenskrise und selbst kleine Erfolge sind mir verwehrt. Erst gestern haben sich zwei Entstörkondensatoren beim Aufhängen von in die Jahre gekommenen Leuchtstofflampen mit lautem Knall und Sicherung ausgelöst , verabschiedet.

    Aber ich komme wieder, versprochen.

    Gruß
    Searcher
  12. Avatar von witkatz
    Egal. Ich schreibe trotzdem wenn mir danach ist. Möglicherweise lesen es doch einige,
    Ich würde es gerne...
    Das ist immer wieder eine gute Anregung und Ermutigung zu sehen was die anderen so machen und womit sie sich so plagen. Auch die kleinen Erfolge und Misserfolge machen unser Hobby interessant. Also bitte mit dem Bloggen nicht bis zu nächsten großen Roboter-Erfolg warten...
  13. Avatar von Searcher
    Zitat Zitat von witkatz
    ... Kainka schreibt in dem Artikel Wir schlachten einen Videorecorder, dass in dem Flachmotor mehrere Hall-Sensoren verbaut sind.
    Den habe ich noch nicht auseinandergenommen. Dafür von mehreren 3 1/2" Floppylaufwerken den Diskettenantrieb. Da sind meistens drei Hallsensoren für verbaut. Sind aber immer so winzig, daß es mir bisher keinen Spaß gemacht hat die auszuprobieren.

    Sehr interessant ist noch die Kopftrommel im Videorekorder. Die überträgt irgendwie die Infos der rotierenden Schreib/Leseköpfe von und zur feststehenden Auswerteelektronik

    Gruß
    Searcher
  14. Avatar von witkatz
    Gut zu wissen. Übrigens, Kainka schreibt in dem Artikel Wir schlachten einen Videorecorder, dass in dem Flachmotor mehrere Hall-Sensoren verbaut sind.
    Wenn ich das nächste mal über den Trödelmarkt schlendere, nehme ich mal einen Videorecorder zum Ausschlachten mit. Unser läuft nämlich noch und ist zu schade dafür.
  15. Avatar von Searcher
    Zitat Zitat von witkatz
    Aber ehrlich gesagt ist es wurscht ob du über deinen Werkstattalltag bloggst oder es lässt, weil die Blogs generell kaum noch jemand liest...
    Egal. Ich schreibe trotzdem wenn mir danach ist. Möglicherweise lesen es doch einige, haben aber nicht unbedingt etwas dazu zu schreiben. Und vielleicht erbarmt sich doch jemand einen allzu groben Unsinn nicht unwidersprochen zu lassen
  16. Avatar von witkatz
    Aber ehrlich gesagt ist es wurscht ob du über deinen Werkstattalltag bloggst oder es lässt, weil die Blogs generell kaum noch jemand liest...
    Aktualisiert: 11.06.2014 um 22:54 von witkatz
  17. Avatar von witkatz
    Manchmal fühle ich mich doch recht einsam hier im Blog
    Kommt mir bekannt vor
    probiere mal dieses oder jenes. Wäre eigentlich auch ab und zu einen Blogeintrag wert...?
    Klar doch, eben dafür wurde doch Blog erschaffen.
  18. Avatar von Searcher
    Danke witkatz.

    Manchmal fühle ich mich doch recht einsam hier im Blog. Die etwas provokante Bemerkung sollte andere herausfordern, doch auch mal was über
    den gemeinen Bastelalltag im Blog zu schreiben

    Im Augenblick habe ich kein festes Projekt und probiere mal dieses oder jenes. Wäre eigentlich auch ab und zu einen Blogeintrag wert...?...!

    Gruß
    Searcher
  19. Avatar von witkatz
    konnte ich meine Blogeintragsbilanz nun noch mal erhöhen und in uneinholbare Höhen schrauben
    Find ich gut, weil ich deine Blogs gerne lese! =D>
  20. Avatar von Searcher
    Ich hab die Stepper ohne Last von Null auf 30U/s beschleunigen können. Mit Rampe ging es dann gut mit 70 bis 80 U/s bis sie ALLE Schritte verloren Hatten aber echt dabei auch keine Kraft mehr.

    @PlasmaTubeI²C: Dein Kommentar bringt mich dazu erstmal den Antriebsblock mit Ansteuerschaltung auf Steckbrett zu testen. Achsen werd ich dann demnächst sauber lagern und das ganze Ding feinjustieren.

    Dann kann ich auch 'ne Treiberschaltung ausprobieren. Ich versuche mit den Teilen, ich hier noch lagern habe auszukommen; leider kein Steppertreiber dabei. Nur in der allergrößten Not und mit Aussicht auf durchschlagenden Erfolg schau ich mal danach. Wär vielleicht das bequemste...

    Hab auch schon einige CD-Laufwerke auseinandergenommen aber leider noch keine Stepper darin gefunden. Waren immer DC-Motore oder diese BLDC für den Tellerantrieb. Auch wenn ich 8 U/s auf die Straße kriegen würde, wär ich schon zufrieden. Am Antriebsblock wären noch Modifikationen möglich. 6:1 oder 4:1 sollten relativ "einfach" machbar sein.
Seite 1 von 3 123 LetzteLetzte