Group 9 BioRobotics
/
motor_calibration
V0.1
Fork of motor_calibration by
main.cpp@3:d519ec330c31, 2018-10-26 (annotated)
- Committer:
- kweisbeek
- Date:
- Fri Oct 26 09:42:46 2018 +0000
- Revision:
- 3:d519ec330c31
- Parent:
- 2:ea985bb173f6
- Child:
- 4:2ee0d20f624b
V0.4
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
kweisbeek | 0:1045216da12e | 1 | #include "mbed.h" |
kweisbeek | 3:d519ec330c31 | 2 | #define SERIAL_BAUD 115200 |
kweisbeek | 0:1045216da12e | 3 | |
kweisbeek | 0:1045216da12e | 4 | //initial allocations |
kweisbeek | 0:1045216da12e | 5 | DigitalOut dirpin(D4); |
kweisbeek | 2:ea985bb173f6 | 6 | DigitalOut dirpin2(D7); |
kweisbeek | 0:1045216da12e | 7 | PwmOut pwmpin(D5); |
kweisbeek | 2:ea985bb173f6 | 8 | PwmOut pwmpin2(D6); |
kweisbeek | 0:1045216da12e | 9 | QEI Encoder(D12,D13,NC,64,QEI::X4_ENCODING); |
kweisbeek | 0:1045216da12e | 10 | |
kweisbeek | 3:d519ec330c31 | 11 | Serial pc(USBTX,USBRX); |
kweisbeek | 1:53bb5928adcf | 12 | |
kweisbeek | 0:1045216da12e | 13 | //volatiles |
kweisbeek | 0:1045216da12e | 14 | volatile counts_prev=0; |
kweisbeek | 3:d519ec330c31 | 15 | volatile counts; |
kweisbeek | 0:1045216da12e | 16 | |
kweisbeek | 1:53bb5928adcf | 17 | |
kweisbeek | 1:53bb5928adcf | 18 | |
kweisbeek | 2:ea985bb173f6 | 19 | //functions (2 functions not finished) |
kweisbeek | 0:1045216da12e | 20 | int counts(){ |
kweisbeek | 3:d519ec330c31 | 21 | counts_prev=counts; |
kweisbeek | 0:1045216da12e | 22 | int counts=Encoder.getPulses(); //MAAK NOG AF MET PREVIOUS COUNTS ONTHOUDEN. |
kweisbeek | 1:53bb5928adcf | 23 | return counts; |
kweisbeek | 1:53bb5928adcf | 24 | |
kweisbeek | 3:d519ec330c31 | 25 | void pos_store(a){} //store position in counts to know count location of the ends of bridge |
kweisbeek | 3:d519ec330c31 | 26 | static float pos1=0.1; |
kweisbeek | 3:d519ec330c31 | 27 | static float pos2=0.1; |
kweisbeek | 3:d519ec330c31 | 28 | static float pos3=0.1; |
kweisbeek | 3:d519ec330c31 | 29 | if (pos1 == 0.1){ |
kweisbeek | 3:d519ec330c31 | 30 | pos1=a; |
kweisbeek | 3:d519ec330c31 | 31 | else if (pos2 == 0.1){ |
kweisbeek | 3:d519ec330c31 | 32 | pos2=a; |
kweisbeek | 3:d519ec330c31 | 33 | else if (pos3 == 0.1){ |
kweisbeek | 3:d519ec330c31 | 34 | pos3=a; |
kweisbeek | 3:d519ec330c31 | 35 | else {} |
kweisbeek | 1:53bb5928adcf | 36 | |
kweisbeek | 2:ea985bb173f6 | 37 | void translation_start(a,b); //start rail motor |
kweisbeek | 3:d519ec330c31 | 38 | dirpin.write(a); |
kweisbeek | 3:d519ec330c31 | 39 | pwmpin = b; |
kweisbeek | 2:ea985bb173f6 | 40 | void translation_stop(); //stop rail motor |
kweisbeek | 3:d519ec330c31 | 41 | pwmpin = 0; |
kweisbeek | 2:ea985bb173f6 | 42 | void rotate_start(a,b){} //start rotation of disk |
kweisbeek | 3:d519ec330c31 | 43 | dirpin2.write(a); |
kweisbeek | 3:d519ec330c31 | 44 | pwmpin2 = b; |
kweisbeek | 1:53bb5928adcf | 45 | void rotate_stop(){} //stop rotation of disk |
kweisbeek | 3:d519ec330c31 | 46 | pwmpin2 = 0; |
kweisbeek | 0:1045216da12e | 47 | |
kweisbeek | 1:53bb5928adcf | 48 | |
kweisbeek | 1:53bb5928adcf | 49 | //main function |
kweisbeek | 0:1045216da12e | 50 | int main(){ |
kweisbeek | 3:d519ec330c31 | 51 | pc.baud(115200); |
kweisbeek | 3:d519ec330c31 | 52 | pc.printf("start\r\n"); |
kweisbeek | 3:d519ec330c31 | 53 | |
kweisbeek | 0:1045216da12e | 54 | pwmpin.period_us(60); |
kweisbeek | 0:1045216da12e | 55 | |
kweisbeek | 0:1045216da12e | 56 | //parameters |
kweisbeek | 0:1045216da12e | 57 | int caltime=30; //calibration time until condition has been met, caltime=(time/0.1) |
kweisbeek | 0:1045216da12e | 58 | float speed=0.50f; |
kweisbeek | 1:53bb5928adcf | 59 | int dir=0; |
kweisbeek | 3:d519ec330c31 | 60 | int counts_end=10000; //amount of counts for 360 degrees rotation of main disk --> many revolutions of motor |
kweisbeek | 0:1045216da12e | 61 | |
kweisbeek | 0:1045216da12e | 62 | //move towards end |
kweisbeek | 0:1045216da12e | 63 | for (m=1;2;m++){ |
kweisbeek | 2:ea985bb173f6 | 64 | translation_start(dir,speed); |
kweisbeek | 0:1045216da12e | 65 | //when motor counts do not change anymore, change direction |
kweisbeek | 1:53bb5928adcf | 66 | int n=1; |
kweisbeek | 1:53bb5928adcf | 67 | while(n=1){ |
kweisbeek | 3:d519ec330c31 | 68 | /*for (n=1;caltime;n++){ |
kweisbeek | 0:1045216da12e | 69 | if (counts()!=counts_prev){ |
kweisbeek | 0:1045216da12e | 70 | n=0;} |
kweisbeek | 0:1045216da12e | 71 | else {} |
kweisbeek | 3:d519ec330c31 | 72 | wait(0.1);}*/ |
kweisbeek | 3:d519ec330c31 | 73 | wait(5); |
kweisbeek | 2:ea985bb173f6 | 74 | translation_stop(); |
kweisbeek | 1:53bb5928adcf | 75 | int position=counts();} |
kweisbeek | 2:ea985bb173f6 | 76 | dir=dir+1; |
kweisbeek | 2:ea985bb173f6 | 77 | pos_store(position);} //stores position integer |
kweisbeek | 1:53bb5928adcf | 78 | |
kweisbeek | 1:53bb5928adcf | 79 | //Check if a full circle can be made without obstruction |
kweisbeek | 1:53bb5928adcf | 80 | //Try adding a timer as well, you know how long it should take, how long does it actually take? Does that matter? |
kweisbeek | 1:53bb5928adcf | 81 | rotate_start(); |
kweisbeek | 1:53bb5928adcf | 82 | while(1){ |
kweisbeek | 1:53bb5928adcf | 83 | if counts2_zero()>=counts2_end{ |
kweisbeek | 1:53bb5928adcf | 84 | break;} |
kweisbeek | 1:53bb5928adcf | 85 | else {} |
kweisbeek | 1:53bb5928adcf | 86 | wait(0.01);} |
kweisbeek | 1:53bb5928adcf | 87 | rotate_stop(); |
kweisbeek | 1:53bb5928adcf | 88 | pos_store(counts2()); |
kweisbeek | 3:d519ec330c31 | 89 | printf("position 1 = %f, position 2 = %f, position 3 = %f /n",pos1,pos2,pos3); |
kweisbeek | 3:d519ec330c31 | 90 | printf("done"); |
kweisbeek | 1:53bb5928adcf | 91 | //End sequence? |
kweisbeek | 1:53bb5928adcf | 92 | } |
kweisbeek | 0:1045216da12e | 93 | |
kweisbeek | 0:1045216da12e | 94 | |
kweisbeek | 0:1045216da12e | 95 |