Code om de PID controller af te stellen aan de hand van een sinus golf

Dependencies:   mbed QEI MODSERIAL FastPWM biquadFilter

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);