Hallo
ich bastle gerade an der Firmware für meine Schrittmotorsteuerung und
habe ein kleines Problem, an dem ich jetzt schon einige Zeit sitze und
einfach nicht weiterkomme.
Für den Takt meines Schrittmotorcontrollers (TMC261) verwende ich die
Timerkombi 4&5 als 32bit Timer eines PIC32MX575F512H.
Den Timer initialisiere ich wie folgt:
1 | T4CONbits.TON = 0;
|
2 | T4CON = 0x00;
|
3 | T5CON = 0x00;
|
4 | TMR4 = 0;
|
5 | TMR5 = 0;
|
6 | T5IE_bit = 1;
|
7 | T5IF_bit = 0;
|
8 | T5IP0_bit = 1;
|
9 | T5IP1_bit = 1;
|
10 | T5IP2_bit = 1;
|
11 | PR5 = 0;
|
12 | PR4 = 8000; // 80 = 1us
|
13 | T4CONbits.TON = 0;
|
14 | T4CONbits.T32 = 1;
|
Des weiteren hab ich dann eine Methode TMC_SetSpeed, die mir eine
Geschwindigkeit in rpm in den Wert für das PR Register umrechnet und
dieses dann setzt.
Das passiert im wesentlichen so:
1 | timer = (unsigned long)ceil( ( 1.0f / rpm ) * 125000.0f );
|
2 | PR5 = 0;
|
3 | PR4 = timer;
|
Zum Problem: Wenn ich die Geschwindigkeit festlege funktioniert das mal
einwandfrei. Setz ich aber später eine neue Geschwindigkeit, dann bleibt
mein Timer irgendwie stehen. Er ist zwar weiter aktiv, aber gibt keinen
Takt mehr aus. Ich kann den Wert dann auch auf den alten zurücksetzen,
aber der Timer bleibt trotzdem stehen.
Ich hab schon alles mögliche versucht, zB. Interrupts während dem Ändern
der PR Register auszuschalten, aber bringt alles nichts.
Wahrscheinlich ists nur ne Kleinigkeit die ich übersehe.
Habt ihr vielleicht eine Idee?
Falls jemand den Quellcode sehen möchte, um was zu überprüfen, bitte
melden.
Kompiliert wird mit mikroe mikroCPro for PIC32
Danke.
Lg. Daniel