V0.1

Dependencies:   mbed QEI

Fork of motor_calibration by Kenneth Weisbeek

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?

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