我想通过 L298 电源驱动器直接控制带有 ESP32 的步进电机。这适用于全步模式,但我无法生成半步模式的信号(Enable、In1、In2 In3、In4)。 这是控件类的构造函数:
McpwmStepperControl::McpwmStepperControl(gpio_num_t In1, gpio_num_t In2,
gpio_num_t EnA, gpio_num_t In3, gpio_num_t In4, gpio_num_t EnB, gpio_num_t CapPin, gpio_num_t RefPin, int GroupID)
: _reverse(false), _In1(In1), _In2(In2), _EnA(EnA), _In3(In3), _In4(In4), _EnB(EnB), _CapPin(CapPin), _RefPin(RefPin),
_GroupID(GroupID), _direction(false), _error_relay(0), _debounce(0),
Timer(GroupID),
Operator{McpwmOperator(GroupID), McpwmOperator(GroupID), McpwmOperator(GroupID)},
Comparator{McpwmComparator(Operator[0]), McpwmComparator(Operator[1]), McpwmComparator(Operator[2])},
Generator{McpwmGenerator(Operator[0], In1, 0), McpwmGenerator(Operator[0], In2, 1),
McpwmGenerator(Operator[1], In3, 0), McpwmGenerator(Operator[1], In4, 1),
McpwmGenerator(Operator[2], EnA, 0), McpwmGenerator(Operator[2], EnB, 0) }
{
setSpeeds(10, 150); // set default values
_dp = GPIO_NUM_NC;
Operator[0].connectTimer(Timer);
Operator[1].connectTimer(Timer);
Operator[2].connectTimer(Timer);
Timer.setComparators(&Comparator);
}
这是我尝试初始化其中一个生成器的方法:
ESP_ERROR_CHECK(mcpwm_generator_set_actions_on_timer_event(Generator[0].getHandle(),
MCPWM_GEN_COMPARE_EVENT_ACTION(MCPWM_TIMER_DIRECTION_UP, Comparator[0].getHandle(), MCPWM_GEN_ACTION_TOGGLE),
MCPWM_GEN_COMPARE_EVENT_ACTION(MCPWM_TIMER_DIRECTION_UP, Comparator[1].getHandle(), MCPWM_GEN_ACTION_TOGGLE),
MCPWM_GEN_COMPARE_EVENT_ACTION(MCPWM_TIMER_DIRECTION_UP, Comparator[2].getHandle(), MCPWM_GEN_ACTION_TOGGLE),
MCPWM_GEN_COMPARE_EVENT_ACTION(MCPWM_TIMER_DIRECTION_DOWN, Comparator[2].getHandle(), MCPWM_GEN_ACTION_TOGGLE),
MCPWM_GEN_COMPARE_EVENT_ACTION(MCPWM_TIMER_DIRECTION_DOWN, Comparator[1].getHandle(), MCPWM_GEN_ACTION_TOGGLE),
MCPWM_GEN_COMPARE_EVENT_ACTION(MCPWM_TIMER_DIRECTION_DOWN, Comparator[0].getHandle(), MCPWM_GEN_ACTION_TOGGLE),
MCPWM_GEN_COMPARE_EVENT_ACTION_END()
));
代码编译并启动正常,但不,它仅在 Comparator[0] 事件时切换。 (我注释掉了 MCPWM_GEN_COMPARE_EVENT_ACTION 宏的所有组合,但我总是得到相同的波形)。 这是一个微不足道的编码错误还是 ESP32 MCPWM 硬件的限制?
黄色通道由定时器满和空触发,蓝色通道是发生器输出。如您所见,它仅在 Comparator[0] 上切换。
这里是github上完整代码的链接:
我实际上发现了 MCPWM 硬件实现中的限制,这些限制在文档中我并不太清楚:
由于这些限制,我目前没有找到一种方法来为半步模式生成 4 个独立信号。请随意使用我在 github 上的测试系统作为您研究的基础。