
Con este circuito podemos situar la posicion de un servomotor de los usados en modelismo en 256 posiciones diferentes, la cual se reflejara sobre 8 diodos LED. Manteniendo presionado el pulsador IZQ o DER variaremos la posicion sel servo en un sentido u otro, al mismo tiempo de que los led van indicando secuencias diferentes.
Aproximadamente mediante la actuacion de estos 2 pulsadores tardara 50seg el servomotor en realizar todo el recorrido, pero si actuamos al mismo tiempo sobre el pulsador TURBO, se reducira este tiempo a solo 5seg.
Tenemos la posibilidad de accionarlo mediante los microswitch, y llevar al servo a unas posiciones concretas sin necesidad de tener que verlo. Con los pulsadores IZQ y DER llevaremos el servo a la posicion deseada, en donde observaremos los LED que permanecen encendidos, colocando en la posicion de ON los microinterruptoes que coincidan con los LED encendidos, de modo que independientemente de donde se encuentre el servo, este regresara a esa posicion siempre que actuemos sobre el pulsador SELEC. Incluso podemos dejar continuamente presionado SELEC y mediante los microinterruptores controlar al servomotor.

Como podeis apreciar en el Esquema el microcontrolador funciona sin el tipico cristal de cuarzo de 4Mhz. Prestar atencion a los valores de las resistencias R1 a R16, ya que son valores criticos para que los microinterruptores polaricen adecuadamente las entradas del PIC.
![]() |
El que desee ampliar los conocimientos sobre servomotores puede acudir a la WIKIPEDIA. En la imagen se representan los tiempos del pulso generado en funcion de la posicion que queramos adquirir. Estos tiempos de funcionamiento no son estandar para todas las marcas de servomotores, de modo que segun el modelo que utiliceis, os encontrreis con el problema que no alacanza la totalidad del recorrido de los 180º o bien que esteis sobrepasando el limite inferior o superior, haciendo que el servomotor se vuelva muy inestable. Los tiempos utilizados para este circuito, NO corresponden con los de la imagen, aunque os indirare mas adelante como modificarlos. |
En la siguiente tabla se representan algunos fabricantes de servomotores y los tiempos que utilizan para posicionar al servo en una posicion determinada, asi como los colores de los cables empleados.
| Duración pulso (ms) | disposición de cables | ||||||
| Fabricante | min. | neutral. | máx.. | Hz |
+ batt | - batt | pwm. |
| Futaba | 0.9 | 1.5 | 2.1 | 50 | rojo | negro | blanco |
| Hitech | 0.9 | 1. 5 | 2. 1 | 50 | rojo | negro | amarillo |
| Graupner/Jr | 0.8 | 1.5 | 2.2 | 50 | rojo | marrón | naranja |
| Multiplex | 1.05 | 1.6 | 2.15 | 40 | rojo | negro | amarillo |
| Robbe | 0.65 | 1.3 | 1.95 | 50 | rojo | negro | blanco |
| Simprop | 1.2 | 1.7 | 2.2 | 50 | rojo | azul | negro |
En mi caso para los servomotores que yo disponia en ese momento utilice un tiempo minimo de 550ms, los cuales podeis modificar en ensamblador en la parte del programa:
bucle_2
bsf
Salida
;pongo en alto la salida
call
Retardo_300micros
;tiempo minimo de 550 us
call
Retardo_200micros
call
Retardo_50micros
Como el tiempo del pulso lo puedo seleccionar en 256 valores diferentes, he utilizado un multiplo de tiempo de 7useg.
Por lo tanto 7us X 256 = 1792useg, los cuales sumados a los 550us minimos, nos dan un total de 2342useg o 2,34 mseg.
Para variar el tiempo maximo solo teneis que variar el multiplo de 7us en la siguiente parte del programa ,quitando o añadiendo instrucciones NOP, las cuales afectan en el tiempo 1micro segundo:
Tiempo
nop
; 4us
nop
; 5us
nop
; 6us
nop
; 7us
;nop
; 8us no utilizado
Podeis descargar el archivo generado por Proteus y el codigo Hex para su montaje o simulacion.
Para aquellos que sepan programar en Ensamblador tambien teneis el archivo ASM por si quereis realizar alguna modificacion.
(si alguien desea que yo le cambie los tiempos y le mande el codigo HEX le constara 30€)