Cómo construir un auto Robot de navegación (5 / 7 paso)

Paso 5: Detalles de software: control de velocidad y otras funciones básicas

El programa es completo por interrupción . En el arranque, después de la inicialización, el programa entra en un bucle de principal muy simple, actuando como una máquina de estado. En el bucle principal, el programa comprueba banderas activadas por eventos externos, y entra en el estado relativo según sus valores.

Ya que es una especie de cooperativa muy simple "sistema operativo de tiempo Real ," cada rutina debe ser ejecutado en el menor tiempo posible, liberando el sistema para atender las interrupciones muy frecuentes.
Hay no "esperar" y sin retrasos en el código. Siempre que posible interrupciones se utilizan, en particular para lentas operaciones de transmisión o recepción de cadenas de caracteres. Comunicación UART toma el advantege de las capacidades de la DMA de los dsPIC33F para ahorrar tiempo de CPU haciendo todo el trabajo "sucio" en hardware.

Periféricos utilizados en dsPIC33FJ128MC802:
-QEIs para calcular el camino recorrido.
-Entrada (IC) para calcular la velocidad de captura.
Convertidores para leer la corriente del motor.
-Mejora Sinuosidal para conducir los motores.
-UARTs para comunicarse con el mundo externo

QEI módulos se utilizan para saber cuánto han viajado las ruedas y en qué dirección. Este valor algebraico es acumulada en una variable cada 1ms y enviados a las funciones de supervisor en su petición. Después de enviar el valor, las variables se restablecen.

La velocidad se mide en el pulso de cada encoder como se describe a continuación. Cada 1ms calcula la velocidad media en un promedio de las muestras, se ejecuta el algoritmo de PID y corrige la velocidad del motor por consiguiente a su resultado, cambiando el ciclo de trabajo PWM. Para una descripción detallada de la aplicación de biblioteca de C30 PID, vea el ejemplo de código de Microchip: CE019 - uso proporcional de Integral derivado (PID) los controladores de sistemas de Control de bucle cerrado. http://WW1.microchip.com/downloads/en/DeviceDoc/CE019_PID.zip

Variaciones de velocidad de los motores se ejecutan con suavidad, acelerar o decelerar con una rampa inclinada ascendente o descendente, para evitar tensiones mecánicas pesadas y resbalamiento de la rueda que podría causar errores de odometría. Desaceleración es más rápida, entonces aceleración para evitar golpes con obstáculos durante el frenado.

IC , captura entrada módulos se utilizan para medir el tiempo transcurrido entre dos pulsos generados por el codificador, s significado cuando las ruedas viajaban por un bien conocido fija la cantidad de espacio (constante SPACE_ENC ). Conectado en paralelo a QEA (internamente a la DSC gracias a las capacidades periféricas Pin seleccione de los dsPIC33F), capturan el tiempo transcurrido en el flanco ascendente de las señales de los codificadores. TIMER2 se utiliza en el modo libre. En cada interrupción de IC, se almacena el valor del TMR2 y su valor anterior se resta de él; Éste es el período del pulso. Entonces el valor actual se convierte en el valor anterior, en espera de la próxima interrupción. Bandera de TMR2 tiene que medirse para saber si un desbordamiento de registro the16-bit. Si es así, la diferencia entre 0xFFFF y el ejemplo anterior tiene que se agregará al valor actual. Muestras se suman algebraicamente en IcPeriod variable según _UPDN de bit, para determinar también la dirección de la velocidad. Este es uno de los métodos sugeridos en la Nota de aplicación de Microchip AN545 .
La variable IcIndx contiene el número de muestras en IcPeriod .
Cada 1ms la velocidad media se calcula como V = espacio/tiempo
donde espacio = SPACE_ENC•IcIndx
(= espacio cubierto en un codificador pulso • número de pulsos)
y tiempo = TCY•IcPeriod
(= período TMR solo • suma de los períodos se produjo).
Single_TMR_period = TCY = 1/FCY (frecuencia de reloj).
Por V=Kvel•(IcIndx/IcPeriod)
donde Kvel = SPACE_ENC•FCY tener velocidad en m/s.
Desplazamiento a la izquierda 15 bits Kvel const (KvelLong = Kvel << 15 ) la velocidad se calcula ya en formato fraccionario (también si sólo se utilizan las variables de número entero) listo para ser utilizado en la rutina del PID. Ver archivo de "descrEng.txt" en proyecto de MPLAB para una descripción más detallada.

Convertidores medir continuamente los motores actuales, almacenar valores en 16 posiciones topes ADCBUF. Cuando los amortiguadores están llenos, se produce una interrupción y se calcula un valor promedio aproximadamente cada 1ms.

UARTs se utilizan para recibir comandos desde fuera y devolver los resultados de las mediciones. La parte de comunicación del programa funciona como una máquina de estado. Variables de estado se utilizan para ejecutar acciones en secuencia. Muy simple y rápido interrumpir servicio rutinas (ISR) obtener o poner cada solo byte o a un buffer y las banderas de derecha para dejar la función adecuada para ser ejecutado.

Si cualquier tipo de error se produce durante la recepción (UART, suma de comprobación, análisis de errores), la variable de estado se establece en un número negativo y el led rojo se enciende para comunicar externamente esta condición de falla. Ver archivo de "descrEng.txt" en proyecto de MPLAB para una lista completa de posibles errores.

El protocolo utilizado para el apretón de manos es capa física independiente y puede utilizarse con el bus I2C o RS485 también para comunicarse.
La primera capa es controlado por interfaz periférico dsPIC. Errores de estructura o saturación (UART) o colisiones (I2C) son detectadas por hardware, configuración de la bandera correspondiente.
La segunda capa es manejado por las rutinas ISR. Llene el buffer de RX con los bytes recibidos de las interfaces. También detectan desbordamiento de búfer y el comando de retención.
UartRx o UartRx2 funciones administran la tercera capa . Como ya se ha descrito (véase también diagramas de flujo) estas rutinas actúan como una máquina de estado, conseguir bytes del búfer y descifrar la cadena de comandos.
Los bytes se intercambian entre las capas segunda y terceros (función ISR y UartRx) a través de un buffer circular. ISR recibe un byte, almacena en un array y un puntero a la matriz, incrementa si el puntero llega al final de la matriz se reinicia al principio. La función UartRx tiene su propio puntero para leer la misma matriz, se incrementa (de forma circular demasiado) tan pronto como el byte es decodificado en el estado actual de la RX. Bucle principal llama a la función UartRx cuando el puntero del "en" difiere de "a" puntero.

Cada paquete de comando está compuesto por:
0 - cabecera @
1 - ASCII ID 0-9
2 - Cmd A-z de ASCII
3 - CmdLen N = 1-MAX_RX_BUFF número de bytes siguientes (checksum incluido)
4 - datos...
...
N-1-datos
N - suma de comprobación obtenida sumando simplemente en una variable de 8 bits, bytes todos componer el mensaje (suma de comprobación se excluyen) de 0-255.

Esta capa controla el tiempo de espera y errores de suma de comprobación, así como coherencia del paquete (encabezado correcto, longitud correcta). Si todo está bien habilita analizador rutina (cuarta capa ) para descifrar el mensaje y ejecutar la acción necesaria. Esta rutina fija la bandera de error apropiado si no se conoce el código de mensaje recibido.

TMR1 genera un reloj de temporización de 1000 Hz - el latido del corazón del programa. De interrupción de cada TMR1, temporizadores internos se actualizan, el vigilante se borra y se coloca una bandera para la función que pide por el valor del espacio recorrido. Cada función de "All_Parameters_Ask" de 10 ms (velocidad, posición actual) está activada.

Artículos Relacionados

Automatizado Robot de navegación con Gas (MQ-2), la temperatura y la humedad (DHT11)

Automatizado Robot de navegación con Gas (MQ-2), la temperatura y la humedad (DHT11)

Hola a todos! El propósito de este proyecto era crear un robot capaz de navegar alrededor de obstáculos en una sala utilizando el módulo de ultrasonidos que HC-SR04 montado en un Servo, esto permitió que el robot a mirar alrededor para determinar la
Construir tu propio Robot mayordomo!!!!!!  -Tutorial, fotos y Video

Construir tu propio Robot mayordomo!!!!!! -Tutorial, fotos y Video

EDIT: más información sobre mis proyectos revisa mi nTambién hago consultoría de robótica, Mecatrónica y proyectos/productos de efectos especiales. Revisa mi página web - narobo.com para más detalles.¿Alguna vez has querido un robot mayordomo que te
Construir tu primer robot

Construir tu primer robot

en este instructable voy a mostrarle cómo construir un robot muy simple que se puede controlar con un ordenador portátil o mac.Este robot funciona con un arduino uno y es muy barato y fácil de construir. Este robot puede tomar valores de temprature y
Construir STEMbot1 - un Robot que hace de programación fácil y divertido

Construir STEMbot1 - un Robot que hace de programación fácil y divertido

El moderno smartphone o tableta (dispositivo móvil) tiene más potencia informática de equipos de escritorio tenían apenas 10 años atrás. Los dispositivos móviles modernos están llenos de sensores incluyendo: GPS, compás, 3 ejes acelerómetros, girosco
Arudino todo el Thingd - cómo construir un coche Robot

Arudino todo el Thingd - cómo construir un coche Robot

¿Que siempre quisiste ver tu propio coche robot itinerante alrededor? Construir uno con algunas piezas de electrónica, un microcontrolador de Arduino y programación de copiar-pegar. Incluso si nunca has probado un proyecto como este antes, aprovecha
Cómo construir tu propio Robot de DARPA Robotics desafío final. Realmente!

Cómo construir tu propio Robot de DARPA Robotics desafío final. Realmente!

o cómo no ganar 2.000.000 y divertirse haciéndolo.IntroducciónEsta es la primera de una serie de instructables que pretende ser una documentación completa de cómo construimos nuestro 2013/2015 DARPA Robotics desafío Robot (llamado Buddy en los ensayo
Construir un chasis Robot Modular con Actobotics

Construir un chasis Robot Modular con Actobotics

Desde mi infancia he amado robots. Los primeros robots de película recuerdo realmente gusto en primer lugar, donde los tres robots de "Silent Running" (siendo una de mis películas favoritas!) Esas pequeñas cajas a pie goofy alcanzó mi interés en
Cómo construir tu primer Robot ($ 85)

Cómo construir tu primer Robot ($ 85)

me han hecho A nueva y actualizada versión de este. POR FAVOR ENCUENTRE AQUÍ********************************************************************************Actualización: Unas 10,000 personas que ya leyeron este post, me gustaría pedir disculpas. Cua
Construir un simple robot de arranque LEGO

Construir un simple robot de arranque LEGO

esto es de clase, un simple robot LEGO con muchos puntos de enganche para conectar más sensores y motores. MUESCA es también funciona con LEGO EV3 y puede ser construida con LEGO NXT 1.0, NXT 2.0, edición de NXT educación, LEGO EV3 home edition y edi
Construir un brazo Robot de 5 ejes con Arduino y DynamixShield

Construir un brazo Robot de 5 ejes con Arduino y DynamixShield

En este instructable le enseñará a rápidamente y fácilmente crear un brazo robot de 5 ejes usando componentes estándares comerciales y control utilizando un Arduino con un DynamixShield. El DynamixShield es un nuevo Add-on para el Arduino debido, cer
Cómo construir tu propio robot sugru, Fixbot

Cómo construir tu propio robot sugru, Fixbot

¿Así que viste nuestro video y has caído en amor con Fixbot, tienes? Está bien, es comprensible. Hemos caído en amor con él también.Tenemos una gran noticia! Usted puede construir su propio Fixbot demasiado, siempre que estás bien con ensuciarse las
Cómo instalar y construir un auto contenía agua salada acuario con el refugio construido en

Cómo instalar y construir un auto contenía agua salada acuario con el refugio construido en

ya que actualmente van a la Universidad y viven en un dormitorio, decidí que tendría un pequeño acuario de escritorio ya que no pude poner un acuario grande 70gal. Decidí ir con un galón 10 independiente unidad sólo theres ningún lío con tener un sum
Fácil construir mi propio Robot útil para menos de $100

Fácil construir mi propio Robot útil para menos de $100

Hola todos, que está deseoso de hacer su propio robot! Tuve un sueño para que el dispositivo útil, donde podía usar esquemas de programación, impresión 3D. No importa el idioma, vea el video sobre cómo robot me ayuda a hacer fotografía y vídeo en cua
DIY: Cómo construir un Spybot de Robot WiFi

DIY: Cómo construir un Spybot de Robot WiFi

nos va mostrándole cómo construir un robot wifi / spybot desde cero. Es un proyecto muy sencillo y puede ser manejada fácilmente por un constructor de robots intermedios. Para completar el robot, tarda un par de horas.Video del robot completo de cond