![](/media/cache/group/default_image.jpg.50x50_q85.jpg)
final
turret.cpp
- Committer:
- caleblegis
- Date:
- 2016-05-09
- Revision:
- 0:72ae4ee22e56
File content as of revision 0:72ae4ee22e56:
#include "mbed.h" #include "Motor.h" #include "QEI.h" #define pi (3.14159265) #define logfreq (100) #define data_pts (500) Serial pc(USBTX, USBRX); Motor m(p25, p23, p27); QEI enc(p16,p17,NC,1600); float motspeed; float x; float rad; int count; Timer t; float rad_one=0; float time_one=0; float omega; float old_E; float E; float PI=3.14159265; float old_t; float DC; float old_DC; float theta; //float theta_desired=x; float Ts=0.01; int main() { t.reset(); enc.reset(); pc.printf("enter an angle\r\n"); pc.scanf("%f", &x); while(1) { t.start(); wait(1/logfreq); //if(t.read()-old_t>=Ts) count = enc.getPulses() ; theta = -count*((2*pi)/3200) ; // Calculate position error E=(x*(PI/180))-theta; // Control algorithm DC = ((0.9841*old_DC) + (0.2348*E) - (0.2335*old_E)); old_E = E; m.speed(DC+0.15); old_DC = DC; if(DC>0 && DC<0.7) m.speed(DC+0.1); if(E>-1.0) m.speed(DC+0.15); if (E<0.015 && E>-0.01) m.speed(0.0); else if(DC<0 && DC>-0.7){ m.speed(DC-0.34); if(E>-1.0) m.speed(DC-0.5); if (E>-0.015&& E<0.01) m.speed(0.0);} // Age variables old_t = t.read(); //omega=(rad-rad_one)/(t-time_one); //right is negative, left is positive theta //if (x<0){ // m.speed(0.25); //if(rad==x){ //m.speed(0);}} //if (x>0){ // m.speed(-0.5); // if(rad==x){ //m.speed(0);}} //rad_one=rad; //time_one=t; printf("time: %f angle: %f error: %f DC: %f\n\r", t.read(), theta, E,DC); } //0.2 for forward torque //-0.5 for backward //for (servopos=0; servopos<=1.0; servopos+=0.1){ //for (motspeed= 0.2; motspeed <= 1.0; motspeed += 0.1) { //myservo1 = servopos; //myservo2 = 1.0 - servopos; //printf("Servo 1 position %.2f Servo 2 position %.3f\n", servopos, (1-servopos)); //m.speed(motspeed); //printf("motor speed is %.2f\n", motspeed); //wait(0.0002); //m.speed(-1.0); //wait(0.002); //m.speed(1.0); }