- MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad         
Ergebnis 1 bis 10 von 11

Thema: Inkrementalgeber mit nur einem Puls

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Hallo,

    vielen Dank für die ausführlichen Erlärungen. Da werde ich wohl doch noch mal mit den Werten bei dem anderen Roboter rumspielen müssen, vielleicht bewegt der sich dann tatsächlich auch weich.

    Nun zurück zur ursprünglichen Frage: Ich habe nun Peters Ansatz mit dem Messen der zeit zwischen zwei Pulsen implementiert. Theoretisch funktioniert das. Wenn ich nur wenig Spannung auf die Motoren gebe, den Motor festhalte und dann umpole, da wechselt der Zähler seine Zählrichtung erst, wenn der Motor sich dreht, d.h. das es funktionieren müsste. Aber wenn ich das ganze jetzt wieder bei voller Spannung auf 6 Motoren anwende, dann kommen leider dennoch Abweichungen zustande. Insbesondere bei den leichtgängigeren Motoren. Ich hab die Vermutung, dass mein Controller mit seinen süßen 2 MHz einfach nicht schnell genug ist, um die Zeitwerte präzise genug aufnehmen zu können, da er noch mit sehr vielen anderen Zeitintensiven Aufgaben betraut ist.

    Ich werde da jetzt noch ein bisschen rumspielen und gucken, ob ich das noch irgendwie hingebogen bekommen. Ansonsten muss ich wohl leider in den sauren Apfel beißen und eine Pause bzw. Rampe einbauen oder mit den Abweichungen leben. Ein schnellerer Controller kommt leider nicht in Frage, da dieser von der Schule vorgegeben ist.

    Auf jeden Fall vielen Dank euch allen, für die Ansätze und die Erklärungen zur Rampe.

    MfG
    Der Eisvogel

  2. #2
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    8.653
    ... mein Controller mit seinen süßen 2 MHz ...
    Das ist das erste Mal, dass ich etwas von einer süßen Frequenz höre *ggg*.

    Mal im Ernst: ist das noch ´n Z80 (ABER mit Z meine ich jetzt Zilog nicht Zuse ;.-.) )? Oder was hast Du als Controller? Nächste Frage: wie misst Du die Zeit?
    Ciao sagt der JoeamBerg

  3. #3
    Hallo oberallgeier,

    das ist ein AT89C5131A aus der 8051 Baureihe. Theorethisch kann der Controller mehr, aber die von der Schule vorgeschriebene Platine hat nur ein 12 MHz Quarz drauf, womit maximal 2 MHz Systemtakt möglich sind.

    Die Zeit Messe ich wie folgt:
    Code:
    				;Calculate time since last call
    				mov A,TL1
    				subb A,PULS1_TIME
    				mov R0,A
    				
    				mov A,TH1
    				subb A,PULS1_TIME+1
    				mov B,A
    				
    				mov A,THH
    				subb A,PULS1_TIME+2
    				
    				;Change in direction?
    				jnb PULS1_CHANGE,mPStore
    				
    				;Calculate time difference
    				xch A,R0
    				push ACC
    				clr C
    				subb A,PULS1_DIF
    				mov A,B
    				subb A,PULS1_DIF+1
    				mov A,R0
    				subb A,PULS1_DIF+2
    				pop ACC
    				
    				;C set: Umschalten
    				jnc mPStore
    				mov C,MOTOR1_DIRECTION
    				mov PULS1_COUNTER,C
    				mov P0.0,C
    				
    mPStore:		;Store time
    				mov PULS1_DIF,A
    				mov PULS1_DIF+1,B
    				mov PULS1_DIF+2,R0
    				
    				;Store Timestamp
    				mov PULS1_TIME,TL1
    				mov PULS1_TIME+1,TH1
    				mov PULS1_TIME+2,THH
    Diese Routine wird immer bei eine Flanke des Inkrementalgebers aufgerufen. TL1, TH1 gehören zu einem 16 Bit Timer, der bei Überlauf THH um 1 erhöht. PULS1_TIME, PULS1_DIF haben je 3 Byte reserviert. In PULS1_TIME wird immer der Zeitpunkt (TL1, TH1, THH) des letzten Aufrufs gespeichert. In PULS1_DIF wird die Differenz zum letzten Aufruf gespeichert. Die neue Differenz wird berechnet und liegt dann in A, B und R0. Dann findet der Vergleich statt. Wenn die vorherige Differenz in PULS1_DIF größer ist, wird das Carry-Flag gesetzt und dann findet die Umschaltung des Zählers statt.
    Direkt hinter dieser Routine wird dann PULS1_COUNTER abgefragt. Wenn es gesetzt ist, wird erhöht, wenn nicht, dann erniedrigt.

    MfG
    Der Eisvogel

  4. #4
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    8.653
    ... ein AT89C5131A ... 12 MHz Quarz ... womit maximal 2 MHz Systemtakt ...
    Grübel. Mit nem 12 MHz Quarz sehe ich den Systemtakt bei 12 MHz aus dem laut Dokumentation "80C52X2 Core (6 Clocks per Instruction)" 2 MHz Instruktionen möglich sind. Peanuts, Pingeligkeit, ok.

    Die Zeitmessung ist ja so wohl ok (ich bin nicht durch alle Instruktionen, meine Assemblerperiode liegt ein paar Jahre zurück ...). Ich messe meine Zeiten z.B. für Drehzahlen im 20 kHz-Takt, das hatte bisher ausgereicht. Da ist Deine timerbasierte Zeitmessung ja ne Ecke besser.
    Ciao sagt der JoeamBerg

Ähnliche Themen

  1. Antworten: 44
    Letzter Beitrag: 30.07.2009, 18:11
  2. Asuro Linienverfolgung nur mit EINEM Sensor
    Von rbaleksandar im Forum Asuro
    Antworten: 9
    Letzter Beitrag: 28.06.2009, 20:54
  3. Kettenantrieb mit nur einem Fahrtregler
    Von Marten83 im Forum Elektronik
    Antworten: 5
    Letzter Beitrag: 14.03.2009, 13:27
  4. Roboter mit nur einem Moter
    Von Singapur im Forum Schaltungen und Boards der Projektseite Mikrocontroller-Elektronik.de
    Antworten: 2
    Letzter Beitrag: 19.09.2006, 22:42
  5. Widerstandswert ( Poti ) mit nur einem I/O Pin einlesen ?
    Von Kaiser-F im Forum C - Programmierung (GCC u.a.)
    Antworten: 8
    Letzter Beitrag: 04.02.2005, 13:51

Berechtigungen

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

MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad