Paso 3: Demo controlador PID
EFlite Outrunner Motor
ESC 35 amp
11,1 batería LiPo V
1/2" PVC
Una vieja Sierra caballo para un stand
El controlador examina el ángulo, el brazo está colgando en el uso de nuestro acelerómetro y giroscopio y utiliza esos datos para determinar cuanta corriente para lanzar el motor para hacer el nivel del brazo.
Porque el ESC se utiliza para enchufar el motor de un autobús de receptor de radio diseñado para servos, es relativamente fácil de controlar un motor de CA sin escobillas con un ESC en un Arduino gracias al Servo.h + Servo.cpp en la carpeta de bibliotecas. Creo que el protocolo de servo utiliza posición de pulso modulación (PPM) que puede lograrse utilizando un PWM pin en tu arduino con la función servo.write().
http://www.Hooked-on-RC-Airplanes.com/servo-tutorial.html
Es importante ser consciente de la seguridad cuando estos motores, ya que ir extremadamente rápido. * SIEMPRE use gafas de seguridad * * dejar la hélice fuera hasta que absolutamente necesita it *
Usted tendrá que escribir una función para arm(); su salida por lo que se puede ajustar su velocidad. Básicamente necesita escribir la ESC bajo, alto, y luego baja otra vez.
http://www.Arduino.CC/cgi-bin/yabb2/YaBB.pl?NUM=1226292633 Este foro va sobre cómo controlar un motor sin escobillas y es donde me marco para mi arm(); función y setSpeed (); función.
Se podría usar un servo.write(0-180) para establecer la velocidad en su salida, pero también se puede asignar en una escala de 0-100. Puede descargar el motor_functions en la parte inferior del paso. Si no funciona por favor diganme!! Simplemente puedo agregarlo en las instrucciones!
Utilizando estas funciones le da control completo motor. Usted tendrá que manosean su propio código para su ESC particular. Declarando las funciones sensor independientemente del bucle podemos ejecutar ahora el motor y los sensores al mismo tiempo. Esto es donde pegué mi primer contratiempo. Porque el motor dibuja tan actual de la batería, lo fue induciendo corrientes en mi bus I2C. Mi sensor funcionaría muy bien cuando el motor estaba apagado, pero cuando el motor funcionaba que los valores fueron más o menos sentidos.
Hice los siguientes pasos para limpiar el ruido:
He añadido un anillo de ferrita a la esc (retrospectivamente, esto probablemente sólo protege la ESC de ruido-aprendió a usarlas después de mi Zagi se estrelló http://www.hobbyking.com/hobbyking/store/__23206__Clip_On_Soft_Ferrite_Rings_5pc_.html)
Montara los sensores lo más lejos posible del motor
Torcido de todos mis cables para tratar de minimizar la inducción de corriente
He encontrado estos sitios web para ayudar a resolver mi problema:
http://diydrones.com/Forum/topics/PID-Controller-I2C-bus-Noise-from-ESC?xg_source=Activity //this es un hilo que comencé en DIY drones
http://Forum.allaboutcircuits.com/showthread.php?t=41916
Esto pareció minimizar el error del sensor, pero todavía unos 5 de cada 20 valores estaban fuera por +-10 grados. Para limpiar esto mediada por los valores de los sensores de:
Construcción de un aray para sostener 20 valores como aparecieron cronológicamente
Construir una matriz que llevó a cabo los últimos 20 valores ordenados en (ascendente o descendente; no importa porque estamos en busca de la mediana)
Utiliza a una especie de burbuja para ordenar mis valores
He encontrado esta web para ayudar a explicar cómo ordenar array eficientemente:
http://mathbits.com/mathbits/CompSci/arrays/Sorting.htm
Usted tendrá que construir múltiplos de estas funciones para varios valores de clasificación (x, y, z; dx, dy, dz)
Mis funciones de clase y punto medio de burbuja pueden ser descargados en la parte inferior del paso!
Ahora que los valores de los sensores son congruentes y tiene control sobre el motor de CA, podemos comenzar el control PID real!
La página de la wikipedia hace un buen trabajo explicando cómo debe ser su programa estructurado utilizando psuedocode. Hay muchas maneras de implementar esto. Depende de cuánto tiempo desea utilizar tus comentarios para los términos integral y hayan.
Usted puede encontrar mi PID_sample en la parte inferior de este paso!
Sintonización del PID: hay muchas maneras de afinar un PID. Se puede por software, conjetura y verificación, probaría el método Zieger Nichols.
Cualquier manera, para empezar, sólo ejecuta su salida con el error proporcional. establecer KP para que el término proporcional nunca excede la capacidad de salida. Básicamente, el sistema oscilará, quieres humedecer alrededor de su punto de referencia (o por lo menos no aumenten con el tiempo!). Una vez que ha encontrado un KP correspondiente o bien puede establecer KD o KI. Diferentes dicen cosas diferentes cuando se trata de que uno hacer primero, pero término integral acelerará un undercorrection hacia el punto de referencia mientras que el término hayan retrasará una sobrecorrección.
http://www.youtube.com/watch?v=_qlgWSP-KFK&feature=g-UPL
Después de un rato jugando con el código debe convertirse en aparente adaptación cómo este tipo de controlador es su sistema particular. Recuerde, trate y feedforward tanto como sabes cómo! Una vez que estés cómodo seguir adelante e instalar el controlador!!