Best Tuning
Dependencies: Motor PID mbed millis
main.cpp
- Committer:
- Najib_irvani
- Date:
- 2017-02-10
- Revision:
- 0:fae4f75668ab
File content as of revision 0:fae4f75668ab:
#include "mbed.h" #include "encoderKRAI.h" #include "Motor.h" #include "millis.h" double speed, maxSpeed = 0.8, minSpeed = -0.8; double kp=0.6757, kd=0.6757, ki=0.00006757; double p,i,d; double last_error = 0, current_error, sum_error = 0; double rpm, target_rpm = 9.0; encoderKRAI encoder( PB_13, PB_14, 14, encoderKRAI::X2_ENCODING); Serial pc(USBTX,USBRX); Motor motor(PA_8,PC_1,PC_2); unsigned long int previousMillis = 0; unsigned long int currentMillis; void init_speed (){ if (speed>maxSpeed){ speed = maxSpeed; } if (speed<minSpeed){ speed = minSpeed; } } int main() { startMillis(); while(1) { currentMillis = millis(); if (currentMillis-previousMillis>=10) { rpm = (double)encoder.getPulses(); current_error = target_rpm - rpm; sum_error = sum_error + current_error; p = current_error*kp; d = (current_error-last_error)*kd/10.0; i = sum_error*ki*10.0; speed = p + d + i; init_speed(); motor.speed(speed); last_error = current_error; encoder.reset(); pc.printf("%.04lf\n",rpm); previousMillis = currentMillis; } } }