Ramon Waninge / Mbed 2 deprecated Milestone1

Dependencies:   FastPWM mbed QEI biquadFilter HIDScope MODSERIAL

Committer:
efvanmarrewijk
Date:
Mon Oct 29 11:35:49 2018 +0000
Revision:
22:71524e4fd1f2
Parent:
21:363271dcfe1f
Child:
23:0c02cf961344
Possible solution for the angle problem

Who changed what in which revision?

UserRevisionLine numberNew contents of line
efvanmarrewijk 16:720365110953 1 // Inclusion of libraries
Ramonwaninge 0:3ea1bbfbeaae 2 #include "mbed.h"
efvanmarrewijk 11:3efd6a324f16 3 #include "FastPWM.h"
efvanmarrewijk 11:3efd6a324f16 4 #include "QEI.h" // Includes library for encoder
efvanmarrewijk 13:6556cd086d07 5 #include "MODSERIAL.h"
efvanmarrewijk 13:6556cd086d07 6 #include "HIDScope.h"
efvanmarrewijk 13:6556cd086d07 7 #include "BiQuad.h"
Ramonwaninge 0:3ea1bbfbeaae 8
efvanmarrewijk 14:e21cb701ccb8 9 // Input
efvanmarrewijk 21:363271dcfe1f 10 AnalogIn pot1(A1);
efvanmarrewijk 21:363271dcfe1f 11 AnalogIn pot2(A2);
efvanmarrewijk 21:363271dcfe1f 12 InterruptIn button1(D0);
efvanmarrewijk 21:363271dcfe1f 13 InterruptIn button2(D1);
efvanmarrewijk 21:363271dcfe1f 14 InterruptIn emergencybutton(SW2); /* This is not yet implemented!
efvanmarrewijk 21:363271dcfe1f 15 The button SW2 on the K64F is the emergency button: if you press this,
efvanmarrewijk 21:363271dcfe1f 16 everything will abort as soon as possible
efvanmarrewijk 21:363271dcfe1f 17 */
efvanmarrewijk 21:363271dcfe1f 18
efvanmarrewijk 21:363271dcfe1f 19 DigitalIn pin8(D8); // Encoder 1 B
efvanmarrewijk 21:363271dcfe1f 20 DigitalIn pin9(D9); // Encoder 1 A
efvanmarrewijk 21:363271dcfe1f 21 DigitalIn pin10(D10); // Encoder 2 B
efvanmarrewijk 21:363271dcfe1f 22 DigitalIn pin11(D11); // Encoder 2 A
efvanmarrewijk 21:363271dcfe1f 23 DigitalIn pin12(D12); // Encoder 3 B
efvanmarrewijk 21:363271dcfe1f 24 DigitalIn pin13(D13); // Encoder 3 A
efvanmarrewijk 9:65c52c1f4a57 25
efvanmarrewijk 14:e21cb701ccb8 26 // Output
efvanmarrewijk 21:363271dcfe1f 27 DigitalOut pin2(D2); // Motor 3 direction
efvanmarrewijk 21:363271dcfe1f 28 FastPWM pin3(D3); // Motor 3 pwm
efvanmarrewijk 21:363271dcfe1f 29 DigitalOut pin4(D4); // Motor 2 direction
efvanmarrewijk 21:363271dcfe1f 30 FastPWM pin5(D5); // Motor 2 pwm
efvanmarrewijk 21:363271dcfe1f 31 FastPWM pin6(D6); // Motor 1 pwm
efvanmarrewijk 21:363271dcfe1f 32 DigitalOut pin7(D7); // Motor 1 direction
efvanmarrewijk 21:363271dcfe1f 33 //float u1 = pot1;
Ramonwaninge 2:d8a552d1d33a 34
efvanmarrewijk 16:720365110953 35 // Utilisation of libraries
efvanmarrewijk 16:720365110953 36 MODSERIAL pc(USBTX, USBRX);
efvanmarrewijk 18:ca084c362855 37 QEI Encoder1(D11,D10,NC,4200); // Counterclockwise motor rotation is the positive direction
efvanmarrewijk 18:ca084c362855 38 QEI Encoder2(D9,D8,NC,4200); // Counterclockwise motor rotation is the positive direction
efvanmarrewijk 18:ca084c362855 39 QEI Encoder3(D13,D12,NC,4200); // Counterclockwise motor rotation is the positive direction
efvanmarrewijk 20:695140b8db2f 40 Ticker motor;
efvanmarrewijk 9:65c52c1f4a57 41
efvanmarrewijk 16:720365110953 42 // Global variables
efvanmarrewijk 18:ca084c362855 43 const float pi = 3.14159265358979;
efvanmarrewijk 22:71524e4fd1f2 44 double u3 = 0.0; // Normalised variable for the movement of motor 3
efvanmarrewijk 16:720365110953 45
efvanmarrewijk 16:720365110953 46 // Functions
efvanmarrewijk 18:ca084c362855 47 void Encoderinput()
efvanmarrewijk 18:ca084c362855 48 { int counts1;
efvanmarrewijk 18:ca084c362855 49 int counts2;
efvanmarrewijk 18:ca084c362855 50 int counts3;
efvanmarrewijk 18:ca084c362855 51 float angle1;
efvanmarrewijk 18:ca084c362855 52 float angle2;
efvanmarrewijk 18:ca084c362855 53 float angle3;
efvanmarrewijk 18:ca084c362855 54 counts1 = Encoder1.getPulses();
efvanmarrewijk 18:ca084c362855 55 counts2 = Encoder2.getPulses();
efvanmarrewijk 18:ca084c362855 56 counts3 = Encoder3.getPulses();
efvanmarrewijk 18:ca084c362855 57 angle1 = ((float)counts1*2.0*pi)/4200.0;
efvanmarrewijk 18:ca084c362855 58 angle2 = ((float)counts2*2.0*pi)/4200.0;
efvanmarrewijk 18:ca084c362855 59 angle3 = ((float)counts3*2.0*pi)/4200.0;
efvanmarrewijk 18:ca084c362855 60
efvanmarrewijk 22:71524e4fd1f2 61 pc.printf("Counts1,2,3: %i %i %i Angle1,2,3: %f %f %f \r\n",counts1,counts2,counts3,angle1,angle2,angle3);
efvanmarrewijk 18:ca084c362855 62 }
efvanmarrewijk 16:720365110953 63
efvanmarrewijk 11:3efd6a324f16 64 void draaibuttons()
efvanmarrewijk 11:3efd6a324f16 65 { /* Pressing button 2 concludes in a change of speed. While button 1 is pressed,
efvanmarrewijk 11:3efd6a324f16 66 the direction of change of speed is reversed. So pressing button 1 and 2
efvanmarrewijk 11:3efd6a324f16 67 simultaneously results for the turning speed of motor 3 in a slower movement,
efvanmarrewijk 11:3efd6a324f16 68 and eventually the motor will turn the other way around.
efvanmarrewijk 11:3efd6a324f16 69 */
efvanmarrewijk 14:e21cb701ccb8 70 if (button1 == 1 && button2 == 1)
efvanmarrewijk 14:e21cb701ccb8 71 { u3 = u3 + 0.1f; //In stapjes van 0.1
efvanmarrewijk 13:6556cd086d07 72 if (u3>1.0f)
efvanmarrewijk 13:6556cd086d07 73 { u3 = 1.0f;
efvanmarrewijk 11:3efd6a324f16 74 }
efvanmarrewijk 10:ac36f9a204dd 75 }
efvanmarrewijk 14:e21cb701ccb8 76
efvanmarrewijk 14:e21cb701ccb8 77 else if (button1 == 0 && button2 == 1)
efvanmarrewijk 13:6556cd086d07 78 { u3 = u3 - 0.1f;
efvanmarrewijk 13:6556cd086d07 79 if (u3>1.0f)
efvanmarrewijk 13:6556cd086d07 80 { u3 = 1.0f;
efvanmarrewijk 11:3efd6a324f16 81 }
efvanmarrewijk 9:65c52c1f4a57 82 }
efvanmarrewijk 21:363271dcfe1f 83 }
efvanmarrewijk 14:e21cb701ccb8 84
efvanmarrewijk 11:3efd6a324f16 85 void draai()
efvanmarrewijk 11:3efd6a324f16 86 /* Function for the movement of all motors, using the potmeters for the moving
efvanmarrewijk 11:3efd6a324f16 87 direction and speed of motor 1 and 2, and using button 1 and 2 on the biorobotics
efvanmarrewijk 11:3efd6a324f16 88 shield for the moving direction and speed of motor 3.
efvanmarrewijk 11:3efd6a324f16 89 */
efvanmarrewijk 11:3efd6a324f16 90 {
efvanmarrewijk 22:71524e4fd1f2 91 double u1 = 2.0*(pot1 - 0.5); // Normalised variable for the movement of motor 1
efvanmarrewijk 6:3c9569087274 92 if (u1>0)
efvanmarrewijk 6:3c9569087274 93 { pin4 = true;
efvanmarrewijk 6:3c9569087274 94 }
efvanmarrewijk 6:3c9569087274 95 else if(u1<0)
efvanmarrewijk 6:3c9569087274 96 { pin4 = false;
efvanmarrewijk 6:3c9569087274 97 }
efvanmarrewijk 22:71524e4fd1f2 98 pin5.period(0.2); // Set PWM period to 0.2 seconds
efvanmarrewijk 6:3c9569087274 99 pin5 = fabs(u1);
efvanmarrewijk 22:71524e4fd1f2 100 //pin5.write(fabs(u1)); // Set duty cycle (and thus the angle of the motor) to potmeter percentage
efvanmarrewijk 6:3c9569087274 101
efvanmarrewijk 22:71524e4fd1f2 102 double u2 = 2.0*(pot2 - 0.5); // Normalised variable for the movement of motor 2
efvanmarrewijk 11:3efd6a324f16 103 if (u2<0)
efvanmarrewijk 6:3c9569087274 104 { pin7 = true;
efvanmarrewijk 6:3c9569087274 105 }
efvanmarrewijk 11:3efd6a324f16 106 else if(u2>0)
efvanmarrewijk 6:3c9569087274 107 { pin7 = false;
efvanmarrewijk 6:3c9569087274 108 }
efvanmarrewijk 22:71524e4fd1f2 109 pin6.period(0.2); // Set PWM period to 0.2 seconds
efvanmarrewijk 22:71524e4fd1f2 110 //pin6.write(fabs(u2)); // Set output duty cycle (and thus the angle of the motor) to potmeter percentage
efvanmarrewijk 11:3efd6a324f16 111
efvanmarrewijk 11:3efd6a324f16 112 if (u3>0)
efvanmarrewijk 11:3efd6a324f16 113 { pin2 = true;
efvanmarrewijk 11:3efd6a324f16 114 }
efvanmarrewijk 11:3efd6a324f16 115 else if(u3<0)
efvanmarrewijk 11:3efd6a324f16 116 { pin2 = false;
efvanmarrewijk 11:3efd6a324f16 117 }
efvanmarrewijk 11:3efd6a324f16 118 else
efvanmarrewijk 11:3efd6a324f16 119 { pin3 = 0;
efvanmarrewijk 14:e21cb701ccb8 120 }
efvanmarrewijk 22:71524e4fd1f2 121 pin3.period(0.2); // Set PWM period to 0.2 seconds
efvanmarrewijk 22:71524e4fd1f2 122 //pin3.write(fabs(u3)); // Set duty cycle (and thus the angle of the motor) to potmeter percentage
Ramonwaninge 3:d39285fdd103 123 }
efvanmarrewijk 11:3efd6a324f16 124
efvanmarrewijk 16:720365110953 125 // Main program
efvanmarrewijk 11:3efd6a324f16 126 int main()
efvanmarrewijk 18:ca084c362855 127 {
efvanmarrewijk 14:e21cb701ccb8 128 pc.baud(115200);
efvanmarrewijk 22:71524e4fd1f2 129
efvanmarrewijk 21:363271dcfe1f 130 button1.rise(&draaibuttons);
efvanmarrewijk 21:363271dcfe1f 131 button2.rise(&draaibuttons);
efvanmarrewijk 18:ca084c362855 132
efvanmarrewijk 21:363271dcfe1f 133 motor.attach(draai, 0.001);
efvanmarrewijk 22:71524e4fd1f2 134
efvanmarrewijk 16:720365110953 135 while (true)
efvanmarrewijk 18:ca084c362855 136 { Encoderinput();
Ramonwaninge 3:d39285fdd103 137 }
Ramonwaninge 0:3ea1bbfbeaae 138 }