Duda en control de 4 motores por un puerto paralelo con controlador de motores SAA1027
Necesito controlar 4 motores pap por un sólo puerto paralelo. Por ello,
utilizo los integrados SAA1027, que me permiten controlar el giro del motor
con sólo 2 pines. Para controlar sólo 2 motores, lo que hacia era enviar una
secuéncia de bits en un bucle for que excitara las bobinas en un órden tal
que el rotor girara. Y lo hacia enviando los bits en el pin 0x01, 0x02,
0x04, 0x08, respectivamente. Pero ahora, con sólo dos pines para cada
motor.... Me han dicho que por uno se escribe el sentido de giro, y por el
otro el paso. Y cuando se escribe un paso (una señal por un pin) el motor
gira un paso en el sentido indicado por el otro pin. Y es la controladora
que se encarga de saber la combinación de las bobinas. Se escribe los pasos
de todos los motores a la vez, y el sentido de giro tiene que estar escito
un poco antes que el paso, y que si el motor no tiene que cambiar de sentido
de giro, pues el pin de sentido de giro no cambia de valor.
Pero mi gran duda, que espero que álguien me pueda resolver és cómo se
escribe el sentido de giro del motor. Cómo se indica si es 0 o 1? Porque si
envio un bit será 1, pero para ponerlo a 0, cómo lo hago?
Con el código siguiente, se envian datos a los 4 pines correspondientes.
hImp=CreateFile("\\.\LPT1",
GENERIC_READ | GENERIC_WRITE,
0,
0,
OPEN_EXISTING,
0,
NULL);
char c;
DWORD n;
for (c=0; c<25;c++)
{
c=0x01);
WriteFile(hImp, &c, 1, &n,(LPOVERLAPPED) NULL);
c=0x02);
WriteFile(hImp, &c, 1, &n,(LPOVERLAPPED) NULL);
c= 0x04);
WriteFile(hImp, &c, 1, &n,(LPOVERLAPPED) NULL);
c= 0x08);
WriteFile(hImp, &c, 1, &n,(LPOVERLAPPED) NULL);
}
int v;
v=CloseHandle(hImp);
Quiero saber, qué es lo que se envia exactamente por el pin del puerto
cuando se escribe en él. Tengo asumido que c, es el número de veces que se
ha ejectutado el envio a los 4 pins, y que cada vez que se hace, el motor
gira un paso y c incrementa su valor de uno en uno hasta 25. Entonces, para
enviarle los datos al SAA1027 con 2 pines cómo se haria? Álguien me puede
poner un ejemplo? Gracias de antemano y saludos,
David
utilizo los integrados SAA1027, que me permiten controlar el giro del motor
con sólo 2 pines. Para controlar sólo 2 motores, lo que hacia era enviar una
secuéncia de bits en un bucle for que excitara las bobinas en un órden tal
que el rotor girara. Y lo hacia enviando los bits en el pin 0x01, 0x02,
0x04, 0x08, respectivamente. Pero ahora, con sólo dos pines para cada
motor.... Me han dicho que por uno se escribe el sentido de giro, y por el
otro el paso. Y cuando se escribe un paso (una señal por un pin) el motor
gira un paso en el sentido indicado por el otro pin. Y es la controladora
que se encarga de saber la combinación de las bobinas. Se escribe los pasos
de todos los motores a la vez, y el sentido de giro tiene que estar escito
un poco antes que el paso, y que si el motor no tiene que cambiar de sentido
de giro, pues el pin de sentido de giro no cambia de valor.
Pero mi gran duda, que espero que álguien me pueda resolver és cómo se
escribe el sentido de giro del motor. Cómo se indica si es 0 o 1? Porque si
envio un bit será 1, pero para ponerlo a 0, cómo lo hago?
Con el código siguiente, se envian datos a los 4 pines correspondientes.
hImp=CreateFile("\\.\LPT1",
GENERIC_READ | GENERIC_WRITE,
0,
0,
OPEN_EXISTING,
0,
NULL);
char c;
DWORD n;
for (c=0; c<25;c++)
{
c=0x01);
WriteFile(hImp, &c, 1, &n,(LPOVERLAPPED) NULL);
c=0x02);
WriteFile(hImp, &c, 1, &n,(LPOVERLAPPED) NULL);
c= 0x04);
WriteFile(hImp, &c, 1, &n,(LPOVERLAPPED) NULL);
c= 0x08);
WriteFile(hImp, &c, 1, &n,(LPOVERLAPPED) NULL);
}
int v;
v=CloseHandle(hImp);
Quiero saber, qué es lo que se envia exactamente por el pin del puerto
cuando se escribe en él. Tengo asumido que c, es el número de veces que se
ha ejectutado el envio a los 4 pins, y que cada vez que se hace, el motor
gira un paso y c incrementa su valor de uno en uno hasta 25. Entonces, para
enviarle los datos al SAA1027 con 2 pines cómo se haria? Álguien me puede
poner un ejemplo? Gracias de antemano y saludos,
David
