Hola, amigos del foro.
Soy nuevo por aquí. (Sólo preguntando, porque siempre he despejado mis dudas en este foro.)
Resulta que estoy tratando de armar un brazo robótico de 6 grados de libertad y me encuentro aprendiendo sobre servomotores.
He buscado mucho en la web y es difícil encontrar un PIC que maneje las 6 salidas que yo quiero, por lo que he optado por generar mi señal PWM por medio de retardos, y hasta ahora he logrado mover el motor. (Un poco lento, ya verán por qué)
Quiero hacer una rutina por medio de la sentencia Switch para seleccionar el motor que quiero mover y que se ejecute el programa y así sucesivamente desde motor 1 hasta el 6, y al programar hago que el PIC reconozca el número del motor mediante un teclado matricial, pero al querer moverlo no sucede nada.
¿Alguien podría decirme qué estoy haciendo mal?
Me considero en un nivel intermedio programando y aprendo rápido, pero aquí estoy un poco atorado.
Mi código es el siguiente:
Cabe resaltar que he usado la rutina para mover el motor sin todo lo demás y funciona bien, algo lento ya que la variable duty se incrementa de 1 en 1.
Espero puedan ayudarme, o proponer como podría mover los 6 servos, ya que no encuentro un PIC con 6 módulos PWM o CCP, como el 18F4550 creo que sólo tiene 2.
Saludos.
Soy nuevo por aquí. (Sólo preguntando, porque siempre he despejado mis dudas en este foro.)
Resulta que estoy tratando de armar un brazo robótico de 6 grados de libertad y me encuentro aprendiendo sobre servomotores.
He buscado mucho en la web y es difícil encontrar un PIC que maneje las 6 salidas que yo quiero, por lo que he optado por generar mi señal PWM por medio de retardos, y hasta ahora he logrado mover el motor. (Un poco lento, ya verán por qué)
Quiero hacer una rutina por medio de la sentencia Switch para seleccionar el motor que quiero mover y que se ejecute el programa y así sucesivamente desde motor 1 hasta el 6, y al programar hago que el PIC reconozca el número del motor mediante un teclado matricial, pero al querer moverlo no sucede nada.
¿Alguien podría decirme qué estoy haciendo mal?
Me considero en un nivel intermedio programando y aprendo rápido, pero aquí estoy un poco atorado.
Mi código es el siguiente:
PHP:
#include <18F4550.h>
#FUSES HSPLL,NOPROTECT, NODEBUG,NOWRT,MCLR,PLL5
#use delay(clock=20000000)
#include "kbd_lib.c"
#include <lcd.c>
#include <stdlib.h>
int16 duty=1500;
char Motor;
char Numero;
int Num;
void main (){
kbd_init();
lcd_init();
printf(lcd_putc, "Esperando Tecla");
while(true)
{
Numero = kbd_getc();
if(Numero != 0){
printf(lcd_putc, "\fPresionado. %c", Numero);
}
Num=atoi(motor);
switch(motor){
case 1:
if(motor ==1){
{
/*Mover hacia la Derecha*/
while(true){
if(input_state(pin_c0)==1){
duty++;
output_high(PIN_C2);
delay_us(duty); //Mandamos un pulso de 1.5 ms para mover el servo a 0º
output_low(PIN_C2);
delay_us(20000-duty);
}
/*Mover hacia la Izquierda*/
if(input_state(pin_c1)==1){
duty--;
output_high(PIN_D2);
delay_us(duty); //Mandamos un pulso de 1.5 ms para mover el servo a 0º
output_low(PIN_D2);
delay_us(20000-duty);
break;
}
}
}
}
}
}
}
Espero puedan ayudarme, o proponer como podría mover los 6 servos, ya que no encuentro un PIC con 6 módulos PWM o CCP, como el 18F4550 creo que sólo tiene 2.
Saludos.
Última edición por un moderador: