TODOPIC
Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: aprendix en 20 de Octubre de 2008, 02:05:36
-
:) construi un brazo robotico con 5 motors paso a paso y uno cd,
puedo mover los motores con simples llamados a tablas pero no he podido controlar la velocidad para que los movimientos sean menos bruscos, tambien quisiera programarlo para trabaje automatico .
en realidad soy muy nuevo con los pics, agradezco cualquier colaboracion.
mil gracias
-
:) construi un brazo roborico con 4 motors paso a paso y uno cd,
puedo mover los motores con simples llamados a tablas pero no he podido controlar la velocidad para que los movimientos sean menos bruscos, tambien quisiera programarlo para trabaje automatico .
en realidad soy muy nuevo con los pics, agradezco cualquier colaboracion.
mil gracias
Hola aprendix, comentame algo, cuando hablas de controlar la velocidad, ¿acaso no se podría hacer mandando más lentamente los pulsos?
-
me refiero a que tengo la tabla de medio paso con retardos de 1 ms y los movimientos se ven bruscos
pero si cambio los retardos a 2 ms ya se ven como muy quedados .
no se si se pueda trabajar que cuando inicie y termine el movimiento sea mas lento.
otra preguntica como trabajo con cnc con pic :lol:
-
me refiero a que tengo la tabla de medio paso con retardos de 1 ms y los movimientos se ven bruscos
pero si cambio los retardos a 2 ms ya se ven como muy quedados .
no se si se pueda trabajar que cuando inicie y termine el movimiento sea mas lento.
Si se puede hacer, pero debes tener en claro que quieres hacer primero. Podrias tener retardos programados dependiendo de cuantos pasos quieras dar, por ejemplo si quieres dar 100 pasos, podrias dar pasos con demora gradual entre pasos, la demora iría incrementandose a medida que pasan los pasos, de esa forma los primeros pasos serían veloces y los últimos más lentos. Si por otra parte quieresn iniciar lento ir rápido y luego volver a hacer pasos lentos también lo puedes hacer. Todo depende de si la cantidad de pasos es fija, o si es programable, etc.
Poder se puede hacer, ahora bien si es simple o no, habría que analizarlo en detalle, considerando que programas en assembler la cosa se complica y el tiempo para realizarlo también.
Has considerado algún otro lenguaje?
otra preguntica como trabajo con cnc con pic :lol:
A que te refieres a trabajar con cnc con pic?
-
hola
para iniciar el robot lo construi para una feria de expoelectronica de la universidad y ya lo presente y gane un premio.
pero quiero mejorar el programa para que en manual sea mas elegantes o suaves sus movimientosy me gustaria hacer un programa que realice movimentos solo.
la verdad lo poco de se hasta el momento es en assembler y me gustaria desarrollarlo mejor que pueda en este lenguaje.
en cuanto alos pasos realice un blucle infinito para control manual de acuerdo alos estados de las entradas 0-3 del puerto c
lo que tu me dices puede servir como para programar un trabajo automatico repetitivo.
me gustaria que me ayudaras con esto
que me sugieres para ambos casos (manual y automatico)
utilizo el puerto c (0-3) como entradas y el puerto b(0-7) como salidas para controlar dos motores pap
los motores son de 200 pasos por vuelta y son cinco
tengo dos targetas con 1 pic cada uno para los cinco motores
agradezco tu ayuda
si quieres te puedo enviar toda la informacion que tengo sobre el proyecto?
a ver si me puedes ayudar con el programa :) :-/
lo cnc es solo que quisiera saber que tan dificil es trabajar con control numerico computarizado utilizando el pic como interface
-
este es el programa que estoy utilizando
;ESTE PROGRAMA PERMITE CONTROLAR EL GIRO DE dos MOTOR PASO A PASO A PASO COMLETO
; *********** PIC 16F73 ****************
; ******* WDT=0FF, OSC= XT, CP=OFF **********
;
__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_OFF & _XT_OSC & _BODEN_OFF
LIST P=16F72
INCLUDE <P16F72.INC>
tmro EQU 1h ;CONTADOR DE TIMEPO REAL
pc EQU 2h ;CONTADOR DE PROGRAMA
status EQU 3h ;EGISTRO DE ESTADOS
ptoa EQU 5h ;PUERTOS
ptob EQU 6h
r0d EQU 0dh
ptoc EQU 07h
trisc EQU 87h
trisa EQU 85H
r10 EQU 10h
R11 EQU 11h
rpo equ 5
trisb equ 86h
org 0
inicio
bsf status,rpo
movlw b'00000000'
movwf trisb
movlw b'00001111'
movwf trisc
bcf status,rpo
;***************principa***************
begin clrf ptob
btfsc ptoc,0
call Pasoad
clrf ptob
btfsc ptoc,1
call Pasoat
clrf ptob
btfsc ptoc,2
call Pasoad2
clrf ptob
btfsc ptoc,3
call Pasoat2
goto begin
;********pasoad*******--------------------------------
Pasoad
movlw b'10010000'
movwf ptob
call Retardo_1ms
movlw b'10000000'
movwf ptob
call Retardo_1ms
movlw b'10100000'
movwf ptob
call Retardo_1ms
movlw b'00100000'
movwf ptob
call Retardo_1ms
movlw b'01100000'
movwf ptob
call Retardo_1ms
movlw b'01000000'
movwf ptob
call Retardo_1ms
movlw b'01010000'
movwf ptob
call Retardo_1ms
movlw b'00010000'
movwf ptob
call Retardo_1ms
return
Pasoat
movlw b'00010000'
movwf ptob
call Retardo_1ms
movlw b'01010000'
movwf ptob
call Retardo_1ms
movlw b'01000000'
movwf ptob
call Retardo_1ms
movlw b'01100000'
movwf ptob
call Retardo_1ms
movlw b'00100000'
movwf ptob
call Retardo_1ms
movlw b'10100000'
movwf ptob
call Retardo_1ms
movlw b'10000000'
movwf ptob
call Retardo_1ms
movlw b'10010000'
movwf ptob
call Retardo_1ms
return
Pasoad2
movlw b'00001001'
movwf ptob
call Retardo_1ms
movlw b'00001000'
movwf ptob
call Retardo_1ms
movlw b'00001010'
movwf ptob
call Retardo_1ms
movlw b'00000010'
movwf ptob
call Retardo_1ms
movlw b'00000110'
movwf ptob
call Retardo_1ms
movlw b'00000100'
movwf ptob
call Retardo_1ms
movlw b'00000101'
movwf ptob
call Retardo_1ms
movlw b'00000001'
movwf ptob
call Retardo_1ms
return
Pasoat2
movlw b'00000001'
movwf ptob
call Retardo_1ms
movlw b'00000101'
movwf ptob
call Retardo_1ms
movlw b'00000100'
movwf ptob
call Retardo_1ms
movlw b'00000110'
movwf ptob
call Retardo_1ms
movlw b'00000010'
movwf ptob
call Retardo_1ms
movlw b'00001010'
movwf ptob
call Retardo_1ms
movlw b'00001000'
movwf ptob
call Retardo_1ms
movlw b'00001001'
movwf ptob
call Retardo_1ms
return
INCLUDE <RETARDOS.INC>
end
-
Hola:
Para arrancar lento tendrias que hacer cambios en tu codigo como esto por ejemplo:
Pasoad
movlw b'10010000'
movwf ptob
call Retardo_N_ms
movlw b'10000000'
movwf ptob
call Retardo_N_ms
....
Donde "Retardo_N_ms" deberia ejecutar un delay de N milisegundos, este N debe ser un registro que inicialmente lo pones por ejemplo a 50 y luego lo vas decrementando de 1 en 1 hasta llegar a 1 en ese caso este delay recien será 1ms. Este cambio tienes que hacerlo en las otras subrutinas tambien.
Luego el programa principal quedaria asi:
;********************
Inicio
movlw .50
movwf N ;recuerda declarar al inicio en la RAM el registro "N"
begin clrf ptob
btfsc ptoc,0
call Pasoad
clrf ptob
btfsc ptoc,1
call Pasoat
clrf ptob
btfsc ptoc,2
call Pasoad2
clrf ptob
btfsc ptoc,3
call Pasoat2
movf N,w
xorlw .1
btfss STATUS,Z
decf N,f ;<- Si N aun no es 1 hacer N=N-1
goto begin ;<- Si N=1 ya no decrementa mas pero sigue en el bucle
;********************
Con este mismo principio puedes implementar una parada del motor de paso lenta.
Javicho.
-
gracias javicho
empezare a trabajar en esto y luego le cuento
¿ como hago para pegar un video de mi robot para que lo puedan ver?
mil gracias
-
Una forma seria que lo cuelgues en el youtube y pases el link por aqui.
Javicho.
-
hay les dejo el link del video del brazo robotico para quien quiera verlo. :mrgreen:
-
javicho
cambie el codigo y compilarlo me dice que Symbol not previously defined (Retardo_N_ms)
ya la defini en la ram
CBLOCK
N
ENDC
Y NO RESPONDE? :shock:
-
Y no va a responder ni en mil años porque si te das cuenta "Retardo_N_ms" es una subrutina, date cuenta que haces una llamada (call Retardo_N_ms) entonces Retardo_N_ms es una subrutina a la que le ingresas como dato el valor de N y esta subrutina debe ejecutar "N"milisegundos.
Ahora te toca a ti poner de tu parte y crear esta subrutina que en si es algo muy elemental.
Javicho.