Categorías: Circuitos microcontroladores
Cantidad de vistas: 19709
Comentarios sobre el artículo: 0

Motor y servocontrol con Arduino

 

En diseños simples de sistemas de automatización, a menudo es necesario no solo leer las lecturas de los sensores, sino también establecer mecanismos de movimiento. Para esto, se utilizan una variedad de motores eléctricos. La opción más simple y popular es un motor de CC. Se ganó el amor de los amantes con su accesibilidad, facilidad de ajuste de velocidad. Si la tarea es mover cualquier mecanismo a un ángulo o distancia dados, es conveniente usar un servoaccionamiento o un motor paso a paso.

En este artículo, observamos servos y pequeños motores de CC, conectándolos a una placa Arduino y ajustando el DCT.

Motor y servocontrol con Arduino

Motor de corriente continua

El motor eléctrico más común que se utiliza en dispositivos portátiles, juguetes, modelos controlados por radio y otros dispositivos. Los imanes permanentes se fijan en el pequeño motor eléctrico en el estator y un devanado en el rotor.

Motor de corriente continua

Se suministra corriente al devanado a través del conjunto del cepillo. Los cepillos están hechos de grafito, a veces se encuentran contactos deslizantes de cobre. Los cepillos se deslizan sobre las láminas ubicadas en un extremo del rotor. Si no entra en detalles, su velocidad de rotación depende de la corriente del devanado del inducido.

Colector Motor Ancla

En motores DC grandes, en el estator, se conecta un devanado de excitación, conectado al devanado del rotor (a través del conjunto del cepillo) de cierta manera (excitación secuencial, paralela o mixta). De este modo, se consigue el par deseado y el número de revoluciones.


Control de velocidad

Motor eléctrico de corriente continua

Cuando se conecta a la red eléctrica, el motor de CC comienza a girar a la velocidad nominal. Para reducir la velocidad, necesita limitar la corriente. Para hacer esto, se introducen resistencias de lastre, pero esto reduce la eficiencia de la instalación en su conjunto y aparece una fuente de calor en exceso. Para una regulación más efectiva del voltaje y la corriente, se utiliza otro método: Control PWM.

Control PWM

Un método para controlar la señal modulada por ancho de pulso (voltaje) es generar el valor de voltaje deseado cambiando el ancho de pulso, con una duración constante del período (frecuencia).

Es decir, el período se divide en dos partes:

1. Tiempo de impulso.

2. Tiempo de pausa.

La relación entre el tiempo de pulso y el tiempo total del período se denomina ciclo de trabajo:

Ks = ti / tper

el recíproco se llama "ciclo de trabajo":

D = 1 / KZ = tper / t y

Para describir el modo de funcionamiento del controlador PWM, se utilizan ambos conceptos: ciclo de trabajo y ciclo de trabajo.

El consumo de corriente del motor depende de su potencia. El número de revoluciones, como se dijo, depende de la corriente. La corriente se puede ajustar cambiando la cantidad de voltaje aplicado a los devanados. De hecho, cuando se alimenta con un voltaje que excede el valor nominal de acuerdo con el pasaporte del motor, su velocidad también excederá la velocidad nominal. Sin embargo, tales modos de funcionamiento son peligrosos para el motor, ya que una mayor corriente fluye en los devanados, lo que provoca su aumento de calentamiento.

Si el daño al motor por impulsos a corto plazo o modos de operación repetidamente a corto plazo es mínimo, entonces durante la operación prolongada a mayor voltaje y velocidad, se quemará o sus cojinetes se calentarán y se acuñarán, y luego los devanados se quemarán si la fuente de alimentación no está desconectada.

Si el voltaje de entrada es demasiado bajo, el motor pequeño puede simplemente no tener suficiente potencia para moverse. Por lo tanto, es necesario conocer experimentalmente la velocidad y el voltaje normales para un motor en particular que no exceda el nominal.


Nos conectamos a arduino

Tenía un motor pequeño, parece ser de un reproductor de cassette, lo que significa que su voltaje nominal será inferior a 5 voltios, luego la potencia de salida del arduino será suficiente. Lo alimentaré desde el pin de 5V, es decir desde la salida del estabilizador lineal ubicado en el tablero. De acuerdo con el esquema que ves a continuación.

No conozco la corriente de este motor, así que lo conecté a la alimentación e instalé un transistor de efecto de campo entre el motor y el pin de alimentación, en la puerta de la cual se aplicó una señal de la salida PWM, se puede usar cualquiera de los disponibles.

Diagrama de conexión del motor DC Arduino

Para ajustar la velocidad, agregué una resistencia variable al circuito, conectándolo a la entrada analógica A0. Para una conexión rápida, utilicé una placa de prueba sin soldadura, que también se llama placa de prueba.

Instalé una resistencia limitadora de corriente en el cableado del transistor (para reducir la corriente de carga de la compuerta, esto salvará el puerto de la combustión y la fuente de alimentación del microcontrolador del hundimiento y su congelación) en 240 ohmios, y lo tiré al suelo con una resistencia de 12 kOhm, esto debe hacerse para que sea más estable El obturador funcionaba y se descargaba más rápido.

Detalles sobre los transistores de efecto de campo descritos en un artículo en nuestro sitio web. Utilicé un mosfet potente, común y no demasiado caro con un canal n y un diodo inverso IRF840 incorporado.

Parte ejecutiva y definitoria del circuito

Así es como se ve mi conjunto de soporte de laboratorio:

Motor DC y Arduino

La función de control PWM se llama al escribir en los valores de salida correspondientes (3, 5, 6, 9, 10, 11) de 0 a 255 con el comando AnalogWrite (pin, valor). La lógica de su trabajo se representa en los gráficos a continuación.

Función de control PWM

Tal señal se aplica a la puerta del transistor:

Tal señal se aplica a la puerta del transistor

El código del programa para la desgracia es breve y simple, en detalle se han descrito todas estas funciones en artículos anteriores sobre arduino.

int sensorPin = A0; // entrada del potenciómetro

int motorPin = 3; // Salida PWM a la puerta de la cámara

configuración nula () {

pinMode (motorPin, OUTPUT);

}

bucle vacío () {

analogWrite (motorPin, map (analogRead (sensorPin), 0, 1023, 0, 256));

}

En la función analogWrite, asigno un valor a la salida PWM, a través del comando map, su uso le permite eliminar varias líneas de código y una variable.


Este es un esquema de trabajo y es excelente para observar procesos al ajustar la potencia de carga, el brillo de los LED, la velocidad del motor, solo necesita conectar la carga deseada en lugar del motor. En este caso, en lugar de 5V, se puede aplicar cualquier voltaje a la carga, por ejemplo 12V, no olvide conectar la alimentación negativa al contacto, por ejemplo 12V, no olvide conectar la alimentación negativa al pin GND en la placa del microcontrolador.

En arduino, la frecuencia PWM, cuando se llama a través de la función analogWrite, es de solo 400 Hz, a los valores mínimos de voltaje, se oyó un zumbido de la frecuencia correspondiente de los devanados del motor.

Arduino y servo

Servos

Un motor que puede estar en una posición predeterminada y, cuando se expone a factores externos, por ejemplo, una desviación forzada del eje, mantiene su posición sin cambios, se denomina servoaccionamiento. En general, la definición suena un poco diferente:

El servo es un motor impulsado por retroalimentación negativa.

Por lo general, salen tres cables de un servoaccionamiento:

  • Más potencia.

  • Menos potencia

  • Señal de control

El servoaccionamiento consta de:

  • Motor DC (o motor sin escobillas);

  • Honorarios de gestión;

  • Sensor de posición (codificador para servos con un ángulo de rotación de 360 ​​° o un potenciómetro para servos con un ángulo de rotación de 180 °);

  • Engranaje reductor (reduce la velocidad del motor y aumenta el par en el eje de transmisión).

La unidad de control compara la señal en el sensor de posición incorporado y la señal que llegó a través del cable de control, si son diferentes, entonces hay una rotación en un ángulo en el que se nivela la diferencia entre la señal.

El principio de funcionamiento del servo.

Características principales de los servos:

  • Velocidad de giro (tiempo durante el cual el eje gira a través de un ángulo de 60 °);

  • Par (kg / cm, es decir, cuántos kilogramos puede soportar el motor en la palanca a 1 cm del eje);

  • Tensión de alimentación;

  • Consumo actual;

  • Por el método de control (analógico o digital, no hay una diferencia significativa, pero lo digital es más rápido y más estable).

Normalmente, el período de señal es de 20 ms, y la duración del pulso de control:

  • 544 μs - corresponde a 0 °;

  • 2400 μs - corresponde a un ángulo de 180 °.

En casos raros, la longitud del pulso puede diferir, por ejemplo, 760 y 1520 μs, respectivamente, esta información se puede aclarar en la documentación técnica del variador. Uno de los servos de pasatiempo más populares es el Tower Pro SG90 y modelos similares.Es barato, alrededor de 4 dólares.

Sevroprivod para arduino

Tiene una capacidad de 1,8 kg / cm en el eje, y se completa con tornillos de montaje y palancas con estrías para el eje. De hecho, este bebé es bastante fuerte, y es muy problemático detenerlo con un dedo (la unidad comienza a caerse de los dedos), tal es su fuerza.


Servocontrol y Arduino

Como ya se mencionó, el control se lleva a cabo cambiando la duración del pulso, pero no confunda este método con PWM (PWM), su nombre correcto es PDM (modulación de duración del pulso). Las ligeras desviaciones en la frecuencia de la señal (20 ms - duración, frecuencia 50 Hz) no juegan un papel especial. Pero no se desvíe de la frecuencia en más de 10 Hz, el motor puede funcionar bruscamente o quemarse.

Servocontrol y Arduino

La conexión al arduino es bastante simple, también puede alimentar la unidad desde un pin de 5v, pero no es deseable. El hecho es que al principio hay un pequeño salto en la corriente, esto puede causar una reducción de potencia y Salidas falsas del microcontrolador. Aunque 1 unidad pequeña (tipo SG90) es posible, pero no más.

Para controlar tales servos con arduino, tiene la biblioteca de Servo integrada en el IDE, tiene un pequeño conjunto de comandos:

  • attach (): agrega una variable al pin. Ejemplo: drive name.attach (9): conecta un servo al pin 9. Si su unidad necesita longitudes de pulsos de control no estándar (544 y 2400 μs), entonces se pueden configurar separados por una coma después del número de pin, por ejemplo: servo.attach (pin, ángulo mínimo (μs), ángulo máximo en la ISS));

  • write (): establece el ángulo de rotación del eje en grados;

  • writeMicroseconds (): establece el ángulo a través de la longitud del pulso en microsegundos;

  • read (): determina la posición actual del eje;

  • attach () - Comprueba si un pin está configurado con un servo conectado;

  • detach (): cancela el comando adjuntar.

Esta biblioteca le permite controlar 12 servos de tableros UNO, Nano y similares (mega368 y 168), mientras que la capacidad de usar PWM en el pin 9 y 10 desaparece. Si tiene MEGA, puede controlar los 48 servidores, pero el PWM en los pines 11 y 12 desaparecerá, si usa hasta 12 servos, el PWM seguirá siendo completamente funcional en todos los contactos.

Si conectó esta biblioteca, no podrá trabajar con receptores / transmisores de 433 MHz. Hay una biblioteca Servo2 para esto, que de lo contrario es idéntica.

Biblioteca Servo2

Aquí hay un ejemplo del código que utilicé para los experimentos con un servoaccionamiento, está en el conjunto estándar de ejemplos:

#include // conecta la biblioteca

Servo myservo; // nombre de variable declarado para servo myservo

int potpin = 0; // pin para conectar el potenciómetro de ajuste

int val; // variable para guardar los resultados de la lectura de la señal del potenciómetro

configuración nula () {

myservo.attach (9); // establece 9 pines como salida de control para servo

}

bucle vacío () {

val = analogRead (potpin); // resultados de la lectura del potenciómetro guardado en trans. val, estarán en el rango de 0 a 1023

val = mapa (val, 0, 1023, 0, 180); // traduce el rango de medición de la entrada analógica 0-1023

// en el rango de tareas para servo 0-180 grados

myservo.write (val); // pasa la conversión señal de pot-ra para controlar entrada servo

retraso (15); // se necesita un retraso para el funcionamiento estable del sistema

 

Conectamos el servo a Arduino

Conclusión

Usar los motores eléctricos más simples combinados con un arduino es una tarea bastante simple, mientras que dominar este material amplía sus capacidades en el campo de la automatización y la robótica. Los robots más simples o los modelos de automóviles controlados por radio consisten en tales motores, y los servos se utilizan para controlar la rotación de las ruedas.

En los ejemplos considerados, se usó un potenciómetro para establecer el ángulo de rotación o la velocidad de rotación, en su lugar se puede usar cualquier otra fuente de señal, por ejemplo, la rotación o el cambio de velocidad pueden ocurrir como resultado de la información recibida de los sensores.

Un ejemplo del uso de servos en energía alternativa: seguimiento del ángulo de incidencia de la luz solar y ajuste de la posición de los paneles solares en las centrales eléctricas.

Para implementar dicho algoritmo, puede usar varios fotoresistores u otros dispositivos optoelectrónicos para medir la cantidad de luz incidente y, según sus lecturas, establecer el ángulo de rotación del panel solar.

Ver también en bgv.electricianexp.com:

  • Cómo se organiza y funciona el servo
  • Arduino y motor paso a paso: fundamentos, esquemas, conexión y control.
  • Características de dispositivos de conexión a Arduino
  • Cómo distinguir un motor de inducción de un motor de CC
  • Cómo conectar un codificador incremental a Arduino

  •