Add initial board, HAL, and executor modules
This commit is contained in:
1 parent
3b9e129c88
commit
0b2eebe76d
82 files changed
+20611
No files matched your search
@@ -0,0 +1,147 @@
|
||||
#include "drv8428.h"
|
||||
#include "config.h"
|
||||
|
||||
Drv8428Driver::Drv8428Driver(IOExpansionBoard &ioExp) : io_expansion_(ioExp)
|
||||
{
|
||||
}
|
||||
|
||||
esp_err_t Drv8428Driver::Init()
|
||||
{
|
||||
esp_err_t err = ESP_OK;
|
||||
|
||||
// 1. Set Sleep Mode to WORK (wake up initially to configure?)
|
||||
// Actually BoardSweekar::StepperMotorInit sets it to WORK then ENABLE_DISABLE.
|
||||
// Let's follow that.
|
||||
err = io_expansion_.SetMotorSleepMode(
|
||||
STEPPER_MOTOR_WORK,
|
||||
STEPPER_MOTOR_SLEEP_PORT,
|
||||
STEPPER_MOTOR_SLEEP_PIN
|
||||
);
|
||||
if (err != ESP_OK) {
|
||||
ESP_LOGE(TAG, "Failed to set sleep mode: 0x%x", err);
|
||||
return err;
|
||||
}
|
||||
|
||||
// 2. Disable Enable Pin
|
||||
err = io_expansion_.SetMotorEnableMode(
|
||||
STEPPER_MOTOR_ENABLE_DISABLE,
|
||||
STEPPER_MOTOR_ENABLE_PORT,
|
||||
STEPPER_MOTOR_ENABLE_PIN
|
||||
);
|
||||
if (err != ESP_OK) {
|
||||
ESP_LOGE(TAG, "Failed to set enable mode: 0x%x", err);
|
||||
return err;
|
||||
}
|
||||
|
||||
// 3. Set Microsteps (Defaulting to 1/8 as per original code which passed 4? need to verify)
|
||||
// BoardSweekar passed 4.
|
||||
// "io_expansion_.SetStepperMicrostepMode(4, ...)"
|
||||
// Let's assume 4 maps to 1/8 or whatever.
|
||||
err = SetMicrosteps(4);
|
||||
if (err != ESP_OK) {
|
||||
ESP_LOGE(TAG, "Failed to set microsteps: 0x%x", err);
|
||||
return err;
|
||||
}
|
||||
|
||||
// 4. Set Default Direction
|
||||
err = SetDirection(true); // Default to "UP" or whatever true means
|
||||
if (err != ESP_OK) {
|
||||
ESP_LOGE(TAG, "Failed to set direction: 0x%x", err);
|
||||
return err;
|
||||
}
|
||||
|
||||
ESP_LOGI(TAG, "DRV8428 Driver Initialized");
|
||||
return ESP_OK;
|
||||
}
|
||||
|
||||
esp_err_t Drv8428Driver::Enable(bool enable)
|
||||
{
|
||||
esp_err_t err = ESP_OK;
|
||||
if (enable)
|
||||
{
|
||||
ESP_LOGD(TAG, "Enabling stepper motor (sleep + enable)");
|
||||
|
||||
// 1. Set sleep mode to WORK
|
||||
err = io_expansion_.SetMotorSleepMode(
|
||||
STEPPER_MOTOR_WORK,
|
||||
STEPPER_MOTOR_SLEEP_PORT,
|
||||
STEPPER_MOTOR_SLEEP_PIN
|
||||
);
|
||||
if (err != ESP_OK) return err;
|
||||
|
||||
// 2. Set enable mode to ENABLE
|
||||
err = io_expansion_.SetMotorEnableMode(
|
||||
STEPPER_MOTOR_ENABLE_ENABLE,
|
||||
STEPPER_MOTOR_ENABLE_PORT,
|
||||
STEPPER_MOTOR_ENABLE_PIN
|
||||
);
|
||||
}
|
||||
else
|
||||
{
|
||||
ESP_LOGD(TAG, "Disabling stepper motor (disable + sleep)");
|
||||
|
||||
// 1. Disable enable pin
|
||||
err = io_expansion_.SetMotorEnableMode(
|
||||
STEPPER_MOTOR_ENABLE_DISABLE,
|
||||
STEPPER_MOTOR_ENABLE_PORT,
|
||||
STEPPER_MOTOR_ENABLE_PIN
|
||||
);
|
||||
if (err != ESP_OK) return err;
|
||||
|
||||
// 2. Set sleep mode to SLEEP
|
||||
err = io_expansion_.SetMotorSleepMode(
|
||||
STEPPER_MOTOR_SLEEP,
|
||||
STEPPER_MOTOR_SLEEP_PORT,
|
||||
STEPPER_MOTOR_SLEEP_PIN
|
||||
);
|
||||
}
|
||||
return err;
|
||||
}
|
||||
|
||||
esp_err_t Drv8428Driver::SetDirection(bool dir)
|
||||
{
|
||||
// dir: true=UP, false=DOWN (based on original StepperMotor::SetDir logic)
|
||||
// Original: dir ? STEPPER_MOTOR_RIGHT : STEPPER_MOTOR_LEFT
|
||||
// Wait, StepperMotor::SetDir used STEPPER_MOTOR_RIGHT for true.
|
||||
// STEPPER_MOTOR_RIGHT is a macro, likely 1 or 0.
|
||||
|
||||
uint8_t mode = dir ? STEPPER_MOTOR_RIGHT : STEPPER_MOTOR_LEFT;
|
||||
|
||||
return io_expansion_.StepperMotorSetDir(
|
||||
mode,
|
||||
STEPPER_MOTOR_DIR_PORT,
|
||||
STEPPER_MOTOR_DIR_PIN
|
||||
);
|
||||
}
|
||||
|
||||
esp_err_t Drv8428Driver::Sleep(bool sleep)
|
||||
{
|
||||
// This is explicitly setting sleep mode, might be redundant with Enable(false)
|
||||
// but useful if we want to sleep without disabling or vice versa if supported.
|
||||
// For DRV8428, Enable(false) sets Sleep to SLEEP.
|
||||
|
||||
uint8_t mode = sleep ? STEPPER_MOTOR_SLEEP : STEPPER_MOTOR_WORK;
|
||||
return io_expansion_.SetMotorSleepMode(
|
||||
mode,
|
||||
STEPPER_MOTOR_SLEEP_PORT,
|
||||
STEPPER_MOTOR_SLEEP_PIN
|
||||
);
|
||||
}
|
||||
|
||||
esp_err_t Drv8428Driver::SetMicrosteps(int microsteps)
|
||||
{
|
||||
// Original code used hardcoded ports for microsteps.
|
||||
// io_expansion_.SetStepperMicrostepMode(4, STEPPER_MOTOR_M0_MADE_PORT, STEPPER_MOTOR_M0_PIN,
|
||||
// STEPPER_MOTOR_M1_MADE_PORT, STEPPER_MOTOR_M1_PIN);
|
||||
|
||||
// We can just pass the value 'microsteps' if it corresponds to the index expected by SetStepperMicrostepMode.
|
||||
// Or we might need a mapping.
|
||||
// Assuming 'microsteps' passed here is the raw value/index for now.
|
||||
|
||||
io_expansion_.SetStepperMicrostepMode(
|
||||
(uint8_t)microsteps,
|
||||
STEPPER_MOTOR_M0_MADE_PORT, STEPPER_MOTOR_M0_PIN,
|
||||
STEPPER_MOTOR_M1_MADE_PORT, STEPPER_MOTOR_M1_PIN
|
||||
);
|
||||
return ESP_OK;
|
||||
}
|
||||
Reference in new issue
Block a user