Projekt Drehachse für Fräsmaschine

Hallo Zusamen,
ich plane gerade mir eine Drehachse für meine Fräsmaschine zu bauen, diese Achse soll mit der Spindel Synchonisiert werden können. Dazu benötige ich natürlich zwei Encoder Eingänge. Also benötige ich 4 Interrupts. Kann der Duemilanove um progammiert werden oder kann der Mega das? Wie würdet Ihr das machen?
Vielen Dank für eure Hilfe
DrFlopp

Wieso brauchs Du 2 interrups pro Encoder? Genügt da nicht nur einer?
Viele Grüße Uwe

Ich benötige Kanal B und Kanal B des Encfoders für die Auswertung mit voller Auflösung.

Du willst die doppelte Auflösung indem Du die Flanken beider Kanäle kontrollierst?
Kontrollierst Du die ansteigende und abfallende Flanke?
Grüße Uwe

Ich benutze natürlich beide Flanken.

Hallo Leute,
ich habe jetzt die Hardware zu sammen. Ich habe einen Seeeduino V2.21, eine Schrittmotor und einen Pololu Schrittmotortreiger. Als Sensor für die Drehgeschwindigkeit der Frässpindel habe ich einen Encoder mit 16 Imp.
Jetzt suche ich ein Beispilprogramm zur Ansteuerung des Pololu Treibers.
Vielen Dank für eure Hilfe
DrFlopp

Wenn eh nur Flanken interessieren kann man jeden beliebigen Pin für Interrupts benutzen Arduino Playground - PcInt.

Allerdings verstehe ich immer noch nicht wieso man dazu 4 Interrupts braucht. Man kann im Interrupt doch auslesen ob jetzt gerade HI oder LO anliegt und daraus die Flanke folgern.

Mein Ursprünglicher Plan war zwei Encoder auslesen zu wollen. Diesen habe ich jetzt geändert. ich versuche zunächst einen gesteuerten Schrittmotor und die an der Frässpindel vorhandene Lichtschranke zu benutzen. Bei dieser Konfiguration benötige ich natürlich nur einen Interrupt.
Jetzt arbeite ich an der Ansteuerung des Schrittmotors.
Viele Grüße
DrFlopp

Hallo Leute,
die Stepper.h bereitet mir noch ein kleines Problem.

// initialize the stepper library on pins 8 through 11:
Stepper myStepper(stepsPerRevolution, 8, 9,10,11);

Welcher Pin steht wofür?
Vielen Dank für Eure Hilfe.
DrFlopp

Ich zitiere:

Stepper(steps, pin1, pin2, pin3, pin4)
[...]
pin1, pin2: two pins that are attached to the motor (int)

pin3, pin4: optional the last two pins attached to the motor, if it's connected to four pins (int)

Ist also eine Frage, was für einen Schrittmotor bzw. wieviele Steuerleitungen du daran hast...

Ich bin kein Elektroniker, heist das ich kann den Schrittmotor direkt an die Pins klemmen?
Wenn ich das richtig verstehe kann ich meinen Pololu-Treiber so nicht mit der Stepper.h betreiben.
Ich habe einen Pololu Treiber, der braucht einen Enable- einen Direction- und einen Stepp-Pin.
Gruß
DrFlopp

Hallo,

welchen Treiber benutzt Du ?

Ich selbst bin gerade dabei einen Pololu A4988 Schrittmotortreiber + Spannungsregler in Betrieb zu nehmen.
Die Grundschaltung läuft schon und per Drahtbrücken kann ich Schrittweite und Richtung einstellen.

Gruss
Kurti

Hallo Kurti,
ich benutze auch einen A4988. Der scheind aber nicht mehr zu wollen oder ich mache etwas grundlegend falsch.
Heute mittag habe ich die Example Stepper ausprobiert mit dem Pololu, das hat scheinbar funktioniert, dachte ich.
Dann habe ich das System auf meine Mechanische Hardware losgelassen und nichts funktionierte mehr.
Jetzt habe ich versucht ein Programm zu schreiben das ohne die Stepper.h auskommt. Doch auch das hat nicht funktioniert.

SteuerungV3.pde (1.78 KB)

Das mit den Anhängen bekomme ich immer noch nicht hin, Hier mein Code:

/*
Drehachsensteuerung

*/
int i; // Getriebeübersetzung
int s; // Sinunsfunktion
int R = 10; // Rechteckausgang
double w; // Omega
float Speed; // Spindeldrehzahl
unsigned long T1; //Zeitstepel 1
unsigned long T2; //Zeitstepel 2

// Encoder Interruptports
#define A 2 //Belegung der Encoderkanale A

void setup() {
i=40;
pinMode(R,OUTPUT);
pinMode(8,OUTPUT); //Enable Pin
pinMode(9,OUTPUT); //Direction Pin

Serial.begin(9600); // initialize the serial port:

attachInterrupt(0,CHAInt,RISING); // Interrupt 0 führt CHAInt aus mit wechslende Flanken
pinMode(2,INPUT); // Pin2 als Input
digitalWrite(2,HIGH); // Interne Pull Ups benutzt
}

void loop() {

Speed= 1000/(T2-T1);//16; //Spindeldrehzahl
//Serial.println(Speed);
Serial.println(s);
// Rechtecksignal
w= (Speed364)/(16200i);
s=5sin(wmillis()*1000);
if (s<0){
digitalWrite (R, LOW);
}
if (s>0){
digitalWrite (R, HIGH);
}
digitalWrite(8, HIGH); // Enable Pololu
digitalWrite(9, LOW); // Direktion Pololu

}
void CHAInt ()
{
int Aread=0;

Aread=digitalRead(A);

if (Aread==HIGH){
T1 = T2;
T2 = millis();

}
}

A4988 oder A4983 ?

Wenns der Pololu Stepper Motor Driver ist dann der A4983.

Der A4983 ist ein Konstantstromdriver. Damit der A4983 den Strom limitieren kann muß die Versorgungspannung genügend groß sein, damit die Spuleninduktanz den Strom nicht limitiert. Dei Versorgungspannung des A4983 sollte die 4-fachen Nennspannung des Motors sein.

Für die Steuerung genügen 2 Pins: Richtung (directioon) und Steps. die restlichen Pins sind für Standby, und Microschritte.
Grüße Uwe

Hallo,

meine Grundschaltung sieht so aus:

VMOT + GND = Eingangsspannung
1A - 1B = Wicklung 1
2A - 2B = Wicklung 2
Brücke von 5 V nach VDD = Betriebsspannung des Treibers auf 5 Volt
Arduino GND mit Pololu GND verbinden
Blink-Sample-Scetch laden und Pin 13 an Step
DIR auf 5 Volt oder GND = Drehrichtung einstellen

der Schrittmotor macht jetzt ganze Schritte im Sekundentakt

das Delay verkleinern und Dein Motor wird schneller

Testbetrieb erfolgreich ??

Gruss

Kurti

Hallo Kurti,
Das mit den Delays habe ich mir abgewöhnt. Das Lämt alle anderen Prozesse die Du in deinem Programm noch so betreieben willst. Besser man benutzt andere Zeitfunktionen. Ich will ja eine Drehachse mit einer anderen Synchron laufen lassen. Daher messe ich zunächst die Drehgeschwindigkeit der ersten Achse, Multipliziere diese mit einem Übersetzungsverhältnis, rechne diese in eine Frequenz eines Rechteksignals um und gebe diese auf den Output.
Die ansteuerung des Poolus ist also eigentlich so ähnlich wie bei Dir, doch leider hat mein Pololu den NAchmittag icht überlebt schade, oder um es deftiger auszudrücken "STUHL". Das andere Wort mit "Sch" macht die Bildung kaput.
Gruß
DrFlopp

Hallo,

ich schrieb von einem Test.
Dazu habe ich Dir ein allseits bekanntes und sehr einfaches Programm empfohlen.
Damit soll natürlich keine Produktion laufen.

Wenn Du dann den Fehler in Deiner Konfiguration gefunden hast,
mußt Du natürlich ein richtiges Programm schreiben.

Gruss
Kurti

Hallo Kurti,
ich habe den kleineren Pololu ohne die Stpannungaregler.

Ich versorge den Pololu vom Arduino mit 5V und liefer über ein Labornetzteil den Motorstrom 12V. Ich habe aus Example " Stepper Motor Control - one revolution" Programm geladen, aus den vier Pinnbelegung zwei gelöscht und diese an Dir und Stepp geklemmt. Das hat funktioniert. Dann habe ich den Aufbau in den Nachbarraum getragen und an ein anderes Labornetzteil geklemmt. Der unterschied war erstes Netzteil 40A - zweites Netzteil 4A.
Ich habe mit dem OSCA die Signale gemessen, und war sehr erstaunt dass aus dem Stepper.h auf beiden Kanälen Rechtecksignale liegen.
Nach dem was Ihr schreibt und nach dem wie ich den Treiber verstanden habe war das großer Quatsch und reiner Zufall dass das funktioniert hat.
Da ich die Stepper.h nicht nachvollziehen kann, habe ich mir gedacht ich schreibe mir ein Programm, dass den Stepper so ansteuert wie ich glaube dass es richtig ist. Den Stepper-Pin mit einem Rechtecksignal und den Dir-und En-Pin jeweils mit einem konstanten High- oder Low-Pegel.
Der Rest meines Programms dient zur Auswertung der Drehzahl auf die ich meinen Stepper synchronisieren will. Hierzu habe ich auch noch ein kleines Problem, dazu komme ich später noch einmal.
Natürlich habe ich auch schon versuche gemacht mit konstanten Frequenzen

Hallo,

Du glaubst, deine Hardware ist eventuell defekt.
Du möchtest allerdings anscheinend keine systematische Fehlersuche betreiben.

Viel Erfolg bei Deiner Methode.

Kurti
PS.: beruflich bin ich Programmierer und Inbetriebnehmer von Maschinen mit mehr als 20 Jahren Berufserfahrung,
bestimmt ist Deine Methode besser, funktiniert schließlich ohne 'Delay' !