Upload
christian-gahona-lume
View
225
Download
1
Embed Size (px)
Citation preview
Libreras de control de un servo en C
Escrito por Caghetas
Domingo, 18 de Julio de 2010 16:11
En este artculo se describe una librera para el control de un servo de modelismo.ImplementacinPara realizar el control del servo se debe generar en el bit del puerto correspondiente una seal cuadrada de perodo constante, 20 ms, y con un ciclo de trabajo variable. El tiempo que la seal debe permanecer a 1 debe ser entre 0,3 ms y 2,1 ms. Estos tiempos pueden variar en funcin del modelo de servo y, sobre todo, en funcin del fabricante. Para ajustar esto, se deben configurar 2 constantes: SERVO_ZERO y SERVO_CONST, que se calculan siguendo las siguientes frmulas:SERVO_ZERO = 2^16 - ([ms_0_grados] * XTAL / 12)SERVO_CONST = (SERVO_ZERO - (2^16 - ([ms_180_grados] * XTAL / 12))) / 180Para finalizar, el smbolo SERVO_PORT debe ser definido al bit del puerto en el que se conecte el servo y se debe definir TIMERx_SERVO, siendo x el timer a utilizar por el las funciones del servo.Funcionesvoid servo_int(void);Se encarga de gestionar el nivel de la seal, para dar la consigna correcta al servo, adems de realizar las recargas del timer para que est configurado en el siguiente perodo.void servo_init(void);Inicializa las rutinas del servo y el timer a utilzar. Debe llamarse a esta funcin antes de poder utilizar esta librera.void servo_end(void);Detiene las funciones del servo. Paraliza el timer y se deja de emitir la consigna a travs del bit del puerto especificado.void servo(uint8 angulo);Establece la nueva consigna para el servo. Esta consigna se mantiene hasta que se vuelva a llamar a esta funcin con una consigna diferente. La funcin devuelve la ejecucin de inmediato, es decir, sin esperar a que el servo alcance la posicin de consigna. La variable 'angulo' debe valer entre 0 y 180, siendo este el valor del ngulo alcanzado por el servo.