Code om de PID controller af te stellen aan de hand van een sinus golf
Dependencies: mbed QEI MODSERIAL FastPWM biquadFilter
Diff: main.cpp
- Revision:
- 17:190c86f4828f
- Parent:
- 14:30d32f51dd9f
- Child:
- 18:161b7ca7f98d
--- a/main.cpp Thu Apr 04 12:25:55 2019 +0000 +++ b/main.cpp Wed Apr 17 12:17:51 2019 +0000 @@ -4,14 +4,19 @@ #include "BiQuad.h" #include "FastPWM.h" // Algemeen +Timer t; DigitalIn button2(SW2); DigitalIn button3(SW3); -AnalogIn But2(A5); -AnalogIn But1(A3); +DigitalIn But2(D12); +DigitalIn But1(D13); DigitalOut led(LED_GREEN); DigitalOut led2(LED_RED); DigitalOut led3(LED_BLUE); MODSERIAL pc(USBTX, USBRX); +float A; +int i = 0; +float pi = 3.14159265359; + //Motoren DigitalOut direction1(D4); @@ -22,8 +27,8 @@ volatile float pwm2; //Encoder -QEI encoder1 (D10, D9, NC, 1200, QEI::X4_ENCODING); -QEI encoder2 (D13, D12, NC, 4800, QEI::X4_ENCODING); +QEI encoder1 (D1, D0, NC, 1200, QEI::X4_ENCODING); +QEI encoder2 (D3, D2, NC, 4800, QEI::X4_ENCODING); double Pulses1; double motor_position1; double Pulses2; @@ -31,7 +36,7 @@ double error1; //Pot meter -AnalogIn pot(A1); +AnalogIn pot(A5); AnalogIn pot0(A0); float Pot2; float Pot1; @@ -301,24 +306,29 @@ void Kdcount (void) // Voor het testen van de PID waardes { - int count = 0; - PolsReference = PolsReference + 50; - if (count == 7) { - PolsReference = 0; - count = 0; - } - count ++; + float ts = t.read(); + A = 50; + PolsReference = A*sin(2*pi*ts*0.2); + //DA = sin(2/180*3.14)*0.5+0.5; + /* + if( i<360) { + DA = sin(i/180*3.14)*0.5+0.5; + i++; + } + */ + } int main() { - Timer t; + t.start(); int counter = 0; pwmpin2.period_us(60); PotRead.attach(ContinuousReader,Ts); - Kdc.attach(Kdcount,5); //Voor PID waarde testen + Kdc.attach(Kdcount,0.01); //Voor PID waarde testen + //Kdcount(); pc.baud(115200); //pc.printf("start\r\n"); led = 1; @@ -339,6 +349,7 @@ MotorOff(); } led = 0; + if(counter==10) { float tmp = t.read(); printf("%f,%f,%f,%f,%f,%f,%f\n\r",tmp,motor_position1,PolsReference,error1,Kp1,Ki1,Kd1);