TODOPIC
Mecatrónica => Robótica => Mensaje iniciado por: migsantiago en 19 de Abril de 2006, 20:18:45
-
Hola
tengo un motor de disco duro que le saqué a un Caviar de Western Digital, según recuerdo. Seguramente en su buen funcionamiento giraba a 5400rpm.
Ahora lo estoy usando para intentar crear un display giratorio. El motor tiene 3 líneas a las cuales soldé cables naranja, azul y negro. La resistencia que miden las terminales entre cualquier línea es de 6.2ohm.
Y ya lo hice funcionar con un pic16f84a, pero aquí viene la duda... cuando da el quinto paso, que es cuando reinicia el ciclo de pasos, lo da con más fuerza que los demás pasos, se jala más el motor.
Estoy controlando el motor como si fuera de pasos, pero la verdad no sé si esté haciéndolo bien, ya que ese jalón que da en un paso está muy raro. ¿Qué estará pasando?
Les adjunto el programa por si les hace falta:
/*
migsantiago@tutopia.com
Programa que maneja el motor de un disco duro. Según pruebas, los datos para
manejar los pasos del motor son:
Na Az Ne Giro
+ + - inicio
+ - - H
+ - + H
- + + H
- + - H
+ + - H
--------------
+ + - inicio
- + - AH
- + + AH
+ - + AH
+ - - AH
+ + - AH
A2(naranja), A1(azul) y A0(negro) se usarán para las tres terminales del motor.
*/
#include "16F84a.h"
#use delay(clock=4000000)
#fuses XT,NOWDT,NOPROTECT,NOPUT
int8 estados[]={0b00000110,0b00000100,0b00000101,0b00000011,0b00000010};
int8 i=4; //elemento del array estados
/*
int8 edo1=0b00000110;
int8 edo2=0b00000100;
int8 edo3=0b00000101;
int8 edo4=0b00000011;
int8 edo5=0b00000010;
*/
void main (void)
{
set_tris_a(0x00);
while(1)
{
output_a(estados[i]);
delay_ms(500);
i--; //gira antihorario
if(i==0xff) i=4;
}
}
Edito: buscando información encontré este sitio, aunque no me resuelve mi duda...
http://home.clear.net.nz/pages/joecolquitt/0hdd.html
-
Bueno revisando la página de nuevo me doy cuenta de que me estaba haciendo falta un paso, el 001. :D
-
Hola Migsantiago, interesante tu proyecto y viendo que ya alguien te ayudo a solucionar tu problema :) :)
si no es molestia podrias pegar unas fotitos para ver como lo conectas, pues yo tengo varios para practicar, porque normalmente los desarmo por los rodajes.
Gracias
-
Hola migsantiago, te comento que ese tipo de motor lo podes usar como si se tratara de un PaP, pero revisando tu secuencia para el control de las bobinas no llego a deducir cual es, o sea de que forma es la secuencia.
Por otro lado como ese tipo de motor posee muy pocos pasos te recomendaría que uses el método del medio paso ya que el motor accionará de una manera mas suave. También seria interesante que contaras que tipo de drivers usas, ya sea solo conmutando el negativo y los comunes a positivo, o un puente H.
Si quieres y no consigues hacerlos funcionar bien, te puedo dar una mano.
Un saludo.
Atte. CARLOS.
-
Pues yo creo que con la secuencia que ha publicado, y en la que habría que insertar el 001, sí que está implementado el medio-paso, ¿no?
int8 estados[]={0b00000110,0b00000100,0b00000101,0b00000001,0b00000011,0b00000010};
Yo pensaba que los motores de los discos duros eran brush-less, la verdad es que no sé para qué necesita un disco duro un motor de pasos :?
-
Hola amigos
Es un motor de 3 hilos sacado directamente de un disco duro. Se maneja como motor a pasos. Solo hay que encontrar la secuencia de voltajes que hay que aplicar a los 3 hilos para que dé 6 pasos seguidos. Mi error estaba en que encontré la secuencia, pero de 5 pasos en vez de 6 :D
Veguepic, talvez tus motores sean de 4 hilos, solo mídeles las resistencias para determinar como están conectadas las bobinas internamente.
El diagrama luego se los paso, pero no tiene gran ciencia, uso el L293B para pasar los pulsos del pic al motor, por ahora solo me falta agregarle unos diodos para proteger al pic. Uso unas pilas de 3V (2.5 casi jeje) y el motor gira bien. No importa el voltaje que apliquen, mientras la frecuencia sea apropiada, el motor girará a la velocidad que quieran, pero claro, con un torque proporcional al del voltaje.
Chaly, gracias por la ayuda, la secuencia ya está corregida en el siguiente programa. Este ya funciona al 100% pero el motor gira con una velocidad muy lenta (por ahora).
/*
migsantiago@tutopia.com
Programa que maneja el motor de un disco duro. Según pruebas, los datos para
manejar los pasos del motor son:
Na Az Ne Giro
+ + - inicio
+ - - H
+ - + H
- - + H **
- + + H
- + - H
+ + - H
--------------
+ + - inicio
- + - AH
- + + AH
- - + AH **
+ - + AH
+ - - AH
+ + - AH
A2(naranja), A1(azul) y A0(negro) se usarán para las tres terminales del motor.
*/
#include "16F84a.h"
#use delay(clock=4000000)
#fuses XT,NOWDT,NOPROTECT,NOPUT
int8 estados[]={0b00000110,0b00000100,0b00000101,0b00000001,0b00000011,0b00000010};
int8 i=5; //elemento del array estados
/*
int8 edo1=0b00000110;
int8 edo2=0b00000100;
int8 edo3=0b00000101;
int8 edo3.1 = 0b00000001; //faltaba este estado
int8 edo4=0b00000011;
int8 edo5=0b00000010;
*/
void main (void)
{
set_tris_a(0x00);
while(1)
{
output_a(estados[i]);
delay_ms(25);
i--; //gira antihorario
if(i==0xff) i=5;
}
}
La secuencia es cada elemento del array, pasa del 5 al 4, al 3 y así sucesivamente.
Ahora mi problema No. 2 es que para lograr una velocidad decorosa de parte de este motorcito (3000rpm serían geniales) necesito conocer una curva de velocidad vs. tiempo característica de los motores de discos duros. Se tiene que empezar girándolo lento y luego acelerarlo poco a poco, justo como cuando encienden su PC y se oye el zumbido acelerado del disco.
Empecé haciendo programas en los que el tiempo entre pasos se iba decrementando. Empezaba en 25ms (como en el programa) y llegaba hasta 5ms. Pero después de ahí, a los 4ms, el motor se detenía, es decir, acelero muy rápido de 5 a 4ms el paso y el motor se aloca. :D
También hice un programa que hiciera uso del tmr0 pero me costó igual de trabajo y no queda bien.
Chaly, ¿qué me recomiendas?
-
Hola migsantiago, manolo tiene razon ya estaba funcionando con los medios pasos :? perdon.
Pues no creo que por pasar muy rapido de 5 a 4 ms se te pierda el motor, debe de ser mas probable que la baja tensión con cual lo estas alimentando no le genere suficiente potencia para seguir acelerando, yo trataria de aumentar la tensión a por lo menos a 5V y despues nos cuentas.
Un saludo.
Atte. CARLOS.
-
OK, lo intentaré mañana Chaly, ya son las 12am aquí y ya hace sueño. :ni)
Gracias
-
Ya intenté con una fuente de 5V a 1A y el resultado fue el mismo, en cierto punto el motor deja de girar. ¿Podrá ser que falta más potencia? El motor tiene bobinas de 6.2ohm. Haciendo cálculos creo que la corriente requerida es de 0.8A a 5V. No sé como se calcula la corriente en estos motores :oops:
Adjunto el programa acelerador...
/*
migsantiago@tutopia.com
Programa que maneja el motor de un disco duro. Según pruebas, los datos para
manejar los pasos del motor son:
Na Az Ne Giro
+ + - inicio
+ - - H
+ - + H
- - + H **
- + + H
- + - H
+ + - H
--------------
+ + - inicio
- + - AH
- + + AH
- - + AH **
+ - + AH
+ - - AH
+ + - AH
A2(naranja), A1(azul) y A0(negro) se usarán para las tres terminales del motor.
Ahora se ajustará la velocidad empezando lentamente hasta que llegue a una alta
velocidad.
*/
#include "16F84a.h"
#use delay(clock=20000000)
#fuses HS,NOWDT,NOPROTECT,NOPUT
int8 estados[]={0b00000110,0b00000100,0b00000101,0b00000001,0b00000011,0b00000010};
int8 i=5; //elemento del array estados
int8 tiempo_ms=25; //comienza en 25ms
/*
int8 edo1=0b00000110;
int8 edo2=0b00000100;
int8 edo3=0b00000101;
int8 edo3.1 = 0b00000001; //faltaba este estado
int8 edo4=0b00000011;
int8 edo5=0b00000010;
*/
////////////////////////////////////////////////////////////////////////////////
void main (void)
{
set_tris_a(0x00);
while(1)
{
output_a(estados[i]);
delay_ms(tiempo_ms);
i--; //gira antihorario
if(i==0xff)
{
i=5;
if(tiempo_ms>1)
{
tiempo_ms--; //acelera pasos
}
}
}
}
No sé que otra cosa pude ser, necesito conocer la curva de V vs. t para darme idea de la aceleración requerida. :(
-
Mira este artículo, a ver si te sirve de algo:
http://www.epanorama.net/circuits/diskstepper.html
De todas formas, sigo pensando que ese motor no es un paso a paso, sino un brushless :?
-
Gracias Manolo, ya la había revisado. Lo que comenta es que los motores de discos duros viejos antes eran a pasos, pero que los de ahora ya son "voice coil", pero no sé qué es eso, una traducción sería embobinado de voz. Incluso el autor dice que si se conecta el motor a un amplificador de audio se puede obtener sonido :shock:
Me imagino que el problema que tengo ahorita es el de la potencia, a ver que nos comenta el gran Chaly.
Pienso que el motor internamente es como en esta figura:
(http://img75.imageshack.us/img75/5308/hdddrive1vm.gif)
Ya que cuando mido entre cualquier terminal salen 6.2ohm.
-
Hola migsantiago, el gran Manolo tiene razón, este tipo de motores son los llamados brushless, nunca se usaron los PaP en los discos rígidos, pero lo que yo decía es que al poseer el rotor con imán permanente pueden ser usados como motores de paso.
El calculo que as usado es una aproximación a la realidad, pero debes acordarte que estas usando el sistema de medio paso, por lo tanto en determinado momento tienes 2 bobinas activas, lo que generaría una circulación de corriente de 0.8*2=1.6A, por lo que tu fuente estaría un poco corta.
Lo que as leído es verdad, esos motores si pueden generar audio, como así también los PaP, estos motores generaran un audio senoidal, de una frecuencia igual a las revoluciones por segundo que se le imprima, o un múltiplo de ellas dependiendo de su construcción.
En el esquema que a posteado migsantiago, podemos ver que a ese motor lo están haciendo funcionar con un puente H, y le generan una señal cuadrada, con un ciclo activo de 50% y entre cada fase un desfasaje de 120°, en pocas palabras, lo hacen funcionar como un motor trifásico común y corriente, y en conexión triangulo.
Por otro lado puedes ver que lo alimentan con 12 Vcc y tu solo lo haces con 2.5 o 5 malos :? , como ya te comente el tema de la alimentación en este tipo de motores es muy importante, sobre todo en el momento de la aceleración ya que usa toda su potencia, por lo que te vuelvo a repetir lo mismo, ponle más tensión que por cuestiones físicas no tendría por que perderse, es como si a un motor trifásico común al conectarlo a la red se perdiera porque se lo esta tratando de acelerar muy rápido :)
Otra cosa a tener en cuenta es mirar que tipo de conexión tienes en tu motor, pueden ser 3, estrella y triangulo, la de tu esquema migsantiago, es la triangulo y la estrella es con todos los principios de las bobinas a un punto común y a los cables de salida el final de cada bobina, el punto común del que hable antes puede tener salida al exterior o no, por lo que solo viendo los cables no podrás saber que tipo de conexión posees, en definitiva a desarmar y estudiar la conexión.
Todo lo que anteriormente vinimos hablando es solo aplicable a un motor en conexión estrella y con el punto en común conectado a positivo, por lo que si tienes otro tipo de conexión no te andará de manera correcta.
En el adjunto pongo los 2 tipos de conexiones que existen y las variantes.
Espero tu respuesta.
Un saludo
Atte. CARLOS.
-
Hola de nuevo
Ya conseguí mayor power para hacer girar este motorcito, usé una fuente de PC que entrega 5V a 22A. Probé el mismo circuito con el mismo programa acelerador y se siguió trabando el motor. :(
El siguiente paso es echar a andar el motor con 12V, el problema es que necesito hacer un puente H más resistente, ya que el L293B solo resiste 2A en picos y no estoy seguro de que aguante. He leído que se le puede poner disipador, pero es empaque DIP y no conozco disipadores así, ¿será que poniéndole una plaquita de metal disipa bien?
Sobre el tema de la conexión... hice lo siguiente:
- Mido entre los hilos y obtengo 6.2ohm, cualquier combinación.
- Si cortocircuito 2 hilos y mido (B+C y A), obtengo una R de 4.8ohm. Esto me indica que la conexión NO es delta, ya que si fuera delta obtendría 3.1ohm (2 bobinas de 6.2 en paralelo). Deduzco que la conexión es estrella ya que la medición entre cualquier terminal es 6.2... si hay 2 bobinas entonces cada bobina vale 3.1ohm...
B y C cortocircuitadas, midiendo de A a BC
(http://img408.imageshack.us/img408/4493/ecua4ac.jpg)
Solo queda la duda de si el común de la estrella está adentro del motor aunque me parecería ilógico que estuviera ahí :shock:
Adjunto circuito a medias para Veguepic :)
-
Hola migsantiago, lamento comunicarte que la unica manera de hacer funcionar bien ese motor sin pasar a reformarlo internamente es la de usar un PUENTE H como el esquema que as posteado más arriba, , por lo tanto deberas cambiar la forma de ondas para el control, pues la que actualmente estas usando no sebiria.
La onda a generar sera como esta en el esquema, 50% de ciclo activo y un desface de 120° entra cada una.
Espero lo puedas hacer andar.
Otra cosa yo no usaria el L293B para hacer funcionar el motor con 12V ni que tubiera disipador ya que los picos seran mucho mas de 2A.
Un saludo.
Atte. CARLOS.
-
Tendré que descartar este motor para mi display giratorio, de todas formas el voltaje que pide es mucho y para alimentarlo con 2 pilas de 1.5V pues está difícil.
Sobre la corriente máxima que se puede tener de la fuente de 12V me parece que son 12V/4.8ohm = 2.5A. Probablemente los aguante el L293B, pero solo un ratito. :)
Voy a ver que hago y si logro girarlo más rápido usando 5V. Cualquier cosa les pongo una respuesta.
Gracias a todos por la ayuda 8)
-
Hola
Seguí experimentando con el motor ahora usando la PC para generar los pulsos y tiempos.
Tuve un problema, los tiempos menores a 10ms me parece que no se generaban, no sé porqué.
En fin, el programa que adjunto maneja el motor por las terminales D0, D1 y D2. Usé visual c++ para generarlo.
Lo dejo por si a alguien quisiera experimentar con un motor parecido. Uno escribe el tiempo en ms. Tiene bugs, nunca dejar en blanco el espacio del tiempo en ms o nunca escribir un número menor a 1ms o mayor a 1000ms.
:mrgreen:
-
Hola migsantiago, ante tuu dudas y consultas, me as puesto la espina :D y entre a probar con este tipo de motores, ya que nunca habia usado tan chicos.
El que estoy usando para las pruebas es una de lectora de CDrom, conectado el forma de estrella o Y y en las pruebas preliminares e conseguido que gire a 6000 RPM aproximadamente sin mayores dramas, el formato de la señal que e usado es el que te e comentado en los ultimos post, por lo tanto confirmo que funciona.
El unico drama es que como es de suponer, este tipo de motores en forma de que sus RPM disminuyen aumenta el consumo de corriente y rondando las 500 RPM presenta na intensidad de 1.4A sinedo que a 6000 RPM solo consume 0.1 A, por lo tanto ahora estoy implementando el PWM para reducir el consumo a bajas RPM.
Si necesitas una ayuda solo preguntame.
Un saludo.
Atte. CARLOS.
-
Gracias Chaly.
Pienso seguir experimentando. Solo me falta construir el puente H a 12V. Intenté usar el L293B con los 12V y le construí un disipador bien chistoso, hasta pasta de silicón le puse para que transmita bien la temperatura, pero sin buenos resultados.
Solo me falta aplicar la trama que se muestra en una de las figuras anteriores.
Sería bueno que publicaras tu programa y las conexiones que realizaste, para intentarlo de la misma forma. :mrgreen:
-
HOLA a todos
Leí el tema y les quiero clarificar que un motor VOICE COIL no es el motor Brushless o Spindle que usa el HDD
Leí por ahí que algunos lo confundieron. El denominado Voice Coil en el disco rígido, es el que se usa como actuador del cabezal.
Otro tema que es importante a tener en cuenta, que los motor de las lectoras de CDROM traen, al menos los que conozco, sensores hall que pemiten determinar su posición y en función de eso conmutar los pulsos, caso contrario el motor no sincroniza bien y pierde torque, hasta un punto donde no rinde y no se logra el máximo de RPM porque "patina".
Con respecto al motor de configuración triangular o DELTA que utilizan los discos rígidos, aunque también se usan los de estrella, son motores que utiliza la denominada BEMF para detectar el momento de conmutación.
El problema con la BEMF, es que en circuitos muy basicos recién se detecta bien cuando suben las RPM y por ende, al principio el motor comienza a girar sin hacer uso de esta detección hasta que el nivel es aseptable y lo detecta.
Yo recomiendo que para un uso como el del reloj, que fue lo que disparó la consulta de este tema, aprovechen el integrado que controla el motor del disco rigido y con algunos capacitores y resistencias queda solucionado el tema. Querer hacerlo con PIC y MOSFET, es bueno para aprender, pero algo más voluminoso y antieconómico.
Un saludo a todos
-
Hola amigos:
Recien me he podido hacerme de un motor completo de una grabadora de CD's, si, en efecto, es la mia que paso a mejor vida :8} . Aunque paresca mentira puse al reves el conector de poder :5] sin forzarlo ni nada, solo entro una parte pero suficiente para que empiecen los fuegos artificiales. Eso pasa por hacer las cosas a la prisa. Si estuviera en los yunaites ya les hubiera sacado buen dinero.
Bueno mucha historia, Migsantiago gracias por postear tu circuito, ya me compre un ULN y tambien mosfets he incluso unos BD677 y BD678 para empezar a probar, pero como de C no entiendo na, voy a compilar tu programa y pasarlo a asembler haber que tal me va o si no es mucha molestia si pudieras pasarme el hex :mrgreen:.
JCAK me he leido el tema del puente H que calienta y al final veo que optaste por los transistores, no los mosfets. Te agradeceria si pudieras postear el circuito final y se que de repente es mucho pedir el programa para poder entender mejor pues aun estoy un poco confundo con lo leido. :shock:
Gracias
-
HOLA
Te paso el puente con el que inicié mis pruebas y FUNCIONA.
Yo probé de gobernar el gate de los MOSFET con el ULN2003, pero luego lo cambié por el MC14504B para evitar el tema de las resistencias. El resultado que obtuve es el mismo, teniendo la precaución de invertir los valores binarios de la secuencia, ya que el ULN es inversor.
Esto que te paso es super basico y un detalle a tener en cuenta, que no es el caso de este ejemplo, es el de utilizar transistores MOSFET que se disparan utilizando niveles lógicos y eso simplifica el modo de comandarlos. Hay muchas maneras de comandar el gate de los MOSFET, desde circuitos a base de transistores, hasta IC específicos para esta tarea.
A partir de acá tenes que desarrollar toda la electrónica de control de pasos y de control de corriente, que hacen falta si o si, para obtener el máximo de RPM del motor con el máximo torque.
.
-
Perdón amigos, no había visitado el subforo de Robótica. :oops:
Gracias por tus comentarios JCAK.
Veguepic, adjunto el hex que necesitas.
-
Gracias JCAK por el archivo.
Gracias Migsantiago, al abrir el zip veo que le has dado duro al motor :D :D :D.
-
jeje unos cuantos días nadamás :D
Lo malo es que no lo pude hacer funcionar bien y me rendí ya que necesito un motor que funcione con poco voltaje, pero al menos aprendí un poco más :D