Hallo
Das ist das Setup des Timers beim RP6:
Mode 10, Phase Correct mit ICR1 als Top ergibt bei ICR1=210 ca. 8MHz/420=19047,6Hz
Hier betreibe ich damit eine Servoansteuerung:
https://www.roboternetz.de/community...l=1#post447000
Gruß
mic
Hallo
Das ist das Setup des Timers beim RP6:
Mode 10, Phase Correct mit ICR1 als Top ergibt bei ICR1=210 ca. 8MHz/420=19047,6Hz
Hier betreibe ich damit eine Servoansteuerung:
https://www.roboternetz.de/community...l=1#post447000
Gruß
mic
Bild hier
Atmel’s products are not intended, authorized, or warranted for use
as components in applications intended to support or sustain life!
Hm..
Wieso 420 wenn doch 210 ins Register geschrieben werden? Das genau verstand ich eben nicht... weil 8MHz/210=38095,2Hz
Aber ich habs...
Das hat mit Unterschieden im Mode 10 (PWM, Phase Correct) und Mode 14 (Fast PWM) (vergleiche Seite 109 im Dataheet) zu tun.
Demnach berechnet sich der Wert für das ICR bei FastPWM mit 8MHz/ICR1=Zyklus und bei PWM zu 8MHz/(ICR1*2)=Zyklus.
So les ich jedenfalls die Formeln auf Seite 100 und 101 im PDF... würde dann auch erklären warum "halber" ICR1 Wert und doch 19 Khz.
Vielelicht kann noch jemand was zum Thema "Frequenz runter setzen" was sagen?
Danke und Gruß
Sind Sie auch ambivalent?
Hallo,
die Treiberstufen sind so dimensioniert, dass die hohe Frequenz kein Problem darstellt.
19kHz weil das gerade ausserhalb des menschlichen Hörbereichs liegt.
> FastPWM
Wie mic schon sagt und auch in den Kommentaren der Lib steht, ist es phase correct PWM.
> Ich wüsste halt gerne, ob man die Motor PWM Taktung runter setzen
Du darfst gerne mit den Motoren Musik machen wenn Du magst![]()
Das hat auch soweit ich mich erinnere mal wer für den RP6 gemacht, find ich aber auf die schnelle nicht mehr.
Beim ASURO klingt das jedenfalls so:
http://www.youtube.com/watch?v=FNPMCI5b8Ys
![]()
> und dann ggf. durch eine SoftwarePWM laufen lassen kann.
Wozu denn?
MfG,
SlyD
Zu "Frequenz runter setzen": Ein einfacher Ansatz wäre der Prescaler, 19kHz/8 ergibt 2,4kHz und 19kHz/64 sind ca. 300Hz.
Neuen Prescaler in TCCR1B setzen:FAST PWM zählt von bottom zu top, Phase Correct zählt jedoch von bottom zu top zu bottom. Deshalb dauert ein Zyklus doppelt so lange.Code:TCCR1B = (1 << WGM13) | (0 << WGM12) | (1 << CS11) | (1 << CS10); // prescaler /64, 300Hz
Geändert von radbruch (15.08.2012 um 17:51 Uhr) Grund: "Neuen Prescaler in TCCR1B setzen" eingefügt
Bild hier
Atmel’s products are not intended, authorized, or warranted for use
as components in applications intended to support or sustain life!
Hallo,
der singende Asuro.. wie süß
Ich kannte nur das hier http://www.youtube.com/watch?v=yHJOz_y9rZE
Neee es geht mir darum, wie im FreeRTos Thread beschrieben den Timer1 frei zu kriegen bzw. die Motor-PWM evtl. anders zu generieren...
Das ist in der RP6 Lib alles schon gut so gelöst... hilft mir aber nur bedingt.
Das mit dem prescaler 8 versuch ich glaub ich mal. Danke
Noch ne Frage... kann man im PWM Mode zusätzlich ein Timerinterrupt auslösen lassen wenn die bottom ond/oder top werte erreicht werden? Da könnte ich ja den Tasksheduller dann reinhängen.
Gruß Rolf
Sind Sie auch ambivalent?
Na, genau das mache ich hier:... kann man ... zusätzlich ein Timerinterrupt auslösen lassen, wenn die bottom ond/oder top werte erreicht werden?(Aus https://www.roboternetz.de/community...l=1#post447000)Code:TIMSK |= (1 << TOIE1); // Die Timer1 Overflow-ISR zur Servoansteuerung
Jedesmal, wenn bottom erreicht ist, wird ein Overflow-Interrupt ausgelöst und die dazugehörige ISR ausgeführt:
Code:ISR (TIMER1_OVF_vect) { ... }
btw.: https://www.roboternetz.de/community...eeRTos-auf-RP6
Und das noch:
https://www.roboternetz.de/community...l=1#post459189
Geändert von radbruch (15.08.2012 um 19:20 Uhr) Grund: btw
Bild hier
Atmel’s products are not intended, authorized, or warranted for use
as components in applications intended to support or sustain life!
Danke!
Edit: Ach Radbruch.. ich seh grad dein BTW Edit... ja wir haben schon mal hin und her überlegt... ich habs nicht aus den Augen verloren.
Na ich denke, die Chancen stehen nun recht gut für RP6RTOS
Und noch nen Edit:
Wer wissen möchte wie das mit den Laufwerken geht....
http://georgewhiteside.net/projects/diskette-organ/
LG Rolf
Geändert von RolfD (16.08.2012 um 15:45 Uhr) Grund: radbruchs btw edit & Link
Sind Sie auch ambivalent?
Hallo,
also ich hab das mal ausprobiert mit prescaler 64 im Example_05_Move_01 und komme zu etwas unerwarteten Ergebnissen.
Der Bot neigt nun im Leerlauf aufgebockt dazu, "zu schwingen" .. das heist die Drehzahl beider Ketten steigt... sinkt.. steigt sinkt.. etwa im 2 Sekundentakt und unabhängig von einander, manchmal bleiben sie kurz ganz stehen und schwingen dann auch nach "oben" in der Drehzahl aus. Es gibt aber auch Phasen, wo sich die Drehzahlen auf einen kontinuierlichen Wert einpendeln. Bremst man eine Kette mit dem Finger, neigt sie beim loslassen zum heftigen überschwingen als wenn ein Gummizug darin verbaut wäre. Lässt man den Bot auf dem Boden fahren, ist von Spurtreue bzw. "gradeausfahren" keine Rede... er zieht einen recht engen Kreis von ca. 1 m Durchmesser.
Is schon witzig alles... und nur weil das PWM Timing verändert ist. Man hört auch tatsächlich einen leisen PWM Ton bei ca. 300 Hz.
Mir ist klar das dies alles letztlich von vielen Aspekten abhängt... das ganze RP6 Motorsystem ist ja ein (eigentlich 2 unabhängige) klassisch rückgekoppeltes Regelsystem mit Lautzeiteigenschaften usw..
Aber das es wegen Timings so drastisch aus der Bahn kommt, hätte ich nicht für möglich gehalten und Suche noch nach einer sinnvollen Erklärung.
Denn es werden hier genau so viele ISRs aufgerufen wie in der 19KHz Version den die sind abhänig von den Achsdrehungen bzw. Lichtschranken dort...
Es müssten auch sonst alle Timings gleich sein... bis auf die PWM Frequenz halt. Da die TIMER1_OVF_vect derzeit keinen Code enthält, sollte dies auch kein Einfluß haben.
Ich kann mir jedoch beim besten Willen nicht vorstellen, das es nur wegen der 19Khz->300Hz Umstellung zu solch massivem Nachlaufen der Reglerstellglieder kommt, das sogar das System zu schwingen beginnt. Der Vergleich hinkt etwas aber Phasenanschnittsteuerungen arbeiten ja üblicher Weise bei weit geringeren Frequenzen auch noch stabil.
So ist das jedenfalls nicht zu gebrauchen... auch wenn das Einhängen der ISR (TIMER1_OVF_vect) damit nun wunderbar klappt.
Vielleicht hat ja jemand eine Idee?
Ich hab eben was interssantes im c'T-Bot Projekt unter http://www.heise.de/ct/projekte/ct-b...8c-source.html gefunden...
00094 #ifdef SPEED_CONTROL_AVAILABLE
00095 _BV(CS10); // Prescaler = 1 => 31.2 kHz
00096 #else
00097 _BV(CS12); // Prescaler = 256 => 122 Hz
00098 #endif // SPEED_CONTROL_AVAILABLE
Dazu http://www.heise.de/ct/projekte/mach...are-Aktuatoren
und https://www.roboternetz.de/community...-PI-PID-Regler
Also über das Thema auf dem RP6 basierend kann man wohl sicherlich noch einige Doktorarbeiten schreiben...
LG Rolf
Geändert von RolfD (23.08.2012 um 01:46 Uhr)
Sind Sie auch ambivalent?
Lesezeichen