INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Beschleunigungs/Bremsrampe
04.09.2014, 11:51
Beitrag #1
Beschleunigungs/Bremsrampe
Hallo community,

Ich hoffe das zählt jetzt nicht schon als Doppelthread! Also zu meinem Problem.
Arduino + Nunchuk + Pololu
Ich finde einfach keinen zielführenden Ansatz für ein sanftes Beschleunigen bzw. Abbremsen der Schrittmotorbewegung. Der Nunchuk liefert Werte von -127 bis 128 nahezu stufenlos. Ich möchte die tatsächliche Beschleunigung schrittweise bis auf den Wert des Nunchuks ansteigen lassen. Das klappt auch bis auf ein paar Sonderfälle. Aber wie bekomme ich das jetzt mit den Impulsen oder viel mehr mit den Pausen dazwischen hinß Es sollne natürlich beide Achsen gleichzeitig bedient werden, die Impulse sollen gezählt werden - und die Nachführung per TimerInterrupt funkt da auch noch dazwischen. Ich brauch keine fertige Programmierung - das will ich selbst hinkriegen - nur eine zündende Idee!
Wer kann helfen??
Unten der angehängte Quellcode

MfG Grissu112

Code:
long racount = 0; // Schrittzaehler RA
long decount = 0; // Schrittzaehler DE
int joyX = 0; // Nunchuk X-Achse
int joyY = 0; // Nunchuk Y-Achse
int butZ = 0; // Nunchuk Z-Button
int tmpX = 0; // aktuelle Beschleunigung X-Achse
int tmpY = 0; // aktuelle Beschleunigung Y-Achse
int timerX = 0; // Umlaeufe je Impuls X
int timerY = 0; // Umlaeufe je Impuls Y
int sw = 10; // Rampensteigung
int NS = 0; // Zeiger Nord- oder Suedhalbkugel 0=nord
int OW = 0; // Zeiger Ost- oder Westlage Teleskop 0=ost

void setup()
{
  pinMode(A0, INPUT); //Ersatz fuer Nunchuk X
  pinMode(A1, INPUT); //Ersatz fuer Nunchuk Y
  pinMode(2, OUTPUT); // microstep
  pinMode(3, INPUT); // Ersatz fuer Nunchuk Z
  pinMode(4, OUTPUT); // RA Dir
  pinMode(5, OUTPUT); // RA Step
  pinMode(6, OUTPUT); // DE Dir
  pinMode(7, OUTPUT); // DE Step
}


void loop()
{
joyX = (analogRead(A0) - 512) / 5;
joyY = (analogRead(A1) - 512) / 5;
butZ = digitalRead(3);

timerX ++;
if (joyX < 0) {digitalWrite(4, HIGH); joyX = abs(joyX);} else {digitalWrite(4, LOW);} // Drehrichtung
if (tmpX < joyX - sw) tmpX = tmpX + sw;
else if (tmpX > joyX + sw) tmpX = tmpX - sw;
else {tmpX = joyX;}

timerY ++;
if (joyY < 0) {digitalWrite(6, HIGH); joyY = abs(joyY);} else {digitalWrite(6, LOW);} // Drehrichtung
if (tmpY < joyY - sw) tmpY = tmpY + sw;
else if (tmpY > joyY + sw) tmpY = tmpY - sw;
else {tmpY = joyY;}

if (butZ == 1) {digitalWrite(2, LOW);} else digitalWrite(2, HIGH); // microschritt oder vollschritt          

if (tmpX == 0) timerX = 1;
else if (tmpX > 100/timerX) {
    digitalWrite(5, LOW);
    delayMicroseconds (1);
    digitalWrite(5, HIGH);
    delayMicroseconds (1);
    digitalWrite(5, LOW);
        if (digitalRead(4) == HIGH) {racount = racount - 1 -(15*butZ);}
        else {racount = racount + 1 +(15*butZ);} timerX = 0;}

if (tmpY == 0) timerY = 1;
else if (tmpY > 100/timerY) {
    digitalWrite(7, LOW);
    delayMicroseconds (1);
    digitalWrite(7, HIGH);
    delayMicroseconds (1);
    digitalWrite(7, LOW);
        if (digitalRead(6) == HIGH) {decount = decount - 1 -(15*butZ);}
        else {decount = decount + 1 +(15*butZ);} timerY = 0;}
}
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste