-         

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 14

Thema: Erzeugung von Rampen mit Timer1(ATmega8)

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    17.02.2005
    Ort
    Westerkappeln
    Alter
    34
    Beiträge
    88

    Erzeugung von Rampen mit Timer1(ATmega8)

    Anzeige

    Hallo,
    ich habe ein relativ einfaches Problem, aber ich stehe irgendwie auf dem Schlauch und komme irgendwie nicht weiter.
    Ich habe bisher alle möglichen Quellen durchforstet, habe aber bisher noch nicht mit den timern gearbeitet.

    Zu meinem Problem.
    Ich möchte mit dem Timer1 Rampen generieren um einen Schrittmotor (später auch Servos) anzusteuern. Also Pulse mit unterschiedlichen Zeitabständen erzeugen um die Geschwindigkeit zu Steuern.

    Meine Frage wäre jetzt, wie berechne ich den Timer wenn ich eine variable Frequenz von 1Hz bis 60kHz haben möchte.
    Wenn mein ATmega mit 16MHz läuft?

    Meine erste Überlegung war, ich teile 16MHz/256 und hätte dann 62500Hz Takt für meinen 16bit-Zähler(65536). Wenn ich jetzt von dem maximal möglichen Wert des Zählers meine Zählerfrequenz(62500) abziehe, dann bekomme ich den Vorladewert für meinen Timer.

    Also, 65536 - 62500(Hz) = 3036

    Mit diesem Wert wird die Zeit bis zum Überlauf genau 1s und die Frequenz 1Hz betragen (wenn man natürlich den Overhead unberücksichtigt lässt).

    Wenn ich aber den TimerREG mit z.B. 65535 vorlade, dann hätte ich doch meine maximale Frequenz oder?? Oder liege ich da total falsch?
    "Wenn unsere berechnungen versagen, nennen wir es Zufall." Albert Einstein

  2. #2
    Erfahrener Benutzer Roboter Genie Avatar von Michael
    Registriert seit
    17.01.2004
    Ort
    Karlstadt
    Alter
    48
    Beiträge
    1.254
    Hallo Viktor,

    Wenn ich aber den TimerREG mit z.B. 65535 vorlade, dann hätte ich doch meine maximale Frequenz oder??
    die maximale Frequenz des Interrupts. Wenn du da einen Port toggelst, hast du nurnoch die halbe Frequenz.

    Oder liege ich da total falsch?
    Wenn du deinen Timer mit 65535 lädst, hast du noch 256 Prozessortakte (wg.Prescaler) bis zum nächsten mal, da müssen Register gesichert werden und so n Zeug. Viel Raum für die Anwendung bleibt da nicht mehr.

    Gruß, Michael

  3. #3
    Benutzer Stammmitglied
    Registriert seit
    17.02.2005
    Ort
    Westerkappeln
    Alter
    34
    Beiträge
    88
    Also, erstmal ein Dankeschön für deine Antwort
    Wenn du deinen Timer mit 65535 lädst, hast du noch 256 Prozessortakte (wg.Prescaler) bis zum nächsten mal, da müssen Register gesichert werden und so n Zeug. Viel Raum für die Anwendung bleibt da nicht mehr.
    ...das ist mir auch klar, es geht geht mir eigentlich darum, ob ich mit meinem "Gedankenexperiment" nicht falsch liege?
    ...also hätte ich eine variable Frequenz von 1Hz bis 60kHz, oder nicht?
    "Wenn unsere berechnungen versagen, nennen wir es Zufall." Albert Einstein

  4. #4
    Erfahrener Benutzer Roboter Genie Avatar von Michael
    Registriert seit
    17.01.2004
    Ort
    Karlstadt
    Alter
    48
    Beiträge
    1.254
    Hallo Viktor,

    deine Gedanken sind soweit richtig und das funktioniert auch. Dieser Roboter hier z.B. fährt nach diesem Prinzip mit Schrittmotoren und 2 Timern:

    <- Link auf Video

    ...also hätte ich eine variable Frequenz von 1Hz bis 60kHz, oder nicht?
    eine variable Timerfrequenz, ja.

    Gruß, Michael

  5. #5
    Benutzer Stammmitglied
    Registriert seit
    17.02.2005
    Ort
    Westerkappeln
    Alter
    34
    Beiträge
    88
    um die Rampen zu erzeugen, müsste ich noch zusätzlich einen zweiten Timer nehmen, z.B. Timer0 bzw. 2, der mit einer festen Frequenz läuft.
    Dieser entscheidet dann ob beschleunigt, mit der selben Frequenz weiter gefahren oder abgebremst wird und rechnet den nächsten Preload für Timer1 aus.
    Wäre das denn so möglich? Oder gibt es bessere alternativen?
    "Wenn unsere berechnungen versagen, nennen wir es Zufall." Albert Einstein

  6. #6
    Erfahrener Benutzer Roboter Genie Avatar von Michael
    Registriert seit
    17.01.2004
    Ort
    Karlstadt
    Alter
    48
    Beiträge
    1.254
    Hallo Viktor,

    um die Rampen zu erzeugen, müsste ich noch zusätzlich einen zweiten Timer nehmen
    ähh, nein. Die Timerzeit wird ganz normal im Hauptprogramm errechnet und dann per globaler Variable übergeben.
    Pro Schrittmotor gibt es dann einen Timer.

    Oder gibt es bessere alternativen?
    es gibt sicher andere Varianten, die auch geeignet sind. Da vergleichst du aber Bananen mit Gurken.

    Gruß, Michael

  7. #7
    Benutzer Stammmitglied
    Registriert seit
    17.02.2005
    Ort
    Westerkappeln
    Alter
    34
    Beiträge
    88
    es gibt sicher andere Varianten, die auch geeignet sind. Da vergleichst du aber Bananen mit Gurken.
    der war gut!

    nun gut, dann muss ich mein Vorhaben doch enthüllen.
    Ich habe vor (ganze) drei Achsen zu interpolieren, dabei gibt es immer nur eine Achse, die mit maximaler Geschwindigkeit gefahren wird, nämlich die, die auch den längsten weg zurück zu legen hat.
    Die weiteren zwei werden jeweils nach Bedarf angesteuert, ...es geht dabei um eine Modifikation des 2D-Bresenham Algorithmus'.
    "Wenn unsere berechnungen versagen, nennen wir es Zufall." Albert Einstein

  8. #8
    Erfahrener Benutzer Roboter Genie Avatar von Michael
    Registriert seit
    17.01.2004
    Ort
    Karlstadt
    Alter
    48
    Beiträge
    1.254
    Hallo Viktor,

    dann muss ich mein Vorhaben doch enthüllen.
    naja, soviel enthüllen gibt es da nicht, das haben schon andere vor dir gemacht

    dabei gibt es immer nur eine Achse, die mit maximaler Geschwindigkeit gefahren wird, n
    aber auch diese Achse braucht eigene Rampen und damit einen eigenen Timer.

    Die weiteren zwei werden jeweils nach Bedarf angesteuert, ...es geht dabei um eine Modifikation des 2D-Bresenham Algorithmus'.
    du siehst es ja selbst, es gibt mehrere Möglichkeiten.
    Aber brauchst du wirklich 60kHz?

    Gruß, Michael

  9. #9
    Benutzer Stammmitglied
    Registriert seit
    17.02.2005
    Ort
    Westerkappeln
    Alter
    34
    Beiträge
    88
    Hallo Michael,
    dsnke nochmal für deine Geduld!
    aber auch diese Achse braucht eigene Rampen und damit einen eigenen Timer.
    ...gut, aber soweit waren wir schon

    du siehst es ja selbst, es gibt mehrere Möglichkeiten.
    Aber brauchst du wirklich 60kHz?
    ...naja, vielleicht nicht ganz, aber man weiß nie? oder?
    meine Stepper Karten arbeiten (im Augenblick) mit 1/16 Mikroschritt.

    Ich werd erstmal mit linearen Rampen versuchen, danach werde ich schauen wie man am einfachsten quadratische Rampen implementiert.
    "Wenn unsere berechnungen versagen, nennen wir es Zufall." Albert Einstein

  10. #10
    Erfahrener Benutzer Robotik Einstein Avatar von wkrug
    Registriert seit
    17.08.2006
    Ort
    Dietfurt
    Beiträge
    1.897
    Kann man nicht den Timer 1 so konfigurieren, das ein Rechtecksignal mit 50/50 Taktung mit variabler Frequenz dabei rauskommt ??
    - Schau da mal ins Datenblatt unter den PWM Modes des Timer 1!
    Ich hab da so was im Hinterkopf.

    Damit liesse sich dann durch Veränderung des OCR1A Registers die Frequenz sehr bequem einstellen.

    Wenn Du mit 16MHz + Vorteiler nicht genau auf den gewünschten Frequenzbereich kommst, kannst Du den Timer auch extern takten und so den gewünschten Frequenzumfang erreichen.

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

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