Using HIDScope for P(I)D controller

Dependencies:   FastPWM HIDScope MODSERIAL QEI biquadFilter mbed

Fork of PES_tutorial_5 by BMT Module 9 Group 4

Committer:
1856413
Date:
Mon Oct 15 10:20:24 2018 +0000
Revision:
6:bd73804c8cec
Parent:
5:a1fb2d2fb2d0
Child:
7:3b503177ff5c
Maar met foutmelding

Who changed what in which revision?

UserRevisionLine numberNew contents of line
1856413 0:2e33035d4e86 1 #include "mbed.h"
1856413 0:2e33035d4e86 2 #include "FastPWM.h" // FastPWM library
1856413 2:34c14fb36b5d 3 #include "MODSERIAL.h"
lweersink 4:49c5fd62a192 4 #include "QEI.h"
1856413 2:34c14fb36b5d 5 MODSERIAL pc(USBTX, USBRX);
1856413 0:2e33035d4e86 6 DigitalOut motor1_direction(D7);
1856413 0:2e33035d4e86 7 AnalogIn pot1(A4);
1856413 1:c19fc63d555f 8 InterruptIn but2(D3);
1856413 1:c19fc63d555f 9 FastPWM motor1_pwm(D6); //FastPWM input, PES lecture 2
1856413 0:2e33035d4e86 10 Ticker MotorInterrupt;
1856413 6:bd73804c8cec 11 QEI Encoder (D12, D13, NC, 64, QEI::X4_ENCODING);
nicollevanrijswijk 5:a1fb2d2fb2d0 12
1856413 0:2e33035d4e86 13 void Motor()
1856413 0:2e33035d4e86 14 {
1856413 1:c19fc63d555f 15 // Aflezen Potentiometers voor PWM
1856413 1:c19fc63d555f 16 motor1_pwm = pot1.read(); // Aflezen PotMeter 1 (volatile omdat je altijd de potmeter wil blijven lezen)
1856413 6:bd73804c8cec 17 pc.printf("%i\r\n", Encoder.getPulses());
1856413 6:bd73804c8cec 18
1856413 0:2e33035d4e86 19 }
1856413 1:c19fc63d555f 20
1856413 1:c19fc63d555f 21 void buttonpress()
1856413 1:c19fc63d555f 22 {
1856413 3:ea819bcf667f 23 motor1_direction = 1 - motor1_direction;
1856413 3:ea819bcf667f 24 float motor1_velocity = pot1.read() *2.0;
lweersink 4:49c5fd62a192 25
nicollevanrijswijk 5:a1fb2d2fb2d0 26 pc.printf("Velocity is %f \r\n", motor1_velocity);
1856413 1:c19fc63d555f 27 }
1856413 0:2e33035d4e86 28
1856413 6:bd73804c8cec 29 /*double GetReferenceVelocity()
1856413 6:bd73804c8cec 30 {
1856413 6:bd73804c8cec 31 // Returns reference velocity in rad/s.
1856413 6:bd73804c8cec 32 // Positive value means clockwise rotation.
1856413 6:bd73804c8cec 33 // 60 rpm = 60*2*pi/60 = 6.28 ~ 6.2 rad/s
1856413 6:bd73804c8cec 34 const float maxVelocity = 6.2; // in rad/s of course!
1856413 6:bd73804c8cec 35 double referenceVelocity; // in rad/s
1856413 6:bd73804c8cec 36 if (button2) {
1856413 6:bd73804c8cec 37 // Clockwise rotation
1856413 6:bd73804c8cec 38 referenceVelocity = potMeterIn * maxVelocity;
1856413 6:bd73804c8cec 39 }
1856413 6:bd73804c8cec 40 else
1856413 6:bd73804c8cec 41 {
1856413 6:bd73804c8cec 42 // Counterclockwise rotation
1856413 6:bd73804c8cec 43 referenceVelocity = -1*potMeterIn * maxVelocity;
1856413 6:bd73804c8cec 44 }
1856413 6:bd73804c8cec 45 return referenceVelocity;
1856413 6:bd73804c8cec 46 } */
1856413 6:bd73804c8cec 47
1856413 6:bd73804c8cec 48
1856413 0:2e33035d4e86 49 int main()
1856413 0:2e33035d4e86 50 {
1856413 6:bd73804c8cec 51 pc.baud(115200);
1856413 0:2e33035d4e86 52 motor1_pwm.period_us(60.0); // 60 microseconds PWM period, 16.7 kHz, defines all PWM pins (only needs to done once), FastPWM variabele
1856413 0:2e33035d4e86 53 MotorInterrupt.attach(Motor, 0.5); // Ticker die de functie Motor aanroept elke halve seconde, meer tijd is tragere respons op potmeter
lweersink 4:49c5fd62a192 54 but2.rise(buttonpress);
1856413 0:2e33035d4e86 55 while(true){} // Endless loop
1856413 0:2e33035d4e86 56 }