miércoles, 22 de junio de 2011

Motor a Pasos , Servo y Labview #CPMX3

Como se puede ver en el titulo pues usare, un motor a pasos un servo  y Labview.

La idea es esta con Labview me voy a conectar de manera serial a un µC en especifico un AT90USB162  también lo puedo hacer con un ATMEGA88PA o el ATMEGA8 un poco mas viejo pero pues deben de funcionar. Aquí voy a controlar la posición de ambos del motor a pasos y del Servomotor. pero antes un poco de teoría XD. Un motor a pasos es un motor, sin escobillas y con 2 bobinas el que yo voy a usar,hay dos tipos principales de motores a paso el bipolar y el unipolar la diferencia es que el bipolar tiene 2 bobinas y las bobinas no tiene ningún común y el unipolar tiene también 2 bobinas para cada bobina tiene un común. aquí una imagen.

Imagen obtenida de http://www.todorobot.com.ar/informacion/tutorial%20stepper/stepper-tutorial.htm

Si quieren saber mas sobre los motores a paso chequen ese tutorial de esa pagina la verdad esta muy bien hecho. Motor a Pasos a usar por mi es el PM55L-048-TBE2.

Ahora un poco sobre los servomotores. El servomotor a usar por mi es un servomotor de modelismo los que se usan en los carros, helicópteros, aviones o lanchas de Radiocontrol. Sirven muy bien para aplicaciones de robótica. una de las grandes ventajas de estos motores es que son muy preciosos y ya traen todo, su driver o sea que nada mas necesito conectarlo y decirle en que posición lo quiero y ya. Como toda ventaja también hay desventajas y en este caso es el costo tiene un precio mucho mas elevado. El Servomotor a usar es el HS-805BB de Hitec.

Y pues sobre Labview que les puedo decir es un entorno de programación que utiliza código G que es grafico la verdad es muy sencillo pero es bastante poderoso es usado a nivel internacional para aplicaciones de desarrollo, medición, control, instrumentación, automatización , etc… la verdad es un muy buen software la desventaja es el costo una versión de estudiante nos anda costando unos $ 300 pesos mexicanos pero si queremos usarlo a nivel industrial la versión mas chafa anda costando no menos de $10,000.00 y tiene menos que la versión de estudiante XD. Claro venden la versión de estudiante barata para que cuando salgan los ingenieros les compren el Labview entero pero pues es un software excelente y el soporte que te dan también es excelente tiene de todo.

Bueno ahora si basta de charla y un poco de trabajo. Primero hablare sobre como conectar y como mover el servomotor.

Como se ve en la imagen el servomotor tiene 3 cables uno Negro otro rojo y otro amarillo, pues el negro va a tierra, el rojo va a 5 volts y el amarillo es la señal de control esta va a venir de nuestro µC AT90USB162 o ATMEGA8. Este pin lo vamos a conectar a la salida PWM del Timmer 0 de 16 bits por que uso 16 bits, para que sea mas preciso. El servo funciona con un PWM de 50 hz ósea que le tengo que enviar la posición que quiero cada 20 ms aproximadamente y vamos a variar este PWM para varias la posición se varia entre 0.9 ms y 2 ms esto es le tiempo en alto para que sea de 0 a 180 grados depende de cada controlador de servo pero aquí puedo decir que con 0.9 ms son 0 grados y con 2 ms son 180 grados. Ahora si lo importante, el programa en el µC y en Labview. Primero pues hare el del µC y lo hare en codevision.

Lo primero es abrirlo darle en nuevo proyecto y después seleccionar que es con AT90, ATMEGA, ATINY FPSlIC dar click en OK y no sale una ventana como esta.

Click para ver la imagen en grande

En esta ventana configuramos muchas cosas lo primero es configurar el µC a usar y le frecuencia de trabajo en mi caso es 8 MHz y el µC es el At90USB162 pero si quieren otro pues usen otro  y ya el código seria el mismo y la configuración también. Después en la parte de timers seleccionamos el Timer1 de 16 bits y hay que configurarlo.

Aquí en clock source seleccionamos System Clock.clock values es la velocidad a al que queremos que oscile el timer se requiere un poco de cálculos pero aquí seleccionamos 8000 kHz luego en mode hay varios el que no interesa a nosotros es Ph. correct PWMTop = OCR1A esto que quiere decir que mi timer va a contar de 0 a lo que valga OCR1A y después de OCR1A a 0 esto quiere decir que mi frecuencia va a ser 8000 kHz/(2*OCR1A+1) entonces yo quiero que sea de 50 HZ si despejo eso me queda 8000000, hay que poner ese valor para que la frecuencia del PWM sea de 50 hz pero el problema es que OCR1A solo de 16 bits teniendo como numero máximo 65536 entonces tenemos 2 opciones reducir la frecuencia del sistem clock y hacer cálculos de nuevo o poner a 0CR1A como 65536 y ver que frecuencia nos da yo decidí hacer la segundo quedándome una frecuencia de 61.03 hz que yo se que el servo no va a tener problemas en manejar entonces pues hay que seleccionar la salida en este caso hay que poner en OUTB inverted y en la parte de hasta abajo donde dice COMPA hay que poner FFFF este es el numero hexadecimal de 65536. Ahora hay que configurar la conexión serial hay que ir a la pestaña donde dice USART1.

Aquí hay que seleccionar Reciver  por que vamos a recibir y  seleccionamos 8 data, 1 stop,No parity y en modo asynchronous y en baud rate la ponemos de 9600 y ahora si hay que darle En program –>Generate save and exit.

en este punto nos pregunta si queremos usar el PORTC bit 5 como salida y seleccionamos que si.

Nos genera un código pero aquí no que nos importa es el while (1) aquí vamos a poner todo nuestro código

while (1)
      {
      alto=getchar(); //obtengo el dato del puerto serial
      bajo=getchar(); //obtengo el dato del puerto serial
      OCR1BH=alto;    //lo pongo para la comparación
      OCR1BL=bajo;    //lo pongo para la comparación
      delay_ms(100);  //me espero un tiempo
      }

Aquí cabe mencionar que hay que declarar alto y bajo como char y incluir la librería delay.h


Lo demás lo dejare para las siguientes entradas Risa


Espero y les allá gustado recuerden dudas comentarios, sugerencia, preguntas en fin lo que quieran a @lams_007 o mi correo mecatronicamexicana@gmail.com