aaa
Dependencies: BNO055 SBDBT_lib___muratani mbed
main.cpp
- Committer:
- e2137
- Date:
- 17 months ago
- Revision:
- 0:079a31fc71bb
File content as of revision 0:079a31fc71bb:
#include <mbed.h> #include <DCmotor.hpp> #include <rotary_inc.hpp> DCmotor MOTOR(PA_0,PA_1, 0.5,0.0, 1); RotaryInc Rotary(PC_3, PC_2, 256, 1, 4); Timer TIME; int main() { TIME.start(); double e1 = 0; double e2 = 0; double e3 = 0; double Kp = 0.00040;//0.00000264; double Ki = 0.000021; double Kd = 0.000003; double target = 360; double now = 0; double now_ang_v = 0.0; double P = 0; double I = 0; double D = 0; double dt = 0.01; double time = 0; double pwm = 0.0; double last = 0.0; while(1) { MOTOR.drive(pwm); last = now; now = Rotary.degree_now();//角度 //now_ang_v = (now - last) / dt; //now_ang_v = (now - last); e3 = e2; e2 = e1; e1 = target - now; P = Kp * (e1 - e2); I = Ki * e1 * dt; D = Kd * (e1 - 2 * e2 + e3) / dt; pwm += P + I + D; printf("%lf,%lf\n",now,target); //printf("ang_vel %lf\tpwm %lf\te1 %lf\te2 %lf\te3 %lf\n",now,pwm, e1, e2, e3); while(TIME.read_ms() - time <= 10); time = TIME.read_ms(); /*if(target * 0.99 <= now_ang_v && now_ang_v <= target * 1.01){ printf("Finish\n"); MOTOR.drive(0); break; }*/ } } //sum = Rotary.degree_diff(); //printf("P : %lf I : %lf D : %lf pwm : %d\n",P, I, D, pwm); //MOTOR.out(pwm); //e2 = e1; //e1 = now = Rotary.degree_now(); //e3 = (e1 - e2) / dt; //now = Rotary.getSpeed(); //printf("%lf %lf\n",pwm,now); //MOTOR.drive(pwm += 0.001); //pwm += P + I;