ロボステ6期 / Mbed 2 deprecated PR_test_3w

Dependencies:   mbed SpeedController

Committer:
aoikoizumi
Date:
Fri Nov 08 05:23:55 2019 +0000
Revision:
1:0e8ec231cb2f
Parent:
0:6db935b161f8
Child:
2:c4e456559941
2019.11.8

Who changed what in which revision?

UserRevisionLine numberNew contents of line
aoikoizumi 0:6db935b161f8 1 //CAN通信で受け取った(double)rotate‗1~rotate‗3に対し、実際に回転数制御を行う
aoikoizumi 0:6db935b161f8 2 #include "mbed.h"
aoikoizumi 0:6db935b161f8 3 #include "EC.h" //Encoderライブラリをインクルード
aoikoizumi 0:6db935b161f8 4 #include "SpeedController.h" //SpeedControlライブラリをインクルード
aoikoizumi 0:6db935b161f8 5 #define RESOLUTION 512 //分解能
aoikoizumi 0:6db935b161f8 6 //#define BASIC_SPEED 1 //動確用
aoikoizumi 0:6db935b161f8 7 //#define TEST_DUTY 0.3 //動確用
aoikoizumi 0:6db935b161f8 8
aoikoizumi 0:6db935b161f8 9
aoikoizumi 0:6db935b161f8 10 Ec4multi EC_1(p15,p16,RESOLUTION);
aoikoizumi 0:6db935b161f8 11 Ec4multi EC_2(p17,p18,RESOLUTION);
aoikoizumi 0:6db935b161f8 12
aoikoizumi 0:6db935b161f8 13 SpeedControl motor_1(p21,p22,50,EC_1);
aoikoizumi 0:6db935b161f8 14 SpeedControl motor_2(p23,p24,50,EC_2);
aoikoizumi 0:6db935b161f8 15
aoikoizumi 0:6db935b161f8 16 Ticker motor_tick; //角速度計算用ticker
aoikoizumi 0:6db935b161f8 17 Serial pc(USBTX,USBRX);
aoikoizumi 0:6db935b161f8 18
aoikoizumi 1:0e8ec231cb2f 19 Timer timer;
aoikoizumi 1:0e8ec231cb2f 20
aoikoizumi 1:0e8ec231cb2f 21
aoikoizumi 1:0e8ec231cb2f 22 int j=0;
aoikoizumi 1:0e8ec231cb2f 23 double rotate_1=0,rotate_2=0;
aoikoizumi 1:0e8ec231cb2f 24 double motor1_omega[1000]={},motor2_omega[1000]={},time_when[1000];
aoikoizumi 1:0e8ec231cb2f 25 int motor1_count[1000]={},motor2_count[1000]={};
aoikoizumi 1:0e8ec231cb2f 26
aoikoizumi 1:0e8ec231cb2f 27 void CalOmega()
aoikoizumi 1:0e8ec231cb2f 28 {
aoikoizumi 1:0e8ec231cb2f 29 motor1_count[j]=EC_1.getCount();
aoikoizumi 1:0e8ec231cb2f 30 motor1_omega[j]=EC_1.getOmega();
aoikoizumi 1:0e8ec231cb2f 31 motor2_count[j]=EC_2.getCount();
aoikoizumi 1:0e8ec231cb2f 32 motor2_omega[j]=EC_2.getOmega();
aoikoizumi 1:0e8ec231cb2f 33 // time_when[j]=EC_1.timer_.read();
aoikoizumi 1:0e8ec231cb2f 34 if(rotate_1==0) motor_1.stop();
aoikoizumi 1:0e8ec231cb2f 35 else motor_1.Sc(rotate_1);
aoikoizumi 1:0e8ec231cb2f 36 if(rotate_2==0) motor_2.stop();
aoikoizumi 1:0e8ec231cb2f 37 else motor_2.Sc(rotate_2);
aoikoizumi 1:0e8ec231cb2f 38 j++;
aoikoizumi 1:0e8ec231cb2f 39 }
aoikoizumi 0:6db935b161f8 40
aoikoizumi 0:6db935b161f8 41 int main()
aoikoizumi 0:6db935b161f8 42 {
aoikoizumi 0:6db935b161f8 43 motor_1.period_us(50);
aoikoizumi 0:6db935b161f8 44 motor_2.period_us(50);
aoikoizumi 0:6db935b161f8 45 motor_1.setEquation(0.322,0.08,0,0.0100); //求めたC,Dの値を設定
aoikoizumi 0:6db935b161f8 46 motor_2.setEquation(0.0302,0.0755,-0.0241,0.1301); //求めたC,Dの値を設定
aoikoizumi 0:6db935b161f8 47 motor_1.setPDparam(0,0.0); //PIDの係数を設定
aoikoizumi 0:6db935b161f8 48 motor_2.setPDparam(0,0.0); //PIDの係数を設定
aoikoizumi 1:0e8ec231cb2f 49 motor_tick.attach(&CalOmega,0.05);
aoikoizumi 0:6db935b161f8 50
aoikoizumi 0:6db935b161f8 51 while(1) {
aoikoizumi 1:0e8ec231cb2f 52
aoikoizumi 1:0e8ec231cb2f 53 if(pc.readable()) {
aoikoizumi 1:0e8ec231cb2f 54 char sel=pc.getc();
aoikoizumi 1:0e8ec231cb2f 55 if(sel=='q') {
aoikoizumi 1:0e8ec231cb2f 56 for(int i=0; i<1000; i++) {
aoikoizumi 0:6db935b161f8 57
aoikoizumi 1:0e8ec231cb2f 58 // pc.printf("%f ",time_when[i]);
aoikoizumi 1:0e8ec231cb2f 59 pc.printf("%f,%f ",motor1_omega[i],motor2_omega[i]);
aoikoizumi 1:0e8ec231cb2f 60 pc.printf("%d,%d\r\n",motor1_count[i],motor2_count[i]);
aoikoizumi 1:0e8ec231cb2f 61 }
aoikoizumi 1:0e8ec231cb2f 62 }
aoikoizumi 0:6db935b161f8 63 }
aoikoizumi 0:6db935b161f8 64 }
aoikoizumi 0:6db935b161f8 65 }