viernes, 19 de noviembre de 2010

Control de servomotor mediante un dsPIC. Diseño Simulink (Stateflow)

Control de servomotor mediante un dsPIC. Diseño Simulink (Stateflow)
Vladimir Bonilla

El presente ejemplo controla un servomotor mediante un dsPIC que lee el voltaje V1 de un
potenciómetro, si el voltaje es mayor que V1, el motor gira 180 grados, caso contrario se posicionaen 0 grados. Adicional existe un switch que arranca el sistema.


Figura 1. Esquema del circuito de control del servomotor

Para la programación del sistema se diseña el siguiente sistema en Simulink, en el que existe un
bloque de encendido de un led de prueba de funcionamiento, el sistema de control de la lógica de
movimiento de un servo, y la salida al bloque que genera el PWM necesario para el posicionamiento del actuador.


Figura 2. Diseño del software embebido en el dsPIC

El bloque ADC INPUT recibe la señal del potenciómetro, del puerto análogo 0, esta señal es recivida por el bloque Drive control que es un subsistema diseñado como una máquina de estado finito mediante la herramienta Stateflow de Matlab (Figura 3). Este bloque realiza una comparación de determinado nivel de voltaje V0 y toma la decisión de mover el servomotor en una u otra dirección. Para el accionamiento de este bloque se utiliza una entrada digital del dsPIC (B1), que permite iniciar al bloque DriveControl, además es necesario que en este bloque se implemente un escucha (Pulse Generator) que mantenga activa a la máquina de estado finita.


Figura 3. Máquina de estado finito. Indica la posición del servomotor

El bloque DriveControl envía como salida un número que permite posicionar al servomotor, cero para un ángulo de 180 grados, 1 para una ángulo de 0 grados.

Este número entero, obtenido a la salida del bloque DriveControl es enviado a la entrada del bloque AngleSelector , y este bloque determine el ancho del pulso para generar el PWM (figura 4). Para 180 grados el valor del ancho del pulso es igual al Tperiodo/3.5, y para un ángulo de 0 grados el ancho del pulso es igual a Tperiodo/12 (Estos valores son tomados para posicionar al servomotor HS-755HB).

Figura 4. Selector del valor para determinar el ancho de pulso

La salida del bloque AngleSelector alimenta la entrada del bloque que genera el PWM para posicionar al servomotor. A continuación el diagrama de programación del bloque ControlServo 1

Figura 5. Bloque que genera el PWM para posicionar al servomotor

Resultados
:

Osciloscopio de PWM generado para posicionar el servo en 0 grados


Osciloscopio de PWM generado para posicionar el servomotor en 180 grados