Code om de PID controller af te stellen aan de hand van een sinus golf
Dependencies: mbed QEI MODSERIAL FastPWM biquadFilter
main.cpp@4:99f7fdce608e, 2019-03-15 (annotated)
- 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?
User | Revision | Line number | New 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 |