You are on page 1of 13

UNIVERSIDAD AUTÓNOMA DE NUEVO LEÓN

FACULTAD DE INGENIERÍA MECÁNICA Y ELÉCTRICA

Laboratorio de Diseño de Sistemas Mecatrónicos

Práctica #6
Control de velocidad de un servomotor.
M.C. Dante Ferreyra Mendez

Emmanuel Pablo García Muñoz 1594897


Jueves: V4 Brigada: 415
Oscar Eduardo Medellin Cuellar 1598578
Miercoles: V5 Brigada: 306

Ciudad Universitaria San Nicolás de los Garza N.L. a 5 de Mayo del 2017
ÍNDICE
Objetivo 3

Marco Teórico 3

Introducción 6

Desarrollo 7

Material 7

Procedimiento 7

Conclusión 13

Bibliografía 13

2
CONTROL DE VELOCIDAD DE UN SERVOMOTOR.
OBJETIVO.

El objetivo de este ejercicio es similar a la práctica anterior; realizar de manera experimental el


control de la velocidad en un servomotor y su validación correspondiente. En esta práctica, se
realizará un experimento de nueva cuenta con un servomotor. La finalidad en esta ocasión será de
controlar la velocidad del eje del servomotor. El sistema es de lazo abierto en el que se utiliza la
computadora para alimentar la señal de entrada al dispositivo electromecánico. No se utilizará
todavía un encoder para realizar el lazo cerrado.

MARCO TEÓRICO

SERVOMOTOR
Un Servo es un dispositivo pequeño que tiene un eje de rendimiento controlado. Este puede ser
llevado a posiciones angulares específicas al enviar una señal codificada. Con tal de que una señal
codificada exista en la línea de entrada, el servo mantendrá la posición angular del engranaje.
Cuando la señala codificada cambia, la posición angular de los piñones cambia. En la práctica, se
usan servos para posicionar superficies de control como el movimiento de palancas, pequeños
ascensores y timones. Ellos también se usan en radio control, títeres, y por supuesto, en robots.

Los Servos son sumamente útiles en robótica. Los motores son pequeños, tiene internamente una
circuitería de control interna y es sumamente poderoso para su tamaño. Un servo normal o
Standard como el HS-300 de Hitec tiene 42 onzas por pulgada o mejor 3kg por cm. De torque que
es bastante fuerte para su tamaño. También potencia proporcional para cargas mecánicas. Un
servo, por consiguiente, no consume mucha energía. Se muestra la composición interna de un
servo motor en el cuadro de abajo. Podrá observar la circuitería de control, el motor, un juego de
piñones, y la caja. También puede ver los 3 alambres de conexión externa. Uno es para
alimentación Vcc (+5volts), conexión a tierra GND y el alambre blanco es el alambre de control.

Hay tres tipos de servomotores:

 Servomotores de CC
 Servomotores de AC
 Servomotores de imanes permanentes o Brushless.

3
FUNCIONAMIENTO DE UN SERVOMOTOR

El servomotor tiene algunos circuitos de control y un potenciómetro (resistencia variable)


conectado al eje central. potenciómetro permite a la circuitería de control supervisar el ángulo
actual del servomotor. Si el eje está en el ángulo correcto, entonces el motor estará apagado. Si el
circuito verifica que el ángulo no es el correcto, el motor girará en la dirección adecuada hasta
llegar al ángulo correcto. El eje del servomotor es capaz de llegar a los 180 grados. Normalmente,
en algunos llega a los 210 grados, pero varía según el fabricante. Un servomotor normal se usa
para controlar un movimiento angular de entre 0° y 180°.

La cantidad de voltaje aplicado al motor es proporcional a la distancia que éste necesita viajar. Así,
si el eje necesita regresar una distancia grande, el motor regresará a toda velocidad. Si este
necesita regresar sólo una pequeña cantidad, el motor correrá a una velocidad más lenta. A esto
se le llama control proporcional.

CONTROL DE POSICIÓN DE UN SERVOMOTOR

El dispositivo utiliza un circuito de control para realizar la ubicación del motor en un punto,
consistente en un controlador proporcional.

El punto de referencia o setpoint —que es el valor de posición deseada para el motor— se indica
mediante una señal de control cuadrada. El ancho de pulso de la señal indica el ángulo de
posición: una señal con pulsos más anchos (es decir, de mayor duración) ubicará al motor en un
ángulo mayor, y viceversa.

Inicialmente, un amplificador de error calcula el valor del error de posición, que es la diferencia
entre la referencia y la posición en que se encuentra el motor. Un error de posición mayor significa
que hay una diferencia mayor entre el valor deseado y el existente, de modo que el motor deberá
rotar más rápido para alcanzarlo; uno menor, significa que la posición del motor está cerca de la
deseada por el usuario, así que el motor tendrá que rotar más lentamente. Si el servo se encuentra
en la posición deseada, el error será cero, y no habrá movimiento.

Para que el amplificador de error pueda calcular el error de posición, debe restar dos valores de
voltaje analógicos. La señal de control PWM se convierte entonces en un valor analógico de

4
voltaje, mediante un convertidor de ancho de pulso a voltaje. El valor de la posición del motor se
obtiene usando un potenciómetro de realimentación acoplado mecánicamente a la caja reductora
del eje del motor: cuando el motor rote, el potenciómetro también lo hará, variando el voltaje que
se introduce al amplificador de error.

Una vez que se ha obtenido el error de posición, éste se amplifica con una ganancia, y
posteriormente se aplica a los terminales del motor.

Dependiendo del modelo del servo, la tensión de alimentación puede estar comprendida entre los
4 y 8 voltios. El control de un servo se reduce a indicar su posición mediante una señal cuadrada
de voltaje: el ángulo de ubicación del motor depende de la duración del nivel alto de la señal.

Cada servo, dependiendo de la marca y modelo utilizado, tiene sus propios márgenes de
operación. Por ejemplo, para algunos servos los valores de tiempo de la señal en alto están entre 1
y 2 ms, que posicionan al motor en ambos extremos de giro (0° y 180°, respectivamente). Los
valores de tiempo de alto para ubicar el motor en otras posiciones se hallan mediante una relación
completamente lineal: el valor 1,5 ms indica la posición central, y otros valores de duración del
pulso dejarían al motor en la posición proporcional a dicha duración.3

Es sencillo notar que, para el caso del motor anteriormente mencionado, la duración del pulso alto
para conseguir un ángulo de posición θ estará dado por la fórmula

donde está dado en milisegundos y en grados. Sin embargo, debe tenerse en cuenta que
ningún valor —de ángulo o de duración de pulso— puede estar fuera del rango de operación del

5
dispositivo: en efecto, el servo tiene un límite de giro —de modo que no puede girar más de cierto
ángulo en un mismo sentido— debido a la limitación física que impone el potenciómetro del
control de posición.

Para bloquear el servomotor en una posición, es necesario enviarle continuamente la señal con la
posición deseada. De esta forma, el sistema de control seguirá operando, y el servo conservará su
posición y se resistirá a fuerzas externas que intenten cambiarlo de posición. Si los pulsos no se
envían, el servomotor quedará liberado, y cualquier fuerza externa puede cambiarlo de posición
fácilmente.

Para el giro a máxima velocidad en el sentido de las agujas del reloj el pulso de la señal sería:

Señal con periodo de 20 ms. Anchura del pulso entre 0.8 a 1.2 ms. Aquí hay un rango de valores
porque depende del fabricante del servomotor de rotación continua.

INTRODUCCIÓN

En las prácticas 4 y 5 se explicó el funcionamiento y el control de un servomotor; ahora en esta


práctica realizaremos un control de velocidad de dicho motor. Para esto utilizaremos nuevamente
el microprocesador. Para realizar el control de velocidad no será algo sencillo de realizar puesto
que se necesitará programar algo como control exponencial para ir aumentando sobre las
posiciones.

DESARROLLO

 Seleccione el microprocesador a utilizar para esta práctica, sustentando las razones de su


elección y desarrollo.

6
 Seleccione el software y lenguaje de programación del mismo.
 Desarrolle el código de programación para que el microprocesador pueda ser usado como
interface
 Desarrolle el instrumento virtual en Labview
 Genere las pruebas necesarias para la obtención satisfactoria de la práctica.
 Desarrolle un escrito de las problemáticas encontradas en el desarrollo de la misma y sus
respectivas soluciones.
 Genere sus conclusiones tomando en cuenta los puntos anteriores.

MATERIAL
 Labview
 Servo Motor hs422
 Transistor 2n2222
 1 MOC
 2 Resistencias de 1KΩ
 Resistencia de 333Ω
 Arduino

PROCEDIMIENTO

Para poder cumplir nuestro objetivo utilizamos el microprocesador Atmega328, que tiene incluido
el Arduino, elegimos utilizar el arduino por la facilidad y flexibilidad de comunicar arduino con el
servomotor con sus librerías así como el manejo de PWM y los periféricos necesarios para nuestra
aplicación.

Descargando el Software Arduino, de la página oficial de Arduino http://www.arduino.cc/ y solo


tuvimos que descargar un complemento para la comunicación de Labview y el programa Arduino.

La interfaz Arduino Uno es una plataforma de desarrollo de computación física y está compuesta
por una placa con un microcontrolador y con una circuitería que ayudan a tener un control de los
valores de entradas y salidas. Con Arduino Uno se pueden configurar las entradas y salidas, ya
sean analógicas o digitales, de tal manera que se logren obtener los valores más convenientes,
según se requiera.

Una característica de Arduino Uno es que se puede energizar a través de la conexión USB o
conectando una fuente externa. En esta práctica energizaremos el microcontrolador a través de la
conexión USB, ya que contamos con el uso de una computadora.

7
El software que se utilizó en esta práctica es LABVIEW en combinación con Arduino y el lenguaje
de programación, con el cual se programó el microcontrolador, es lenguaje C.

En el entorno de Labview desarrollamos una VI) para controlar un servo motor, en este caso
utilizamos un arduino para facilitar la comunicación. Para lograr la comunicación de Labview con el
arduino bajamos un tool kit desde la página de National Instruments.

Con ayuda de los comandos explicados en la práctica pasada se logró de nuevo la comunicación
correcta del servo con el arduino y estos a su vez con el entorno de Labview.

La codificación realizada con el arduino para el funcionamiento del servo se muestra a


continuación.

/************************************************************
*********************
**
** LVFA_Firmware - Provides Basic Arduino Sketch For
Interfacing With LabVIEW.
**
** Written By: Sam Kristoff - National Instruments
** Written On: November 2010
** Last Updated: Dec 2011 - Kevin Fort - National Instruments
**
** This File May Be Modified And Re-Distributed Freely.
Original File Content
** Written By Sam Kristoff And Available At
www.ni.com/arduino.
**

8
*************************************************************
********************/
/************************************************************
*********************
**
** Includes.
**
*************************************************************
*******************/
// Standard includes. These should always be included.
#include <Wire.h>
#include <SPI.h>
#include <Servo.h>
#include "LabVIEWInterface.h"
/************************************************************
*********************
** setup()
**
** Initialize the Arduino and setup serial communication.
**
** Input: None
** Output: None
****************************************************************
*****************/
void setup()
{
// Initialize Serial Port With The Default Baud Rate
syncLV();
// Place your custom setup code here
}
/************************************************************
*********************
** loop()
**
** The main loop. This loop runs continuously on the Arduino.
It
** receives and processes serial commands from LabVIEW.
**
** Input: None
** Output: None
*************************************************************
********************/
void loop()
{
// Check for commands from LabVIEW and process them.
checkForCommand();
// Place your custom loop code here (this may slow down
communication with LabVIEW)
if(acqMode==1)
{
sampleContinously();
}

9
}

Para la implementación del VI, en el panel frontal se colocó un indicador, el cual muestra la
velocidad a la cual queremos que gire la flecha del motor, la dirección en que girará la flecha, así
como el ángulo a girar, un botón de stop, que detendrá nuestro programa y por ultimo un cuadro
de texto el cual nos dirá si se cumplió alguna condición.

En el diagrama de bloques del VI se configuró al Arduino para que se conecte con la computadora
en el puerto USB 5 y solo conectamos un servomotor en el pin 2 de Arduino. La parte del diagrama
de bloques que se localiza dentro de un ciclo While se seguirá ejecutando las veces que se desee
hasta que se indique la detención del programa. Para que el programa completo se ejecute,
deberá cumplir con las condiciones localizadas en los Case Structure. Si esto no se cumple, el
programa no se ejecutará.

El While Loop se utilizó para que el programa se repita indefinidamente hasta que se oprima el
botón STOP o hasta que se detecte algún error. El ángulo del servomotor será leído para ver en
qué posición se encuentra; dicho valor entrará a un caso dependiendo de la dirección del
servomotor. Si el servomotor gira hacia adelante, comenzará desde 0° hasta el ángulo al cual se
desea llegar y si se cambia la dirección del servomotor, siempre regresará a la posición de 0°,
independientemente de la localización en que se encuentre. Cuando el servomotor gire hasta
llegar a la posición deseada, se detendrá.

La velocidad a la cual gira el servomotor se controla a través de los incrementos en el ángulo hasta
llegar al ángulo deseado o a través de decrementos en el ángulo hasta llegar a 0°. Debido a esto,

10
existen casos en los que el ángulo difiere del valor indicado. En caso de que exista algún error, el
programa no realizará ninguna función y, automáticamente, finalizará.

11
Como resultado pudimos obtener el funcionamiento del servo así como la retro alimentación de
este para poder ubicarlo en el espacio en cualquier comento deseado.

Para poder obtener una respuesta en el momento metimos el valor de un Ángulo en el indicador
correspondiente para poder observar mejor, asi como se indicó la velocidad a la cual queríamos
que trabajará nuestro motor.

12
El servomotor se conectó a Vcc (+5 VCD), GND y al pin 2 de la comunicación digital. Se realizaron
distintas pruebas, las cuales nos indicaron que el servomotor se movía hacia la posición deseada
con la velocidad deseada; el movimiento se realiza lenta o rápidamente hasta llegar al ángulo
deseado. Al activar el booleano la dirección cambió y, al llegar a la posición deseada, el
servomotor regresaba a 0°, donde también se ve afectado por la velocidad.

El programa se basa con el retardo, por lo cual, a menor velocidad, mayor tiempo de giro y
viceversa.

CONCLUSIÓN

Es fundamental controlar la velocidad en cualquier proceso, poder acelerar la velocidad de un


motor o de un accionador mecánico puede significar aumentar la productividad en una empresa, o
caso contrario, para una proceso que es muy delicado y crítico, es necesario a veces tener un
movimiento más suave y preciso, lo que implica no tener una velocidad tan alta, es por ende que
controlar la velocidad de este servomotor es importante.

Se pudo comprobar con éxito el funcionamiento de nuestra programación, de nuestra VI y de la


comunicación con el servo gracias al arduino ya que pudimos ver en tiempo real la comunicación
de estos. El control del servo fue bastante suave ya que al momento de moverle en la VI el servo
se movía automáticamente y se ubicaba en la posición que nosotros le indicábamos dentro del
programa.

Se notaba el cambio de la velocidad dependiendo de la cual nosotros la colocáramos en nuestro


panel frontal y el movimiento al ángulo que deseábamos también se cumplía con éxito y variando
su velocidad.

BIBLIOGRAFÍA

https://es.wikipedia.org/wiki/Servomotor

http://www.info-ab.uclm.es/labelec/solar/electronica/elementos/servomotor.htm

http://www.monografias.com/trabajos60/servo-motores/servo-motores.shtml

http://www.control-systems-principles.co.uk/whitepapers/spanishwp/02ServoPaper2SP.pdf

http://www.arduino.cc/en/Main/ArduinoBoardUno

13

You might also like