속도 테스트2 With class, No pid - suakii/oddMotorStudy GitHub Wiki

이번에는 속도 제어를 클래스로 테스팅한 것입니다.

/*
 * Speed Test using Class
 * 
 * [email protected]
 */

#include "Motor.h"
#include "Encoder.h"

#include <MsTimer2.h>

int encoderA = 2;
int encoderB = 4;
long deltaT = 100000;//millisecond
int ticksPerRev = 2100;
int motorPlus = 5;//아두이노5번핀 -- 모터 드라이버의 A-1A                      
int motorMinus = 6;//아두이노 6번핀 --모터 드라이버의 A-1B  
Motor lhMotor(motorPlus, motorMinus);
Encoder lhEncoder(encoderA, encoderB, deltaT,ticksPerRev);

int state = 0;
unsigned long pre_time = millis();
unsigned long pre_time_delay = millis();
int  pwm = 0;
int motorSpeed;


void setup() {
    Serial.begin(115200);//시리얼로 값을 보내기 위한 작업
    attachInterrupt(0, readLHEncoder, CHANGE);
}
void loop() {
   

 /*
  2초마다 pwm value를 높이면서 모터의 목표 속도를 증가시키고 있음.
  여기에서 목표 속도란 얼밀히 말하면 m/s, rad/s 등이 아닌 0~255 사이의 pwm value임.
  */
  switch(state)
  {
    case 0:
      if (millis()-pre_time_delay >= 2000)
      {
        pre_time_delay = millis();
        state = 1;
        pwm = 50;
        lhMotor.setFwd(pwm);        
      }
      break;

    case 1:
      if (millis()-pre_time_delay >= 2000)
      {
        pre_time_delay = millis();
        state = 2;
        pwm = 100;
        lhMotor.setFwd(pwm);        
    }
      break;

    case 2:
      if (millis()-pre_time_delay >= 2000)
      {
        pre_time_delay = millis();
        state = 3;
        pwm = 150;
        lhMotor.setFwd(pwm);        
    }
      break;
    case 3:
      if (millis()-pre_time_delay >= 2000)
      {
        pre_time_delay = millis();
        state = 4;
        pwm = 200;
        lhMotor.setFwd(pwm);        
    }
      break;
    case 4:
     if (millis()-pre_time_delay >= 2000)
      {
        pre_time_delay = millis();
        state = 5;
        pwm = 250;
        lhMotor.setFwd(pwm);        
    }
      break;
       case 5:
      if (millis()-pre_time_delay >= 2000)
      {
        pre_time_delay = millis();
        state = 0;
        pwm = 0;
        lhMotor.setFwd(pwm);        
    }
      break;    
  }
	//100ms 당  측정된 회전수 값을 시리얼로 전송
	//즉 셋팅한 pwm value와 실제 회전수의 관계를 보기 위한 것임.
  if (millis()-pre_time >= 100)
  {
    pre_time = millis();
	  motorSpeed = lhEncoder.getSpeed();//속도의 정의를 100ms당 회전수로 정의
	  Serial.print(pwm);
    Serial.print(" ");    
    Serial.println(motorSpeed);    
  }
}

// updates the left hand encoder when a left hand encoder event is triggered
void readLHEncoder()
{
  lhEncoder.updateCount();
}

실행결과:

자세한 코드는 다음과 같습니다.

https://github.com/suakii/oddMotorStudy/tree/master/Chapter4_SpeedTestClass/SpeedTestClass

⚠️ **GitHub.com Fallback** ⚠️