V0.1

Dependencies:   mbed QEI

Fork of motor_calibration by Kenneth Weisbeek

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?

UserRevisionLine numberNew 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