Ultrasónico Robot evitando obstáculo (11 / 16 paso)

Paso 11: Control y problemas del Motor Servo

Teoría de control y mi aplicación

¿Cómo sabemos cómo controlar algo? Miramos la hoja de datos. Eso es exactamente lo que hice (hace tiempo) con este servo y descubrí que necesitaba una señal de 50Hz de ciclo de trabajo variable. Que es un poco lento para un módulo de PWM por hardware que de todos modos estamos en corto con (necesitamos para los motores de conducción por pista), esta señal del servo debe ser poco golpeado - software generado.

Sabiendo esto, calculé un temporizador para generar una interrupción cada 20ms. Para ello utilicé el módulo libre del Timer3 del microcontrolador. Sabiendo que:

FOSC = 48 [MHz], encontramos que Fosc / 4 = 12 [MHz], y de aquí calculamos Tinstruction = 83.33 [ns]

Este es el tiempo necesario para que una instrucción completar en el PIC y la base de tiempo para todos los módulos de temporizador interno. También sabemos que Timer3 es un temporizador/contador de 16 bits, por lo que se puede contar hasta 65535 y desbordamiento + dar una interrupción en el siguiente incremento. Tenemos que configurarlo para que le da a esta interrupción cada 20 [ms]. Para ello, calculé el número de incrementos de contador de tiempo que se necesitan para 20 [ms] que transcurran:

20 [ms] / 83.33 [ns] = 240096

Este es un valor que no cabe en la cadena de contador de 16 bits, por lo que tendremos que frenar la velocidad de incremento de alguna manera: esto es fácil de hacer mediante el uso de prescalers. Asignando un prescaler de 1:4 para este temporizador, decimos el PIC se incrementa el contador de tiempo registro de valor a un ritmo cuatro veces más lento que este reloj interno de 83.33 [ns].

240096 / 4 = 60024

Esto se traduce en: con la velocidad de recuento disminuida a 332.33 [ns], el contador tendrá que tomar 60024 pasos hasta que transcurre nuestro 20 [ms]. ¿Tenemos que provocar una interrupción, cuando esto sucede, y cuando ocurren las interrupciones? Cuando el timer se desborda. Dicho esto, nos reste este valor del desbordamiento de 65536:

65536 - 60024 = 5512 = 0x1588

Si ponemos esto en la cadena de TMR3 contador cada vez que la bandera de interrupción se establece por el evento de desbordamiento, obtenemos un bonito 20 [ms] interrumpir ritmo que puede ser utilizado para este algoritmo de servo.

A continuación, tenemos que lidiar con cambiar el ciclo de deber. Esto habría sido muy fácil de hacer si tenía un módulo de comparación disponible, pero desafortunadamente no lo hice. Para superar esto, definido una variable que enciende cada vez que una interrupción del vino. El valor de esta variable me permitió distinguir entre dos diferentes interrrupts: que ha disparado un flanco ascendente al principio de los años 20 [ms] período y que desencadenó el flanco descendente basada en el ciclo de trabajo requiere. Porque el borde de levantamiento es obligatorio, cada vez que la interrupción se activa, una nuestra variable es '0', enviamos el pin IO al estado alto. Basado en el tiempo requerido en (por ahora vamos a echar 1 [ms]), calculamos un nuevo valor de init temporizador contador rápidamente para que el timer se desborda otra vez después de este período de tiempo. 1 [ms] este cálculo es el siguiente:

1 [ms] / 333.3 [ns] = 3000

Así que registro de contador de TMR3:

TMR3 = 65536-3000 = 62536

y espere a la próxima interrupción. Cuando se produce, enviamos el pin IO bajo estado y configurar la cadena de la contador de TMR3 otra vez con el número 20 [ms]. Tenemos que tener en cuenta, que 1 [ms] de 20 [ms] ya pasado, por lo que las matemáticas se ven algo como esto para la segunda actualización de TMR3:

TMR3 = 5512 + 3000

Después hemos terminado con esto, que cambiar nuestra variable otra vez y esperar una interrupción. Esto desencadenará un flanco ascendente y el 20 [ms] período comienza. Entonces otra vez calculamos el nuevo TMR3, y esto va en y en y en, en un bucle sin fin. Mirando en la hoja de datos que te platiqué anteriormente, podemos encontrar la longitud máxima de este ciclo de trabajo, límites de software pueden ser escritos para evitar que el servo de golpear los extremos y que luchan por ir más allá (y consumir 650mA...).

Retroalimentación del servo no tan bueno, por lo que el servo hará temblar incluso cuando se sigue haciendo el mismo deber para siempre - esto debe ser resuelto de alguna manera. Le puse un contador de software que aumenta cuando la 20 [ms] período comienza y agregar algo de código que sólo permite una señal con un cierto deber enviar una cantidad limitada de veces. Después de 20 ciclos, supongo que el eje está en la posición deseada, y dejar de enviar señales = el motor no se agite o buzz.

Problemas

Ocurrieron varios problemas hasta que finalmente me puse a mover el servo en una manera repetible. Yo utiliza servomotores antes sin problemas, sabía qué tipo de señales de control debe ser siempre, pero sólo fue capaz de convertir el servo cada ahora y entonces, al azar. Encienda un trabajó, en los próximos cinco que no. Sospeché la inclinación de la tensión de entrada, 5 [V] buck inclinación de voltaje de salida y hace todo tipo de pruebas para eliminarlos uno por uno. Finalmente, después de probar varios tipos de batería, acabé poniendo un condensador de [uF] 3300 voluminosas muy cerca del jefe del pin de servo - y voilá, finalmente llegó a ser más obediente.

En este punto es bueno cambiar a un laboratorio de fuente de alimentación, si está disponible

¿Qué puede hacer para solucionar el problema en situaciones como ésta? Si se sospecha, que hay algún tipo de subida de tensión en el circuito, hay algunos trucos que puede utilizar para rastrear el error. En primer lugar, ayuda mucho si tienes un laboratorio de alimentación con función de límite vigente, esto evitará que la voladura de las cosas. Simplemente utiliza las pilas (lo he probado con Li-Ion así) es un poco peligroso ya que las dará tanto como pueden, en caso de un cortocircuito y probablemente se quema todo en su camino.

Prueba de 1.
Esta fue la serie de la prueba obvia: pruebas de continuidad, pruebas contra cortocircuitos, material estándar. Los LEDs se parpadea, por lo que el riel de 5V buck tuvo que aceptar, todavía hice estos para asegurarse. También doble comprobé que la señal de control está hecho con el conector amarillo del servo - lo hizo. Teoría de malas conexiones fue arrestado.

Prueba 2.

Hubo un momento en creía que las baterías simplemente no pueden dar suficiente jugo para mover el servo. Para confirmar/busto esto, acabé mirando de SG90 lista de parámetrosy encontró que la pérdida actual es 650 [mA]! Pensé, que esto va a ser el problema, y las baterías no pueden garantizar la misma corriente como mi PSU - esto necesita una prueba.

Tuvo una resistencia de 1,2 ohmios y ponerlo en serie con el cable de entrada negativo de robots. La medida tuvo que ser lado de baja presión, porque la sonda de tierra de alcance y el suelo de la PSU fueron conectados a través de la tierra. Por medición voltaje a través de un resistor de la serie de valor conocido, se puede calcular la corriente que fluye a través de ella, el consumo actual del robot en este caso. Tomó dos medidas, una con el paquete de baterías de iones de litio y uno con la fuente de alimentación, usted puede ver estos a este paso. El uno con el voltaje / la división en 1 [V] es la prueba con la batería, el otro con 500 [mV] por división es la fuente de alimentación. La batería tenía un voltaje menor que el valor de la PSU, y los convertidores DC-DC dibujar extra actual para mantener sus salidas reguladas: se puede ver un punto de [A] 4!

Esto significa que la batería puede proporcionar suficiente para todo el circuito poner en marcha, incluyendo la sobrecarga inicial en el servo cuando empiece a girar el eje. Así que esta teoría fue pillada así.

Prueba 3.

Después de pensar de cuánto el 5 [V] son rastros y cómo el colmo el puesto actual de este servo es, me di cuenta, que un condensador voluminoso local sería una buena idea. Esto ayudaría a con local espontánea actual dibuja. Ya que esta perforación y montaje de una tapa nueva, estaba un poco contra él. Sin embargo, cuando vino un amigo inteligente con esta sugerencia muy sin que yo siquiera mencionar esta teoría, decidí morder la bala y Dale una oportunidad a esto. Tomé una calidad alta (rescatada de una motherboard) 3300 [uF] 6.3 capacitor [V], algunos agujeros perforados para él muy cerca del jefe del pin de salida servo, y soldar la cosa. Encendí el poder y funcionó!!!!!! Esta teoría se confirma para ser verdad, y va a través con él demostrado funciona como un encanto.

Conclusión y terminar esta serie de la prueba

Después vi este trabajo con la batería de iones de litio, y la prueba era repetible, comencé a pensar acerca de cómo montar las enormes pilas en el robot. He intentado poner en la parte posterior, pero que resultó en el robot que desequilibrado - así que decidí darle otra oportunidad a las baterías de Ni-MH y utilizar los robots 4 x soporte de celular de AA para fuente de energía. He hecho las modificaciones necesarias, conectado las baterías y otra vez: me funcionó! Problema resuelto, y la mirada del bot es serio mejor!

Artículos Relacionados

Cómo hacer un Robot evitando obstáculo

Cómo hacer un Robot evitando obstáculo

evitando el obstáculo el robot es un robot sencillo que es funcionado por un arduino y lo que hace es que sólo deambula alrededor y evita obstáculos. Detecta los obstáculos con un sensor de ultrasonidos HC-SR04 en otras palabras si el robot detecta o
Coche RC robot evitando obstáculo

Coche RC robot evitando obstáculo

este es el coche antiguo.Encuentro un viejo coche de RC en mi galpón.¿Cómo me convertido en un robot? Es sencillo, que te explico en el siguiente paso.Paso 1: El viejo coche del RC 1. quitar la carcasa2 quitar el circuito.Paso 2: Control Control util
Coche de Arduino evitando obstáculo

Coche de Arduino evitando obstáculo

Hola a todos estoy compartiendo aquí hago un obstáculos evitando coche de arduino. Aquí utilicé material fácilmente disponible, estos robo seguir ejecutar hasta y a menos que algún obstáculo delante de coche así que vamos a ver y hacer...Paso 1: mate
Robot de obstáculo de Arduino

Robot de obstáculo de Arduino

Cuando este proyecto en el coche de control remoto circuito de Arduino es quitado y pegado detectar los obstáculos en el frente de la dönüştürüldü.arab robot instalar sensor ultrasónico para detectar sağlandı.engel golpear obstáculos o barreras que m
Robot de obstáculos evitando L298N puente H doble controlador Motor y sensor ultrasónico

Robot de obstáculos evitando L298N puente H doble controlador Motor y sensor ultrasónico

¡ Hola chicos!Aquí les dejo algunas imágenes del robot:el hardware necesario:Arduino protoboard.protoboard.sensor de ultrasonidos.2 motores DCcables.Regulador del motor L298N puente h dual.chasis de aluminio.el código de arduino:http://SH.St/PQEQT¡¡B
Utiliza un sensor ultrasónico robot carro funcionando con batería de la motocicleta con pantalla LCD

Utiliza un sensor ultrasónico robot carro funcionando con batería de la motocicleta con pantalla LCD

Este coche robot trabaja con sensor ultrasonido HC-SR04 y alimentado con batería de la motocicleta 12V usado.Paso 1: Cuerpo de coche robot Hacer el cuerpo del robot utilizando madera contrachapada y una pieza plana de madera. Cortar la madera contrac
Obstáculo, evitando Robot - escudo del Motor

Obstáculo, evitando Robot - escudo del Motor

¡ Hola chicos! Este es un tutorial fácil y básico para la fabricación de un Robot evitando obstáculo... Sigue leyendo...Paso 1: Materiales necesarios Para construir el Robot evitando obstáculo, se necesita-Arduino Uno R3 (recomendamos usar Arduino Un
Un infrarrojo de Arduino controlado y Robot de evitación del obstáculo

Un infrarrojo de Arduino controlado y Robot de evitación del obstáculo

Hola todo el mundo,Este Instructables se divide en dos fases, que hace conveniente para el principiante y los diseñadores de robots intermedios.La primera fase abarca el uso de la placa de arduino nano solamente como controlador. Con esto, vamos a co
Obstáculos del Robot Qtechknow

Obstáculos del Robot Qtechknow

¿Has pensado de controlar su FuzzBot de forma inalámbrica? ¿Quieres hacer un real - life video juego? ¿Quieres aprender sobre la tecnología detrás de NFC y RFID? -el Qtechknow Robot de obstáculos cómo - a guía es para usted!Por favor votar para mí (e
Obstáculo, evitando Robot con Arduino

Obstáculo, evitando Robot con Arduino

Hola chicos en este instructable veremos cómo hacer un obstáculo autónomo evitando Robot.This robot ha sido diseñado y programado de tal manera que evita la colisión. Básicamente, el robot se mueve hacia delante y siempre que detecte un objeto/obstác
Obstáculo de Arduino evitando Robot

Obstáculo de Arduino evitando Robot

En este instructable le mostraré cómo hacer tu propio obstáculo evitando robot!Vamos a utilizar la placa de Arduino uno y un sensor de ultrasonidos. Si el robot detecta un objeto delante de él, con la ayuda de un pequeño servomotor, explora la zona i
Obstáculo del uno mismo evitando Robot

Obstáculo del uno mismo evitando Robot

Es un obstáculo del uno mismo evitando el robot. Utiliza dos sensores de ping para detección de obstáculos. Utiliza un escudo del Motor L293D Adafruit para alimentar cuatro motores de 12 voltios de alto esfuerzo de torsión. Él también feawtures un Ar
Obstáculo evitando Robot V2

Obstáculo evitando Robot V2

recientemente hice un instructable sobre un obstáculo sencillo evitando robot. En este instructable implementará un barrido PING))) sensor, a diferencia del anterior robot que tiene sensor estaba inmóvil. Utilizaré este tercer servo que el PING))) se
Cómo hacer un obstáculo evitando Arduino Robot! "Mi Robot V1"

Cómo hacer un obstáculo evitando Arduino Robot! "Mi Robot V1"

Este instructable muestra las instrucciones de pasos para hacer un obstáculo evitando robot con Arduino.Empezar a dejarmi bloghttp://robot4pro.blogspot.com/p/My-robots.htmlPaso 1: Materiales necesariosAquí le damos todo que lo necesario para hacer My