sábado, 26 de julio de 2014

Control de 3 motores paso a paso en C18 con pic 18f2550

Control de tres motores paso a paso en C18 con pic 18f2550




Continuando con los programitas de control de Motores PaP, PIC LabView.

Control de 1 Motor PaP en Labview (PIC 16F en ASM)
Control de 2 Motorres PaP en Labview (PIC 16F en ASM)http://electron-i-k.blogspot.mx/2014/07/pic16f628a-espera-los-bytes-de-control.html

ahora para controlar 3 Motores necesito 3 timers!!, de las mimsas caracteristicas, el limite no es el lenguaje,
el ASM es eficiente! se conoce todo lo qeu hace el PIC, en cada momento.

pero para este proyecto, migre a la siguiente gama, la GAMA ALTA de 8bits, los 18F programando en C18.

utilizando el ya conocido 18F2550, aprovechando los 3 Timers de 16bits!!


OBJETIVO: 

Controlar 3 motores Paso a Paso cada uno independiente del otro desde el computador.

Al Igual que los Ejemplos anteriores(control de 1 y 2 motores en 16f), el cambio de secuencuia, se ejecutaba gracias a la Interrupcion de un Timer, uno por cada Motor.

en los PICs 18F podemos asignarle prioridades a las Interrupciones, asi una rutina de Alta prioridad puede Interrumpir una de baja prioridad, en eset programa las de baja prioridad son los desbordes de cada uno de los Timers, y de alta la recepción UART.

La imagen lo dice todo:


Programa en Labview:

el VI envía 7 bytes, 6 bytes para los 3 timers(16bits) (2bytes escriben un Timer), mientras que el 7mo indicaba cual o cuales de los motores debe girar y en que sentido(llame a este byte en el registro del PIC Direccion)

Los valores a escribir en los Timer, son los unicos que controlan la el tiempo entre cambio de secuencia del Motor, de este modo a menor el tiempo de cambio de secuencia --> mas rápido gira en Motor, y viseversa.



Tomando en cuenta que escribiendo valores solo para los LSB no hay mucho cambio de velocidad(LSB es un cambio de 256 en comparacion de escribir los MSB mas de 65000),hay 2 VIs, el primero envia los bytes enviados pero desde el Teclado de la computadora y los valores paar los Timers desde 3 Knobs, aveces he tenido problemas con los dispositivos (Teclado,Raton,Jostick etc) me botaba error !wtf?, así que hay otro VI que solo se envian los valores para los Timers mediante PointerSlides(se pueden apreciar 6, se pueden cargar directamenet los LSB y MSB por individual), los indicadores boleanos(botones)(X+-,Y+-,Z+-) para las direcciones.

ARCHIVOS VI(LabView2012),C,HEX AQUI

martes, 15 de julio de 2014

Control de 2 motores paso a paso en C18 con pic 18f2550

PIC16F628A espera los bytes de control para cada uno de los Motores X e Y, enviados desde Labview en la PC, programa para PIC escrito en ASM.

Continuación de: Controlar motor Paso a Paso con PIC desde Labview

Objetivo:
Controlar parámetros por Individual de 2 Motores MotorX y MotorY:
  1. Velocidad de cada uno de los Motores
  2. Sentido de Giro de cada uno de los Motores
  3. En que momento deben Girar y cuando deben estar detenidos,esto es controlado con las teclas de direccion del teclado



Jugando con las Funciones de INPUT DEVICE CONTROL



Se pueden hacer VIs que recivan datos tanto del Teclado o el Ratón como pueden ser, que tecla esta siendo presionada en caso del teclado, en caso del raton se puede saber en que posición exacta se encuentra en puntero del Raton, las coordenadas propias en X e Y de la resolución de Pantalla.

El diagrama de Bloques General:


el SubVI "ONESHOT" envia un 1 boleano solo cuando cambia el valor de cualquier Elemento en el Panel de Control(Especialmente los de Velocidad y Deteccion de Tecla presionada)

Simulación en ISIS-Proteus:


Ambos Motores deben ser iguales, para que tengan el mismo alcance velocidad, torque etc.
como también las Temporizaciones entre cada cambio de secuencia, lo cual se implemento con Interrupciones de Timer0 y Timer1:

IGUALANDO TEMPORIZACION, TIMER0 Y TIMER 1:

Timer0 es de 8 bits y el Timer1 de 16bits, para equilibrar la cuenta, ya que Labview envía UNO SOLO BYTE POR TIMER que contiene el valor del timer para cierta temporizacion.

Recordar:
  1. Temporizacion Timer0 = Tcy x Prescalador x (256-TRM0)
  2. Temporizacion Timer1 = Tcy x Prescalador x (65536-TRM1)
debemos degradar el Timer1 de 16BITS al nivel de trabajo del Timer0 de 8BITS

Preescalador Timer0=256, Preescalador Timer1=1

siendo VelocidadX,VelocidadY bytes enviados para escribir el Timers 0 y Timer1 por individual

Timer0=Tcy x  256 x (256-VelocidadX)
Timer1=Tcy x  1 x (65536-256 x VelocidadY)

con esto, la temporizacion de cada Timer es la misma para cada VelocidadX y VelocidadY .

Controlamos Timer0 como es de costumbre, pero con Timer1 cuando hay que actualizar el contador se debe chancar TMR1L con 0xFF directamente, y TMR1H con el valor Velocidad respectivo.


ARCHIVOS: ASM,Hex,Sim Proteus,VI Labview2012 AQUI

Continuación: 

miércoles, 2 de julio de 2014

Interfaz Gráfica en LabView, Interfaz hardware para motor Bipolar controlado por pic(16f628) escrito en asm, el programa para el pic se puede modificar para ser compatible con cualquier pic con modulo usart.


para simular en Proteus, revisar: Comunicacion Serie en ISIS-Proteus

OBJETIVOS:
Crear un VI, que envié señales de control via puerto Serie al PIC(16F628A) para controlar el Motor.
que parámetros controla?:
  1. Velocidad del Motor(14 velocidades..temporizacion con Timer0)
  2. Sentido de Giro
  3. Cantidad de Pasos
  4. Control de STOP(detener el motor en cualquier monento)
todo en tiemp real desde el VI.

Archivos ASM,HEX,sim en Proteus,VI LabView2012 AQUI

Observaciones: usando event structure se pudo hacer mas eficiente el Vi, estoy en eso.

Luego pongo mas detalles...