V0.1

Dependencies:   mbed QEI

Fork of motor_calibration by Kenneth Weisbeek

Committer:
kweisbeek
Date:
Fri Oct 26 07:36:28 2018 +0000
Revision:
1:53bb5928adcf
Parent:
0:1045216da12e
Child:
2:ea985bb173f6
V0.2

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 0:1045216da12e 6 PwmOut pwmpin(D5);
kweisbeek 0:1045216da12e 7 QEI Encoder(D12,D13,NC,64,QEI::X4_ENCODING);
kweisbeek 0:1045216da12e 8
kweisbeek 1:53bb5928adcf 9
kweisbeek 1:53bb5928adcf 10
kweisbeek 0:1045216da12e 11 //volatiles
kweisbeek 0:1045216da12e 12 volatile counts_prev=0;
kweisbeek 0:1045216da12e 13
kweisbeek 1:53bb5928adcf 14
kweisbeek 1:53bb5928adcf 15
kweisbeek 1:53bb5928adcf 16 //functions (4 functions not finished)
kweisbeek 0:1045216da12e 17 int counts(){
kweisbeek 0:1045216da12e 18 int counts=Encoder.getPulses(); //MAAK NOG AF MET PREVIOUS COUNTS ONTHOUDEN.
kweisbeek 1:53bb5928adcf 19 return counts;
kweisbeek 1:53bb5928adcf 20
kweisbeek 1:53bb5928adcf 21 int pos_store(a){} //store position in counts to know count location of the ends of bridge
kweisbeek 1:53bb5928adcf 22
kweisbeek 1:53bb5928adcf 23 void rotate_start(){} //start rotation of disk
kweisbeek 1:53bb5928adcf 24
kweisbeek 1:53bb5928adcf 25 void rotate_stop(){} //stop rotation of disk
kweisbeek 0:1045216da12e 26
kweisbeek 0:1045216da12e 27
kweisbeek 1:53bb5928adcf 28
kweisbeek 1:53bb5928adcf 29 //main function
kweisbeek 0:1045216da12e 30 int main(){
kweisbeek 0:1045216da12e 31 pwmpin.period_us(60);
kweisbeek 0:1045216da12e 32
kweisbeek 0:1045216da12e 33 //parameters
kweisbeek 0:1045216da12e 34 int caltime=30; //calibration time until condition has been met, caltime=(time/0.1)
kweisbeek 0:1045216da12e 35 float speed=0.50f;
kweisbeek 1:53bb5928adcf 36 int dir=0;
kweisbeek 1:53bb5928adcf 37 int counts_end=; //amount of counts for 360 degrees rotation of main disk --> many revolutions of motor
kweisbeek 0:1045216da12e 38
kweisbeek 0:1045216da12e 39 //move towards end
kweisbeek 0:1045216da12e 40 for (m=1;2;m++){
kweisbeek 0:1045216da12e 41 dirpin.write(dir);
kweisbeek 0:1045216da12e 42 pwmpin = speed;
kweisbeek 0:1045216da12e 43 //when motor counts do not change anymore, change direction
kweisbeek 1:53bb5928adcf 44 int n=1;
kweisbeek 1:53bb5928adcf 45 while(n=1){
kweisbeek 0:1045216da12e 46 for (n=1;caltime;n++){
kweisbeek 0:1045216da12e 47 if (counts()!=counts_prev){
kweisbeek 0:1045216da12e 48 n=0;}
kweisbeek 0:1045216da12e 49 else {}
kweisbeek 1:53bb5928adcf 50 wait(0.1);}
kweisbeek 1:53bb5928adcf 51 int position=counts();}
kweisbeek 1:53bb5928adcf 52 dir=dir+1;
kweisbeek 1:53bb5928adcf 53 pos_store(position);} //stores position integer
kweisbeek 1:53bb5928adcf 54
kweisbeek 1:53bb5928adcf 55 //Check if a full circle can be made without obstruction
kweisbeek 1:53bb5928adcf 56 //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 57 rotate_start();
kweisbeek 1:53bb5928adcf 58 while(1){
kweisbeek 1:53bb5928adcf 59 if counts2_zero()>=counts2_end{
kweisbeek 1:53bb5928adcf 60 break;}
kweisbeek 1:53bb5928adcf 61 else {}
kweisbeek 1:53bb5928adcf 62 wait(0.01);}
kweisbeek 1:53bb5928adcf 63 rotate_stop();
kweisbeek 1:53bb5928adcf 64 pos_store(counts2());
kweisbeek 1:53bb5928adcf 65 //End sequence?
kweisbeek 1:53bb5928adcf 66 }
kweisbeek 0:1045216da12e 67
kweisbeek 0:1045216da12e 68
kweisbeek 0:1045216da12e 69