miércoles, 20 de agosto de 2014

LabVIEW InPort.vi y OutPort.vi en Windows Vista y Windows 7
Si han intentado utilizar los VIs de LabVIEW InPort.vi y OutPort.vi (y variantes) en Windows Vista o Windows 7 se habrán dado cuenta que no están en la paleta.
Esto es porque si LabVIEW se instala en Windows Vista o Windows 7 oculta esa paleta, aunque no elimina esa biblioteca de sus directorios. O sea, si la misma versión de LabVIEW que se instala en una máquina con Windows XP, y tiene esos VIs en su paleta, se instala en Windows Vista o Windows 7, no muestra esos VIs en su paleta.
National Instruments explica que eso es porque Microsoft desaconseja el acceso directo a puertos a partir de Windows Vista.
Pero si querés "desoír" el consejo de Microsoft, y usar esos VIs de todas formas, hacé lo siguiente:
  1. Abrí un "Blank VI".
  2. Tools -> Advanced -> Edit Palette Set
    Tools -> Advanced -> Edit Palette Set
    Tools -> Advanced -> Edit Palette Set
  3. Clic en un espacio en blanco de la paleta "Functions", y Insert -> Subpalette:
    Insert -> Subpalette
    Insert -> Subpalette

  4. Link to an LLB (.llb):
    Link to an LLB (.llb)
    Link to an LLB (.llb)
  5. Y buscar en el directorio de instalación de LabVIEW la librería "portaccess.llb". En mi instalación está en: C:\Archivos de programa\National Instruments\LabVIEW 2010\vi.lib\Platform\portaccess.llb.
  6. A la nueva subpaleta creada, la llamé "Puertos". Para renombrarla:
    Rename Subpalette
    Rename Subpalette
  7. Una vez terminado esto, hacer clic en "Save Changes":
    Save Changes
    Save Changes
  8. Ahora ya se deberían ver esos VIs en la paleta:
    Puertos

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...

sábado, 14 de junio de 2014

Placa impresa del circuito con PIC18F4550



Una vez concluidos los anteriores pasos (los de la noticia anterior) es hora de entrar a organizar donde irán los componentes que contendrá nuestra placa y por donde trazaremos las pistas. Para ello utilizaremos el Layout Plus.
Para trabajar en Layout Plus es necesario tener un archivo .MNL el cual le conseguimos gracias al proyecto que ya creamos en elDesing Entry Cis. Entrando al Desing y dando donde muestra la imagen generaremos el archivo.
Per o antes de crear el archivo MNL hay que comprobar si todos los componentes que contiene nuestro proyecto tienen el PCB Footprint. Este Footprint es el que le dice a Layout que dimensiones tendrá dicho componente en el programa, con qué forma y tamaño. Si los componentes no contienen el footprint no podremos trabajar y si el que contiene está mal referenciado, la placa que montemos no concordara con el diseño.
La forma de automatizada para asignar footprints a los elementos se muetras en la imagen siguiente, cargando un archivo .UPD . Una vez hecho podrás comprobar que ahora si viene. Yo personalmente después de hacerlo comprobé elemento a elemento si realmente lo tenía o tenia el correcto para asegurarme.
Una vez comprobado todo es hora de generar el archivo .MNL para poder trabajar en Layout.  Es de mencionar que en Capture antes de generarlo tenemos que tener como archivo raíz la hoja que contiene los Bloques del proyecto. En caso de que el archivo raíz (una carpeta con una muesca)  no sea el de bloques tendremos que cambiarlo.  Click derecho sobre la carpeta que contenga la hoja de bloques “Make Root” y listo. Ahora si podremos generar el archivo .MNL en este momento si hay algún problema te dirá que errores contiene el proyecto y tendrás que solucionarlos.
Una vez tengamos creado el archivo .MNL crearemos una hoja nueva en el Layout Plus. Utilizaremos una hoja por defecto como marca la imagen y el archivo .MNL que hemos generado anteriormente.
En este momento si algún footprint no fuese encontrado el propio Layout te daría error, dejándote 3 opciones. De arriba abajo, buscar la marca, crear la marca o ignorar el componente.

Bien, una vez creada la nueva hoja se nos plantea un problema. Los componentes que contendrá nuestra placa no aparecen en las librerías por defecto de Layout Plus. Por lo tanto tendremos que crearla. Lo primero será seleccionar un componente cualquiera y guardarlo en una librería nueva, una librería personalizada la cual utilizaremos para guardar todos nuestros nuevos componentes.
En mi caso he llamado a la nueva librería “Personal”. Una vez tengo la librería lo que tenemos que hacer es ver que componentes queremos crear dentro de ella. Uno de los que necesito es el  MCP6S92 que su en encapsulado tiene unas medidas y unas características concretas. No podemos darle las medidas que queramos a la hora de diseñarlo puesto que entonces no concordara con el real. Así que hacemos uso otra vez del Data Sheet (MCP6S92) y buscamos las medidas del encapsulado.
Una vez tengamos claras las medidas del componente, pasaremos a diseñarlo.  Dentro de nuestra librería personal, crearemos un componente nuevo. Esta parte es larga y compleja, yo he hecho lo que he podido, pero no tengo la certeza de que las medidas sean las correctas. De todas formas dejo una imagen y una dirección donde poder descargar mi librería personal la cual contiene el MCP6S92.
Suponiendo que todo está correctamente, todos los footprints y no tenemos ningún error. Nada mas generar el archivo aparecerá algo como esto. Una hoja en negro que contendrá todos los componentes del proyecto y todos conectados entre sí, ahora es cuando hay que ordenarlos.
Existe una forma de ordenar los componentes automáticamente pero en ese proceso no intervienen las decisiones del diseñador, así que los colocaremos de forma manual. Seleccionando la opción de “Component Toll” podremos mover los componentes. Es recomendable quitar el “Online DRC” para trabajar cómodamente. Tambien interesa quitar el “Reconnect Mode”  para no ver todas las pistas. (En la foto están marcadas las distintas opciones)
Existen varias formas para comprobar si la situación de los componentes es adecuada. La que muestro me parece la mejor  ya que genera un grafico sencillo de entender. El grafico muestra con colores calientes los lugares con más número de pistas. En la foto podéis ver cómo sacar la grafica y como es.
Teniendo los componentes situados y sabiendo que se podrán trazar bien las pistas. Lo primero que debemos hacer es saber que caras de la placa vamos a utilizar. Yo he utilizado 2 caras la cara TOP de la placa y la cara BOTTOM. En la foto se muestra cómo puedes configurar cada cara.
Para trazar las pistas de puede hacer de forma manual o automática. Obviamente lo haremos de forma automática con una opción que nos da el programa. Sin configurar nada y utilizando las opciones por defecto en la imagen se muestra cómo podemos autoenrutar las pistas de forma automática. Una vez trazadas Layout nos informara de si hay algún error y alguna pista no ha podido ser trazada, luego será marcada en color amarillo.  En caso de no poder, tal vez sea cuestión de girar los elementos o de intentarlo varias veces. Tambien se pueden tralar las pistas a mano haciendo uso de “Edit segment mode” y “Add/Edit route mode

Una vez en trazadas todas las pistas y pasado el “Design Rule Check” y que nos diga que no tenemos ningún error podremos seguir.  En mi caso me he dedicado a quitar todas las referencias de la cara AST (cara 23) de los componentes. Luego con el creador de texto he puesto texto a los componentes en la cara TOP ya que no voy a usar serigrafía al hacer la placa.
Después he creado un obstáculo en la cara BOTTOM para unir todas las GND.  En la foto aparece como configurar el obstáculo y como queda el circuito en conjunto.

Teniendo todas las pistas trazadas y sin errores, con las dimensiones que deseamos podremos, pasar al siguiente pasó.  Configuración de post-proceso (Post Process Settings)
aquí  podremos configurar  y ver los archivos que hacen referencia a las caras de la placa. Estos archivos son necesarios para hacer la placa de forma automatizada. En mi caso no tengo todas seleccionadas pero algunas de ellas si son importantes si el diseño se manda a fabrica para su producción. La cara .BOR es una que yo he configurado y que no viene por defecto y hace referencia al borde de la placa.
Haciendo “Preview” sobre cualquier de los archivos podremos ver a que hace referencia. Con esto podríamos hacer una impresión de la TOP y la BOTTOM en un acetato o papel vegetal para hacer una insolación. Pero este proceso es algo más rudimentario. En nuestro caso con estos archivos pasaremos a una maquina automatizada que hará el trabajo por nosotros. Aquí muestro el Preview de las caras TOP y BOTTOM.
Observando  como ha quedado la placa me doy cuenta de que no queda como yo desearía. Las pistas trazadas automáticamente por Layout no han sido tiradas como a mí me gusta. Valiéndome de las herramientas propias de Layout paramodificar o desplazar las Nets (pistas) he recolocado unas cuantas a mi gusto. Con esto espero reducir los posibles fallos que puedan surgir a la hora de decapar el cobre de la placa. No recomiendo hacerlo como yo, pues es un trabajo tedioso y  el mínimo fallo que no puedas corregir te obligara a volver a tener que trazar todas las Nest.
En esta foto podréis ver la diferencia de cómo estaban (izquierda) a como las he dejado (derecha). Se ve claramente que los cambios de vías están más separados y que las pistas no hacen cosas raras.
Otro ejemplo. En la derecha el como han quedado los cambios de via y a la izquierda como
quedan despues de que los retoque. Este paso nos ahorrara problemas mas adelante.

He tenido un pequeño fallo a la hora de colocar los componentes, no colocar los condesadores de desacoplo cerca del microcontrolador. Esto supone, volver a recolocar los componentes, volver a trazar las pistas y volver a corregirlas a mano por el motivo ya comentado.
En la siguiente entrada veremos que hay que hacer con esos archivos generados. Como tratarlos en el CircuitCAM para volver a corregir posibles fallos y luego como llevarla a la maquina para empezar a crear la placa fisicamente.

lunes, 14 de abril de 2014

DataSocket Server - Labview





Índice y descarga de este y otros ejemplos de programación en LabVIEW.<- Descargar este VI
Para configurar el DataSocket Server hay que ir a:
Inicio->Programas->National Instruments->DataSocket->DataSocket Server Manager.
Una vez ahí hay pararse sobre (por ejemplo) Predefined Data Items, y presionar el botón New Item. La descripción no importa. Hay que llamarlo: waveform_str para que funcione con el VI de ejemplo. O ponerle otro nombre pero después especificar ese nombre en la URL de los instrumentos. Debe ser de tipo String.
Una vez terminada esa configuración hay que cerrar esa ventana y abrir:
Inicio->Programas->National Instruments->DataSocket->DataSocket Server.
Este servidor debe estar abierto todo el tiempo que querramos transmitir los datos, pues se transmiten a través de este servidor. El generador envía los datos a este servidor y el osciloscopio los lee de acá.

Se conecta al DataSocket Server y envía los datos a éste servidor como una stringllamada waveform_str.
El programa inicia intentando conectarse con el DataSocket Server en modo write. Si no puede conectarse espera 100ms y vuelve a intentarlo. Esto lo hace hasta que se pueda conectar.
Una vez conectado, genera una señal y la envía al DataSocket Server. Espera 100ms y vuelve a hacer lo mismo.
Si hay algún error al enviar los datos al DataSocket Server o si se presiona el botón stop(SALIR), sale del bucle WHILE, cierra la conexión y termina el programa.

Nota: Debe haber un DataSocket Server funcionando además de este generador y del osciloscopio 1.7.2b para poder conectarse. Ver DataSocket Server para información de como configurarlo.
1.7.2a.vi
1.7.2a.vi
cboolOFF reset signal, if TRUE, resets the phase to the phase control value and the time stamp to zero. The default is FALSE.
cdblOFFSET offset is the DC offset of the signal. The default is 0.0.
cdblFRECUENCIA frequency is the frequency of the waveform in units of hertz. The default is 10.
cdblAMPLITUD amplitude is the amplitude of the waveform. The amplitude is also the peak voltage. The default is 1.0.
cdblFASE phase is the initial phase, in degrees, of the waveform. The default is 0. The VI ignores phase if reset signal is FALSE.
cdblDUTY CICLE square wave duty cycle is the percentage of time a square wave remains high versus low over one period. The VI uses this parameter only if the signal type is a square wave. The default is 50.
cdblFs Fs is the sampling rate in samples per second. The default is 1000.
cdblNRO. MUESTRAS #s is the number of samples in the waveform. The default is 1000.
cu16SEÑAL Tipo de señal: Senoidal, Triangular, Cuadrada o Diente de Sierra.
cboolstop Salir del programa.
cstrURLDirección del servidor DataSocket y nombre de la variable.
1.7.2a.vi
NI_MABase.lvlib:Basic Function Generator.viNI_MABase.lvlib:Basic Function Generator.vi
C:\Archivos de programa\National Instruments\LabVIEW 8.6\vi.lib\measure\masignal.llb\Basic Function Generator.vi

Se conecta al DataSocket Server y recibe los datos desde este servidor como una stringllamada waveform_str.
El programa inicia intentando conectarse con el DataSocket Server en modo BufferedRead. Si no puede conectarse espera 100ms y vuelve a intentarlo. Esto lo hace hasta que se pueda conectar.
Una vez conectado, lee la señal desde el DataSocket Server y la muestra en el osciloscopio. Luego vuelve a repetir el mismo proceso hasta que haya algún error al recibir los datos del DataSocket Servero si se presiona el botón stop (SALIR). Si ocurre alguna de estas dos cosas sale del bucle WHILE, cierra la conexión y termina el programa.
Nota: Debe haber un DataSocket Server funcionando además de este osciloscopior y del generador 1.7.2a para poder conectarse. Ver DataSocket Server para información de como configurarlo.
1.7.2b.vi
1.7.2b.vi
cboolstop Termina el programa.
cdblCh1 VOLTS/DIV Canal 1.
cdblTiempo SEC/DIV de ambos canales (solo se usa el CH1).
cboolCh1 CH1 ON.
cboolCh2 CH 2 ON (no se usa).
cdblCh2 VOLTS/DIV Canal 2 (no se usa).
cstrURL URL del DataSocket Server y nombre de la variable.
i1dmsdtWaveform Graph Onda leída del DataSocket.
1.7.2b.vi
Osciloscopio.viOsciloscopio.vi
C:\Documents and Settings\Jhon\Mis documentos\facu\5to\Digitales 3\1\Practico\Osciloscopio.vi