# control de giro de servo con potenciometro... mikroc



## celades (Sep 18, 2010)

buenos dias.
llevo muy poco tiempo trabajando con mikroc, necesito un programa que controle un servomotor hitec hs-303 por medio de un potenciometro que entra por AN1 (ADC) de un pic  16f873a. la idea es que el potenciometro controle el angulo de giro del servo                    (no la velocidad) por medio de conversion analogo-digital.
he diseñado un programa, pero no esta funcionando como quisiera XD. he aqui el codigo:

unsigned short ad_rd;
void main() {
while(1){
 adcon1=0x00;
 trisa=0x02;
 trisc=0;
 portc=0;
 pwm1_init(5000);      // para que sirve esta frecuecia??
 pwm1_start();
 ad_rd=adc_read(1);
 pwm1_set_duty(ad_rd);
}
} 

pwm1_init() lo puse en el programa ya que en el menu de ayuda dice que es una funcion importante de la libreria pwm, pero sinceramente no se para que sirve.
si pueden ayudarme a encontrar el error o los errores del programa les agradeceria infinitamente!!!
saludos!


----------



## ByAxel (Sep 18, 2010)

Hace falta más que enviarle PWM al servo, este tiene un rango de frecuencia... ahí pones que el PWM sea a 5Khz cuando debe ser para 50Hz pero no te recomiendo usar el PWM por hardware ya que no es posible generar los 50Hz para controlar el servo, además el pulso es algo especial...
Esto te va servir para que generes el PWM apropiado para el servo:
Control de servos
en el foro hay bastante sobre el tema...
Control de servomotor
y lo acoplas a tu servo ya que el que usas tiene un ciclo de 20ms y el pulso dura entre 0.9ms a 2.1ms que va del mínimo al máximo angulo de giro.

Un saludo


----------



## celades (Sep 19, 2010)

hey, muchas gracias por tu rapida respuesta, voy a revisar los link ke me mandaste!
saludos.


----------



## celades (Sep 20, 2010)

ByAxel, la informacion ke me enviaste es del futaba. sirve tambien para los hitec hs-303?

ah y otra cosa, cuando le pongo los 50Hz, el compilador me dice ke esta fuera del rango.... sera tambien por la clase de servomotor?


----------



## ByAxel (Sep 20, 2010)

El mikroC con la instrucción para PWM usa el módulo CCP del PIC pero esté depende de la frecuencia del oscilador por lo que no es posible generar 50Hz (es muy lento, revisa el datasheet del PIC, verás en la sección del módulo CCP en modo PWM la fórmula usada). Por eso te pase el link del foro donde hay formas alternativas para generar el PWM manualmente, es decir que debes de usar contadores, timer's, delay's, bucles, etc para crear un algoritmo que genere el PWM apropiado (periodo de 50Hz).

Sobre el servo hs-303, todo está en la hoja de datos (datasheet) que dice:
Pulse Cycle:	20 ms = 50Hz
Pulse Width:	900-2100 µs = duración del pulso.
como ves es similar al futaba, con eso solo tendrás que hacer pocas modificaciones a los ejemplos que encuentres.

O sube tu programa para continuar con eso.

Un saludo


----------

