Stap 4: Arduino code voor het balanceren van de omgekeerde ter plaatse
Voor zover ik weet, kan een omgekeerde slinger worden bereikt door het beheersen van de drijvende motor koppel in de Lagrange-vergelijking. Motor koppel kan worden gecontroleerd door een stroom aan motor of een angular versnelling van de motor.
In dit project I van motorische controle van de huidige toepassing.
Vereiste motor huidige voor het balanceren van het omgekeerde wordt berekend als de volgende formule;
iValue = K1 * theta + K2 * phi + K3 * dtheta + K4 * dphi
Plan: requied motor huidige (A)
Theta: hoek van de wiel (rad)---berekend door integratie van dtheta
Phi: lichaam hoek (rad) –---verkregen MPU6050 sensor
dtheta: hoeksnelheid van de wiel (rad/sec)---geschat aan de hand van de gemeten huidige waarde en de waarde van de PWM
dphi: hoeksnelheid van lichaam (rad/sec)---berekend door differentiatie van phi
K1, K2, K3, K4: winsten (deze cijfers kunnen worden gevonden door proberen en fout.)
(Geschatte dtheta en theta onjuist zijn, maar deze werken in dit project.)
Gelijkstroom controle is moeilijk. Dus, ik meet huidige motor (iCurrent) en op basis van fout (iValue – iCurrent) feed terug naar PWM waarde aan motor proportioneel met low-pass filter.
Deze hierboven vermeld zijn samengevat als volgt;
zweven K1, K2, K3, K4;
zweven theta, dtheta, phi, dphi;
float plan, iCurrent, iError;
float Ka;
float iMotor;
void loop
{
iValue = K1 * theta + K2 * phi + K3 * dtheta + K4 * dphi;
iError = iValue - iCurrent;
iMotor = gladde (Ka * iError, 0,05, iMotor);
MotorDrive(iMotor);
}
Over-the-spot-balancing is niet zo leuk!
R/C auto moet extern gecontroleerd.
Dan, maak het afstandsbediening!