Você está na página 1de 10

INICIO CONTROL PIC-PIC CONTROL PC-PIC PROCESOS-PIC COMPONENTES-PIC SENSORES-PIC ACTUADORES-PIC ROBOTS-PIC SOFTWARE-PIC

RobotyPic son proyectos bsicos de electrnica con microcontroladores PIC, de aplicacin en el mundo de la robtica
didctica, con archivos fuente creados mediante el compilador CCS PIC C COMPILER en lenguajeC.
Blog Post Plugin Blog I Wordpress Wordpress Blogger Blog Widgets
T H E R E A L M I S I N P E R I L
A great darkness threatens. Have what it takes to save it?
Control de 8 servos con PIC
Este proyecto consiste en el control de 8 servos por el puerto c del pic. En la interaccin para el
control de los servos se emplea un teclado numrico y un lcd, ambos controlados por el puero b del
PIC.
En su funcionamiento, el pic pide introducir el nmero del servo a controlar. Posteriormente solicita el
ngulo de orientacin deseado para ese servo ( de 0 a 180). El valor se acepta con la tecla * y el
programa vuelve a mostrar un mensaje de presentacin para un nuevo control. Si el ngulo introducido
es superior a 180, el pic toma por defecto 180.
Para la generacin de las seales moduladas de control de los servos (bit_pwmx), se emplea la
subrutina de interrupcin por rebose del timer 0. La orientacin de cada servo se establece con el valor
que se carga en la variable pwmx, donde x es el nmero de servo correspondiente. Con cada llamada
a la subrutina de generacin de la seal por mediacin de la interrupcin del timer 0, se incrementa la
variable control_pwm que comparandose con el valor en pwmx, decide si debe o no cortar alguno de
los pulsos de modulacin de los servos.
control_pwm++;

if (control_pwm==0) bit_pwm0=1;
if (control_pwm==pwm0) bit_pwm0=0;

Cuando la variable control_pwm, incrementandose en cada rebose del timer0, llega a su mximo valor
y pasa a ser 0, todas las seales moduladas comienzan un nuevo ciclo.
Para interpretar los valores numricos de varias cifras a partir de nmeros simples introducidos por
teclado, primero espera a que se pulse una tecla
x=kbd_getc();
el valor obtenido est en codificacin ASCII por lo que habr que pasarlo a su valor numrico decimal
tecla=x-48;
si se ha pulsado una tecla se descartan las pulsaciones en # y * puesto que solo se necesitan nmeros
if (x!=0&&x!='*'&&x!='#'){
y conforme se van pulsando nmeros el ltimo pulsado ser las unidades y los anteriores van pasando a
decenas y centenas
centenas=decenas;
decenas=unidades;
unidades=tecla;
conforme se van introduciendo nmeros simples se va mostrando el nmero completo por pantalla lcd
printf(lcd_putc,"\f Angulo = %ld%d%d\n", centenas, decenas, unidades);
y finalmente se guarda en una nica variable el nmero completo resultante de todos los nmeros
simples
angulo=(centenas*100)+(decenas*10)+unidades;
[+/-] Ver / Ocultar programa completo en C
En la simulacin bajo proteus se comprueba el cambio en el tiempo de las seales de control de los
servos individualmente en funcin del valor del ngulo introducido.
Todos los archivos del proyecto se pueden descargar en este enlace:
Descargar archivos Control de 8 servos con PIC
El proyecto contenido en el artculo ha sido diseado y probado con xito utilizando las siguientes
versiones de software:
- Windows xp y windows 7
- Proteus V7.7 SP2
- CCS PIC C COMPILER v4.084
Artculo relacionado>> PIC controlador de servos por I2C
Publicado por Robotypic
Enviar por correo electrnicoEscribe un blogCompartir con TwitterCompartir con FacebookCompartir en Pinterest
18 comentarios:
ALARQUE dijo...
Hola, Estoy realizando un proyecto para una materia en la universidad en el cual me baso de tu proyecto, pero
encuentro el problema de el giro del servomotor para ngulos diferentes de 0, 90 y 180 grados.
Te agradecera si me pudieras explicar como corregirlo.
Gracias de antemano
Alexander Aguirre R.
9 de abril de 2011, 6:06
Chabier dijo...
No entiendo cual es tu problema. El ngulo depende del ancho del pulso de control. Si empleas un ancho de
pulso en un valor entre 0,8ms y 1,5ms por ejemplo, obtendrs una giro del servo entre 0 y 90 proporcional al
pulso.
15 de abril de 2011, 18:00
ALARQUE dijo...
El problema que tenia era que cuando le daba un giro diferente de 0, 90 o 180 no me la hacia exacto, pero
tomando los giros reales con los valores ingresados, sacando una tabla y sacando una ecuacin, logre modificar
el inicial y lograr que el servo se me mueva en los grados que le indico y que el pwm se mantenga en la ultima
posicin.......Muchas gracias por tu colaboracin.
27 de abril de 2011, 6:23
Camilo Valencia dijo...
hola quisiera saber si el codigo me funciona PIC16f883
6 de mayo de 2013, 4:22
Chabier dijo...
Hola Camilo.
El cdigo sirve para ese PIC pero debers adaptar el programa para que cargue el driver de ese PIC con el
#include y emplear las direcciones de los puertos correspondientes.
6 de mayo de 2013, 19:12
DxlocuraxD dijo...
la libreria kbd.c y lcd.c podrias colgarlas???
17 de mayo de 2013, 4:48
Chabier dijo...
Las he incluido con el resto de archivos del enlace de descarga.
17 de mayo de 2013, 17:02
xban dijo...
Hola, me parece muy bueno el programa. Solo tengo una duda. La resolucin del ngulo no se puede mejorar?
Explico: Desde el ngulo de 169 hasta el ngulo 180, por ejemplo, no hay variacin en el movimiento del
servomotor.
10 de agosto de 2013, 22:32
Robotypic dijo...
Hola xban.
S se puede mejorar la resolucin. Depende de la combinacin del valor de carga del temporizador, su divisin
de frecuencia, de la variable control_PWM y del cristal oscilador empleado. Al pie del texto tienes un enlace
para acceder al artculo "PIC controlador de servos por I2C" donde se ha empleado el mismo concepto con
mayor resolucin.
11 de agosto de 2013, 0:04
Julin Abreu dijo...
que se supone q son esas lineas azules?
2 de septiembre de 2013, 19:06
Robotypic dijo...
Julian, que lneas azules te refieres?
2 de septiembre de 2013, 21:00
manuel andree mendoza peralta dijo...
quisiera saber como son las conexiones que emplean en esas lineas azules en la simulacion con proteus
porque pienso presentar este proyecto
te agradeceria bastante
21 de septiembre de 2013, 17:04
Robotypic dijo...
Hola Manuel.
Te refieres a las lineas azules gruesas? Son buses. Agrupan en un nico bus varias lineas individuales. En
este enlace explican como crearlas en proteus: http://www.youtube.com/watch?
feature=player_detailpage&v=iTUj5NOuGhI
21 de septiembre de 2013, 17:23
Sub Zero dijo...
Muchas gracias por compartir tu proyecto!!!!!
14 de noviembre de 2013, 2:30
cristian castro dijo...
Hola! Oye tengo una duda cual es el tiempo que tarda el Timer0 en descargarse es que lo tienes configuarado
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_32); y lo cargas a 255. Entonses no entiendo cada cuanto se esta
descargando.
Te Agradesco que me Resuelvas la duda :).
Y enserio Gracias Por Compartir tu Codigo.
9 de mayo de 2014, 20:16
Robotypic dijo...
Cristian.
El tiempo que tarda en rebosar el timer0 es:
T=(4/frecuencia reloj)x Preescaler x (256- carga del T0)
osea:
T=(4/4000000)x 32 x (256-255)= 0,00003 seg.
Es el tiempo entre cada acceso a la funcin de la interrupcin. Y cada vez que se accede a la interrupcin se
incrementa la variable "control_PWM" que es la que controla el ciclo de la seal de los servos.Cuando es 0
comenzara un nuevo ciclo de seal hasta un valor de 256 (es una variable de 8 bits). Cuando rebosa pasa a ser
0 de nuevo. Por tanto el tiempo total de la seal ser:
0,00003 seg. x 256 = 8,2 msg.
El problema es que al no programarlo en ensamblador se producen retardos que aumentan este tiempo por lo
que se hace necesario ajustarlo y verificarlo midiendo la seal generada.
10 de mayo de 2014, 1:03
Susan Bibiana dijo...
Oye, podrias mostrar completo el programa en C? Porq el link de arriba no me deja entrar ni ver nada. Te
agradezco de antemano !
23 de julio de 2014, 5:26
Robotypic dijo...
Susan.
El programa lo puedes ver en el enlace desplegable o bien obtenerlo en el enlace de descarga inferior.
24 de julio de 2014, 20:41
Publicar un comentario en la entrada
Blocked Arteries?
CONTACTA - (Haz referencia del artculo sobre el que trata la consulta o comentario)
Nombre:*
Email:*
Asunto:*
Mensaje:*
Verification No.:*
Enviar
Web form generated by 123ContactForm
Elige tu idioma


Suscrbete
Recibe actualizaciones gratis por RSS
Feed o si lo prefieres puedes recibirlas en
tu e-mail.
Suscribete va e-mail:
Suscribete
Research Study enrolling Participants. Learn more here.
Online PR
redaktion.stefanpeter.at
Online-PR ber Presseportale,
Blogs und Social Media.
Buscar

Te ha gustado?
Si lo deseas puedes aadir un enlace en
cualquiera de tus blogs de blogger con un
simple "click".
O bien agregarme a los favoritos de tu
explorador de internet.
Enlaza este blog
Agregar a favoritos
Sguenos en...

Buscar en esta web
Bsqueda personal i zada
Hojas Tcnicas
CHIPS
PIC 16F876A / 16F877A
PIC 18F4550
M24512
L293D
MAX232
LM555
SENSORES
SRF04, SRF05
SRF08
TPA81
SHT10, SHT11, SHT15
SHT71, SHT75
GP2Y0D810Z0F
TSOP1138
SEMICONDUCTORES
TSAL6200
PERIFRICOS
LCD03
SP03
SD21
EasyVR
Sugerencias
Ayudanos a mejorar.
Haz tu sugerencia o contesta nuestro
formulario en este enlace:
Formulario de sugerencias
Blog Template Wordpress
Texture Pack Minecraft
Twitter Wordpress Plugin
Seguidores
Notas de Consulta
COMPILADOR CCS
Compilar los archivos fuente
LENGUAJE C
Los #fuses del PIC 16F876A
Las Variables
Los Operadores
COMPONENTES
Cdigo colores condensadores
Cdigo colores resistencias
Patillaje PIC16F876A
CONECTORES
Pines conector USB
Chat del Blog
jorge: Podrias, por f avor, colgar el codigo Visual basic 6 de
Graciaspor tu trabajo.
syam: sy dtg nk blogwalk...jom2 sharing
RyP: Puedes conf igurar la CMUCam para detectar los colores que desees. El enlace que has indicado da error.
fram: hola con esta aplicacion podria realizar que me de un f allo si el color no es igual que el de la muestra te paso u nenlace de algo asi
Domain: Buy cheap domain and get f ree add-ons with every domain
RyP: vic, a qu artculo te ref ieres?
vic: claro cambiamos la directiva y sus correspondientes cambios
vic: la verdad nos urge controlarlos para n proyecto
vic: oye RyPgrabamos tu codigo en un pic16f 877 y no f unciona los servos que tenemos son hitec322 y gwss03n
RyP: gorp hola.
gorp: hallo
[Get a Cbox]
Qu PIC te interesa ms?
16F84
16F876
16F877
18F4550
Votes so far: 12
Poll closed
Olvdate de pagar por tu antivirus.
Avast! es totalmente gratis y su
rendimiento es excelente. Descrgalo y
pruebalo tu mismo:
Webs Similares
Compra tu Proyecto
Solicita un proyecto o servicio
personalizado.
Haz click aqu.
Directorio de Blogs
Descarga Demos
RobotyPic (c)

Você também pode gostar