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

Dependencies:   mbed QEI MODSERIAL FastPWM biquadFilter

Committer:
aschut
Date:
Fri Mar 15 15:00:21 2019 +0000
Revision:
4:99f7fdce608e
Parent:
3:ac13255164cd
Child:
5:4b25551aeb6e
met encoder pulses, nog geen werkende degrees

Who changed what in which revision?

UserRevisionLine numberNew contents of line
aschut 0:a9a42914138c 1 #include "mbed.h"
aschut 2:926d56babb1a 2 #include "MODSERIAL.h"
aschut 4:99f7fdce608e 3 #include "QEI.h"
aschut 4:99f7fdce608e 4
aschut 4:99f7fdce608e 5 // Algemeen
aschut 1:58f34947c674 6 DigitalIn button2(SW2);
aschut 1:58f34947c674 7 DigitalIn button3(SW3);
aschut 2:926d56babb1a 8 DigitalOut led(LED_GREEN);
aschut 2:926d56babb1a 9 DigitalOut led2(LED_RED);
aschut 4:99f7fdce608e 10 DigitalOut led3(LED_BLUE);
aschut 2:926d56babb1a 11 MODSERIAL pc(USBTX, USBRX);
aschut 2:926d56babb1a 12
aschut 4:99f7fdce608e 13 //Motoren
aschut 0:a9a42914138c 14 DigitalOut direction1(D4);
aschut 0:a9a42914138c 15 PwmOut pwmpin1(D5);
aschut 0:a9a42914138c 16 PwmOut pwmpin2(D6);
aschut 0:a9a42914138c 17 DigitalOut direction2(D7);
aschut 4:99f7fdce608e 18 volatile float PWM1;
aschut 4:99f7fdce608e 19 volatile float PWM2;
aschut 4:99f7fdce608e 20 volatile float pwm2;
aschut 4:99f7fdce608e 21
aschut 4:99f7fdce608e 22 //Encoder
aschut 4:99f7fdce608e 23 DigitalIn EncoderA(D13);
aschut 4:99f7fdce608e 24 DigitalIn EncoderB(D12);
aschut 4:99f7fdce608e 25 QEI encoder2 (D13, D12, NC, 8400, QEI::X4_ENCODING);
aschut 4:99f7fdce608e 26 float Pulses2;
aschut 4:99f7fdce608e 27 float Degrees2;
aschut 2:926d56babb1a 28
aschut 2:926d56babb1a 29 //Pot meter
aschut 1:58f34947c674 30 AnalogIn pot(A1);
aschut 4:99f7fdce608e 31 float Pot2;
aschut 4:99f7fdce608e 32
aschut 4:99f7fdce608e 33 //Ticker
aschut 4:99f7fdce608e 34 Ticker Pwm;
aschut 2:926d56babb1a 35 Ticker PotRead;
aschut 0:a9a42914138c 36
aschut 2:926d56babb1a 37
aschut 4:99f7fdce608e 38
aschut 4:99f7fdce608e 39
aschut 4:99f7fdce608e 40
aschut 0:a9a42914138c 41
aschut 1:58f34947c674 42 void Period(void)
aschut 1:58f34947c674 43 {
aschut 1:58f34947c674 44 pwmpin2.period_us(60);
aschut 0:a9a42914138c 45 }
aschut 4:99f7fdce608e 46
aschut 4:99f7fdce608e 47 void PwmMotor(void)
aschut 1:58f34947c674 48 {
aschut 4:99f7fdce608e 49 pwm2 = (Pot2*2)-1; //scaling
aschut 3:ac13255164cd 50 pc.printf("pwm2=%f\r\n",pwm2);
aschut 4:99f7fdce608e 51 Degrees2 = (Pulses2/8400)*360;
aschut 4:99f7fdce608e 52 pc.printf("Pulses is: %i\n", Pulses2);
aschut 3:ac13255164cd 53 direction2 = pwm2 < 0.0f; //positief = CW, negatief = CCW
aschut 3:ac13255164cd 54 pwmpin2 = fabs(pwm2);
aschut 4:99f7fdce608e 55
aschut 2:926d56babb1a 56
aschut 1:58f34947c674 57 }
aschut 1:58f34947c674 58 void MotorOn(void)
aschut 1:58f34947c674 59 {
aschut 4:99f7fdce608e 60 pwmpin2 = 0;
aschut 4:99f7fdce608e 61 Pwm.attach (PwmMotor, 0.1);
aschut 1:58f34947c674 62 }
aschut 1:58f34947c674 63 void MotorOff(void)
aschut 1:58f34947c674 64 {
aschut 4:99f7fdce608e 65 Pwm.detach ();
aschut 1:58f34947c674 66 pwmpin2 = 0;
aschut 1:58f34947c674 67 }
aschut 4:99f7fdce608e 68
aschut 4:99f7fdce608e 69 void ContinuousReader(void){
aschut 3:ac13255164cd 70 Pot2 = pot.read();
aschut 4:99f7fdce608e 71 Pulses2 = encoder2.getPulses();
aschut 4:99f7fdce608e 72 //pc.printf("%f\r\n",Pot2);
aschut 2:926d56babb1a 73 }
aschut 1:58f34947c674 74
aschut 1:58f34947c674 75
aschut 1:58f34947c674 76
aschut 0:a9a42914138c 77 int main() {
aschut 0:a9a42914138c 78 Period();
aschut 4:99f7fdce608e 79 PotRead.attach(ContinuousReader,0.1);
aschut 2:926d56babb1a 80 pc.baud(115200);
aschut 2:926d56babb1a 81 pc.printf("start\r\n");
aschut 4:99f7fdce608e 82 led = 1;
aschut 4:99f7fdce608e 83 led2 =1;
aschut 4:99f7fdce608e 84 led3 =1;
aschut 2:926d56babb1a 85
aschut 2:926d56babb1a 86 while (true){
aschut 4:99f7fdce608e 87 led3 = 0;
aschut 1:58f34947c674 88 if (!button2)
aschut 1:58f34947c674 89 {
aschut 4:99f7fdce608e 90 led3 = 1;
aschut 4:99f7fdce608e 91 led = 0;
aschut 4:99f7fdce608e 92 pc.printf("MotorOn\r\n");
aschut 2:926d56babb1a 93 MotorOn();
aschut 1:58f34947c674 94 }
aschut 1:58f34947c674 95 if (!button3)
aschut 1:58f34947c674 96 {
aschut 4:99f7fdce608e 97 pc.printf("MotorOff\r\n");
aschut 4:99f7fdce608e 98 PotRead.detach();
aschut 1:58f34947c674 99 MotorOff();
aschut 1:58f34947c674 100 }
aschut 2:926d56babb1a 101 led = 0;
aschut 3:ac13255164cd 102 }
aschut 0:a9a42914138c 103 }
aschut 0:a9a42914138c 104
aschut 0:a9a42914138c 105
aschut 0:a9a42914138c 106