Rotate the motor at the specified speed (RPM).
namespace {
constexpr uint32_t kPPR = 12;
constexpr uint32_t kReductionRation = 90;
#if defined(ARDUINO_ESP32S3_DEV)
constexpr gpio_num_t kMotor0PinPos = GPIO_NUM_42;
constexpr gpio_num_t kMotor0PinNeg = GPIO_NUM_41;
constexpr gpio_num_t kEncoder0PinA = GPIO_NUM_38;
constexpr gpio_num_t kEncoder0PinB = GPIO_NUM_37;
constexpr gpio_num_t kMotor1PinPos = GPIO_NUM_1;
constexpr gpio_num_t kMotor1PinNeg = GPIO_NUM_2;
constexpr gpio_num_t kEncoder1PinA = GPIO_NUM_40;
constexpr gpio_num_t kEncoder1PinB = GPIO_NUM_39;
constexpr gpio_num_t kMotor2PinPos = GPIO_NUM_45;
constexpr gpio_num_t kMotor2PinNeg = GPIO_NUM_48;
constexpr gpio_num_t kEncoder2PinA = GPIO_NUM_21;
constexpr gpio_num_t kEncoder2PinB = GPIO_NUM_47;
constexpr gpio_num_t kMotor3PinPos = GPIO_NUM_35;
constexpr gpio_num_t kMotor3PinNeg = GPIO_NUM_36;
constexpr gpio_num_t kEncoder3PinA = GPIO_NUM_13;
constexpr gpio_num_t kEncoder3PinB = GPIO_NUM_14;
#elif defined(ARDUINO_ESP32_DEV)
constexpr gpio_num_t kMotor0PinPos = GPIO_NUM_27;
constexpr gpio_num_t kMotor0PinNeg = GPIO_NUM_13;
constexpr gpio_num_t kEncoder0PinA = GPIO_NUM_18;
constexpr gpio_num_t kEncoder0PinB = GPIO_NUM_19;
constexpr gpio_num_t kMotor1PinPos = GPIO_NUM_4;
constexpr gpio_num_t kMotor1PinNeg = GPIO_NUM_2;
constexpr gpio_num_t kEncoder1PinA = GPIO_NUM_5;
constexpr gpio_num_t kEncoder1PinB = GPIO_NUM_23;
constexpr gpio_num_t kMotor2PinPos = GPIO_NUM_17;
constexpr gpio_num_t kMotor2PinNeg = GPIO_NUM_12;
constexpr gpio_num_t kEncoder2PinA = GPIO_NUM_35;
constexpr gpio_num_t kEncoder2PinB = GPIO_NUM_36;
constexpr gpio_num_t kMotor3PinPos = GPIO_NUM_15;
constexpr gpio_num_t kMotor3PinNeg = GPIO_NUM_14;
constexpr gpio_num_t kEncoder3PinA = GPIO_NUM_34;
constexpr gpio_num_t kEncoder3PinB = GPIO_NUM_39;
#else
#error "Only ESP32 and ESP32S3 are support"
#endif
#if ESP_ARDUINO_VERSION >= ESP_ARDUINO_VERSION_VAL(3, 0, 0)
kMotor0PinPos,
kMotor0PinNeg,
kEncoder0PinA,
kEncoder0PinB,
kPPR,
kReductionRation,
);
kMotor1PinPos,
kMotor1PinNeg,
kEncoder1PinA,
kEncoder1PinB,
kPPR,
kReductionRation,
);
kMotor2PinPos,
kMotor2PinNeg,
kEncoder2PinA,
kEncoder2PinB,
kPPR,
kReductionRation,
);
kMotor3PinPos,
kMotor3PinNeg,
kEncoder3PinA,
kEncoder3PinB,
kPPR,
kReductionRation,
);
#else
kMotor0PinPos,
0,
kMotor0PinNeg,
1,
kEncoder0PinA,
kEncoder0PinB,
kPPR,
kReductionRation,
);
kMotor1PinPos,
2,
kMotor1PinNeg,
3,
kEncoder1PinA,
kEncoder1PinB,
kPPR,
kReductionRation,
);
kMotor2PinPos,
4,
kMotor2PinNeg,
5,
kEncoder2PinA,
kEncoder2PinB,
kPPR,
kReductionRation,
);
kMotor3PinPos,
6,
kMotor3PinNeg,
7,
kEncoder3PinA,
kEncoder3PinB,
kPPR,
kReductionRation,
);
#endif
}
void setup() {
Serial.begin(115200);
printf("setting up\n");
g_encoder_motor_0.Init();
g_encoder_motor_1.Init();
g_encoder_motor_2.Init();
g_encoder_motor_3.Init();
printf("setup completed\n");
}
void loop() {
const int16_t speed_rpm = 100;
g_encoder_motor_0.RunSpeed(speed_rpm);
g_encoder_motor_1.RunSpeed(speed_rpm);
g_encoder_motor_2.RunSpeed(speed_rpm);
g_encoder_motor_3.RunSpeed(speed_rpm);
printf("target speed rpm: %" PRIi16 ", current speed rpm: [%4" PRId32 ", %4" PRId32 ", %4" PRId32 ", %4" PRId32
"], pwm duties: [%5" PRIi16 ", %5" PRIi16 ", %5" PRIi16 ", %5" PRIi16 "], pulse counts: [%" PRId64 ", %" PRId64
", %" PRId64 ", %" PRId64 "]\n",
speed_rpm,
g_encoder_motor_0.SpeedRpm(),
g_encoder_motor_1.SpeedRpm(),
g_encoder_motor_2.SpeedRpm(),
g_encoder_motor_3.SpeedRpm(),
g_encoder_motor_0.PwmDuty(),
g_encoder_motor_1.PwmDuty(),
g_encoder_motor_2.PwmDuty(),
g_encoder_motor_3.PwmDuty(),
g_encoder_motor_0.EncoderPulseCount(),
g_encoder_motor_1.EncoderPulseCount(),
g_encoder_motor_2.EncoderPulseCount(),
g_encoder_motor_3.EncoderPulseCount());
delay(100);
}
@ kAPhaseLeads
Represents the situation where phase A leads phase B when the motor is rotating forward.
String Version()
Get the version number string.