Hallo zusammen!
Für meine Facharbeit muss ich einen Motor mit dem o. g. Looper programmieren. Ziel ist es damit einen Extruder zu betreiben und während des Betriebs die Drehzahl mit einem Poti einzustellen.
Zu erst der hardwareseitige Aufbau:
Wie im Anhang zu sehen betreibe ich den Motor über den Loopdriver. Als Netzteil dient mir ein 24 V Siemens Logo-Netzteil. Die Steuerleitungen werden mit einem Uno verbunden.
Des Weiteren heabe ich noch einen 10k-Poti mit dem ich in den Analogeingang A0 gehe, um die Drehzahl zu verstellen. Eine LCD-Anzeige dient der Ausgabe der aktuellen Drehzahl/Sek.
Die maximale Drehzahl soll 5 Umdrehungen/Sek. sein und minimale 0,0... (Da muss ich nochmal schauen, was sinvoll ist).
Zum Code selbst:
Ich habe erstmal einen einfachen Code geschrieben, um zu testen, ob die Drehzahl auch richtig umgewandelt wird. Dabei gebe ich die Drehzahl als Gleitkommazahl ein und der Uno rechnen daraus die nötige Pulsdauer aus.
Das Funktioniert auch soweit. Anbei der einfache Code:
const int STEP_PIN = 9;
const int Enable_PIN = 13;
const int DIR_PIN = 8;
float val = 0.5; //Gewünschte Drehzahl/Sekunde
int d = 0; //Pulszahl/Umdrehung
void setup()
{
pinMode(STEP_PIN, OUTPUT);
pinMode(Enable_PIN, OUTPUT);
pinMode(DIR_PIN, OUTPUT);
digitalWrite(STEP_PIN, LOW);
digitalWrite(Enable_PIN, LOW);
digitalWrite(DIR_PIN, HIGH);
}
void loop()
{
d = 999997/(val*6400);
//Serial.println(d);
digitalWrite(STEP_PIN, HIGH);
delayMicroseconds(3);
digitalWrite(STEP_PIN, LOW);
delayMicroseconds(d);
}
Was mir dabei aufgefallen ist, dass die Drehzahl sehr langsam wird, sobald ich mit der Zeile "Serial.println(d);" die Pulszahl versuche auszugeben. Ist das normal, wie sind da eure Erfahrungen?
als nächstes habe ich versucht die Drehzahl über einen Poti zu steuern und dabei die Drehzahl über LCD auszugeben.
Mein erstes Problem, ich kann ihm nicht beibringen, dass er die Potiwerte in eine Gleitkommazahl ausgibt bzw. in eine solche umwandelt.
Das nächste Problem, obwohl er anscheinend den ganzzahligen Werte des Potis richtig mit der map-Funktion umwandelt, stimmt die Drehzahl nicht. Der Motor dreht beim Drehen am Poti unregelmäßig (Die Drehzahl wird mal langsamer, mal schneller).
Anbei der Code:
#include <LiquidCrystal.h>
LiquidCrystal lcd(2, 3, 4, 5, 6, 7);
const int STEP_PIN = 9;
const int Enable_PIN = 13;
const int DIR_PIN = 8;
const int potiPin = A0;
int potiWert = 0;
float pwm = 0;
int d = 0;
void setup()
{
lcd.begin(16, 2);
lcd.setCursor(0, 0);
lcd.print("Drehzahl/Sek.:");
pinMode(STEP_PIN, OUTPUT);
pinMode(Enable_PIN, OUTPUT);
pinMode(DIR_PIN, OUTPUT);
digitalWrite(STEP_PIN, LOW);
digitalWrite(Enable_PIN, LOW);
digitalWrite(DIR_PIN, HIGH);
}
void loop()
{
lcd.setCursor(0, 1);
lcd.print(pwm);
potiWert = analogRead(potiPin);
pwm = map(potiWert, 0, 1023, 0, 5);
d = 999997/(pwm * 6400);
digitalWrite(STEP_PIN, HIGH);
delayMicroseconds(3);
digitalWrite(STEP_PIN, LOW);
delayMicroseconds(d);
}
Eine letzte grundsätzliche Frage, gibt es eine Möglichkeit die Impulse für den Motor nicht über delay-Funktion auszugeben, da ja dabei der Skript jedesmal angehalten wird.
Ich hoffe ihr könnt mir dabei Helfen, da ich langsam am verzweifeln bin.
Vielen Dank im Voraus und viele Grüße
Alex