Kodingan untuk sampling kecepatan motor
Dependencies: Motor PID QEI mbed
main.cpp
- Committer:
- photonicbabe
- Date:
- 19 months ago
- Revision:
- 0:99de7bb1501c
File content as of revision 0:99de7bb1501c:
/** * Drive a robot forwards or backwards by using a PID controller to vary * the PWM signal to H-bridges connected to the motors to attempt to maintain * a constant velocity. */ #include "mbed.h" #include "Motor.h" #include "QEI.h" #include "PID.h" Timer t; Timer t2; Serial pc(USBTX, USBRX); // tx, rx //Motor DepanKanan(PA_0, PB_0, PA_4); //Depan Kiri Motor DepanKanan(PA_9, PB_10 , PA_8); //DepanKanan //Motor DepanKanan(PC_8, PC_5, PA_12); //Belakang Kanan //Motor DepanKanan(PA_1, PC_0, PC_1); //Belakang Kiri //QEI DepanKananQEI(PC_10, PC_12, NC, 986); //Depan Kiri QEI DepanKananQEI(PC_11, PD_2, NC, 624); //Depan Kanan //QEI DepanKananQEI(PB_1, PB_15, NC, 986); //Belakang Kanan //QEI DepanKananQEI(PA_15, PB_7, NC, 986);// Belakang Kiri //25 Mei 2022 PID DepanKananPID(0.96, 0.1, 0.000001, 0.02); //PID DepanKiriPID(0.85, 0.08, 0.000000000001, 0.02); //PID BelakangKiriPID(0.496, 0.0565, 0.000000000001, 0.02); Belakang Kiri //PID BelakangKananPID(0.5, 0.022, 0.00000000001, 0.02); //2022 //PID DepanKananPID(0.65, 0.1, 0.0000000001, 0.02); //Kc, Ti, Td belakang kiri //PID DepanKananPID(0.8, 0.1, 0.0000000001, 0.02); //Kc, Ti, Td MOTOR baru nomor 1 //PID DepanKananPID(0.7, 0.1, 0.0000000000005, 0.02); //Kc, Ti, Td MOTOR baru nomor 2 //PID DepanKananPID(0.8, 0.1, 0.00000002, 0.02); //Kc, Ti, Td MOTOR baru nomor 3 //PID DepanKananPID(0.495, 0.1, 0.00000035, 0.09); //Kc, Ti, Td, RATE int main() { //int DepanKananPulses = 0; pc.baud(9600); DepanKanan.period(0.01f); DepanKananPID.setInputLimits(0, 3000);//Input units: counts per second. DepanKananPID.setOutputLimits(0.0, 0.9);//Output units: PwmOut duty cycle as %. DepanKananPID.setMode(AUTO_MODE); int DepanKananPulses = 0; //How far the left wheel has travelled. int DepanKananPrevPulses = 0; //The previous reading of how far the left wheel //has travelled. float DepanKananVelocity = 0.0; //The velocity of the left wheel in pulses per //second. wait(3); //Wait a few seconds before we start moving. DepanKananPID.setSetPoint(1000); t.start(); while (t.read_ms() <= 3000) { /*DepanKanan.speed(0.5f); DepanKananPulses = DepanKananQEI.getPulses(); pc.printf("\n\r %d " , DepanKananPulses);*/ t2.start(); DepanKananPulses = DepanKananQEI.getPulses(); DepanKananVelocity = ((double)DepanKananPulses - (double)DepanKananPrevPulses) / 0.02; DepanKananPrevPulses = DepanKananPulses; //DepanKananVelocity = (DepanKananVelocity/210.0f)*60.0f; DepanKananPID.setProcessValue(fabs(DepanKananVelocity)); //----------// DepanKanan.speed(DepanKananPID.compute()); pc.printf("\n %f " ,DepanKananVelocity ); while (t2.read_ms() <= 20) { } t2.reset(); } t.reset(); DepanKanan.brake(); }