Hallo Hans
Ich kopiere auch selten Programme, schau mir aber oft an wie andere ein Problem angehen und lösen(?). Leider sind Programme auf meinem Level ohne Bummelschleifen und ohne Interrupts recht rar hier. Bummelschleifen sind eine Sackgasse weil der Processor (ohne Interrupts) nichts anderes tun kann. Interrupts sind, vor allem für Einsteiger, sehr gefährlich wegen der asyncronen Ausführung. Deshalb mache ich meine Tests mit kleinen Schrittketten, das ist Übersichtlich und der Processor ist schnell genug dafür bei kleinen Progs.
PWM hat der Processor schon serienmässig eingebaut, nur so kann er mit nur einem Pin die Drehzahl des Motors steuern. Allerdings fehlt eben eine einstellbare Rampe. Natürlich sollte das ganze noch drehzahlgeregelt sein, aber der Weg dahin führt über erfassen und messen der Odo-Daten, das dauert bei mir noch etwas. Hier mal zur Inspiration mein Ansatz zum "kalibrieren" der Odo-Sensorik:
Code:
int init_odo() {
StatusLED(YELLOW); MotorDir(RWD,FWD);
odo_min_l=odo_max_l=odo_low_l=odo_high_l=count_l=0;
odo_min_r=odo_max_r=odo_low_r=odo_high_r=count_r=0;
MotorSpeed(150,150);
for (j==0; j<5000; j++) {
OdometrieData(data);
if (data[0] < odo_min_l) odo_min_l=data[0];
if (data[0] > odo_max_l) odo_max_l=data[0];
if (data[1] < odo_min_r) odo_min_r=data[1];
if (data[1] > odo_max_r) odo_max_r=data[1];
for (i=0; i<200; i++);
}
MotorSpeed(0,0);Msleep(100);
OdometrieData(data);
odo_low_l=((odo_min_l + odo_max_l)/3); // je ein drittel high-nix-low
odo_high_l=((odo_min_l + odo_max_l)/3)*2;
if (data[0] >= ((odo_min_l + odo_max_l)/2)) odo_bit_l=1; else odo_bit_l=0;
odo_low_r=((odo_min_r + odo_max_r)/3); // je ein drittel high-nix-low
odo_high_r=((odo_min_r + odo_max_r)/3)*2;
if (data[1] >= ((odo_min_r + odo_max_r)/2)) odo_bit_r=1; else odo_bit_r=0;
MotorDir(BREAK,BREAK);
}
Während der Messung fährt mein asuro FWD,RWD um das Störlicht von allen Seiten mitzumessen. Ich erfasse die jeweiligen Min und Max-Werte und setze dieSchwellen für High/Low auf jeweils 1/3 und 2/3 der gesammten Wertebereiche. Das funzt auch schon recht gut, nur die extremen "Ausrutscher" sollten noch rausgefiltert werden. Da ich auf glatten Fliesen teste, darf mein asuro keinen Schlupf an den Rädern haben.
Gruß
mic
Lesezeichen