Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: QEI mbed-rtos mbed
Diff: main.cpp
- Revision:
- 10:d14c702c1992
- Parent:
- 9:4ff9849fc8f6
- Child:
- 11:7e19e51b325d
--- a/main.cpp Wed Dec 04 03:20:34 2013 +0000 +++ b/main.cpp Wed Dec 04 04:11:41 2013 +0000 @@ -52,11 +52,11 @@ float lambda1 = 30, lambda2 = 30, lambda3 = 15; int index; int pulsesPend, pulsesMot; -bool flag = 0; +bool flag = 1; void saving(void const *args) { index = 0; - while ((index < BUFFER_SIZE)&&(flag == 1)&&(false)) { + while ((index < BUFFER_SIZE)&&(flag == 1)) { buffer[index] = theta1; buffer[index+1] = theta2; buffer[index+2] = dtheta1; @@ -86,9 +86,10 @@ float calcEnergy(void) { c2 = cos(theta2); -return (I2x*dtheta2*dtheta2)/2.0 + (I2y*dtheta1*dtheta1)/2.0 + (L1*L1*dtheta1*dtheta1*m2)/2.0 + (dtheta1*dtheta1*l2*l2*m2)/2.0 + (dtheta2*dtheta2*l2*l2*m2)/2.0 -- (I2y*dtheta1*dtheta1*c2*c2)/2.0 + (I2z*dtheta1*dtheta1*c2*c2)/2.0 + Ixz2*dtheta1*dtheta2*c2 + g*l2*m2*c2 - (dtheta1*dtheta1*l2*l2*m2*c2*c2)/2.0 -- L1*dtheta1*dtheta2*l2*m2*c2; +//return (I2x*dtheta2*dtheta2)/2.0 + (I2y*dtheta1*dtheta1)/2.0 + (L1*L1*dtheta1*dtheta1*m2)/2.0 + (dtheta1*dtheta1*l2*l2*m2)/2.0 + (dtheta2*dtheta2*l2*l2*m2)/2.0 +//- (I2y*dtheta1*dtheta1*c2*c2)/2.0 + (I2z*dtheta1*dtheta1*c2*c2)/2.0 + Ixz2*dtheta1*dtheta2*c2 + g*l2*m2*c2 - (dtheta1*dtheta1*l2*l2*m2*c2*c2)/2.0 +//- L1*dtheta1*dtheta2*l2*m2*c2; +return (I2x*dtheta2*dtheta2)/2.0 + g*l2*m2*c2; } void setVoltage(float inputVoltage) @@ -151,7 +152,7 @@ { // z1 and z2 are in the beginning the same as the angle so that dtheta1 and dtheta2 are zero z1 = theta1; - z2 = theta2; + z2 = 1.001*theta2; firstTime = false; } //calculate dtheta1 @@ -171,18 +172,15 @@ z3 = z3 + dz3 * dt; mCurrent = z3; - //set pwm - // ADD A SANITY CHECK ON THETA - if (cos(theta2) < 0.98) { + //set pwm + if (cos(theta2) < 0.96) { flag = 1; currentEnergy = calcEnergy(); - inputVoltage = -2.0*dtheta2*(0.0372 - currentEnergy); - + inputVoltage = -2.3*dtheta2*(0.0372 - currentEnergy); } else { flag = 1; - inputVoltage = 0.0; - //inputVoltage = -(k1*theta1 + k2*theta2 + k3*dtheta1 + k4*dtheta2 + k5*mCurrent); + inputVoltage = -(k1*theta1 + k2*theta2 + k3*dtheta1 + k4*dtheta2 + k5*mCurrent); } setVoltage(inputVoltage);