Samenwerking Groep 12
Dependencies: Encoder MODSERIAL HIDScope mbed
Foo
main.cpp@21:fb17e0b8924e, 2015-09-22 (annotated)
- Committer:
- ThomasBNL
- Date:
- Tue Sep 22 13:47:11 2015 +0000
- Revision:
- 21:fb17e0b8924e
- Parent:
- 20:4d128c3f1228
- Child:
- 22:d22381fe3b16
Motor stelt zich in op de referentiepositie; reference lijkt niet goed weergegeven te worden
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
ThomasBNL | 10:e923f51f18c4 | 1 | #include "mbed.h" |
ThomasBNL | 10:e923f51f18c4 | 2 | #include "HIDScope.h" |
ThomasBNL | 10:e923f51f18c4 | 3 | #include "encoder.h" |
ThomasBNL | 10:e923f51f18c4 | 4 | #include "MODSERIAL.h" |
ThomasBNL | 10:e923f51f18c4 | 5 | |
ThomasBNL | 10:e923f51f18c4 | 6 | //Motor 2 |
ThomasBNL | 10:e923f51f18c4 | 7 | DigitalOut motor2direction(D4); //D4 en D5 zijn motor 2 (op het motorshield) |
ThomasBNL | 19:269f19917d80 | 8 | PwmOut motor2speed(D5); // D5 is an input on the motor that controls the speed of motor number 2 |
ThomasBNL | 19:269f19917d80 | 9 | DigitalIn button(PTA4); // PTA4 is used as a button controller (0 when pressed and 1 when not pressed) |
ThomasBNL | 21:fb17e0b8924e | 10 | Encoder motor2(D13,D12,true); // The encoder is able to read and set position/speed values |
ThomasBNL | 19:269f19917d80 | 11 | MODSERIAL pc(USBTX,USBRX); // This input is used to send data to the pc |
ThomasBNL | 19:269f19917d80 | 12 | Ticker TickerController; // This adds a Ticker to the function +TickerController |
ThomasBNL | 10:e923f51f18c4 | 13 | //AnalogIn potmeter2(A0); /NIEUW |
ThomasBNL | 13:a0113cf2fc5f | 14 | |
ThomasBNL | 19:269f19917d80 | 15 | // Defining constants |
ThomasBNL | 19:269f19917d80 | 16 | double counts_per_revolution=4200; |
ThomasBNL | 13:a0113cf2fc5f | 17 | double degrees_per_turn=360; |
ThomasBNL | 13:a0113cf2fc5f | 18 | double counts_per_degree=counts_per_revolution/degrees_per_turn; //11.67 counts/degree |
ThomasBNL | 19:269f19917d80 | 19 | const double motor2_Kp = 2.5; //controller gain which will be multiplied with the error (*how fast will the error be corrected) |
ThomasBNL | 21:fb17e0b8924e | 20 | const double reference = 400; |
ThomasBNL | 13:a0113cf2fc5f | 21 | |
ThomasBNL | 19:269f19917d80 | 22 | // Function P-controller |
ThomasBNL | 19:269f19917d80 | 23 | double P(double error, const double Kp) //returns error * controller gain |
ThomasBNL | 13:a0113cf2fc5f | 24 | { |
ThomasBNL | 19:269f19917d80 | 25 | return Kp*error; |
ThomasBNL | 13:a0113cf2fc5f | 26 | } |
ThomasBNL | 19:269f19917d80 | 27 | // Function that calls the P-controller |
ThomasBNL | 21:fb17e0b8924e | 28 | double motor2_controller() // Void function that compares the current position with a reference value and outputs |
ThomasBNL | 19:269f19917d80 | 29 | { |
ThomasBNL | 19:269f19917d80 | 30 | double position=motor2.getPosition(); //current motor position |
ThomasBNL | 21:fb17e0b8924e | 31 | double error=reference-position; |
ThomasBNL | 21:fb17e0b8924e | 32 | pc.printf("ik doe het positie = %d en error =%d en reference=%d \r\n", position, error, reference); |
ThomasBNL | 21:fb17e0b8924e | 33 | return P(error,motor2_Kp); |
ThomasBNL | 20:4d128c3f1228 | 34 | } |
ThomasBNL | 13:a0113cf2fc5f | 35 | |
ThomasBNL | 19:269f19917d80 | 36 | // MAIN |
ThomasBNL | 10:e923f51f18c4 | 37 | int main() |
ThomasBNL | 10:e923f51f18c4 | 38 | { |
ThomasBNL | 19:269f19917d80 | 39 | pc.baud(9600); // baud rate at which the information is processed to the computer |
ThomasBNL | 21:fb17e0b8924e | 40 | //motor2.setPosition(0); // calls the current position of the motor zero |
ThomasBNL | 10:e923f51f18c4 | 41 | while(true) { |
ThomasBNL | 10:e923f51f18c4 | 42 | if (button.read() < 0.5) { //if button pressed |
ThomasBNL | 13:a0113cf2fc5f | 43 | motor2direction = 0; // zero is clockwise (front view) |
ThomasBNL | 19:269f19917d80 | 44 | motor2speed = 0.5f; // motorspeed |
ThomasBNL | 10:e923f51f18c4 | 45 | pc.printf("positie = %d \r\n", motor2.getPosition()); |
ThomasBNL | 10:e923f51f18c4 | 46 | } else { // If button is not pressed |
ThomasBNL | 21:fb17e0b8924e | 47 | double output_motor = motor2_controller(); |
ThomasBNL | 21:fb17e0b8924e | 48 | while(output_motor>0){ |
ThomasBNL | 21:fb17e0b8924e | 49 | motor2speed=output_motor; |
ThomasBNL | 21:fb17e0b8924e | 50 | motor2direction=1; |
ThomasBNL | 21:fb17e0b8924e | 51 | break;} |
ThomasBNL | 21:fb17e0b8924e | 52 | while(output_motor<0){ |
ThomasBNL | 21:fb17e0b8924e | 53 | motor2speed=fabs(output_motor); |
ThomasBNL | 21:fb17e0b8924e | 54 | motor2direction=0; |
ThomasBNL | 21:fb17e0b8924e | 55 | break;} |
ThomasBNL | 21:fb17e0b8924e | 56 | pc.printf("else loop controller"); |
ThomasBNL | 20:4d128c3f1228 | 57 | } |
ThomasBNL | 21:fb17e0b8924e | 58 | |
ThomasBNL | 19:269f19917d80 | 59 | // while (Error_position > 0) { |
ThomasBNL | 19:269f19917d80 | 60 | // motor2direction = 0; |
ThomasBNL | 19:269f19917d80 | 61 | // motor2speed=0.3f;} |
ThomasBNL | 19:269f19917d80 | 62 | // while (Error_position < 0) { |
ThomasBNL | 19:269f19917d80 | 63 | // motor2direction = 1; |
ThomasBNL | 19:269f19917d80 | 64 | // motor2speed=0.3f;} |
ThomasBNL | 20:4d128c3f1228 | 65 | // Piece of code that keeps the value of the position between the counts per revolution |
ThomasBNL | 13:a0113cf2fc5f | 66 | while ((motor2.getPosition()>counts_per_revolution) || (motor2.getPosition()<-counts_per_revolution)) // If value is outside -4200 and 4200 (number of counts equal to one revolution) reset to zero |
ThomasBNL | 12:af428d56b4eb | 67 | { |
ThomasBNL | 10:e923f51f18c4 | 68 | motor2.setPosition(0); |
ThomasBNL | 13:a0113cf2fc5f | 69 | pc.printf(" HE \r\n LLO \r\n WO \r\n RLD \r\n !!! \r\n FOO! \r\n"); |
ThomasBNL | 10:e923f51f18c4 | 70 | break; |
ThomasBNL | 12:af428d56b4eb | 71 | } |
ThomasBNL | 10:e923f51f18c4 | 72 | } |
ThomasBNL | 12:af428d56b4eb | 73 | } |