Ich habe Probleme beim Steuern eines 3,5-Zoll-Diskettenlaufwerks mit einem Arduino Uno.
Ich habe das Diskettenlaufwerk mit einem eingeschalteten Computer-Netzteil und das Arduino mit dem USB meines Computers. Ich habe das Band eines 34-poligen IDC-Steckers durchtrennt, um die Stifte zu meinem Arduino leiten zu können. Ich kann den Diskettenmotor einschalten und den Lese- / Schreibkopf hin und her bewegen, aber ich kann niemals Impulse von den Stiften Track-0 oder Index lesen.
Ich habe die Stifte 7, 15, 17, 19 und 25 von der Diskette, die alle mit meinem Arduino geerdet sind, und die Stifte 8, 16, 18, 20 und 26 von der Diskette, die mit meinem Arduino verbunden ist, als Ausgangsstifte, damit ich steuern kann die Fahrt.
Ich erwarte, dass der Index pulsiert, wenn sich der Plattenmotor dreht, und dass sich Spur 0 ändert, wenn ich mich außerhalb der Platte befinde, aber beide sind immer NIEDRIG. Vermisse ich etwas?
Hier ist die Spezifikation, die ich für die Rückseite der Disketteneinheit gefunden habe
2 /REDWC Input Density Select
4 n/c N/A Reserved
6 n/c N/A Reserved
8 /INDEX Output Index
10 /MOTEA Input Motor Enable A
12 /DRVSB Input Drive Sel B
14 /DRVSA Input Drive Sel A
16 /MOTEB Input Motor Enable B
18 /DIR Input Direction
20 /STEP Input Step
22 /WDATE Input Write Data
24 /WGATE Input Floppy Write Enable
26 /TRK00 Output Track 0
28 /WPT Output Write Protect
30 /RDATA Output Read Data
32 /SIDE1 Input Head Select
34 /DSKCHG Output Disk Change/Ready
Hier ein Schema dessen, was ich angeschlossen habe (Das Steckbrett in diesem Schaltplan stellt den IDC-Anschluss dar, der in das 3,5-Zoll-Diskettenlaufwerk eingesteckt ist.)
Hier ist ein Foto des IDC-Anschlusses und ich beschriftete, welche Drähte mit dem Arduino verbunden sind.
Hier ist der Code, den ich ausführe.
//constants
static const int IN = LOW;
static const int OUT = HIGH;
static const int pulseDelayTime = 6;
//pins
int indexPin = 2; //8 on the drive INDEX
int track0Pin = 3; //26 on the drive. TRACK 0
int dirPin = 6; //18 on the drive. DIRECTION
int stepPin = 7; //20 on the drive. STEP
int motorEnableBPin = 9; //16 on the drive. MOTOR ENABLE B
unsigned long motorSpinTime = 1000UL; //in ms
void setup() {
//initial delay
delay(3000);
//setup serial monitor
Serial.begin(9600);
//setup pins.
pinMode(dirPin, OUTPUT);
pinMode(stepPin, OUTPUT);
pinMode(motorEnableBPin, OUTPUT);
pinMode(indexPin, INPUT);
pinMode(track0Pin, INPUT);
//turn the motor off initially
digitalWrite(motorEnableBPin, HIGH);
//print state here.
printState("Setup done.");
//spin the disk some.
printState("Begin to spin motor");
spinMotorForThisManyMs(motorSpinTime);
spinMotorForThisManyMs(motorSpinTime);
printState("Done spinning motor");
//step read/write head all the way in.
stepAllTheWayIn();
//spin the disk some more.
printState("Begin to spin motor");
spinMotorForThisManyMs(motorSpinTime);
spinMotorForThisManyMs(motorSpinTime);
printState("Done spinning motor");
//step read/write head all the way out.
stepAllTheWayOut();
//spin the disk even more.
printState("Begin to spin motor");
spinMotorForThisManyMs(motorSpinTime);
spinMotorForThisManyMs(motorSpinTime);
printState("Done spinning motor");
//never completes.
waitForIndex();
}
void loop() {
}
//spins the disk motor for a number of ms and prints the state
void spinMotorForThisManyMs(unsigned long msToSpin) {
//start spinning
digitalWrite(motorEnableBPin,LOW);
//delay.. keep printing the state
unsigned long maxTimeMs = millis() + msToSpin;
while(millis() < maxTimeMs ) {
printState("Spinning");
}
//stop spinning
digitalWrite(motorEnableBPin,HIGH);
}
//step the read/write head all the way to the center
void stepAllTheWayIn() {
for(int i=0;i<100;i++) {
printState("Stepping In");
stepInALittle();
}
}
//step the read/write head all the way to the outside
void stepAllTheWayOut() {
for(int i=0;i<100;i++) {
printState("Stepping Out");
stepOutALittle();
}
}
//print the state of the index and track
void printState(const char* charPrint) {
Serial.print(" Index:");
Serial.print(digitalRead(indexPin));
Serial.print(" Track:");
Serial.print(digitalRead(track0Pin));
Serial.print(" ");
Serial.println(charPrint);
}
//move the head towards the outside a little
void stepOutALittle() {
digitalWrite(dirPin,HIGH);
stepPulse();
}
//move the head towards the center a little
void stepInALittle() {
digitalWrite(dirPin,LOW);
stepPulse();
}
//pulse the step pin
void stepPulse() {
digitalWrite(stepPin,LOW);
delay(pulseDelayTime);
digitalWrite(stepPin,HIGH);
}
//waits for the index to trigger. this never gets completed.
void waitForIndex() {
printState("beginning to wait for index pin to pulse");
//start spinning
digitalWrite(motorEnableBPin,LOW);
//wait for pulse
while(digitalRead(indexPin));
//wait for end of pulse 0
while(!digitalRead(indexPin));
printState("end of waiting for index pin to pulse");
//stop spinning
digitalWrite(motorEnableBPin,HIGH);
}
Hier ist die Ausgabe, die ich bekomme.
Index:0 Track:0 Setup done.
Index:0 Track:0 Begin to spin motor
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Done spinning motor
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Stepping In
Index:0 Track:0 Begin to spin motor
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Done spinning motor
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Stepping Out
Index:0 Track:0 Begin to spin motor
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Spinning
Index:0 Track:0 Done spinning motor
Index:0 Track:0 beginning to wait for index pin to pulse
UPDATE: Ich erhalte jetzt meine erwarteten Ergebnisse aufgrund der Antwort von geometrikal. Bei der Untersuchung dieses Problems habe ich einige Codebeispiele von Arduino auf Diskettenlaufwerk gefunden. Mir ist aufgefallen, dass sie ihre Eingangspins auf HIGH setzen, aber ich habe nie bemerkt, warum sie das tun. Nachdem ich mein Problem behoben hatte, fand ich Folgendes in einer Arduino-Dokumentation (wodurch mir klar wurde, dass ich Codebeispiele mit einer älteren Version der Arduino-IDE verwendet hatte):
Vor Arduino 1.0.1 war es möglich, die internen Pullups wie folgt zu konfigurieren:
pinMode(pin, INPUT); // set pin to input
digitalWrite(pin, HIGH); // turn on pullup resistors`
In Arduino 1.0.1+ können Sie dies auf diese Weise tun.
pinMode(pin, INPUT_PULLUP);
quelle
Antworten:
Demnach (toter Link):
http://bitsavers.trailing-edge.com/pdf/nec/FD1035_Product_Description_Jul84.pdf
Die Ausgänge sind Open-Collector-Ausgänge, daher ist ein Pull-Up-Widerstand erforderlich. Sie können stattdessen die internen Klimmzüge von Arduino auf diesen Stiften durch aktivieren
quelle
Sie sollten ersetzen
int
mitunsigned long
in allen Orten , an denen Sie sich mit der Zeit in Millisekunden beschäftigen.Der Punkt ist , dass
millis()
kehren einunsigned long
, so verwendetint
zum Speichern vonmillis()
Wert, Sie einen Verlust von Informationen haben durch automatische Besetzung durch den Compiler ausgeführt.Die Änderungen, die Sie durchführen müssen, sind:
und:
Beachten Sie, dass ich auch einige Optimierungen in der Warteschleife vorgenommen habe, indem ich die maximale Zeit einmal berechnet und dann
millis()
direkt mit diesem Wert verglichen habe. Dies ist nicht obligatorisch, aber ich finde es ein bisschen sauberer.quelle