Este sería un motor convencional de CC.
Ahora en un motor Paso a Paso, en lugar de tener un estator de imanes permanentes y un rotor de inducción, se tendrá un rotor de imanes permanaes y un estator de múltiples electroimanes.
Como podemos ver en la foto el rotor es solo imán y el estator es el que posee las bobinas.
Pero esto no es todo, sino que la clave para mantener el torque y la precisión que caracteriza estos motores son esos surcos existentes en el rotor y estator, esos surcos serán quienes emularan cada uno de los mono polos magnéticos del estator y rotor. Al igual que en el motor de CC se genera una repulsión que trae como reacción el movimiento circular del rotor. Pero en este caso deberemos nosotros por fuera comandar cada una de las bobinas por separado, es decir la secuencia que existía en el motor de CC que era función de los colectores del rotor, aquí tendremos que incorporar un secuenciador de potencia que proporcionara la secuencia de On/Off de cada inductor según se requiera para el movimiento horario y anti horario, también el tipo de paso, si es doble, medio, o simple.
Existen varios motores PAP por ejemplo con dos bobinas a los que llamaremos Bipolares, con 4, 5, 6, etc.. bobinas que llamaremos Unipolares. Este último es el que he utilizado para el ejemplo ya que contaba con él para comprobar el funcionamiento del código resultante. Pero es posible utilizar los Bipolares, aunque estos requieren un driver algo más complejo ya que no solo se requiere el On/Off de cada inductor sino que será la polarización del inductor lo que generara el movimiento.
Aquí les dejo las tablas de verdad para cada configuración y tipo de paso.
Para que el motor gire a la inversa la tabla se deberá recorrer de abajo hacia arriba.
Un circuito teórico simple con un driver Array ULN2003 (que puede ser reemplazado por cualquier otro o por transistores).
Por último un pequeño código en C, este fuente como se puede ver en la definición de los vectores, posee el código para el giro horario y anti horario.
#include <16F628A.h>
#FUSES NOWDT
#FUSES HS
#FUSES NOMCLR
#use delay(clock=4000000)
void main(){
byte const tabla[4]={0b1100,
0b0110,
0b0011,
0b1001};
int i, j;
while(TRUE){
for(i=0;i<30;i++){
for(j=0;j<4;j++){
output_b(tabla[j]);
delay_ms(10);
}
}
for(i=0;i<30;i++){
for(j=3;j>0;j--){
output_b(tabla[j]);
delay_ms(10);
}
}
}
}
No hay comentarios.:
Publicar un comentario