que tal un robot para la web?
-
- Miembro Nuevo
- Posts: 21
- Joined: 22 Mar 2005, 02:49
Pues parece que mis motores fueron un chasco... tengo un motor como el doble de potente que el otro xDDDDDDDd así que el robot gira sólo...
Bueno, pues agrego 2 servomotores a la lista xD
Y tendré que hacer el chasis de nuevo... xDDD
Madre mía... si con la parte mecánica tengo estos problemas, cuando llegue el pic... xDDDDDDD
Toni, pon una resistencia a ver si bajan la velocidad.
Salu2!
Bueno, pues agrego 2 servomotores a la lista xD
Y tendré que hacer el chasis de nuevo... xDDD
Madre mía... si con la parte mecánica tengo estos problemas, cuando llegue el pic... xDDDDDDD
Toni, pon una resistencia a ver si bajan la velocidad.
Salu2!
-
- Miembro Medio
- Posts: 55
- Joined: 06 Feb 2005, 16:44
pwm si no recuerdo mal es pulse width modulation. Se trata de generar una onda cuadrada con una frecuencia determinada...la idea es sencilla lo que hacemos es alimentar el motor (lo que seria un 1 logico)durante un corto periodo de tiempo y durante otro periodo de tiempo no alimentarlo (0 logico). si lo hiciesemos en un intervalo relativamente largo lo que se notaria es que los motores van como a saltos...pero si esta variacion entre encendido y apagado la hacemos varias veces por segundo el movimiento es continuo. Esto es a grandes rasgos..luego vendra un purista y se echara las manos a la cabeza
Lo interesante de esta tecnica es que variando la frecuencia de ese encendido-apagado podemos controlar la velocidad sin perder fuerza en el motor al contrario de lo que pasaria si solamente bajamos el voltaje, bajando el voltaje llegaria un momento que los motores no tendrian fuerza para mover el robot.
Me he explicado? basicamente seria como si estuviesemos conectando el motor y desconectandolo de la bateria mcuhas veces...
Con el pic 16f876 se puede hacer facilmente pq ya tiene 2 unidades de PWM asi que se podrian controlar 2 motores sin problemas y ademas podriamos solucionar el tema de que un motor vaya mas rapido que otro, compensamos con las velocidades y ya esta(aunque habra que ahcerlo a ojo hasta q salga .Con el 16f84 tb se puede hacer pero hay que programarlo todo mientras q con el 876 es dar valor a unos registros que tiene
Lo interesante de esta tecnica es que variando la frecuencia de ese encendido-apagado podemos controlar la velocidad sin perder fuerza en el motor al contrario de lo que pasaria si solamente bajamos el voltaje, bajando el voltaje llegaria un momento que los motores no tendrian fuerza para mover el robot.
Me he explicado? basicamente seria como si estuviesemos conectando el motor y desconectandolo de la bateria mcuhas veces...
Con el pic 16f876 se puede hacer facilmente pq ya tiene 2 unidades de PWM asi que se podrian controlar 2 motores sin problemas y ademas podriamos solucionar el tema de que un motor vaya mas rapido que otro, compensamos con las velocidades y ya esta(aunque habra que ahcerlo a ojo hasta q salga .Con el 16f84 tb se puede hacer pero hay que programarlo todo mientras q con el 876 es dar valor a unos registros que tiene
-
- Miembro Nuevo
- Posts: 12
- Joined: 09 Mar 2005, 12:16
Muy buena explicación. Yo estoy pensando que lo mejor es hacer el PWM ya que en mi caso se me soluciona un problema crítico que me aparece.
Resulta que cuando "enchufo" los motores esto pegan un salto increible (salta todo el chasis) entonces he pensado que puedo hacer un programilla controlado por el pic que me vaya regulando la velocidad con la que se mueve el motor.
Por ejemplo que empiece muy suavemente y poco a poco vaya acelerendo.
Claro esta, para esto es necesario crear alguna rutina para PWM.
Resulta que cuando "enchufo" los motores esto pegan un salto increible (salta todo el chasis) entonces he pensado que puedo hacer un programilla controlado por el pic que me vaya regulando la velocidad con la que se mueve el motor.
Por ejemplo que empiece muy suavemente y poco a poco vaya acelerendo.
Claro esta, para esto es necesario crear alguna rutina para PWM.
Last edited by Viciao2000 on 29 Mar 2005, 17:03, edited 1 time in total.
-
- Miembro Medio
- Posts: 55
- Joined: 06 Feb 2005, 16:44
- Toni
- Administrador
- Posts: 1069
- Joined: 14 Aug 2004, 12:49
- Location: España
- Contact:
-
- Miembro Nuevo
- Posts: 12
- Joined: 09 Mar 2005, 12:16
-
- Miembro Nuevo
- Posts: 21
- Joined: 22 Mar 2005, 02:49
-
- Miembro Medio
- Posts: 55
- Joined: 06 Feb 2005, 16:44
aki va el codigo, yo me he kedao atascao derrepente todo ha dejado de funcionar y no encuentro el por que...seguro q es una gilipollez....
LIST P=16F876 ; indicamos el modelo de PIC que tenemos
#include <p16F876.inc> ; include con las constantes
__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC
TIEMPO equ 0x30 ;una variable
ORG 0x00
goto inicio ; Primera linea del programa.
;********* EMPIEZA PWM*****************
; los calculos para un reloj de 4MHz y una PWM con duty cycle del 50% y una frecuencia 1000Hz son:
;
; Tosc = 1/4000000 = 2.5*10-7
; periodo de la PWM = 1/1000 = 0.001
; valor a cargar en PR2 = (Periodo de la PWM /(4 * Tosc * predivisor de TMR2)) - 1
; PR2 = (0.001/(4 * 2.5 * 10-7 * 4)) - 1 = 249
;
; para calcular el duty cycle:
; PWM Duty Cycle = 50 % del periodo de la PWM = 0.5 * 0.001 = 0.0005
; CCPR1L:CCP1Con<5:4> = PWM Duty Cycle / (Tosc * Predivisor de TMR2)
; CCPR1L:CCP1Con<5:4> = 0.0005 / (2.5 * 10-7 * 4) = 500 (0111110100 en binario con 10 bits)
; se cargan los 8 primeros (01111101)en CCPR1L y los 2 ultimos(los de menor peso 00) en CCP1Con<5:4>
inicio
bsf STATUS,RP0 ;accedemos al banco de memoria 1
movlw d'249' ; cargamos 249 en PR2
movwf PR2
bcf STATUS,RP0 ; accedemos al banco 0
movlw b'01111101' ; cargamos el valor del duty cycle
movwf CCPR1L
bcf CCP1CON,CCP1X ; cargamos el valor de CCP1Con bit 5
bcf CCP1CON,CCP1Y ; cargamos el valor de CCP1Con bit 4
BSF STATUS,RP0 ; accedemos al banco de memoria 1
movlw 0x00
movwf TRISC ; PUERTO C COMO SALIDA
BCF STATUS,RP0 ; accedemos al banco 0
movlw b'00000101' ; Activar TMR2, y predivisor a 1:4
movwf T2CON
BSF CCP1CON,CCP1M3 ; activamos el modo PWM
BSF CCP1CON,CCP1M2
;******* TERMINA PWM*************************
;****** EMPIEZA RETARDO***********************
; retardo de 1 segundo aprox
; enciende y apaga un led conectado a RB1 cada segundo
bsf STATUS,5 ;accedemos al banco 1
movlw b'01010111' ; DIVISOR 256, TIMER0
movwf OPTION_REG
movlw 0x00
movwf TRISB ; PUERTO B COMO SALIDA
bcf STATUS,5 ;accdemos al banco 0
clrf PORTB ; TODAS LAS SALIDAS DEL PUERTO B A 0
parpadeo
bsf PORTB,1 ; ENCIENDO EL LED RB1
call esperar
bcf PORTB,1 ; APAGO EL LED
call esperar
goto parpadeo
esperar
movlw 20 ; 50ms x 20 = 1 seg
movfw TIEMPO
clrf TMR0
restaurar
movlw 0xC4 ;TMR0 = 50 ms
movfw TMR0
esperar1s
btfss INTCON,2 ;desbordamiento?
goto esperar1s ; no -> sigo esperando
bcf INTCON,2 ; si -> repongo flag
decfsz TIEMPO,1 ;una iteracion menos
goto restaurar
return
;*********** TERMINA RETARDO************************
END
Un ingeniero informatico por aki
LIST P=16F876 ; indicamos el modelo de PIC que tenemos
#include <p16F876.inc> ; include con las constantes
__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC
TIEMPO equ 0x30 ;una variable
ORG 0x00
goto inicio ; Primera linea del programa.
;********* EMPIEZA PWM*****************
; los calculos para un reloj de 4MHz y una PWM con duty cycle del 50% y una frecuencia 1000Hz son:
;
; Tosc = 1/4000000 = 2.5*10-7
; periodo de la PWM = 1/1000 = 0.001
; valor a cargar en PR2 = (Periodo de la PWM /(4 * Tosc * predivisor de TMR2)) - 1
; PR2 = (0.001/(4 * 2.5 * 10-7 * 4)) - 1 = 249
;
; para calcular el duty cycle:
; PWM Duty Cycle = 50 % del periodo de la PWM = 0.5 * 0.001 = 0.0005
; CCPR1L:CCP1Con<5:4> = PWM Duty Cycle / (Tosc * Predivisor de TMR2)
; CCPR1L:CCP1Con<5:4> = 0.0005 / (2.5 * 10-7 * 4) = 500 (0111110100 en binario con 10 bits)
; se cargan los 8 primeros (01111101)en CCPR1L y los 2 ultimos(los de menor peso 00) en CCP1Con<5:4>
inicio
bsf STATUS,RP0 ;accedemos al banco de memoria 1
movlw d'249' ; cargamos 249 en PR2
movwf PR2
bcf STATUS,RP0 ; accedemos al banco 0
movlw b'01111101' ; cargamos el valor del duty cycle
movwf CCPR1L
bcf CCP1CON,CCP1X ; cargamos el valor de CCP1Con bit 5
bcf CCP1CON,CCP1Y ; cargamos el valor de CCP1Con bit 4
BSF STATUS,RP0 ; accedemos al banco de memoria 1
movlw 0x00
movwf TRISC ; PUERTO C COMO SALIDA
BCF STATUS,RP0 ; accedemos al banco 0
movlw b'00000101' ; Activar TMR2, y predivisor a 1:4
movwf T2CON
BSF CCP1CON,CCP1M3 ; activamos el modo PWM
BSF CCP1CON,CCP1M2
;******* TERMINA PWM*************************
;****** EMPIEZA RETARDO***********************
; retardo de 1 segundo aprox
; enciende y apaga un led conectado a RB1 cada segundo
bsf STATUS,5 ;accedemos al banco 1
movlw b'01010111' ; DIVISOR 256, TIMER0
movwf OPTION_REG
movlw 0x00
movwf TRISB ; PUERTO B COMO SALIDA
bcf STATUS,5 ;accdemos al banco 0
clrf PORTB ; TODAS LAS SALIDAS DEL PUERTO B A 0
parpadeo
bsf PORTB,1 ; ENCIENDO EL LED RB1
call esperar
bcf PORTB,1 ; APAGO EL LED
call esperar
goto parpadeo
esperar
movlw 20 ; 50ms x 20 = 1 seg
movfw TIEMPO
clrf TMR0
restaurar
movlw 0xC4 ;TMR0 = 50 ms
movfw TMR0
esperar1s
btfss INTCON,2 ;desbordamiento?
goto esperar1s ; no -> sigo esperando
bcf INTCON,2 ; si -> repongo flag
decfsz TIEMPO,1 ;una iteracion menos
goto restaurar
return
;*********** TERMINA RETARDO************************
END
Un ingeniero informatico por aki
-
- Miembro Nuevo
- Posts: 12
- Joined: 09 Mar 2005, 12:16
-
- Miembro Medio
- Posts: 55
- Joined: 06 Feb 2005, 16:44
no creas que es tanto, en cuanto te familiarizes un poco con el pic veras que casi todo es dar valor a los registros adecuados...En cuanto a lo de probar creo q en mplab habia algo para hacer una traza, pero en este tipo de codigo q maneja temporizadores y cosas asi es un coñazo pq el codigo da muchos saltos
-
- Miembro Nuevo
- Posts: 16
- Joined: 03 Feb 2005, 09:57
Como comentas lo de subir hasta 1MHz es lo mejor, aunque creo que el generador de PWM del PIC no soporta frecuencia tan altas, y sobre todo las entradas de los puentes no pueden variar tan deprisa.Viciao2000 wrote:Esa rutina me interesa. Pero quieres decir que 1 Hz no es muy lenta???
En cuanto a lo de si es perjudicial para los motores, supongo que para frecuencias pequeñas puede serlo, pero para altas frecuencias (tipicamente 1 Mhz) no creo que cause mucho daño.
Lo suyo es poner una frecuencia de PWM que esté por encima de las frecuencias audibles, 20KHz, o al menos lo más alto posibe, para que el motor se mueva con suavidad y no suene tanto.
-
- Miembro Nuevo
- Posts: 3
- Joined: 05 Apr 2005, 10:34
- Location: Asturias
Esto esta un poco parado!
Hola! Llevo un par de semanas siguiendo este post y como hace poco que me he aficionado a la electronica tambien me he puesto a hacer el robot y hoy me he decidido a postear lo que tengo Eso si, veo esto un poco parado, que pasa? ya habeis abandonado??
Bueno, os cuento, lo que mas me ha costado por el momento es la parte mecánica, no encontraba las piezas que necesitaba y no sabia como acoplarlo todo, chasis, ruedas, motores.. al final las ruedas las he hecho con unas piezas de lego que tenia de cuando era pequeño, unas piezas que llevan unos agujeritos en medio y las he fijado al chasis (lo hice con CD's!) con unos tornillos. He tenido que usar poleas porque no tenia piñones suficientes para hacer los engranajes, pero bueno, en principio parece que funciona bien. Esta tarde pondre unas fotos, que ahora estoy en clase.
Por otro lado, la parte electrónica es lo que mas avanzado tengo. Para el PIC he usado un entrenador que hice hace unas semanas y que me viene como anillo al dedo, en principio voy a utilizar el 16F628A, ya que el entrenador que hice sirve para los 16F627/28/48(A) y 16F84(A). Es muy sencillo y muy práctico para lo que necesitamos, así que por la tarde os pongo el esquema teórico y el de la PCB por si quereis hacerlo. Para grabar los PIC's tambien utilizo un grabador que me hice hace tiempo, se llama PIPO2, es muy facil de hacer y muy barato (no pasa de los 3 euros), y ademas graba un monton de dispositivos, los esquemas los podeis encontrar aqui: http://213.97.130.124/progs/pipo2/pipo2.htm y la revisión que le añade unos pequeños cambios para darle soporte para mas dispositivos http://213.97.130.124/rev_pipo2/rev_pipo2.htm
Yo lo primero que voy a hacerle al robot es ponerle unos sensores CNY70 para que siga lineas, ya sabeis, el típico rastreador Me falta comprar el L293D, que no lo encuentro en ninguna parte, asi que acabare comprando el L293B, unos cuantos diodos y los dos sensores, y espero tener todo eso listo para finales de semana (la placa para los dos CNY70 tambien tengo hecho el esquema). Asi que nada, esta tarde os pongo unas fotos y los esquemas del entrenador de PIC's. Y animaos!! Que ya lo tenemos casi todo!
Bueno, os cuento, lo que mas me ha costado por el momento es la parte mecánica, no encontraba las piezas que necesitaba y no sabia como acoplarlo todo, chasis, ruedas, motores.. al final las ruedas las he hecho con unas piezas de lego que tenia de cuando era pequeño, unas piezas que llevan unos agujeritos en medio y las he fijado al chasis (lo hice con CD's!) con unos tornillos. He tenido que usar poleas porque no tenia piñones suficientes para hacer los engranajes, pero bueno, en principio parece que funciona bien. Esta tarde pondre unas fotos, que ahora estoy en clase.
Por otro lado, la parte electrónica es lo que mas avanzado tengo. Para el PIC he usado un entrenador que hice hace unas semanas y que me viene como anillo al dedo, en principio voy a utilizar el 16F628A, ya que el entrenador que hice sirve para los 16F627/28/48(A) y 16F84(A). Es muy sencillo y muy práctico para lo que necesitamos, así que por la tarde os pongo el esquema teórico y el de la PCB por si quereis hacerlo. Para grabar los PIC's tambien utilizo un grabador que me hice hace tiempo, se llama PIPO2, es muy facil de hacer y muy barato (no pasa de los 3 euros), y ademas graba un monton de dispositivos, los esquemas los podeis encontrar aqui: http://213.97.130.124/progs/pipo2/pipo2.htm y la revisión que le añade unos pequeños cambios para darle soporte para mas dispositivos http://213.97.130.124/rev_pipo2/rev_pipo2.htm
Yo lo primero que voy a hacerle al robot es ponerle unos sensores CNY70 para que siga lineas, ya sabeis, el típico rastreador Me falta comprar el L293D, que no lo encuentro en ninguna parte, asi que acabare comprando el L293B, unos cuantos diodos y los dos sensores, y espero tener todo eso listo para finales de semana (la placa para los dos CNY70 tambien tengo hecho el esquema). Asi que nada, esta tarde os pongo unas fotos y los esquemas del entrenador de PIC's. Y animaos!! Que ya lo tenemos casi todo!