Dependencies:   mbed SpeedController2_25 ros_lib_kinetic

main.cpp

Committer:
yuki0701
Date:
2019-11-16
Revision:
4:46c10d34af27
Parent:
3:e7807f60c9bf
Child:
5:fe91d31db27e

File content as of revision 4:46c10d34af27:

//CAN通信で受け取った(double)rotate‗1~rotate‗3に対し、実際に回転数制御を行う
#include "mbed.h"
#include "EC.h" //Encoderライブラリをインクルード
#include "SpeedController.h"    //SpeedControlライブラリをインクルード
#include "can.h"
#define RESOLUTION 512  //分解能
#define BASIC_SPEED 40   //動確用
//#define TEST_DUTY 0.3   //動確用


Ec4multi EC_1(p16,p15,RESOLUTION);
Ec4multi EC_2(p18,p17,RESOLUTION);
//Ec4multi EC_1(p15,p16,RESOLUTION);
//Ec4multi EC_2(p17,p18,RESOLUTION);

SpeedControl motor_1(p21,p22,50,EC_1);
SpeedControl motor_2(p24,p23,50,EC_2);
//SpeedControl motor_1(p21,p22,50,EC_1);
//SpeedControl motor_2(p24,p23,50,EC_2);

Ticker motor_tick;  //角速度計算用ticker
Serial pc(USBTX,USBRX);

Timer timer;


int j=0;
double rotate_1=40,rotate_2=40;
//double motor1_omega[1000]= {},motor2_omega[1000]= {},time_when[1000];
//int motor1_count[1000]= {},motor2_count[1000]= {};

void CalOmega()
{
    //motor1_count[j]=EC_1.getCount();
    //motor2_count[j]=EC_2.getCount();
    EC_1.calOmega();
    EC_2.calOmega();
    //motor1_omega[j]=EC_1.getOmega();
    //motor2_omega[j]=EC_2.getOmega();
//    time_when[j]=EC_1.timer_.read();
    if(rotate_1==0) motor_1.stop();
    else motor_1.Sc(mt_out1);
    if(rotate_2==0) motor_2.stop();
    else motor_2.Sc(mt_out2);

    j++;
}
int main()
{
    UserLoopSetting_can();
    motor_1.period_us(50);
    motor_2.period_us(50);
    motor_1.setEquation(0.0429,0.05,0.0429,0.05);    //求めたC,Dの値を設定
    motor_2.setEquation(0.0429,0.05,0.0429,0.05);    //求めたC,Dの値を設定
    motor_1.setPDparam(0,0.0);  //PIDの係数を設定
    motor_2.setPDparam(0,0.0);  //PIDの係数を設定
    motor_tick.attach(&CalOmega,0.05);

    int k = 0;
    
    while(1) {
        // rotate_1 = mt_out1;
//        rotate_2 = mt_out2;
    
        if(k>100){
            printf("\nloop\n\n\r");
            k=0;
        }
        k++;
    }
    printf("finish\n\r");
}