モータ同定用プログラム

Dependencies:   mbed QEI motordriver SDFileSystem Encoder

Committer:
porizou3
Date:
Mon Mar 18 04:48:40 2019 +0000
Revision:
0:2a0d9ec15bb4
firstcommit;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
porizou3 0:2a0d9ec15bb4 1 #include "mbed.h"
porizou3 0:2a0d9ec15bb4 2 #include "Encoder.h"
porizou3 0:2a0d9ec15bb4 3 #include "SDFileSystem.h"
porizou3 0:2a0d9ec15bb4 4 #include "motordriver.h"
porizou3 0:2a0d9ec15bb4 5
porizou3 0:2a0d9ec15bb4 6 #define SAMPLETIME 0.001
porizou3 0:2a0d9ec15bb4 7
porizou3 0:2a0d9ec15bb4 8 SDFileSystem sd(p5, p6, p7, p8, "sd"); // the pinout on the mbed Cool Components workshop board
porizou3 0:2a0d9ec15bb4 9
porizou3 0:2a0d9ec15bb4 10 Serial pc(USBTX, USBRX); // tx, rx
porizou3 0:2a0d9ec15bb4 11
porizou3 0:2a0d9ec15bb4 12 Encoder Enc(p21, p22, 12, 0.0001, 0.001);
porizou3 0:2a0d9ec15bb4 13 Motor motor(p25 , p23 , p24 , 10000);
porizou3 0:2a0d9ec15bb4 14
porizou3 0:2a0d9ec15bb4 15 DigitalOut led1(LED1);
porizou3 0:2a0d9ec15bb4 16 DigitalOut led2(LED2);
porizou3 0:2a0d9ec15bb4 17
porizou3 0:2a0d9ec15bb4 18 Ticker timer;
porizou3 0:2a0d9ec15bb4 19 FILE* fp;
porizou3 0:2a0d9ec15bb4 20
porizou3 0:2a0d9ec15bb4 21 double Velocity[1000] = { 0 };
porizou3 0:2a0d9ec15bb4 22 double Time[1000] = { 0 };
porizou3 0:2a0d9ec15bb4 23
porizou3 0:2a0d9ec15bb4 24 double t = 0.0;
porizou3 0:2a0d9ec15bb4 25
porizou3 0:2a0d9ec15bb4 26 int n = 0;
porizou3 0:2a0d9ec15bb4 27
porizou3 0:2a0d9ec15bb4 28 void SDwrite() {
porizou3 0:2a0d9ec15bb4 29 double velocity = -Enc.getVelocity();
porizou3 0:2a0d9ec15bb4 30
porizou3 0:2a0d9ec15bb4 31 Velocity[n] = velocity;
porizou3 0:2a0d9ec15bb4 32 Time[n] = t;
porizou3 0:2a0d9ec15bb4 33
porizou3 0:2a0d9ec15bb4 34 n += 1;
porizou3 0:2a0d9ec15bb4 35 t += SAMPLETIME;
porizou3 0:2a0d9ec15bb4 36 }
porizou3 0:2a0d9ec15bb4 37
porizou3 0:2a0d9ec15bb4 38 int main() {
porizou3 0:2a0d9ec15bb4 39
porizou3 0:2a0d9ec15bb4 40 pc.baud(115200);
porizou3 0:2a0d9ec15bb4 41
porizou3 0:2a0d9ec15bb4 42 led2 = 1;
porizou3 0:2a0d9ec15bb4 43 fp = fopen("/sd/motor.csv", "w");
porizou3 0:2a0d9ec15bb4 44 if(fp == NULL) {
porizou3 0:2a0d9ec15bb4 45 pc.printf("Could not open file for write\n");
porizou3 0:2a0d9ec15bb4 46 }
porizou3 0:2a0d9ec15bb4 47
porizou3 0:2a0d9ec15bb4 48 timer.attach(&SDwrite, SAMPLETIME);
porizou3 0:2a0d9ec15bb4 49
porizou3 0:2a0d9ec15bb4 50 motor.rotate(1.0);
porizou3 0:2a0d9ec15bb4 51
porizou3 0:2a0d9ec15bb4 52 while(1) {
porizou3 0:2a0d9ec15bb4 53 led1 = !led1;
porizou3 0:2a0d9ec15bb4 54 pc.printf("Velocity: %5.2f [rad/s]\n\r", -Enc.getVelocity());
porizou3 0:2a0d9ec15bb4 55 wait(0.0001);
porizou3 0:2a0d9ec15bb4 56 if(t > 0.9) break;
porizou3 0:2a0d9ec15bb4 57 }
porizou3 0:2a0d9ec15bb4 58 timer.detach();
porizou3 0:2a0d9ec15bb4 59
porizou3 0:2a0d9ec15bb4 60 motor.rotate(0.0);
porizou3 0:2a0d9ec15bb4 61 led2 = 0;
porizou3 0:2a0d9ec15bb4 62 led1 = 0;
porizou3 0:2a0d9ec15bb4 63
porizou3 0:2a0d9ec15bb4 64 for( int i = 0; i < n; i++) {
porizou3 0:2a0d9ec15bb4 65 fprintf(fp,"%f,%f\n",Time[i],Velocity[i]);
porizou3 0:2a0d9ec15bb4 66 }
porizou3 0:2a0d9ec15bb4 67
porizou3 0:2a0d9ec15bb4 68
porizou3 0:2a0d9ec15bb4 69 fclose(fp);
porizou3 0:2a0d9ec15bb4 70
porizou3 0:2a0d9ec15bb4 71 }