Group 9 BioRobotics
/
motor_calibration
V0.1
Fork of motor_calibration by
main.cpp@2:ea985bb173f6, 2018-10-26 (annotated)
- Committer:
- kweisbeek
- Date:
- Fri Oct 26 07:51:43 2018 +0000
- Revision:
- 2:ea985bb173f6
- Parent:
- 1:53bb5928adcf
- Child:
- 3:d519ec330c31
V0.3
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
kweisbeek | 0:1045216da12e | 1 | #include "mbed.h" |
kweisbeek | 0:1045216da12e | 2 | |
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 | 1:53bb5928adcf | 11 | |
kweisbeek | 1:53bb5928adcf | 12 | |
kweisbeek | 0:1045216da12e | 13 | //volatiles |
kweisbeek | 0:1045216da12e | 14 | volatile counts_prev=0; |
kweisbeek | 0:1045216da12e | 15 | |
kweisbeek | 1:53bb5928adcf | 16 | |
kweisbeek | 1:53bb5928adcf | 17 | |
kweisbeek | 2:ea985bb173f6 | 18 | //functions (2 functions not finished) |
kweisbeek | 0:1045216da12e | 19 | int counts(){ |
kweisbeek | 0:1045216da12e | 20 | int counts=Encoder.getPulses(); //MAAK NOG AF MET PREVIOUS COUNTS ONTHOUDEN. |
kweisbeek | 1:53bb5928adcf | 21 | return counts; |
kweisbeek | 1:53bb5928adcf | 22 | |
kweisbeek | 1:53bb5928adcf | 23 | int pos_store(a){} //store position in counts to know count location of the ends of bridge |
kweisbeek | 1:53bb5928adcf | 24 | |
kweisbeek | 2:ea985bb173f6 | 25 | void translation_start(a,b); //start rail motor |
kweisbeek | 2:ea985bb173f6 | 26 | dirpin.write(a); |
kweisbeek | 2:ea985bb173f6 | 27 | pwmpin = b; |
kweisbeek | 2:ea985bb173f6 | 28 | void translation_stop(); //stop rail motor |
kweisbeek | 2:ea985bb173f6 | 29 | pwmpin = 0; |
kweisbeek | 2:ea985bb173f6 | 30 | void rotate_start(a,b){} //start rotation of disk |
kweisbeek | 2:ea985bb173f6 | 31 | dirpin2.write(a); |
kweisbeek | 2:ea985bb173f6 | 32 | pwmpin2 = b; |
kweisbeek | 1:53bb5928adcf | 33 | void rotate_stop(){} //stop rotation of disk |
kweisbeek | 2:ea985bb173f6 | 34 | pwmpin2 = 0; |
kweisbeek | 0:1045216da12e | 35 | |
kweisbeek | 1:53bb5928adcf | 36 | |
kweisbeek | 1:53bb5928adcf | 37 | //main function |
kweisbeek | 0:1045216da12e | 38 | int main(){ |
kweisbeek | 0:1045216da12e | 39 | pwmpin.period_us(60); |
kweisbeek | 0:1045216da12e | 40 | |
kweisbeek | 0:1045216da12e | 41 | //parameters |
kweisbeek | 0:1045216da12e | 42 | int caltime=30; //calibration time until condition has been met, caltime=(time/0.1) |
kweisbeek | 0:1045216da12e | 43 | float speed=0.50f; |
kweisbeek | 1:53bb5928adcf | 44 | int dir=0; |
kweisbeek | 1:53bb5928adcf | 45 | int counts_end=; //amount of counts for 360 degrees rotation of main disk --> many revolutions of motor |
kweisbeek | 0:1045216da12e | 46 | |
kweisbeek | 0:1045216da12e | 47 | //move towards end |
kweisbeek | 0:1045216da12e | 48 | for (m=1;2;m++){ |
kweisbeek | 2:ea985bb173f6 | 49 | translation_start(dir,speed); |
kweisbeek | 0:1045216da12e | 50 | //when motor counts do not change anymore, change direction |
kweisbeek | 1:53bb5928adcf | 51 | int n=1; |
kweisbeek | 1:53bb5928adcf | 52 | while(n=1){ |
kweisbeek | 0:1045216da12e | 53 | for (n=1;caltime;n++){ |
kweisbeek | 0:1045216da12e | 54 | if (counts()!=counts_prev){ |
kweisbeek | 0:1045216da12e | 55 | n=0;} |
kweisbeek | 0:1045216da12e | 56 | else {} |
kweisbeek | 1:53bb5928adcf | 57 | wait(0.1);} |
kweisbeek | 2:ea985bb173f6 | 58 | translation_stop(); |
kweisbeek | 1:53bb5928adcf | 59 | int position=counts();} |
kweisbeek | 2:ea985bb173f6 | 60 | dir=dir+1; |
kweisbeek | 2:ea985bb173f6 | 61 | pos_store(position);} //stores position integer |
kweisbeek | 1:53bb5928adcf | 62 | |
kweisbeek | 1:53bb5928adcf | 63 | //Check if a full circle can be made without obstruction |
kweisbeek | 1:53bb5928adcf | 64 | //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 | 65 | rotate_start(); |
kweisbeek | 1:53bb5928adcf | 66 | while(1){ |
kweisbeek | 1:53bb5928adcf | 67 | if counts2_zero()>=counts2_end{ |
kweisbeek | 1:53bb5928adcf | 68 | break;} |
kweisbeek | 1:53bb5928adcf | 69 | else {} |
kweisbeek | 1:53bb5928adcf | 70 | wait(0.01);} |
kweisbeek | 1:53bb5928adcf | 71 | rotate_stop(); |
kweisbeek | 1:53bb5928adcf | 72 | pos_store(counts2()); |
kweisbeek | 1:53bb5928adcf | 73 | //End sequence? |
kweisbeek | 1:53bb5928adcf | 74 | } |
kweisbeek | 0:1045216da12e | 75 | |
kweisbeek | 0:1045216da12e | 76 | |
kweisbeek | 0:1045216da12e | 77 |