2
Librerías de control de un servo en C Escrito por Caghetas Domingo, 18 de Julio de 2010 16:11 En este artículo se describe una librería para el control de un servo de modelismo. Implementación Para realizar el control del servo se debe generar en el bit del puerto correspondiente una señal cuadrada de período constante, 20 ms, y con un ciclo de trabajo variable. El tiempo que la señal debe permanecer a 1 debe ser entre 0,3 ms y 2,1 ms. Estos tiempos pueden variar en función del modelo de servo y, sobre todo, en función del fabricante. Para ajustar esto, se deben configurar 2 constantes: SERVO_ZERO y SERVO_CONST, que se calculan siguendo las siguientes fórmulas: SERVO_ZERO = 2^16 - ([ms_0_grados] * XTAL / 12) SERVO_CONST = (SERVO_ZERO - (2^16 - ([ms_180_grados] * XTAL / 12))) / 180 Para finalizar, el símbolo 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. Funciones void servo_int(void); Se encarga de gestionar el nivel de la señal, para dar la consigna correcta al servo, además de realizar las recargas del timer para que esté configurado en el siguiente período. void servo_init(void); Inicializa las rutinas del servo y el timer a utilzar. Debe llamarse a esta función antes de poder utilizar esta librería. void servo_end(void); Detiene las funciones del servo. Paraliza el timer y se deja de emitir la consigna a través del bit del puerto especificado.

Librerías de Control de Un Servo en C

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.