![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
Program wich pilot a step motor board.
Dplct_Lin_1_3_2.cpp@0:b031f05749d0, 2014-06-30 (annotated)
- Committer:
- dcharala
- Date:
- Mon Jun 30 11:54:00 2014 +0000
- Revision:
- 0:b031f05749d0
This programm permit to drive a specific card forstep motors
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
dcharala | 0:b031f05749d0 | 1 | #include "mbed.h" |
dcharala | 0:b031f05749d0 | 2 | |
dcharala | 0:b031f05749d0 | 3 | #include <sstream> |
dcharala | 0:b031f05749d0 | 4 | #include <string> |
dcharala | 0:b031f05749d0 | 5 | // Version 1.0 : Fait uniquement marcher les moteurs d'une position à une autre donnée en nb d'impulsion |
dcharala | 0:b031f05749d0 | 6 | // Version 1.1.0 : non utilisation du PWM mais du mode ticker pour piloter le moteur |
dcharala | 0:b031f05749d0 | 7 | //validation 1.1 : Rajout d'une rampe sur le pin de control du moteur en 500ms, et gestion du pin par ticker au lieu d'une PWM |
dcharala | 0:b031f05749d0 | 8 | // fonction stop? |
dcharala | 0:b031f05749d0 | 9 | |
dcharala | 0:b031f05749d0 | 10 | // Version 1.2.0 : integration du code QEI(quadrature encoder input) , nécessiste 2 ports : pin 15 et 16 |
dcharala | 0:b031f05749d0 | 11 | // position transformé directement en cm |
dcharala | 0:b031f05749d0 | 12 | |
dcharala | 0:b031f05749d0 | 13 | // Version 1.3 : mesure de temps entre impulsion + résolution encodeur 1/800 e de tour au lieu de 1/400e |
dcharala | 0:b031f05749d0 | 14 | |
dcharala | 0:b031f05749d0 | 15 | // version 1.3.2 : envoi de la position réelle |
dcharala | 0:b031f05749d0 | 16 | |
dcharala | 0:b031f05749d0 | 17 | //A little test in order to slipt a string in two part, as following : |
dcharala | 0:b031f05749d0 | 18 | // "This string" => arg[0]="This" arg[1]="string" |
dcharala | 0:b031f05749d0 | 19 | // After a test with split |
dcharala | 0:b031f05749d0 | 20 | |
dcharala | 0:b031f05749d0 | 21 | |
dcharala | 0:b031f05749d0 | 22 | |
dcharala | 0:b031f05749d0 | 23 | //This programm is designed in order to move on a z-axis a device by a step motot |
dcharala | 0:b031f05749d0 | 24 | // a card sold by selectronic controlling a step motor through a L297 and a L6203 from ST |
dcharala | 0:b031f05749d0 | 25 | //see: |
dcharala | 0:b031f05749d0 | 26 | //http://www.selectronic.fr/c/robotique-moteurs-accessoires/modules-de-commande/commandes-de-moteur-pas-a-pas/carte-de-commande-pour-moteur-pas-a-pas-a-l6203-version-montee.html |
dcharala | 0:b031f05749d0 | 27 | //Ref. 6950-11 |
dcharala | 0:b031f05749d0 | 28 | |
dcharala | 0:b031f05749d0 | 29 | //Config LCD |
dcharala | 0:b031f05749d0 | 30 | //TextLCD lcd(p14,p19,p24,p23,p22,p21); //rs, e, d4-d7 |
dcharala | 0:b031f05749d0 | 31 | |
dcharala | 0:b031f05749d0 | 32 | |
dcharala | 0:b031f05749d0 | 33 | //config LEDS |
dcharala | 0:b031f05749d0 | 34 | DigitalOut led1(LED1); |
dcharala | 0:b031f05749d0 | 35 | DigitalOut led2(LED2); |
dcharala | 0:b031f05749d0 | 36 | DigitalOut led3(LED3); |
dcharala | 0:b031f05749d0 | 37 | DigitalOut led4(LED4); |
dcharala | 0:b031f05749d0 | 38 | |
dcharala | 0:b031f05749d0 | 39 | //In some Future version : |
dcharala | 0:b031f05749d0 | 40 | |
dcharala | 0:b031f05749d0 | 41 | DigitalOut PinEnable(p17); |
dcharala | 0:b031f05749d0 | 42 | DigitalOut PinControl(p18); |
dcharala | 0:b031f05749d0 | 43 | |
dcharala | 0:b031f05749d0 | 44 | DigitalOut Pin_HF_Pas(p27); |
dcharala | 0:b031f05749d0 | 45 | |
dcharala | 0:b031f05749d0 | 46 | // QEI Voie A et B |
dcharala | 0:b031f05749d0 | 47 | InterruptIn VoieA(p16); |
dcharala | 0:b031f05749d0 | 48 | InterruptIn VoieB(p15); |
dcharala | 0:b031f05749d0 | 49 | Timer t; |
dcharala | 0:b031f05749d0 | 50 | //PwmOut Clock(p25); // CHANGE :: tranforn in Digital OUt and put a ticker on |
dcharala | 0:b031f05749d0 | 51 | DigitalOut Clock(p25); |
dcharala | 0:b031f05749d0 | 52 | Ticker Clocker; |
dcharala | 0:b031f05749d0 | 53 | Timeout flipper; |
dcharala | 0:b031f05749d0 | 54 | DigitalOut PinDrct(p28); |
dcharala | 0:b031f05749d0 | 55 | DigitalOut PinReset(p26); |
dcharala | 0:b031f05749d0 | 56 | //InterruptIn PinCount(p29); //counter of PWM so it's count the number of step of the motor. pin free from 1.1 version |
dcharala | 0:b031f05749d0 | 57 | |
dcharala | 0:b031f05749d0 | 58 | /*union FloatBytes { |
dcharala | 0:b031f05749d0 | 59 | char c[4]; |
dcharala | 0:b031f05749d0 | 60 | float f; |
dcharala | 0:b031f05749d0 | 61 | |
dcharala | 0:b031f05749d0 | 62 | |
dcharala | 0:b031f05749d0 | 63 | };*/ |
dcharala | 0:b031f05749d0 | 64 | |
dcharala | 0:b031f05749d0 | 65 | float speed=5e-3; // speed is the period of the motot pulse by default the frequency is 200Hz => 1.2 cm/s |
dcharala | 0:b031f05749d0 | 66 | |
dcharala | 0:b031f05749d0 | 67 | // Variables of position : given here vers 1.0 like an int af after 1.1 in cm as an float. |
dcharala | 0:b031f05749d0 | 68 | float NewPos=0.0; |
dcharala | 0:b031f05749d0 | 69 | //int position=0; |
dcharala | 0:b031f05749d0 | 70 | float dir=0.0; |
dcharala | 0:b031f05749d0 | 71 | int RealPosition=0; |
dcharala | 0:b031f05749d0 | 72 | float p=1.0/200.0*1.2; |
dcharala | 0:b031f05749d0 | 73 | int run=0; |
dcharala | 0:b031f05749d0 | 74 | int Stop=0; |
dcharala | 0:b031f05749d0 | 75 | float positionCm=0;// positionCm=position/200*1.2 |
dcharala | 0:b031f05749d0 | 76 | float RealPositionCm=0;// RealPositionCm=RealPosition/400*1.2 |
dcharala | 0:b031f05749d0 | 77 | int i=0; |
dcharala | 0:b031f05749d0 | 78 | int count=0; |
dcharala | 0:b031f05749d0 | 79 | |
dcharala | 0:b031f05749d0 | 80 | Serial pc(USBTX,USBRX); //tx, rx |
dcharala | 0:b031f05749d0 | 81 | |
dcharala | 0:b031f05749d0 | 82 | //QEI variables : |
dcharala | 0:b031f05749d0 | 83 | |
dcharala | 0:b031f05749d0 | 84 | float periode=0; |
dcharala | 0:b031f05749d0 | 85 | int k=0; |
dcharala | 0:b031f05749d0 | 86 | float drpm=1.0/800.0*1.2; |
dcharala | 0:b031f05749d0 | 87 | float velocity=0; //in mm/s |
dcharala | 0:b031f05749d0 | 88 | |
dcharala | 0:b031f05749d0 | 89 | |
dcharala | 0:b031f05749d0 | 90 | float array_time_pos[40]; |
dcharala | 0:b031f05749d0 | 91 | |
dcharala | 0:b031f05749d0 | 92 | float array_time_pulse[14]; |
dcharala | 0:b031f05749d0 | 93 | |
dcharala | 0:b031f05749d0 | 94 | //************************* |
dcharala | 0:b031f05749d0 | 95 | |
dcharala | 0:b031f05749d0 | 96 | char s1[20],s2[20];// s1 and s2 will be the two arg off the string |
dcharala | 0:b031f05749d0 | 97 | // I will do just an echo as following: |
dcharala | 0:b031f05749d0 | 98 | // string1 = ... |
dcharala | 0:b031f05749d0 | 99 | //string 2 = ... |
dcharala | 0:b031f05749d0 | 100 | |
dcharala | 0:b031f05749d0 | 101 | //TO DO LIST 1.1 |
dcharala | 0:b031f05749d0 | 102 | /* |
dcharala | 0:b031f05749d0 | 103 | func POW => DONE |
dcharala | 0:b031f05749d0 | 104 | func PAS => DONE |
dcharala | 0:b031f05749d0 | 105 | func VIT => DONE |
dcharala | 0:b031f05749d0 | 106 | func DRCT => DONE |
dcharala | 0:b031f05749d0 | 107 | func ZERO => DONE |
dcharala | 0:b031f05749d0 | 108 | func POS => DONE |
dcharala | 0:b031f05749d0 | 109 | func MOVE => DONE |
dcharala | 0:b031f05749d0 | 110 | |
dcharala | 0:b031f05749d0 | 111 | |
dcharala | 0:b031f05749d0 | 112 | */ |
dcharala | 0:b031f05749d0 | 113 | //TO DO LIST 1.2 |
dcharala | 0:b031f05749d0 | 114 | /*Integration QEI : |
dcharala | 0:b031f05749d0 | 115 | Integration QEI : |
dcharala | 0:b031f05749d0 | 116 | - injection code init dans main : FAIT |
dcharala | 0:b031f05749d0 | 117 | - inclure fonction fall et rise : FAIT |
dcharala | 0:b031f05749d0 | 118 | - inclure déclaration de variables utilisées dans fall and rise :FAIT |
dcharala | 0:b031f05749d0 | 119 | - exploitation de l'information QEI dans le code : à faire |
dcharala | 0:b031f05749d0 | 120 | - non utilisation de la variable timeout t : pour l'instant à voir |
dcharala | 0:b031f05749d0 | 121 | |
dcharala | 0:b031f05749d0 | 122 | */ |
dcharala | 0:b031f05749d0 | 123 | |
dcharala | 0:b031f05749d0 | 124 | //values return by text the status of the controller |
dcharala | 0:b031f05749d0 | 125 | |
dcharala | 0:b031f05749d0 | 126 | |
dcharala | 0:b031f05749d0 | 127 | void Values() |
dcharala | 0:b031f05749d0 | 128 | { |
dcharala | 0:b031f05749d0 | 129 | int pas=Pin_HF_Pas; |
dcharala | 0:b031f05749d0 | 130 | int power=PinEnable; |
dcharala | 0:b031f05749d0 | 131 | |
dcharala | 0:b031f05749d0 | 132 | |
dcharala | 0:b031f05749d0 | 133 | pc.printf("\n\rStates\n\r"); |
dcharala | 0:b031f05749d0 | 134 | pc.printf("Half/Full %d\n",pas); //half 0 full 1 |
dcharala | 0:b031f05749d0 | 135 | pc.printf("Period_speed %f\n",speed); |
dcharala | 0:b031f05749d0 | 136 | pc.printf("Actual_position %fcm\n",positionCm); |
dcharala | 0:b031f05749d0 | 137 | pc.printf("Real_position %fcm\n",RealPositionCm); |
dcharala | 0:b031f05749d0 | 138 | pc.printf("Power %d\n@",power); |
dcharala | 0:b031f05749d0 | 139 | |
dcharala | 0:b031f05749d0 | 140 | } |
dcharala | 0:b031f05749d0 | 141 | // Moving() permit to manage the movement of the step motor |
dcharala | 0:b031f05749d0 | 142 | void compt_rise_A(void) |
dcharala | 0:b031f05749d0 | 143 | { |
dcharala | 0:b031f05749d0 | 144 | |
dcharala | 0:b031f05749d0 | 145 | //t.start(); |
dcharala | 0:b031f05749d0 | 146 | if(VoieB) { |
dcharala | 0:b031f05749d0 | 147 | |
dcharala | 0:b031f05749d0 | 148 | RealPositionCm=RealPositionCm+drpm; |
dcharala | 0:b031f05749d0 | 149 | } else { |
dcharala | 0:b031f05749d0 | 150 | |
dcharala | 0:b031f05749d0 | 151 | RealPositionCm=RealPositionCm-drpm; |
dcharala | 0:b031f05749d0 | 152 | |
dcharala | 0:b031f05749d0 | 153 | } |
dcharala | 0:b031f05749d0 | 154 | |
dcharala | 0:b031f05749d0 | 155 | array_time_pos[i]=t.read(); |
dcharala | 0:b031f05749d0 | 156 | //i++; |
dcharala | 0:b031f05749d0 | 157 | } |
dcharala | 0:b031f05749d0 | 158 | |
dcharala | 0:b031f05749d0 | 159 | void compt_rise_B(void) |
dcharala | 0:b031f05749d0 | 160 | { |
dcharala | 0:b031f05749d0 | 161 | //t.start(); |
dcharala | 0:b031f05749d0 | 162 | if(VoieA) { |
dcharala | 0:b031f05749d0 | 163 | |
dcharala | 0:b031f05749d0 | 164 | RealPositionCm=RealPositionCm-drpm; |
dcharala | 0:b031f05749d0 | 165 | } else { |
dcharala | 0:b031f05749d0 | 166 | |
dcharala | 0:b031f05749d0 | 167 | RealPositionCm=RealPositionCm+drpm; |
dcharala | 0:b031f05749d0 | 168 | |
dcharala | 0:b031f05749d0 | 169 | } |
dcharala | 0:b031f05749d0 | 170 | |
dcharala | 0:b031f05749d0 | 171 | array_time_pos[i]=t.read(); |
dcharala | 0:b031f05749d0 | 172 | //i++; |
dcharala | 0:b031f05749d0 | 173 | } |
dcharala | 0:b031f05749d0 | 174 | |
dcharala | 0:b031f05749d0 | 175 | void compt_fall_A(void) |
dcharala | 0:b031f05749d0 | 176 | { |
dcharala | 0:b031f05749d0 | 177 | // t.stop(); |
dcharala | 0:b031f05749d0 | 178 | //periode=t.read()*2; |
dcharala | 0:b031f05749d0 | 179 | // velocity=Pas/(periode*PPR*2);//in µm/s |
dcharala | 0:b031f05749d0 | 180 | |
dcharala | 0:b031f05749d0 | 181 | //t.reset(); |
dcharala | 0:b031f05749d0 | 182 | if(!VoieB) { |
dcharala | 0:b031f05749d0 | 183 | |
dcharala | 0:b031f05749d0 | 184 | RealPositionCm=RealPositionCm+drpm; |
dcharala | 0:b031f05749d0 | 185 | } else { |
dcharala | 0:b031f05749d0 | 186 | |
dcharala | 0:b031f05749d0 | 187 | RealPositionCm=RealPositionCm-drpm; |
dcharala | 0:b031f05749d0 | 188 | } |
dcharala | 0:b031f05749d0 | 189 | |
dcharala | 0:b031f05749d0 | 190 | array_time_pos[i]=t.read(); |
dcharala | 0:b031f05749d0 | 191 | //i++; |
dcharala | 0:b031f05749d0 | 192 | } |
dcharala | 0:b031f05749d0 | 193 | |
dcharala | 0:b031f05749d0 | 194 | void compt_fall_B(void) |
dcharala | 0:b031f05749d0 | 195 | { |
dcharala | 0:b031f05749d0 | 196 | // t.stop(); |
dcharala | 0:b031f05749d0 | 197 | //periode=t.read()*2; |
dcharala | 0:b031f05749d0 | 198 | // velocity=Pas/(periode*PPR*2);//in µm/s |
dcharala | 0:b031f05749d0 | 199 | |
dcharala | 0:b031f05749d0 | 200 | //t.reset(); |
dcharala | 0:b031f05749d0 | 201 | if(!VoieA) { |
dcharala | 0:b031f05749d0 | 202 | |
dcharala | 0:b031f05749d0 | 203 | RealPositionCm=RealPositionCm-drpm; |
dcharala | 0:b031f05749d0 | 204 | } else { |
dcharala | 0:b031f05749d0 | 205 | |
dcharala | 0:b031f05749d0 | 206 | RealPositionCm=RealPositionCm+drpm; |
dcharala | 0:b031f05749d0 | 207 | } |
dcharala | 0:b031f05749d0 | 208 | |
dcharala | 0:b031f05749d0 | 209 | array_time_pos[i]=t.read(); |
dcharala | 0:b031f05749d0 | 210 | //i++; |
dcharala | 0:b031f05749d0 | 211 | } |
dcharala | 0:b031f05749d0 | 212 | LocalFileSystem local("local"); // Create the local filesystem under the name "local" |
dcharala | 0:b031f05749d0 | 213 | FILE *fp = fopen("/local/out.txt", "w"); // Open "out.txt" on the local file system for writing |
dcharala | 0:b031f05749d0 | 214 | |
dcharala | 0:b031f05749d0 | 215 | |
dcharala | 0:b031f05749d0 | 216 | /*void Write() |
dcharala | 0:b031f05749d0 | 217 | { |
dcharala | 0:b031f05749d0 | 218 | int j=0; |
dcharala | 0:b031f05749d0 | 219 | fp = fopen("/local/out.txt", "w"); |
dcharala | 0:b031f05749d0 | 220 | for( j =0; j<=i ; j++ ) { |
dcharala | 0:b031f05749d0 | 221 | fprintf(fp, "%f\n",array_time_pos[j]); |
dcharala | 0:b031f05749d0 | 222 | } |
dcharala | 0:b031f05749d0 | 223 | |
dcharala | 0:b031f05749d0 | 224 | fclose(fp); |
dcharala | 0:b031f05749d0 | 225 | j=0; |
dcharala | 0:b031f05749d0 | 226 | |
dcharala | 0:b031f05749d0 | 227 | fp=fopen("/local/out_pulse.txt", "w"); |
dcharala | 0:b031f05749d0 | 228 | for( j =0; j<=k ; j++ ) { |
dcharala | 0:b031f05749d0 | 229 | fprintf(fp, "%f\n",array_time_pulse[j]); |
dcharala | 0:b031f05749d0 | 230 | } |
dcharala | 0:b031f05749d0 | 231 | fclose(fp); |
dcharala | 0:b031f05749d0 | 232 | |
dcharala | 0:b031f05749d0 | 233 | |
dcharala | 0:b031f05749d0 | 234 | |
dcharala | 0:b031f05749d0 | 235 | }*/ |
dcharala | 0:b031f05749d0 | 236 | |
dcharala | 0:b031f05749d0 | 237 | void flip(){ |
dcharala | 0:b031f05749d0 | 238 | |
dcharala | 0:b031f05749d0 | 239 | Clock=1; |
dcharala | 0:b031f05749d0 | 240 | |
dcharala | 0:b031f05749d0 | 241 | } |
dcharala | 0:b031f05749d0 | 242 | |
dcharala | 0:b031f05749d0 | 243 | void Moving() |
dcharala | 0:b031f05749d0 | 244 | { |
dcharala | 0:b031f05749d0 | 245 | if(positionCm*dir>=NewPos*dir||Stop==1) { |
dcharala | 0:b031f05749d0 | 246 | |
dcharala | 0:b031f05749d0 | 247 | Clock=1;// set the PWM at 1 so it switch off the controller at pull up |
dcharala | 0:b031f05749d0 | 248 | Clocker.detach();// this action detach the funxctio Moving() from PinCount |
dcharala | 0:b031f05749d0 | 249 | PinEnable=0; |
dcharala | 0:b031f05749d0 | 250 | pc.printf("\narrived at %fcm\nReal_position %fcm\n@",positionCm,RealPositionCm); |
dcharala | 0:b031f05749d0 | 251 | //Write(); |
dcharala | 0:b031f05749d0 | 252 | Stop=0; |
dcharala | 0:b031f05749d0 | 253 | t.stop(); |
dcharala | 0:b031f05749d0 | 254 | t.reset(); |
dcharala | 0:b031f05749d0 | 255 | k=0; |
dcharala | 0:b031f05749d0 | 256 | i=0; |
dcharala | 0:b031f05749d0 | 257 | } else { |
dcharala | 0:b031f05749d0 | 258 | Clock=0; |
dcharala | 0:b031f05749d0 | 259 | array_time_pulse[k]= t.read(); |
dcharala | 0:b031f05749d0 | 260 | //k++; |
dcharala | 0:b031f05749d0 | 261 | |
dcharala | 0:b031f05749d0 | 262 | flipper.attach_us(&flip,500); |
dcharala | 0:b031f05749d0 | 263 | if(PinDrct==1) { |
dcharala | 0:b031f05749d0 | 264 | //position++; |
dcharala | 0:b031f05749d0 | 265 | positionCm=positionCm+p; |
dcharala | 0:b031f05749d0 | 266 | } |
dcharala | 0:b031f05749d0 | 267 | if(PinDrct==0) { |
dcharala | 0:b031f05749d0 | 268 | //position--; |
dcharala | 0:b031f05749d0 | 269 | positionCm=positionCm-p; |
dcharala | 0:b031f05749d0 | 270 | } |
dcharala | 0:b031f05749d0 | 271 | } |
dcharala | 0:b031f05749d0 | 272 | |
dcharala | 0:b031f05749d0 | 273 | } |
dcharala | 0:b031f05749d0 | 274 | |
dcharala | 0:b031f05749d0 | 275 | |
dcharala | 0:b031f05749d0 | 276 | |
dcharala | 0:b031f05749d0 | 277 | |
dcharala | 0:b031f05749d0 | 278 | void POW(char p)//DONE |
dcharala | 0:b031f05749d0 | 279 | // rend "enable" l'action des moteur |
dcharala | 0:b031f05749d0 | 280 | { |
dcharala | 0:b031f05749d0 | 281 | //To be optimized later |
dcharala | 0:b031f05749d0 | 282 | if(p=='1') { |
dcharala | 0:b031f05749d0 | 283 | PinEnable=1; |
dcharala | 0:b031f05749d0 | 284 | } |
dcharala | 0:b031f05749d0 | 285 | if(p=='0') { |
dcharala | 0:b031f05749d0 | 286 | PinEnable=0; |
dcharala | 0:b031f05749d0 | 287 | } |
dcharala | 0:b031f05749d0 | 288 | } |
dcharala | 0:b031f05749d0 | 289 | |
dcharala | 0:b031f05749d0 | 290 | |
dcharala | 0:b031f05749d0 | 291 | void PAS(char t)//DONE |
dcharala | 0:b031f05749d0 | 292 | { |
dcharala | 0:b031f05749d0 | 293 | if(t=='0') {// FULL |
dcharala | 0:b031f05749d0 | 294 | Pin_HF_Pas=0; |
dcharala | 0:b031f05749d0 | 295 | p=1.0/200.0*1.2; |
dcharala | 0:b031f05749d0 | 296 | } |
dcharala | 0:b031f05749d0 | 297 | if(t=='1') { |
dcharala | 0:b031f05749d0 | 298 | Pin_HF_Pas=1;// Half |
dcharala | 0:b031f05749d0 | 299 | p=1.0/400.0*1.2; |
dcharala | 0:b031f05749d0 | 300 | } |
dcharala | 0:b031f05749d0 | 301 | |
dcharala | 0:b031f05749d0 | 302 | } |
dcharala | 0:b031f05749d0 | 303 | |
dcharala | 0:b031f05749d0 | 304 | |
dcharala | 0:b031f05749d0 | 305 | void VIT(char SpeedTxt[7])//DONE |
dcharala | 0:b031f05749d0 | 306 | { |
dcharala | 0:b031f05749d0 | 307 | speed=atof(SpeedTxt); // speed is a period of frenquency of the step motor |
dcharala | 0:b031f05749d0 | 308 | } |
dcharala | 0:b031f05749d0 | 309 | |
dcharala | 0:b031f05749d0 | 310 | |
dcharala | 0:b031f05749d0 | 311 | void DRCT(char t)//DONE |
dcharala | 0:b031f05749d0 | 312 | { |
dcharala | 0:b031f05749d0 | 313 | if(t=='0') |
dcharala | 0:b031f05749d0 | 314 | PinDrct=0; |
dcharala | 0:b031f05749d0 | 315 | if(t=='1') |
dcharala | 0:b031f05749d0 | 316 | PinDrct=1; |
dcharala | 0:b031f05749d0 | 317 | } |
dcharala | 0:b031f05749d0 | 318 | |
dcharala | 0:b031f05749d0 | 319 | |
dcharala | 0:b031f05749d0 | 320 | void ZERO()//DONE |
dcharala | 0:b031f05749d0 | 321 | { |
dcharala | 0:b031f05749d0 | 322 | positionCm=0.0; |
dcharala | 0:b031f05749d0 | 323 | |
dcharala | 0:b031f05749d0 | 324 | } |
dcharala | 0:b031f05749d0 | 325 | |
dcharala | 0:b031f05749d0 | 326 | |
dcharala | 0:b031f05749d0 | 327 | void POS(char PosTxt[7])//DONE |
dcharala | 0:b031f05749d0 | 328 | { |
dcharala | 0:b031f05749d0 | 329 | positionCm = atof(PosTxt); |
dcharala | 0:b031f05749d0 | 330 | RealPosition= positionCm; |
dcharala | 0:b031f05749d0 | 331 | |
dcharala | 0:b031f05749d0 | 332 | } |
dcharala | 0:b031f05749d0 | 333 | |
dcharala | 0:b031f05749d0 | 334 | void MOVE(char PosTxt[7])//DOING |
dcharala | 0:b031f05749d0 | 335 | { |
dcharala | 0:b031f05749d0 | 336 | float f,diff; |
dcharala | 0:b031f05749d0 | 337 | int dirdir=0; |
dcharala | 0:b031f05749d0 | 338 | // compt=0; |
dcharala | 0:b031f05749d0 | 339 | k=0; |
dcharala | 0:b031f05749d0 | 340 | i=0; |
dcharala | 0:b031f05749d0 | 341 | |
dcharala | 0:b031f05749d0 | 342 | |
dcharala | 0:b031f05749d0 | 343 | f=1/speed; |
dcharala | 0:b031f05749d0 | 344 | NewPos = atof(PosTxt); |
dcharala | 0:b031f05749d0 | 345 | diff=NewPos-positionCm; |
dcharala | 0:b031f05749d0 | 346 | diff=abs(diff); |
dcharala | 0:b031f05749d0 | 347 | if(diff>0) { |
dcharala | 0:b031f05749d0 | 348 | POW('1'); |
dcharala | 0:b031f05749d0 | 349 | if(NewPos>positionCm) { |
dcharala | 0:b031f05749d0 | 350 | PinDrct=1; |
dcharala | 0:b031f05749d0 | 351 | //position=position+2; // code non nécessaire depuis vers 1.1 |
dcharala | 0:b031f05749d0 | 352 | } else { |
dcharala | 0:b031f05749d0 | 353 | //position=position-2; // code non nécessaire depuis vers 1.1 |
dcharala | 0:b031f05749d0 | 354 | PinDrct=0; |
dcharala | 0:b031f05749d0 | 355 | } |
dcharala | 0:b031f05749d0 | 356 | dirdir=PinDrct; |
dcharala | 0:b031f05749d0 | 357 | dir=dirdir; |
dcharala | 0:b031f05749d0 | 358 | dir=dir*2.0-1.0; |
dcharala | 0:b031f05749d0 | 359 | pc.printf("\n\rPos= %f Newpos= %f \nDirection = %f\n Frequency = %f\n\r@",positionCm,NewPos,dir,f); |
dcharala | 0:b031f05749d0 | 360 | //distance of run unit ste (version 1.0) and in version 1.1 : the unit will be the cm |
dcharala | 0:b031f05749d0 | 361 | //PinCount.rise(&Moving); |
dcharala | 0:b031f05749d0 | 362 | //Clock=0.5; // switch on clock count |
dcharala | 0:b031f05749d0 | 363 | t.reset(); |
dcharala | 0:b031f05749d0 | 364 | t.start(); |
dcharala | 0:b031f05749d0 | 365 | Clocker.attach(&Moving,speed); |
dcharala | 0:b031f05749d0 | 366 | } |
dcharala | 0:b031f05749d0 | 367 | |
dcharala | 0:b031f05749d0 | 368 | } |
dcharala | 0:b031f05749d0 | 369 | |
dcharala | 0:b031f05749d0 | 370 | |
dcharala | 0:b031f05749d0 | 371 | |
dcharala | 0:b031f05749d0 | 372 | void reception() |
dcharala | 0:b031f05749d0 | 373 | { |
dcharala | 0:b031f05749d0 | 374 | //char s[]=""; |
dcharala | 0:b031f05749d0 | 375 | sprintf(s1,""); |
dcharala | 0:b031f05749d0 | 376 | sprintf(s2,""); |
dcharala | 0:b031f05749d0 | 377 | //long longueur=100000; |
dcharala | 0:b031f05749d0 | 378 | |
dcharala | 0:b031f05749d0 | 379 | if(pc.readable()) { |
dcharala | 0:b031f05749d0 | 380 | pc.scanf("%s %s",&s1,&s2); |
dcharala | 0:b031f05749d0 | 381 | |
dcharala | 0:b031f05749d0 | 382 | if (strcmp(s1,"POW")==0) { |
dcharala | 0:b031f05749d0 | 383 | POW(s2[0]); |
dcharala | 0:b031f05749d0 | 384 | pc.printf("POW\n\r@"); |
dcharala | 0:b031f05749d0 | 385 | } |
dcharala | 0:b031f05749d0 | 386 | if (strcmp(s1,"PAS")==0) { |
dcharala | 0:b031f05749d0 | 387 | PAS(s2[0]); |
dcharala | 0:b031f05749d0 | 388 | pc.printf("\n\r@"); |
dcharala | 0:b031f05749d0 | 389 | } |
dcharala | 0:b031f05749d0 | 390 | if (strcmp(s1,"VIT")==0) { |
dcharala | 0:b031f05749d0 | 391 | VIT(s2); |
dcharala | 0:b031f05749d0 | 392 | pc.printf("\n\r@"); |
dcharala | 0:b031f05749d0 | 393 | } |
dcharala | 0:b031f05749d0 | 394 | if (strcmp(s1,"DRCT")==0) { |
dcharala | 0:b031f05749d0 | 395 | DRCT(s2[0]); |
dcharala | 0:b031f05749d0 | 396 | pc.printf("\n\r@"); |
dcharala | 0:b031f05749d0 | 397 | } |
dcharala | 0:b031f05749d0 | 398 | if (strcmp(s1,"ZERO")==0) { |
dcharala | 0:b031f05749d0 | 399 | ZERO(); |
dcharala | 0:b031f05749d0 | 400 | pc.printf("\n\r@"); |
dcharala | 0:b031f05749d0 | 401 | |
dcharala | 0:b031f05749d0 | 402 | } |
dcharala | 0:b031f05749d0 | 403 | if (strcmp(s1,"STOP")==0) { |
dcharala | 0:b031f05749d0 | 404 | Stop=1; |
dcharala | 0:b031f05749d0 | 405 | |
dcharala | 0:b031f05749d0 | 406 | pc.printf("\n Stop received\r@"); |
dcharala | 0:b031f05749d0 | 407 | } |
dcharala | 0:b031f05749d0 | 408 | |
dcharala | 0:b031f05749d0 | 409 | |
dcharala | 0:b031f05749d0 | 410 | if (strcmp(s1,"MOVE")==0) { |
dcharala | 0:b031f05749d0 | 411 | MOVE(s2); |
dcharala | 0:b031f05749d0 | 412 | pc.printf("\nMoving\n\r@"); |
dcharala | 0:b031f05749d0 | 413 | |
dcharala | 0:b031f05749d0 | 414 | } |
dcharala | 0:b031f05749d0 | 415 | if (strcmp(s1,"POS")==0) { |
dcharala | 0:b031f05749d0 | 416 | //function to see array to integer or something like that |
dcharala | 0:b031f05749d0 | 417 | // in order to transform a string (s2) into an int and after a float(version 1.1) |
dcharala | 0:b031f05749d0 | 418 | float oldpos=positionCm; |
dcharala | 0:b031f05749d0 | 419 | positionCm=atof(s2); |
dcharala | 0:b031f05749d0 | 420 | RealPositionCm=positionCm; |
dcharala | 0:b031f05749d0 | 421 | count++; |
dcharala | 0:b031f05749d0 | 422 | |
dcharala | 0:b031f05749d0 | 423 | pc.printf("Old position : %f\n\rNew Position : %f\n@",oldpos,positionCm); |
dcharala | 0:b031f05749d0 | 424 | } |
dcharala | 0:b031f05749d0 | 425 | |
dcharala | 0:b031f05749d0 | 426 | if (strcmp(s1,"CONT")==0) { |
dcharala | 0:b031f05749d0 | 427 | PinControl=atoi(s2); |
dcharala | 0:b031f05749d0 | 428 | } |
dcharala | 0:b031f05749d0 | 429 | |
dcharala | 0:b031f05749d0 | 430 | if (strcmp(s1,"POS?")==0) { |
dcharala | 0:b031f05749d0 | 431 | pc.printf("\nPosition = %f cm\nRealPosition = %f cm\n\@",positionCm,RealPositionCm); |
dcharala | 0:b031f05749d0 | 432 | } |
dcharala | 0:b031f05749d0 | 433 | if (strcmp(s1,"VAL?")==0) { |
dcharala | 0:b031f05749d0 | 434 | Values(); |
dcharala | 0:b031f05749d0 | 435 | } |
dcharala | 0:b031f05749d0 | 436 | |
dcharala | 0:b031f05749d0 | 437 | |
dcharala | 0:b031f05749d0 | 438 | } |
dcharala | 0:b031f05749d0 | 439 | } |
dcharala | 0:b031f05749d0 | 440 | |
dcharala | 0:b031f05749d0 | 441 | |
dcharala | 0:b031f05749d0 | 442 | int main() |
dcharala | 0:b031f05749d0 | 443 | { |
dcharala | 0:b031f05749d0 | 444 | PinControl=0; |
dcharala | 0:b031f05749d0 | 445 | PinReset=1; //reset on 0 |
dcharala | 0:b031f05749d0 | 446 | PinDrct=1; |
dcharala | 0:b031f05749d0 | 447 | Pin_HF_Pas=0; //full step:0 Half step:1 |
dcharala | 0:b031f05749d0 | 448 | // could be programmable later if necessairly. |
dcharala | 0:b031f05749d0 | 449 | //pc.baud(115200); |
dcharala | 0:b031f05749d0 | 450 | pc.baud(921600); |
dcharala | 0:b031f05749d0 | 451 | |
dcharala | 0:b031f05749d0 | 452 | VoieA.mode(PullUp); |
dcharala | 0:b031f05749d0 | 453 | VoieA.rise(&compt_rise_A); |
dcharala | 0:b031f05749d0 | 454 | VoieA.fall(&compt_fall_A); |
dcharala | 0:b031f05749d0 | 455 | VoieB.mode(PullUp); |
dcharala | 0:b031f05749d0 | 456 | VoieB.rise(&compt_rise_B); |
dcharala | 0:b031f05749d0 | 457 | VoieB.fall(&compt_fall_B); |
dcharala | 0:b031f05749d0 | 458 | pc.printf("MBED\r\n\r@"); |
dcharala | 0:b031f05749d0 | 459 | fclose(fp); |
dcharala | 0:b031f05749d0 | 460 | |
dcharala | 0:b031f05749d0 | 461 | |
dcharala | 0:b031f05749d0 | 462 | |
dcharala | 0:b031f05749d0 | 463 | |
dcharala | 0:b031f05749d0 | 464 | |
dcharala | 0:b031f05749d0 | 465 | //PinCount.mode(PullDown); |
dcharala | 0:b031f05749d0 | 466 | positionCm=0; |
dcharala | 0:b031f05749d0 | 467 | Clock=1; |
dcharala | 0:b031f05749d0 | 468 | while(1) { |
dcharala | 0:b031f05749d0 | 469 | |
dcharala | 0:b031f05749d0 | 470 | pc.attach(&reception); |
dcharala | 0:b031f05749d0 | 471 | |
dcharala | 0:b031f05749d0 | 472 | } |
dcharala | 0:b031f05749d0 | 473 | |
dcharala | 0:b031f05749d0 | 474 | |
dcharala | 0:b031f05749d0 | 475 | } |
dcharala | 0:b031f05749d0 | 476 | |
dcharala | 0:b031f05749d0 | 477 |