-         

Ergebnis 1 bis 6 von 6

Thema: PID Regler - Hilfe! Atmega8

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    14.05.2005
    Beiträge
    58

    PID Regler - Hilfe! Atmega8

    Anzeige

    Habe ein Problem, und hoffe Ihr könnt helfen!
    Ich habe einen Roboter mit 2 gehackten Servos (1-2ms Pulse von rückwärts vollgas - vorwärts vollgas)
    Dazu Radencoder mit 72 Inpulsen pro Umdrehung. 1 Rad-Umdrehung benötigt etwa 1 sek..
    (das Rad hat 89mm also ca. 28cm Durchmesser) = 3,88mm pro click

    So ich habe schon eine PWM für die Geschwindigkeit implementiert Mit Timer0 ovflw
    Der Wert 51= stillstand
    Der Wert 66= vollgas vorwärts
    Der Wert 36= vollgas rückwärts

    So jetzt möchte ich eine PID-Regelung. Wie mach ich das?
    Die Encoder liefern auf INT0 und INT1 Interrupts.
    Hab jetzt den Timer1 auf 1ms gestellt, und zähle bei überlauf einen Zähler hoch.
    Kommt z.B. INT0 schaue ich wieviele 1ms vergangen sind zwischen 2 Encoder Pulsen.

    Für die die bis jetzt durchgehalten haben ein Bild als Belohnung:
    Klicke auf die Grafik für eine größere Ansicht

Name:	IMG_5884.jpg
Hits:	28
Größe:	45,1 KB
ID:	19315

    Dh. also bei Vollgas hab ich 13,56 ms zwischen 2 Encoderpulsen

    Der einfachheit halber mal ein PD Regler betrachtet:

    Sagen wir ich gebe Soll(zwischen 2 Pulsen) = 10ms vor.

    Am Anfang hab ich 0ms zwischen 2 Pulsen. D.h

    t0:
    Error = 10ms-0ms = 10ms

    P= 10ms(Error) * Verstärkung Kp(z.B.2x) = 20
    D= 0 (Error alt) - 10 (Error neu) / 10ms(oder wie??) = -10 (oder -1?) * Verstärkung Kd(z.b. 1x) = -10 (oder -1)

    PD= 20 + -10 = 10 (Stellgrösse)
    (oder) PD = 20 + -1 = 19 (Stellgrösse)

    t1:
    Error = 10ms-5ms(angenommen)

    P= 5ms(Error) * Verstärkung Kp(z.b.2x) = 10
    D= 10ms(Error alt) - 5ms (Error neu) / 10ms(<-stimmt das?) = 5 (oder 0,5)

    PD= 10 + 5 = 15?
    (oder PD = 10 + -0,5 = 9,5)

    Kenn mich nimmer aus lol...
    Und was mach ich dann mit der Stellgrösse?

    LG Alex
    Geändert von bexter (13.07.2011 um 17:40 Uhr)
    \/ !!! Ein echter Bastler hat eine Brandnarbe im Gesicht, weil er beim Löten eingeschlafen ist \/ !!!

  2. #2
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    7.554
    Hi Alex
    Zitat Zitat von bexter
    ... Problem ... PID-Regelung. Wie mach ich das? ...
    Schau doch mal in das Wiki zu Regelungstechnik, dort gibts nen Abschnitt zum digitalen Regler. Eigentlich könnte man den gesamte Artikel durcharbeiten, aber das ist VIEL und ziemlich TROCKEN.

    Ich habe das durchgeackert, zu meinem Vorgehen steht hier ein bisschen was (klick). So ziemlich meine gesamte Arbeit zum PID-Regler meiner beiden gehackten Servos (Hackmethode 2 = gesamte Elektronik raus) steht hier - ein bisschen davor und ein bisschen danach. Da steht auch mein Regelungscode in C. Hoffentlich hilfts erstmal. Wenn Du speziellere Fragen hast, melde Dich halt wieder.

    Viel Erfolg und - - viel Geduld.
    Ciao sagt der JoeamBerg

  3. #3
    Benutzer Stammmitglied
    Registriert seit
    14.05.2005
    Beiträge
    58
    Danke den RN-Wiki hab ich schon durchgeackert, aber da Hilft warscheinlich nur vieeel Kaffee...
    Ich hab die Servoelektronik beibehalten aber aus dem Servo rausverlegt, wegen der Encoder.
    Das sieht man hier:
    Klicke auf die Grafik für eine größere Ansicht

Name:	IMG_5887.jpg
Hits:	20
Größe:	49,9 KB
ID:	19316
    Ich brauch wahrscheinlich wen, der das mal mit mir durchrechnet *lol*

    Dass ich in Assembler programmier macht die Sache nicht einfacher...
    Geändert von bexter (13.07.2011 um 18:18 Uhr)
    \/ !!! Ein echter Bastler hat eine Brandnarbe im Gesicht, weil er beim Löten eingeschlafen ist \/ !!!

  4. #4
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    7.554
    Die "Wurzel allen Übels" ist die Sprungantwort. Sprich: schau mal, ob Du messen kannst, wie bei Dir das Fahrzeug beschleunigt, wenn Du von 0 auf vollePWM schaltest. Ich habe das hier gezeigt - das war mein Anfang. Später ging das deutlich besser (klick). Hatte statt eines m168 einen m328 genommen - und damit viel Platz geschaffen für online-Messung und offline-Datenausgabe.

    Die Daten wurden "offline" - also nach der Testfahrt, über die UART ausgegeben und in der Tabellenkalkulation in Diagramme übersetzt - und ausgewertet.

    Au au - Assembler ist wahrscheinlich wirklich exotisch. Da rate ich dringend dazu, ein bisschen C zu lernen (oder so).
    Ciao sagt der JoeamBerg

  5. #5
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    21.06.2011
    Ort
    Dresden
    Beiträge
    170
    hi,

    Den D-Anteil würde ich erstmal beiseite legen, der spielt nur dann eine Rolle, wenn Du innerhalb von einigen wenigen Grad der Umdrehung die Drehzahl stabil halten willst. Dazu
    bräuchtest Du dann allerdings eine wesentlich höhere "Auflösung" Deines Gebersignals.
    P-Anteil bedeutet die sofortige Reaktion auf eine Abweichung, führt, wenn zu gross zum Schwingen. Also Stellwert = kP*(Alt-Neu), kP sollte klein sein.
    Wichtig: I-Anteil, "sorgt" langfristig für hohe Regelgenauigkeit. Dazu würde ich "gleitend" immer eine bestimmte Anzahl von Messwerten aufsummieren, d.h, in einem array die
    letzten 10...100 (werte - sollwert) (signed nicht unsigned) aufheben, daraus die Summe s bilden, Stellwert ist dann PWert+kI*s.

    mfg

    achim

  6. #6
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    09.04.2008
    Beiträge
    375
    Eine servo ist nicht ideal zum P-Regelung. Das nullpunkt ist sehr sensibel, und das Regelbereich relatif eng. Dabei haben sie auch nur ein encoder pro Rad, damit konnen sie nicht die Drehrichtung erfassen. Aber ihre Gedanke sind richtig : Error = Ist_geschwindigkeit - Soll_geschwindigkeit. Bei ihre Robby wird der geschwindigkeit in ms zwischen zwei encodertics ausgedruckt. Das ist eigentlich das inverse von Abstand/Zeit.
    Stellgrosse = P_factor * Error. Leiter hat jetzt diesen Error keine Richtung !! Oder Forwarts, oder Ruckwarts fahrt, ihre Error ist immer positif. Damit kan auch in falsche Richting geregelt werden und ist ihre Regelung instabil. Das gleiche gult auch für I und D Anteil.
    Mogliche Alternative : Rund das Nullpunkt von PWM nur Steuern, nicht Regelen. Ab eine bestimmte Geschwindigkeit, kan dan eine PID Regelung actif werden.

Ähnliche Themen

  1. Hilfe... rfm12 mit atmega8
    Von hausi im Forum Assembler-Programmierung
    Antworten: 1
    Letzter Beitrag: 18.02.2011, 11:29
  2. Atmega8 mit isp (dongle) Verbinden Hilfe :-)
    Von MrTaco im Forum AVR Hardwarethemen
    Antworten: 8
    Letzter Beitrag: 27.10.2008, 18:16
  3. Suche hilfe für ein C Programm atmega8
    Von tiscali im Forum C - Programmierung (GCC u.a.)
    Antworten: 1
    Letzter Beitrag: 17.12.2007, 16:14
  4. Hilfe : Atmega8 + PWM + ADC + usw.
    Von hellraider im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 3
    Letzter Beitrag: 01.03.2007, 20:25
  5. PID Regler für Linienverfolgung Hilfe!
    Von Javik im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 2
    Letzter Beitrag: 19.12.2005, 16:37

Berechtigungen

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