Stap 5: Arduino Code
-Als de code wordt uitgevoerd op een mega328p en werd samengesteld met behulp van Arduino 1.6.6
-Als de code is cyclustijd een constante ~ 250Hz
Op het hart van de code is een teller die elke keer TIMER1 overloopt en triggers een interrupt routine is gevorderd. Dit item activeert andere evenementen specifieke intervallen, waardoor de code kan worden uitgevoerd met een bekende snelheid en wiskunde in de lus van de controle te vereenvoudigen.
De tilt hoek van de robot is berekend aan de hand van een aanvullende filter met gyrometer en versnelling waarden uit de IC MPU6050. Dit wordt ingevoerd in een besturingselement lus met drie andere waarden: de tijdsafgeleide van de tilt hoek, robot snelheid (versnelling integraal) en robot verplaatsing (velocity integraal). Alle vier waarden worden toegevoegd met een vooraf ingestelde winst te krijgen een uitgang termijn evenredig is met de versnelling van de robot. Een goede uitleg van deze controle lus door David P. Anderson en meer informatie over zijn balancing robot.
Als u wilt verplaatsen de robot wordt een offset toegevoegd aan de waarde van de verplaatsing in de lus van de controle. Om te schakelen is links of rechts een offset toegevoegd/afgetrokken van de linker en rechter wiel-snelheden. De snelheden van het wiel worden gevoed in de het gedeelte van de motorische controle van de code.
Borstelloze motoren vereisen 3-fase macht. Kijk naar deze uitleg van hoe de hoekgreep van Borstelloze gimbal motors is bereikt. Het gedeelte van de motorische controle van mijn code is gebaseerd off van de BruGi borstelloze gimbal controlecode. Alle drie timers zijn ingesteld voor de uitvoer van 31.25KHZ fase correct PWM (6 PWM-outs). Een nuttig artikel over het aanpassen van de Arduino timers.
Een opzoektabel met ruimte vector PWM waarden wordt gebruikt voor het trekken van de drie waarden met 120 graden fase-separatie zichtbaar. De waarden uit de opzoektabel trok zijn geavanceerde tegen een tarief evenredig aan de benodigde links of rechts robot wiel snelheid.
De code behandelt motor power aanpassingen om te corrigeren voor koppel wegvallen op de hogere snelheden en meer benodigde koppel tijdens hogere versnelling. De accuspanning wordt gecontroleerd om te voorkomen dat schade aan de LiPo Accu's. De code behandelt ook Bluetooth-communicatie tussen een smartphone.