Tabla de contenido:

Conducir un motor paso a paso con un microprocesador AVR: 8 pasos
Conducir un motor paso a paso con un microprocesador AVR: 8 pasos

Video: Conducir un motor paso a paso con un microprocesador AVR: 8 pasos

Video: Conducir un motor paso a paso con un microprocesador AVR: 8 pasos
Video: Motores Paso a Paso 2024, Noviembre
Anonim
Conducir un motor paso a paso con un microprocesador AVR
Conducir un motor paso a paso con un microprocesador AVR

¿Tiene algunos motores paso a paso recuperados de impresoras / unidades de disco / etc.por ahí?

Un poco de sondeo con un ohmetro, seguido de un código de controlador simple en su microprocesador y estará avanzando con estilo.

Paso 1: Conozca los Steppers

Conozca los Steppers
Conozca los Steppers
Conozca los Steppers
Conozca los Steppers

Básicamente, tendrá que averiguar dónde van todos los pequeños cables.

El primer paso es averiguar si es un motor unipolar o bipolar. Eche un vistazo a Jones on Steppers para obtener más información, luego al sitio de Ian Harries para obtener un método simple para descubrir un motor desconocido. Lea un poco, luego únase a mí en un tutorial de este motor que obtuve por poco dinero. (Están a la venta por $ 0,99 en este momento. Son pequeños, relativamente livianos, pero no tienen mucho torque. Aún no sé para qué servirá).

Paso 2: Encuentra puntos en común

Encontrar un área comun
Encontrar un área comun
Encontrar un área comun
Encontrar un área comun

Entonces tienes cinco (o cuatro, o seis) cables. Su motor tendrá dos mitades, y probablemente incluso pueda saber con solo mirar a qué lado pertenece cada cable.

Si solo está mirando cuatro cables, está de suerte: es un motor bipolar. Todo lo que tienes que hacer es averiguar qué dos pares de cables van juntos. Si tienes un motor unipolar, o más de 4 cables, tendrás que romper tu óhmetro. Lo que está buscando es el cable común (tierra) para cada mitad. Puede saber cuál está conectado a tierra en un motor bipolar porque tiene la mitad de la resistencia a cualquiera de los polos que los polos a través de sí mismos. En la foto están mis notas de conectar cables a cables y notar la resistencia (o si están conectados). Puede ver que el blanco es el suelo para el trío inferior porque tiene la mitad de la resistencia al rojo o al azul que tienen entre sí. (Este motor es extraño y no tiene una toma central en la bobina del imán superior. Es como si fuera mitad bipolar, mitad unipolar. Tal vez puedas usar esto para detectar la rotación en la bobina Rojo-Blanco-Azul cuando el Negro-Amarillo la bobina está siendo impulsada.)

Paso 3: Determine el orden de paso

Determine el orden de paso
Determine el orden de paso

Iba a conducir este motor como bipolar, así que estoy ignorando el cable de tierra blanco. Solo tengo cuatro cables de los que preocuparme.

Es posible que desee hacer funcionar su motor unipolar como bipolar de todos modos, porque usa toda la bobina en ambas fases en lugar de alternar entre las dos mitades de cada bobina. Más bobina = más torque. Ejecute la corriente a través de un par (teniendo en cuenta la polaridad que eligió) y luego ejecute la corriente a través del otro par al mismo tiempo. Cuando conecte el segundo par, observe en qué dirección gira el motor. Escribe esto. Ahora invierta la polaridad en el primer par que eligió. Luego, vuelva a conectar el segundo par con su polaridad también invertida. Tenga en cuenta la dirección. A partir de esto, debería poder averiguar la secuencia para girar el motor en cualquier dirección. En mi ejemplo, ambos terminaron girando en sentido contrario a las agujas del reloj, por lo que al avanzar por la secuencia de la misma manera que elegí, el motor se moverá en sentido antihorario.

Paso 4: Prueba de conducción del motor

Tomando el motor para una prueba de manejo
Tomando el motor para una prueba de manejo

Si aún no está preparado para la programación de microprocesadores, podría hacerlo peor que el Ghetto Development Kit o cualquiera de los diversos programadores PIC. Conecte los cables directamente a su microproc y quémelo con el siguiente código:

/ * Jugando con los pequeños motores paso a paso. * /

/ * Incluye función de retardo * / #define F_CPU 1000000UL #include / * Pin defs para ATTiny2313 * / / * Orden en sentido horario * / #define BLUE _BV (PB0) #define BLACK _BV (PB1) #define RED _BV (PB2) #define AMARILLO _BV (PB3) #define DELAY 200 / * milisegundos entre pasos * / int main (void) {DDRB = 0xff; / * Habilita la salida en todos los pines B * / PORTB = 0x00; / * Establecerlos todos en 0v * / while (1) {/ * bucle principal aquí * / PORTB = BLUE; _delay_ms (DELAY); PORTB = NEGRO; _delay_ms (DELAY); PORTB = ROJO; _delay_ms (DELAY); PORTB = AMARILLO; _delay_ms (DELAY); }} ¿Qué tan simple es ese código? Realmente simple. Todo lo que hace es hacer algunas definiciones agradables para que pueda referirme a los cables por color en lugar de sus nombres de pines, y luego los activa en secuencia con un retraso ajustable en el medio. Para empezar, seleccioné un retraso de medio segundo entre los pasos. Vea el video corto para ver los resultados. Si realmente está en su juego, cuente la cantidad de pasos por ciclo para averiguar la resolución angular de un solo paso del motor. (Oh, sí. PD. Se conduce sin carga a 3.6v fácilmente. Vea la batería en el video).

Paso 5: balancea hacia adelante y hacia atrás

Entonces lo tienes funcionando en el sentido de las agujas del reloj. ¿Algo más interesante? Una pequeña limpieza de código y podemos ejecutarlo de un lado a otro. Puse la secuencia en el sentido de las agujas del reloj en una matriz para que pueda pasar por las fases con un bucle for simple. Ahora puede ejecutar el bucle hacia arriba o hacia abajo para ir en sentido horario o antihorario.

int main (void) {const uint8_t delay = 50; const uint8_t en el sentido de las agujas del reloj = {AZUL, NEGRO, ROJO, AMARILLO}; uint8_t i; DDRB = 0xff; / * Habilita la salida en todos los pines B * / PORTB = 0x00; / * Establecerlos todos en 0v * / while (1) {/ * bucle principal aquí * / para (i = 0; i <= 3; i ++) {/ * paso a través de los colores en el sentido de las agujas del reloj * / PORTB = en el sentido de las agujas del reloj ; _delay_ms (retraso); } for (i = 3; i> = 0; i -) {/ * paso a través de los colores ccw * / PORTB = sentido horario ; _delay_ms (retraso); }}} Vea el video picante para el intercambio.

Paso 6: Nunca doy medio paso, porque no soy medio paso a paso …

Dejando a un lado la letra de la misión, medio paso a paso es donde está. Obtiene más corriente pico, más torque instantáneo y el doble de resolución angular. Medio paso en pocas palabras: en lugar de azul, negro, rojo, amarillo, maneja el motor con azul, azul + negro, negro, negro + rojo, rojo, rojo + amarillo, amarillo, amarillo + azul. El resultado es que durante la mitad del tiempo estás activando ambos imanes a la vez. Y durante los tiempos en que ambos conjuntos están acoplados, el motor apunta a la mitad entre los dos, reduciendo el ángulo entre los "pasos" y haciendo que el motor gire más suavemente. ¿Puedes decirlo por el video? No estoy seguro … Ahora, la parte del código que hace el medio paso se ve así:

void halfStepping (uint16_t retraso, uint8_t dirección ) {uint8_t i; para (i = 0; i <= 3; i ++) {PORTB = dirección ; / * parte de bobina simple * / _delay_ms (retardo); PORTB | = dirección [i + 1]; / * agregar en medio paso * / _delay_ms (delay); }} El primer comando PORTB establece un polo único en positivo y el resto en negativo. Entonces espera. Luego, el segundo comando PORTB establece un segundo polo (en el otro devanado) en positivo, conectando ambos devanados para 1.4 veces el par (y 2x la corriente). A continuación se adjunta una lista completa del programa. Ahora se definen dos matrices (en sentido horario, antihorario) y ambos tienen 5 elementos cada uno para permitir la entrada i + 1 en la función halfStepping.

Paso 7: agregue un controlador de motor

Agregar un controlador de motor
Agregar un controlador de motor
Agregar un controlador de motor
Agregar un controlador de motor
Agregar un controlador de motor
Agregar un controlador de motor

Hasta aquí todo bien.

El único problema es que el motor no parece tener tanto torque, lo que podría deberse al hecho de que el microprocesador solo emitirá ~ 50 mA por pin. El siguiente paso obvio sería conectarlo a un controlador de motor para suministrarle más energía. Pero luego pienso un poco: solo lo estoy conduciendo con 5v, y la resistencia del devanado de la bobina es de ~ 125 ohmios. Lo que significa que el motor solo consume 40 mA por pin, y debería ser impulsado bien por el chip AVR (¡robusto!). Entonces, para obtener más voltaje en el motor, lo conecté a un chip de puente H SN754410. El circuito es bastante simple. Cada pin del AVR va a una entrada y los pines de salida correspondientes van al motor. El chip necesita 5v para la sección lógica y puede tomar mucho más voltaje en la sección del motor. Ejecutarlo con 11.25v (tres baterías de 3.6v) ayudó un poco. Notablemente más torsión en mi dedo, pero todavía no es una central eléctrica. Sin embargo, no está mal para un motor que es más pequeño que una moneda de cinco centavos. Y ahora el circuito se ha convertido en un controlador de motor paso a paso bipolar de propósito general. Agregado el 29 de noviembre: Anoche funcionó el motor a 12v por un tiempo y comenzó a calentarse. No estoy seguro si fue un problema de frecuencia resonante o si fue simplemente demasiada corriente para los devanados. De cualquier manera, tenga un poco de cuidado si está conduciendo este pequeño motor con voltajes mayores.

Paso 8: el final

Entonces, ¿qué aprendí? Conducir un motor paso a paso con un AVR (y un chip de puente H) es bastante fácil, incluso en el modo "elegante" de medio paso.

Sin embargo, todavía no estoy seguro de qué haré con los pequeños motores paso a paso. ¿Alguna sugerencia?

Recomendado: