M5StackでDCモーター制御

M5StackでのPWM制御はArduinoとは違うようなので記録。

① PWMのセットアップ(ledcSetup())を行う

② PWMの制御ピンを論理チャネルとコンバイン(ledcAttachPin())する

③ PWM制御信号を出力(ledcWrite())する

DCモーターの回転方向とブレーキを決める信号は通常のdigitalWrite()で実行。

/#include <m5stack.h>

const uint32_t PWM_Hz = 2000; // PWM freq.
const uint8_t PWM_level = 8;  // PWM resolution 8bit(1~256)
const uint8_t PWM_CH = 1;     // PWM channel

int pwm_a = 2;
int fw_a = 16;
int rv_a = 17;
int pwm_b = 26;
int fw_b = 5;
int rv_b = 25;

void setup() {
  M5.begin();
  M5.Power.begin();

  pinMode(pwm_b, OUTPUT);
  pinMode(fw_b, OUTPUT);
  pinMode(rv_b, OUTPUT);

  // set PWM_CH & resolution
  ledcSetup(PWM_CH, PWM_Hz, PWM_level);
  // combine PWM control pin to PWM_CH
  ledcAttachPin(pwm_b, PWM_CH);
}

void loop() {
  M5.update();

  if (M5.BtnA.wasPressed())
  {
    // PWM duty 0.25(64/256)
    ledcWrite(PWM_CH,128);
    digitalWrite(fw_b, LOW);
    digitalWrite(rv_b, HIGH);
  }
  else if (M5.BtnC.wasPressed())
  {
    // stop
    ledcWrite(PWM_CH,0);
  }

  delay(10); 
}

DIOのピンアサインは以下の通りです。M5StackはArduinoと違ってDIOの本数が限定させるので、他の信号と重複するのは致し方なし。

 

 

admin