- 12V Akku mit 280 Ah bauen         
Seite 3 von 3 ErsteErste 123
Ergebnis 21 bis 30 von 30

Thema: PID Motordrehzahl Frage zum Bascomcode

  1. #21
    Erfahrener Benutzer Roboter Genie Avatar von Bammel
    Registriert seit
    11.12.2004
    Ort
    Bremen
    Alter
    37
    Beiträge
    1.400
    Anzeige

    LiFePo4 Akku selber bauen - Video
    Beim meinem WEIRDO arbeite ich ja mit mm ich möchte das Ganze dann noch so ausbauen wie in dem Buch bei dem THX-1 mit den Koordinaten und Winkel zur Null und Zielposition. Aber mit Ketten ist dies quasie unmöglich deshalb entwerfe ich z.Z. ein neues Chassis!

    Aber genau Dies mit den Koordinaten ist doch geade zu perfekt für deine Bedürfnisse.

  2. #22
    Benutzer Stammmitglied
    Registriert seit
    16.02.2009
    Beiträge
    39
    Hallo Oberallgeier
    [quote="oberallgeier"]
    Zitat Zitat von schilly
    @schilly. Was ich schon immer fragen wollte: Ist die offene Encodescheibe nicht zuuu exponiert und dadurch staubanfällig und durch Kratzer gefährdet?
    Bild hier  

    Bis jetzt fährt mein Roby nur in der Wohnung. Da ist es mit dem Schmutz nicht so weit her.. Na, wenn das meine Frau hören könnte
    Aber Du siehst auf dem Bild, das da schon ein paar Fussel landen könnten. Ich habe mir auch schon darüber gedanken gemacht. Eine Losung für mich habe ich schon gefunden. Mal schauen ob sie auch praktikabel ist. Ich habe an unserer Tür einen "Windschutz" angebracht. So eine Leist mit "Haren" daran... Die war zu lang. Und als ich das abgeschnittene Teil in der Hand hatte, dachte ich mir, das könnte man prima anbringen. Ich möchte an der Stelle die Sensorik schützen.. Eine Art Käfig bzw. diese Schmutzfänger soll dabei helfen.
    Wieso sieht in Deiner Bildergalerie zu Roby 2.0 im vierten Bild von oben das Rad nicht wirklich fluchtend mit der Welle aus??
    Ui.. da sprichste was an... Ich habe mir von Conrad eine Drehmitgeber gekauft. der Macht aus 6mm 4mm (ist wohl so eine Art Poti/schalterhalterung gewesen. Die 4mm Gewindestange habe ich mit einem 1 mm Bohrer (Feihand) quer zur Achse durchlöchert... Waren ein paar versuche nötig. Dort konte ich mit diesem beigefügten Bolzen die 6 Kant-Drehmitgeber anbringen. Darauf das Rad mit einer Mutter gekontert... Ich werde das alles Dokumentieren.. aber ich glaube, Ihr wisst worauf ich hinauswill..
    Für mich ist der Geradeauslauf ok. Und da mir die Räder eh zu klein sind, werde ich beim tauschen der Räder (ich möchte da mehr höhe gewinnen, da die durchgeschnittenen Überraschungsplastikeier unten über den Boden schleifen bzw. durch Möbelräder ersetzen) hoffentlich Höhe gewinnen.
    Kurz gesagt... Das Eiert schon rum.. Aber erst mal zu vernachlässigen.. Mir ist klar, das Regelkreise sowas nicht gerne mögen...

    Gruß Schilly[/img]

  3. #23
    Erfahrener Benutzer Roboter Genie Avatar von Bammel
    Registriert seit
    11.12.2004
    Ort
    Bremen
    Alter
    37
    Beiträge
    1.400
    Hi gibt es von dir was neues? funktioniert die regelung nun?

  4. #24
    Benutzer Stammmitglied
    Registriert seit
    16.02.2009
    Beiträge
    39
    Zitat Zitat von Bammel
    Hi gibt es von dir was neues? funktioniert die regelung nun?
    Hallo Bammel,

    ja, seit ca. 3-4 Tagen hab ich es am laufen. Ich möchte alles auch schön dokumentieren. Man sieht sehr schön, wie der Regler den Geradeauslauf regelt. schwangt minimal.. aber dadurch sehe ich sehr gut wie es funktioniert.

    Ich hab mich noch nicht gemeldet, weil ich überhaupt nicht mit dem Timer1 klarkomme.

    ich sende heute abend mal die 3 Zeilen rein.. Aber beim duchlaufen einer Zählschleife von 1-1023 verhält sich der Motor überhaupt nicht so, wie gewünscht. Ich habe jetzt mehrere Tage im Netz gesuch und ich mach wohl einen Fehler in den PWM Settings...

    Ich nutze einen ATMEGA88 mit eine 16Mhz quarz... Register angeschaut und direkt gesetzt. Über Baskom... auch... aber irgendwas ist falsch...

    bis heute abend...

    Gruß Schilly

  5. #25
    Benutzer Stammmitglied
    Registriert seit
    16.02.2009
    Beiträge
    39
    Hallo,

    wie angedroht, gebe ich mal hier einen Status:
    Der PID Regler regelt. Das sieht für mich (ich hab hier noch keine Werte an den PID Parametern vorgenommen) total gut aus...

    Was nicht funktioniert wie erwartet hat mit dem PWM Timer1 zu tun. Ich habe schon eine Menge gelesen, leider reicht es noch nicht...

    Was ich möchte:
    0 - 1023 geschwindigkeit der Motoren regeln.
    512 soll stopp sein.

    Was er bisher macht:

    auweia: alo geschätzt von 0 total schnell bit ca. 200 dan langsamer und dann ab 350 wieder schneller... und dann ganz komisch bis hoch nach 1023.

    Woran es liegen könnte:
    Ich habe viel gelesen, aber ich glaube die 10 bit Auflösung kommt nicht bei mir an, weil ich die Register dafür falsch setze.

    Ich denke die Bespiele passen nicht zu meinem Atmega88... Aber die Doku des AVR muss ich mir wohl noch genauer anschauen. Thema Register...

    Ich nutze den Atmega88 mit extenen 16Mhz Quarz.. Ohne Teiler....


    Das hier funktioniert... aber ich möchte ja Werte twichen 0-1023.. Wenn ich aber PWM = 10 angebe, habe ich in meiner hochzählschleife nicht die oben erwarteten Ergebnisse.

    Config Timer1 = Pwm , Pwm = 9 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down
    Pwm1a = 0
    Pwm1b = 0
    Tccr1b = Tccr1b Or &H02 '-> = Prescaler 8... aber brauch ich das?

    Was ich nicht wirklich verstehe: Was mach "Or $H02" ?

    Wenn ich das hier so nutze Teiler = 8 PWM = 1951 HZ bei 9 bit und dann 10 bit einstelle bringt mich das leider auch nicht weiter.

    Tccr1a = &B10100010
    Tccr1b = &B10000010

    hmm... wie gesagt ein Zwischenstatus... Aber ist schon doll das Teil geradeaus laufen zu lassen... cool...

    Gruß Schilly

  6. #26
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    08.09.2007
    Ort
    Berlin
    Alter
    32
    Beiträge
    1.578
    Hallo Schilly,

    das mit dem
    Code:
    Tccr1b = Tccr1b Or &H02
    hab ich auch nie richtig verstanden. Du kannst aber einfach schreiben:
    Code:
    Config Timer1 = Pwm , Pwm = 10 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down , Prescaler = 8
    Sieh dir doch mal die PWM-Signale mitm Oszi an (falls vorhanden). Vielleicht pfuscht dir ja da irgendwas dazwischen, weswegen das Signal verkrümmt wird. Nur so eine Idee, aber mein Oszi hat mir schon oft geholfen!

    Ansonsten gefällt mir dein Projekt sehr gut
    Wäre nett, wenn du noch den funktionierenden PID-Code posten könntest.

    Gruß
    Chris

  7. #27
    Erfahrener Benutzer Robotik Einstein Avatar von i_make_it
    Registriert seit
    29.07.2008
    Ort
    Raum DA
    Alter
    56
    Beiträge
    2.814
    &D = Dezimale Notation (wird in der Regel weggelassen)

    &H = Hexadezimale Notation

    &B = Binäre Notation

    Im Falle des Codeschnipsels

    Tccr1b = Tccr1b Or &H02

    Wird also das "Timer/Counter1 Control Register B – TCCR1B" verändert, in dem seine bisherige
    Einstellung mit dem Wert &H02 verodert wird.

    Das Ergebniss ist, das unabhängig von allen anderen Bits das Bit2,
    also das mittlere Bit also CS11 von Clock Select gesetzt wird.
    ------------------Seite 110 unten---------
    Bit 2:0 – CS12:0: Clock Select
    The three Clock Select bits select the clock source to be used by the Timer/Counter, see Figure
    49 and Figure 50.

    clkI/O/8 (From prescaler)
    ------------------------------------------
    http://www.atmel.com/dyn/resources/p...ts/doc2503.pdf

    Das ist der einfachste Weg einzelne Bits zu setzen unabhängig
    davon wie die anderen Bits aussehen und ohne diese in irgendeiner Form zu beeinflussen.

    Bsp. OR:
    Register----11011001
    Modifikator-00101010
    --------------------
    Ergebniss---11111011

    Gemäs der boolschen Schaltalgebra wird der Ausgang 1 sobald mindestens ein Eingang 1 ist.
    Im Gegensatz um Exklusiv ODER wo der Ausgang nur 1 wird wenn nur einer der Eingänge 1 ist

    Bsp. XOR:
    Register----11011001
    Modifikator-00101010
    --------------------
    Ergebniss---11110011

    Bei einer verundung (AND) sieht das dann so aus.

    Bsp. AND:
    Register----11011001
    Modifikator-00101010
    --------------------
    Ergebniss---00001000

    Mit NOR kann man dann Bits setzen wenn sie nicht gesetzt sind.
    Bsp. NOR:
    Register----11011001
    Modifikator-00101010
    --------------------
    Ergebniss---00000100


    Mit NAND kann man dann Bits selektiv wieder löschen.
    Bsp. NAND:
    Register----11011001
    Modifikator-00101010
    --------------------
    Ergebniss---11110111


    Bsp.:
    Tccr1b = Tccr1b Or &H02

    Register----11011001
    Modifikator-00000010
    --------------------
    Ergebniss---11011011


    Tccr1b = Tccr1b nand &H02
    Register----11011011
    Modifikator-00000010
    --------------------
    Ergebniss---11011001

  8. #28
    Benutzer Stammmitglied
    Registriert seit
    16.02.2009
    Beiträge
    39
    Hallo,

    vielen Dank erst mal für Eure Hilfe. Das setzen der Register ist mir jetzt völlig klar.
    Leider ist das aber auch schon die einzig Gute neue Nachricht. Ich hab das Gefühl, ich verstehe immer weniger.
    Die PID Regelung habe ich mal her rausgenommen (im Code siehe ein paar Antworten früher) und habe einen Zählerschleife im Werteberich zwischen 0-1023 durchlaufen lassen. Und siehe da, der Motor beschleunigt sauber von 0 -1023 ohne eine bestimmte Wertelücke. Verändere ich aber die Settings für den Timer1, bekomme ich eine Lück bzw. kommt das typische pfeifen. Ich muss mir noch mal genauer anschauen, was der Motor nun wirklich an PWM erwartet...
    Sobald ich den PID Regler wieder reinnehme, bekomme ich keinen sauberen Wertebereich für die Regelung. Ich hatte ja mal einen Wert (Motor_l = 400) eingetragen und das passte noch zufällig ganz gut. Aber nicht für den ganzen Wertebereich. Ich habe mir im Display die zu grundlegenden Steuerbefehle z.B. (Motor_l = 550) die dazugehörenden Fahrtbefehle nach der PID Regelung ausgeben lassen... Das passt aus meiner Sicht auch nicht wirklich, denn speed_r (ist die Variable. die dann für PWM1a übergeben wird das doppelte von Motor_l sein soll.. Hm.. wie kommt man hier auf den Faktor 2 bzw. die Verdopplung?
    Speed_l = Motor_l * 2
    Na, ich werde mal die Probleme versuchen in Ihre einzelbestandteile zu zerlegen. Aber derzeit geht nicht wirklich was...
    Ich versuch mal meine Fragen hier noch mal anzubringen, wo ich denke dass hier der Fehler liegen könnte.

    1. Was ist die ideale RB35 Motor Config Timer1 Einstellung?
    PWM = 10 klaro... 0-1023 aber hat ich muss mit die Auswirkungen auf mein System bei Änderung der Teilers klarmachen. Hat das Auswirkungen auf das Motorverhalten.

    2. Warum ist ausgerechnet die Verdoppelung hier das Ergebnis? Speed_l = Motor_l * 2
    Hängt wahrscheinlich mit der Regelung zusammen?

    3. Unterschiede zwischen den Code für einen Atmega32 und meiner Atmega88 Umgebung.. Da werde ich mit dir Register noch mal genauer anschauen und vergleichen. Datenblatt. Vielleicht mal die Werte direkt setzen.

    4. Mit schwirrt auch folgendes im Kopf rum: Ich meine doch schon längst mal auch einen Motor zwischen 0-1023 laufen gehabt zu haben, der bei 512 auf 0 Umdrehungen geht, und die Maxima bei u und 1023 hat. Das bekomme ich auch nicht wirklich mehr hin. (Hatte ich aber eigentlich schon… aber kann auch sein, dass ich das mit Servos nur hinbekommen habe... Und das hängt natürlich an den PWM Definitionen... Das werde ich glaube ich als erstes angehen...

    Naja... nach vielen Stunden, bin ich jetzt erst mal platt. Wird hoffentlich noch was werden.

    Gruß Schilly

  9. #29
    Erfahrener Benutzer Roboter Genie Avatar von Bammel
    Registriert seit
    11.12.2004
    Ort
    Bremen
    Alter
    37
    Beiträge
    1.400
    Ich würde sagen man sollte das ganze nochmal völlig von vorne angehen!

    Erstmal wie sieht deine Hardware aus!? und der jetzige code dazu?

    Ichw eiß noch das meine motoren bei einer zu hohen pwm frequenz anfingen zu pfeifen.

  10. #30
    Benutzer Stammmitglied
    Registriert seit
    16.02.2009
    Beiträge
    39
    Hallo Bammel
    Zitat Zitat von Bammel
    Ich würde sagen man sollte das ganze nochmal völlig von vorne angehen!
    JA, der Tip hat geholfen. Ich habe einfach völlig übersehen, das für diese Lösung:

    PWM 0 MAX vor
    PWM 513 Motor stopp
    MWM 1023 MAX zurück

    ein inverse von PWM notwendig ist und das z.B. ein C-MOS IC 4093 (den ich glücklicherweise hier noch liegen habe) ein Lösung darstellen kann.

    siehe:
    Zitat Zitat von RP6conrad
    PWM an Input 1, inverse von PWM an Input 2, enable immer auf high.
    Brauchts du nur 1 µpin + inverter. Auf diese Weise gibt 50% PWM speed 0, 0% PWM ist full speed forward, 100% ist full speed backward.
    Ich habe wirklich viel gelesen, aber da ist das centstück einfach erst sehr spät gefallen.

    Ich habe alles soweit auf einem Steckboard aufgebaut. Den eigendlichen Test werde ich heute hoffentlich duchführen können. Hier ein Link, der das noch einmal zeigt... http://www.elo-web.de/elo/mikrocontr...t-dem-attiny13

    Vielen Dank noch mal an alle...

    [highlight=red:758ed88ade] JA ES FUNKTIONIERT AUCH BEI MIR[/highlight:758ed88ade]

    Doumentation folgt!

    Gruß Schilly

Seite 3 von 3 ErsteErste 123

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Labornetzteil AliExpress