1 votos

Motor del disco duro girando

Estoy intentando hacer funcionar un motor hdd usando el siguiente enlace. http://theamateurprogrammer.blogspot.hk/2014/02/revitalizing-old-hard-drive-motors.html

En lugar de utilizar Audrino estoy usando PIC16F73.Traté de recrear el código en MPLAB pero no pude convertir micros() función. Por lo tanto, estoy tratando de crear la forma de onda que se muestra como en la fig. enter image description here

Pero no pude calcular el periodo de tiempo correcto para el cambio. He incluido mi código de conmutación.

PORTBbits.RB0 = 1;
   PORTBbits.RB1 = 0;
   PORTBbits.RB2 = 0;
   Delay_x100uS(45);

   PORTBbits.RB0 = 1;
   PORTBbits.RB1 = 1;
   PORTBbits.RB2 = 0;
   Delay_x100uS(15);

    PORTBbits.RB0 = 0;
   PORTBbits.RB1 = 1;
   PORTBbits.RB2 = 0;
     Delay_x100uS(45);

     PORTBbits.RB0 = 0;
   PORTBbits.RB1 = 1;
   PORTBbits.RB2 = 1;
   Delay_x100uS(15);

    PORTBbits.RB0 = 0;
   PORTBbits.RB1 = 0;
   PORTBbits.RB2 = 1;
    Delay_x100uS(45);

     PORTBbits.RB0 = 1;
   PORTBbits.RB1 = 0;
   PORTBbits.RB2 = 1;
   Delay_x100uS(15);

¿Cuál debería ser el tiempo de conmutación correcto?

8voto

user4245 Puntos 324

La forma de onda base se puede dividir en 6 puntos, cada punto con el mismo retardo entre ellos. La longitud de ese retardo define la velocidad del motor.

enter image description here

Los 6 puntos o fases son:

  1. Fase A ALTA
  2. Fase C BAJA
  3. Fase B ALTA
  4. Fase A BAJA
  5. Fase C ALTA
  6. Fase B BAJA

Observa que la secuencia de fases se repite, pero las señales se invierten. Básicamente son 3 ondas cuadradas con un desfase de 120º.

Otra forma de verlo es como un círculo dividido en 6 segmentos, cada uno de los cuales define un cambio en el nivel de la señal (la señal cambia en las interfaces de cada segmento):

enter image description here

Mientras trabajas alrededor del círculo, el motor gira.

Si creara anillos concéntricos para cada una de las tres fases, se vería mejor cómo se activan y desactivan e interactúan entre sí:

enter image description here

De ahí se puede ver cómo tres bobinas A B y C situadas A a las 3:00, B a las 7:30 y C a las 10:30 (90°, 210° y 330°) la interacción entre ellas forma 6 localizaciones distintas - cuando A está encendida el imán es atraído hacia A, cuando B está encendida, es atraído hacia B, pero cuando tanto A como B están encendidas es atraído hacia la mitad del camino entre ambas.

En realidad, un motor suele tener múltiplos de 3 bobinas formando múltiplos de 6 puntos alrededor del círculo, lo que aumenta el par, la suavidad de giro, etc.

Así que tu código sería en realidad mucho más sencillo en cuanto a la conmutación:

PORTBbits.RB0 = 1;  // Phase 1
Delay_x100uS(speed);
PORTBbuts.RB2 = 0;  // Phase 2
Delay_x100uS(speed);
PORTBbuts.RB1 = 1;  // Phase 3
Delay_x100uS(speed);
PORTBbits.RB0 = 0;  // Phase 4
Delay_x100uS(speed);
PORTBbuts.RB2 = 1;  // Phase 5
Delay_x100uS(speed);
PORTBbuts.RB1 = 0;  // Phase 6
Delay_x100uS(speed);

¿Qué valor debe tener la "velocidad"? Como ya he dicho, define la velocidad de rotación del motor. Yo sugeriría empezar con un valor alto para que el motor empiece lento, y luego disminuirlo gradualmente, acelerando así el motor hasta una velocidad más alta. ¿Tal vez vincular el valor a una entrada analógica y utilizar un potenciómetro para ajustar la velocidad?

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X