linear motor code for ksk

Dependencies:   mbed

Committer:
cws8262
Date:
Sat Feb 25 08:14:13 2017 +0000
Revision:
2:81a944155520
Parent:
1:ff295adcca59
ds

Who changed what in which revision?

UserRevisionLine numberNew contents of line
cws8262 0:bc6aa7a92c1b 1 #include "mbed.h"
cws8262 0:bc6aa7a92c1b 2
cws8262 0:bc6aa7a92c1b 3 #include "LinearMotor.h"
cws8262 1:ff295adcca59 4
cws8262 1:ff295adcca59 5 int ItvTable[200]= {5000,3219,2373,1880,1556,1327,1157,1026,921,836,765,706,654,610,572,538,507,480,456,434,414,396,380,364,350,337,325,314,303,293,284,275,267,260,252,246,239,233,227,221,216,211,206,202,197,193,189,185,181,178,174,171,168,165,162,159,156,154,151,149,146,144,142,139,137,135,133,131,129,128,126,124,122,121,119,118,116,115,113,112,110,109,108,107,105,104,103,102,101,100,98,97,96,95,94,93,92,91,91,90,89,88,87,86,85,85,84,83,82,82,81,80,79,79,78,77,77,76,75,75,74,74,73,72,72,71,71,70,70,69,69,68,68,67,67,66,66,65,65,64,64,63,63,62,62,62,61,61,60,60,60,59,59,58,58,58,57,57,57,56,56,56,55,55,54,54,54,54,53,53,53,52,52,52,51,51,51,51,50,50,50,49,49,49,49,48,48,48,48,47,47,47,47,46,46,46,46,45,45,45};
cws8262 1:ff295adcca59 6 int stepTable[200]= {2,5,9,14,20,28,37,47,58,70,83,97,112,128,145,164,184,205,227,250,274,299,325,352,381,411,442,474,507,541,576,612,649,687,727,768,810,853,897,942,988,1035,1084,1134,1185,1237,1290,1344,1399,1455,1512,1570,1630,1691,1753,1816,1880,1945,2011,2078,2146,2215,2285,2357,2430,2504,2579,2655,2733,2811,2890,2971,3053,3136,3220,3305,3391,3478,3566,3655,3746,3838,3931,4024,4119,4215,4312,4410,4509,4609,4711,4814,4918,5023,5129,5237,5346,5456,5566,5677,5789,5903,6018,6134,6252,6370,6489,6609,6731,6853,6976,7101,7228,7355,7483,7613,7743,7875,8008,8141,8276,8411,8548,8687,8826,8967,9108,9251,9394,9539,9684,9831,9978,10127,10276,10428,10580,10734,10888,11044,11200,11359,11518,11679,11840,12001,12165,12329,12496,12663,12830,12999,13168,13340,13512,13684,13859,14034,14209,14388,14567,14746,14928,15110,15295,15480,15665,15850,16039,16228,16417,16609,16801,16993,17189,17385,17581,17777,17977,18177,18377,18581,18785,18989,19193,19401,19609,19817,20025,20238,20451,20664,20877,21094,21311,21528,21745,21967,22189,22411};
cws8262 1:ff295adcca59 7
cws8262 1:ff295adcca59 8
cws8262 1:ff295adcca59 9 Serial pc(SERIAL_TX, SERIAL_RX);
cws8262 0:bc6aa7a92c1b 10
cws8262 1:ff295adcca59 11 //0.00225mm/step
cws8262 1:ff295adcca59 12 //500usec=4.5mm/sec
cws8262 1:ff295adcca59 13 //45usec=50mm/sec
cws8262 1:ff295adcca59 14 LinearMotor lm(PA_7,PA_6,PA_5,PA_0);
cws8262 1:ff295adcca59 15 void move(double dis, double spd);
cws8262 1:ff295adcca59 16 void init(void);
cws8262 1:ff295adcca59 17
cws8262 2:81a944155520 18 void pause(void);
cws8262 2:81a944155520 19 InterruptIn psw(PA_8);
cws8262 2:81a944155520 20 DigitalIn psw_(PA_8);
cws8262 1:ff295adcca59 21 int main() {
cws8262 2:81a944155520 22
cws8262 2:81a944155520 23 psw_.mode(PullUp);
cws8262 2:81a944155520 24 pc.baud(230400);
cws8262 2:81a944155520 25 if(psw_.read()) pc.printf("\n\rPause.... ");
cws8262 2:81a944155520 26 while(psw_.read());
cws8262 2:81a944155520 27 pc.printf("Start");
cws8262 2:81a944155520 28 wait_ms(20);
cws8262 1:ff295adcca59 29
cws8262 2:81a944155520 30 psw.rise(&pause);
cws8262 1:ff295adcca59 31 lm.st=1;
cws8262 1:ff295adcca59 32 wait_ms(500);
cws8262 1:ff295adcca59 33 init();
cws8262 1:ff295adcca59 34 wait_ms(500);
cws8262 0:bc6aa7a92c1b 35 while(1) {
cws8262 1:ff295adcca59 36 move(50,10);
cws8262 1:ff295adcca59 37 wait_ms(200);
cws8262 1:ff295adcca59 38 move(-50,10);
cws8262 1:ff295adcca59 39 wait_ms(200);
cws8262 0:bc6aa7a92c1b 40 }
cws8262 0:bc6aa7a92c1b 41 }
cws8262 1:ff295adcca59 42
cws8262 1:ff295adcca59 43
cws8262 1:ff295adcca59 44 void move(double dis, double spd){//spd mm/sec
cws8262 1:ff295adcca59 45 pc.printf("Moving %10fmm at %10fmm/sec... ",dis,spd);
cws8262 1:ff295adcca59 46 int j=0;
cws8262 1:ff295adcca59 47 int crntDly=5000;
cws8262 1:ff295adcca59 48 int i;
cws8262 1:ff295adcca59 49
cws8262 1:ff295adcca59 50 if (dis>0)lm.dir=1;
cws8262 1:ff295adcca59 51 else{
cws8262 1:ff295adcca59 52 lm.dir=0;
cws8262 1:ff295adcca59 53 dis=-dis;
cws8262 1:ff295adcca59 54 }
cws8262 1:ff295adcca59 55
cws8262 1:ff295adcca59 56 int stepDly=(int)(0.5+2250/spd);
cws8262 1:ff295adcca59 57 int step=(int)(0.5+dis/0.00225);
cws8262 1:ff295adcca59 58 if (stepDly>=ItvTable[0]){
cws8262 1:ff295adcca59 59 for(i=0;i<step;i++){
cws8262 1:ff295adcca59 60 lm.pulse=!lm.pulse;
cws8262 1:ff295adcca59 61 wait_us(stepDly);
cws8262 1:ff295adcca59 62 }
cws8262 1:ff295adcca59 63 }
cws8262 1:ff295adcca59 64 else{
cws8262 1:ff295adcca59 65 int ihigh=0;
cws8262 1:ff295adcca59 66 for(i=0;i<(int)(step/2);i++){
cws8262 1:ff295adcca59 67 lm.pulse=!lm.pulse;
cws8262 1:ff295adcca59 68 if(j>=200 || crntDly<=stepDly){crntDly=stepDly;}
cws8262 1:ff295adcca59 69 else if(i<stepTable[j]){crntDly=ItvTable[j];}
cws8262 1:ff295adcca59 70 else {j++;ihigh=i;}
cws8262 1:ff295adcca59 71 wait_us(crntDly);
cws8262 1:ff295adcca59 72 }
cws8262 1:ff295adcca59 73 for(i=(int)(step/2);i>0;i--){
cws8262 1:ff295adcca59 74 lm.pulse=!lm.pulse;
cws8262 1:ff295adcca59 75 if(i>=ihigh){crntDly=stepDly;}
cws8262 1:ff295adcca59 76 else if(j<=0 || crntDly>=ItvTable[0]){crntDly=ItvTable[0];}
cws8262 1:ff295adcca59 77 else if(i>=stepTable[j]){crntDly=ItvTable[j];}
cws8262 1:ff295adcca59 78 else {j--;}
cws8262 1:ff295adcca59 79 wait_us(crntDly);
cws8262 1:ff295adcca59 80 }
cws8262 1:ff295adcca59 81 }
cws8262 1:ff295adcca59 82 pc.printf("Complete\n\r");
cws8262 1:ff295adcca59 83 }
cws8262 1:ff295adcca59 84
cws8262 1:ff295adcca59 85
cws8262 1:ff295adcca59 86 void init(void){
cws8262 1:ff295adcca59 87 lm.dir=0;
cws8262 1:ff295adcca59 88 int i=0;
cws8262 1:ff295adcca59 89 int j=0;
cws8262 1:ff295adcca59 90 int crntDly=5000;
cws8262 1:ff295adcca59 91 int stepDly=(int)(0.5+2250/10);
cws8262 1:ff295adcca59 92 pc.printf("\n\rInitializing... ");
cws8262 1:ff295adcca59 93 while(lm.limit==0){
cws8262 1:ff295adcca59 94 lm.pulse=!lm.pulse;
cws8262 1:ff295adcca59 95 if(j>=200 || crntDly<=stepDly){crntDly=stepDly;}
cws8262 1:ff295adcca59 96 else if(i<stepTable[j]){crntDly=ItvTable[j];}
cws8262 1:ff295adcca59 97 else {j++;}
cws8262 1:ff295adcca59 98 wait_us(crntDly);
cws8262 1:ff295adcca59 99 i++;
cws8262 1:ff295adcca59 100 }
cws8262 1:ff295adcca59 101 pc.printf("Complete\n\r");
cws8262 2:81a944155520 102 }
cws8262 2:81a944155520 103
cws8262 2:81a944155520 104 void pause(void){
cws8262 2:81a944155520 105 psw.disable_irq();
cws8262 2:81a944155520 106 wait_ms(20);
cws8262 2:81a944155520 107 pc.printf("\n\rPause....");
cws8262 2:81a944155520 108 while(psw_.read());
cws8262 2:81a944155520 109 pc.printf(" Resume\n\r");
cws8262 2:81a944155520 110 psw.enable_irq();
cws8262 1:ff295adcca59 111 }