> ist doch alles fein
> naked isr's
ah ja das stimmt natürlich, nicht dran gedacht.
> aber da hängen bei RP6Lib ja nicht nur die Stopwatches dran... leider.
Du kannst das auch so drehen, dass Du die anderen Sachen in den Timer1 Overflow Interrupt reinbaust um den Timer0 komplett frei zu bekommen.
Der RC5 Kram wird wegen des Timings nicht einfach so zu portieren sein (geht aber sicher auch irgendwie), aber die sanfte Änderung der PWM Werte und die paar anderen Softwaretimer sind z.B. kein großes Problem, einfach die Zeiten grob anpassen, das ist alles unkritisch.
Das die LED ab und zu blinkt wenn keine andere an ist, kannst Du ja komplett rausnehmen und als Thread realisieren.
Die Geschwindigkeitsmessung ist das einzige was wirklich kritisch ist. Da musst Du SPEED_TIMER_BASE anpassen.
MfG,
SlyD
PS:
Naja 5x pro Sekunde, die wichtigen Dinge wie Geschwindigkeit messen sind alle in ISRs drinaber auch vom hochfrequenten Aufruf von task_motionControl,
Das ist nur damit sich die PWM Werte nicht zu abrupt ändern.sowie von der TIMER0_COMP_vect mit Ausgabe der PWM Werte ab.
Dort wird die Regelung komplett deaktiviert wenn Du die PWM so drastisch runterdrehstDas heisst aber, das die Regelwerte quasi zeitungebunden bzw. CPU-Lastabhängig verarbeitet werden? Das würde vielelicht das besagte Schwingen erklären? Die CT'bot Lösung verwendet dagegen z.B. einen zeitsyncronisierten PID Regler mit Änderung der PWM Rate im Anschluß an den Regelkreis ohne weitere Laufzeitabhängigkeiten. Quasi so als wäre die task_motionControl ein Teil der TIMER0_COMP_vect.![]()
Warum die überhaupt die 120Hz da drin haben ist mir schleierhaft, man verwendet bei so kleinen Motoren so niedrige PWM Frequenzen aus oben schon geanannten Gründen normalerweise nicht. Das hat fast nur Nachteile (egal ob mit Regelung oder ohne).
PPS:
Die Ketten des RP6 sind übrigens träger als die kleinen Räder des c't Bot.
Daher macht dort eine schnellere Regelung auch mehr Sinn.
Zudem ist die Auflösung beim c't Bot nur 60 Flanken / Umdrehung, die Software muss daher die Zeit zwischen zwei Encoderflanken messen und führt die Regelung bei jedem neuen Puls aus. Das erhöht die CPU Last natürlich enorm.
Der RP6 hat eine 10x höhere Encoderauflösung und verzichtet daher auf sowas.
Lesezeichen