hallo,
danke für die antworten!
habe das Problem jetzt gelöst. allerdigs nur für Sinus kurven und andere mathematische funktionen.
Der tip kam vom MaWin aus dem Mikrocontroller.net
hier das Programm:
Code:
int stepperXPin = 13;
int stepperXDirPin = 4;
float pi = 3.14159265;
float i = 0.0000001;
int amplitude = 2000;
float frequenz = 3.97;
int motor_statusX = 0; // motor pin HIGH oder LOW
int positionOldX = 0;
int positionX = 0;
long t = 0; // Timer fuer Interval
long zeitaltX = 0; // Timer fuer Motor-Takt
void setup() {
Serial.begin(115200);
pinMode(stepperXPin, OUTPUT);
pinMode(stepperXDirPin, OUTPUT);
}
void loop()
{
t=micros(); // immer nur 1 Aufruf des Zeitgebers in der Schleife!
positionX=sin(t/(100000.0*pi*(frequenz/2)))*amplitude; // sonst unterschiedliche
if(positionX>positionOldX) // Zeiten möglich
digitalWrite(stepperXDirPin, HIGH); // (ich verwende sie eh nur 1x)
else
digitalWrite(stepperXDirPin, LOW);
if(positionX!=positionOldX)
{
if(abs(positionX-positionOldX)>1)
{
Serial.println("cpu zu langsam");
}
digitalWrite(stepperXPin, motor_statusX=!motor_statusX); // Zuweisung!
positionOldX=positionX;
}
}
es läuft die ganze zeit so schnell es geht, und sobald die zu fahrende funktion einen weiteren vollen schritt ergibt wird Dieser sofort ausgeführt.
Leider funktioniert das nur bei mathematischen Funktionen in Abhängigkeit der zeit.
bei x y Koordinaten, die z.b. Wegpunkte sind auf denen zwischendurch interpoliert werden muss geht das nicht.
auch die Berechnungen die man in dem Programm machen kann sind sehr begrenzt, da sonst das zeitlich nicht mehr hin haut. (mehr als ein schritt pro Programm Durchlauf).
Lesezeichen