PCB Quadrotor (borstelloze) (16 / 20 stap)

Stap 16: Puttees op tezamen: de Code


De code voor mijn quad PCB is geschreven in Arduino-stijl C/C++ in de Arduino IDE. Als je nooit een Arduino voordat gebruikt nog, kunt u sneller werken vrij snel met behulp van de middelen op de Arduino hopepage. De Arduino project wordt opgenomen in de documentatie (stap 1). De code is ongeveer 500 lijnen, met inbegrip van niet omvat in totaal. Zelfs in het hoofdbestand draait een heleboel de code setup of achtergrond dingen zoals functies de IMU seriële gegevens lezen. (Ik uitgeklede af van de Pololu bibliotheken van hier en hier te nemen alleen de functies die ik nodig had.)

Het meest interessante deel van de code, die uitvoering geeft aan de concepten van de afgelopen vier stappen, past op één pagina (of de twee beelden in deze stap). Hier is het, met korte beschrijvingen van wat elk onderdeel doet:

readGyro();
readAcc();

// START OF + MODE ----------------------------------------------------------------------
a_pitch = (accel_x_zero - accel_x);
a_roll = (accel_y - accel_y_zero);
a_z = (ondertekende int) analogRead(A_Z) - a_z_z;
g_pitch = (gyro_y - gyro_y_zero);
g_roll = (gyro_x - gyro_x_zero);
g_yaw = (gyro_z - gyro_z_zero);

Dit deel pakt de ruwe versnellingsmeter en gyro signalen. Het doet ook zeroing, hoewel ik heb alle mijn nullen... ingesteld op nul... aangezien de Pololu minIMU-9 heeft een goede baan van de resultaten al zeroing. Indien nodig, kunnen de nulwaarden worden gewijzigd als u wilt bijsnijden van de quadrotor. Opmerking: a_pitch wordt omgekeerd. Dit is een fysieke kwestie. Onder positieve pitch, de zwaartekracht vector wijst naar de X-as van de IMU. Dit registreert als negatieve versnelling in X, aangezien de accelrometer geen onderscheid tussen leunend vooruit en achteruit versnelling. a_roll hoeft niet deze omkering.

rate_pitch = (float) g_pitch * G_GAIN;
rate_roll = (float) g_roll * G_GAIN;
rate_yaw = (float) g_yaw * G_GAIN;

De ruwe gyro-signalen converteren naar fysieke eenheden van º / s.

angle_pitch = AA * (angle_pitch + rate_pitch * DT);
angle_pitch += (1.0 - AA) * (float) a_pitch * A_GAIN;
pitch_error = (float) (pitch_command - 127) / 127.0 * MAX_ANGLE - angle_pitch;
pitch_error_integral += pitch_error * DT;
Als (pitch_error_integral > = INT_SAT) {pitch_error_integral = INT_SAT;}
Als (pitch_error_integral < = - INT_SAT) {pitch_error_integral = - INT_SAT;}

angle_roll = AA * (angle_roll + rate_roll * DT);
angle_roll += (1.0 - AA) * (float) a_roll * A_GAIN;
roll_error = (float) (roll_command - 127) / 127.0 * MAX_ANGLE - angle_roll;
roll_error_integral += roll_error * DT;
Als (roll_error_integral > = INT_SAT) {roll_error_integral = INT_SAT;}
Als (roll_error_inttegral < = - INT_SAT) {roll_error_integral = - INT_SAT;}

Pitch en roll aanvullende Filters, evenals Foutberekening hoek. pitch_command en roll_command komen uit de radio, en worden verzonden vanaf het grondstation op basis van gebruikersinvoer. MAX_ANGLE is een user-define-constante die de maximale bevolen pitch en roll hoek in graden ingesteld. De integrale controle zijn alle commentaar uit, maar voel je vrij om te spelen met hen.

Controle
front_command_f-= pitch_error * KP;
front_command_f-= pitch_error_integral * KI;
front_command_f += rate_pitch * KD;
front_command_f-= ((float) (yaw_command - 127) / 127.0 * MAX_RATE - rate_yaw) * KY;

rear_command_f += pitch_error * KP;
rear_command_f += pitch_error_integral * KI;
rear_command_f-= rate_pitch * KD;
rear_command_f-= ((float) (yaw_command - 127) / 127.0 * MAX_RATE - rate_yaw) * KY;

right_command_f-= roll_error * KP;
right_command_f-= roll_error_integral * KI;
right_command_f += 1.3 * rate_roll * KD;
right_command_f += ((float) (yaw_command - 127) / 127.0 * MAX_RATE - rate_yaw) * KY;

left_command_f += roll_error * KP;
left_command_f += roll_error_integral * KI;
left_command_f-= rate_roll * KD;
left_command_f += ((float) (yaw_command - 127) / 127.0 * MAX_RATE - rate_yaw) * KY;
// END OF + MODE ------------------------------------------------------------------------

Dit is de matrijs van de opdracht van stap 12. De yaw controller is in omzoomde, dat is soort van dom. yaw_command komt van de radio, en wordt overgedragen door het grondstation. MAX_RATE is een door de gebruiker gedefinieerde constante waarin de maximale geboden yaw tarief van de rotatie in graden per seconde.

Gerelateerde Artikelen

Helikopter RC-Quadrotor

Helikopter RC-Quadrotor

dit project is een helikopter RC quadrotor (quadrocopter, quadcopter, quadricopter, enz.). Het is een RC helikopter die 4 rotoren gebruikt.Het horloge in 720pU moet enkele absolute vereiste vaardigheden:Het gebruik van de Arduino, genoeg om te beginn
Een Wide-Body Quadrotor - ontwerpen en ideeën om te bouwen van uw eigen.

Een Wide-Body Quadrotor - ontwerpen en ideeën om te bouwen van uw eigen.

Multirotors--hoe cool zijn!Een quadrotor is een soort multirotor vliegtuigen. Deze vliegtuigen zijn gemakkelijker dan ooit om te bouwen. U kunt beginnen met deze machine en verhogen de mogelijkheden (en de complexiteit) als u meer informatie. Uw erva
Nog een andere goedkope Quadrotor - afkomstig van BayLab voor de Instructables sponsoring programma

Nog een andere goedkope Quadrotor - afkomstig van BayLab voor de Instructables sponsoring programma

als fundamenteel iedereen deze dagen, ik wilde om te bouwen van een quadrotor. Hier is hoe ik mijn gebouwd voor vrij goedkoop.Stap 1: Mechanisch ontwerp ik mijn quadrotor gebouwd met een vriend. Ik gebruikte sommige dunne aluminium punthaak van Home
Quadrotor

Quadrotor

deze zomer Edgerton Center Engineering Design klasse vier awesome projecten geproduceerd in vier weken. Een van de projecten was een functionele RC quadrotor gebouwd met algemeen beschikbare RC apparatuur en een Arduino microcontroller board. Hier is
Interfacing borstelloze DC-Motor (BLDC) met Arduino

Interfacing borstelloze DC-Motor (BLDC) met Arduino

dit is een tutorial over hoe interface en uitvoeren van een borstelloze DC-motor met behulp van Arduino. Als u vragen hebt of opmerkingen gelieve te in commentaren of mail naar rautmithil [at] gmail [dot antwoorden] com. Kan je ook contact met mij op
PCB Circuit muur

PCB Circuit muur

Heb je veel oude elektronische spullen en weet niet wat te doen? De muur van een Circuit te maken.Dit is mijn eerste instructable, hoop u bevalt.Ik had een opslagruimte bijna vol met niet werkende oude computers, faxapparaten, monitoren, TV, fotokopi
PCB UV blootstelling eenheid

PCB UV blootstelling eenheid

Een UV-blootstelling-vak is een uiterst nuttig stuk te maken van de PCB's.Ik heb gezocht en vond dat ze te groot en te duur voor mijn gebruik zijn. Bovendien, vereisen alle apparaten een externe voeding sorce.Daarop besloten heb ik te bouwen die bete
Ontwerpen van een romantische PCB met behulp van een gratis PCB design tool - EasyEDA

Ontwerpen van een romantische PCB met behulp van een gratis PCB design tool - EasyEDA

Heb je ooit geprobeerd om het ontwerpen van een PCB voor uw minnaar, kinderen of vrienden op een speciale dag? Waarom niet?PCB ook zou een geweldig cadeau dat openbaart dat uw creativiteit zal ook uw PCB-vaardigheden. Hier wil ik delen een romantisch
Frezen van bed voor Modela MDX-20 PCB

Frezen van bed voor Modela MDX-20 PCB

De modela MDX-20 is zeer wijd verspreid in vele fablabs zoveel en compact CNC voor verschillende toepassingen...Deze machine wordt gebruikt voor het maken van PCB's voor digitale fabricage. Het probleem is dat de meeste mensen de dubbele dubbelzijdig
Zelfgemaakte Mini circulaire tabel huis gebouwd Jig Saw DIY snijden PCB met oude Motor Hand Drill

Zelfgemaakte Mini circulaire tabel huis gebouwd Jig Saw DIY snijden PCB met oude Motor Hand Drill

Zelfgemaakte Mini circulaire tabel Home gebouwd Jig zag DIY snijden PCB met oude motor hand boor1 PC's motor 50 watt nemen van oude rot boor1 stk Aluminium 160 x 160 x 12 mm1 stk Alyric 200 x 160 x 6 mm1 stk Aluminium 150 x 40 x 20 mm1 stk Aluminium
LED kubus met Arduino en aangepaste PCB

LED kubus met Arduino en aangepaste PCB

dit instructable details over het ontwerp en bouwproces voor een 5 x 5 x 5 LED-kubus, instelbaar met behulp van een Arduino, die zich op een aangepaste printplaat bevindt.Extra informatie, foto's en video's vindt u op mijn website.Het afgewerkt produ
Upcycle borstelloze DC motoren van Printers

Upcycle borstelloze DC motoren van Printers

Bent u te allen geïnteresseerd in robotica en elektronica u waarschijnlijk zal hebben gedemonteerd een oude printer of twee (als u nog niet, ik adviseer het hoogst, er zijn altijd interessante delen, en u kunt veel leren over hoe de deskundigen elect
Hergebruik van ferrichloride voor PCB etsen thuis

Hergebruik van ferrichloride voor PCB etsen thuis

Ik voel me PCB etsen is een van de meest vereiste vaardigheid voor een DIY elektronische Hobbyist. Tijdens de procedure etsen, misschien heb je uiteraard gehoord van een nuttige chemische stof bekend als ferrichloride. U kan zelfs hebt geprobeerd een
Hergebruik van oude PCB's

Hergebruik van oude PCB's

Wat zijn de PCB's?PCB is een afkorting voor Printed Circuit Boards. Een PCB ondersteunt mechanisch en elektrisch verbindt elektronische componenten met behulp van geleidende tracks, pads en andere functies van koperen bladen gelamineerd op een niet-g