-
-
Erfahrener Benutzer
Roboter Genie
Hallo,
MC_LEFT_IMAX
MC = MotorControl,
Left = Links
I = Integrator,
MAX = Maximum
Der I Wert muss ja begrenzt werden - hier auf 420 da 420 / 2 = 210 ist (PWM maximalwert)
Wird ganz zum Schluss dann nochmal begrenzt - das kann eigentlich sogar wegfallen (für den pos. MAX Wert) - ist nur drin falls man doch mal noch andere Terme ergänzt...
(ja genau - DU brauchst die Begrenzung am Schluss dann wieder
)
volatile = flag für den Compiler, Variable die in einer Interrupt Routine jederzeit verändert werden kann.
/ 2 ist für die 8-Bit CPU sehr einfach zu berechnen (shift um 1 nach rechts). Man kann da natürlich auch mit anderen Werten experimentieren und das ganze entweder weiter mit Integer Werten berechnen und einfach skalieren (*1000 (auf long Variablen ändern) dann rechnen hinterher wieder durch 1000 teilen - ganz grob gesagt)
Oder doch floatingpoint verwenden - dann kannst Du auch anfangen und die normalen Formeln mit ki, kp und kd zu benutzen.
Der Code in der RP6 Bibliothek ist da an dieser Stelle schon etwas "optimiert" damit das nicht viel Rechenzeit kostet und mehr für das Anwenderprogramm übrig bleibt.
Der MEGA32 kann natürlich auch komplexere floating point Berechnungen durchführen... je nachdem wie komplex macht es dann aber ggf. sinn den Controller mit dem I2C Slave Programm nur noch als Motorcontroller (und ACS usw.) zu verwenden und alles andere einem zweiten Controller auf einem Erweiterungsmodul zu überlassen.
MfG,
SlyD
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- Anhänge hochladen: Nein
- Beiträge bearbeiten: Nein
-
Foren-Regeln
Lesezeichen