Tengo problemas para controlar una unidad de disquete de 3.5 "con un Arduino Uno.
Tengo la unidad de disquete alimentada con una fuente de alimentación de computadora que está encendida, y el Arduino alimentado por el USB de mi computadora. He cortado la cinta de un conector IDC de 34 pines para poder enrutar los pines a mi Arduino. Puedo encender el motor del disquete y mover el cabezal de lectura / escritura de un lado a otro, pero nunca puedo leer ningún pulso de los pines Track-0 o Index.
Tengo los pines 7, 15, 17, 19 y 25 del disquete conectados a tierra a mi Arduino, y tengo los pines 8, 16, 18, 20 y 26 del disquete conectados a mi arduino como pines de salida para poder controlar la unidad
Espero que el Índice pulse cuando el motor del disco haga una rotación, y que la Pista 0 cambie cuando estoy en el exterior del disco, pero ambos siempre están BAJOS. ¿Me estoy perdiendo de algo?
Aquí está la especificación que encontré para la parte posterior de la unidad de disquete
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
Aquí un esquema de lo que he conectado (La placa en este diagrama de circuito representa el conector IDC que está conectado a la unidad de disquete de 3.5 ").
Aquí hay una foto del conector IDC y etiqueté qué cables están conectados al Arduino.
Aquí está el código que estoy ejecutando.
//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);
}
Aquí está el resultado que estoy obteniendo.
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
ACTUALIZACIÓN: Ahora estoy recibiendo mis resultados esperados debido a la respuesta de geometrikal. Mientras investigaba este problema, encontré algunos ejemplos de código de Arduino a Floppy Drive. Me di cuenta de que estaban configurando sus pines de entrada en ALTO, pero nunca me di cuenta por qué estaban haciendo esto. Después de solucionar mi problema, encontré esto en alguna documentación de Arduino (que me hizo darme cuenta de que los ejemplos de código que tenía estaban usando una versión anterior del IDE de Arduino):
"Antes de Arduino 1.0.1, era posible configurar los pull-ups internos de la siguiente manera:"
pinMode(pin, INPUT); // set pin to input
digitalWrite(pin, HIGH); // turn on pullup resistors`
En Arduino 1.0.1+ puedes hacerlo de esta manera.
pinMode(pin, INPUT_PULLUP);