【问题标题】:[SOLVED]Can't run SABERTOOTH 2X32 with STM32 G431RB, communication issue[已解决]无法使用 STM32 G431RB 运行 SABERTOOTH 2X32,通信问题
【发布时间】:2022-12-15 11:04:34
【问题描述】:

我在使用 sabertooth 2x32 驱动电机时遇到问题。

我在 G431rb 和 Sabertooth 2x32 之间使用 Arduino。一切运行良好但不稳定。我决定移除 Arduino,但无法处理 Sabertooh 2x32 和 G431rb 之间的通信。

我在 Hercules 桌面应用程序上检查了信号是否从 arduino 发送到驱动程序。我试着用 USART 发送这些,但没有得到任何回应。

    uint8_t openRightSS[5] = {0x31, 0x32, 0x30, 0x0D, 0x0A};
    // i got these hex numbers from hercules, when they sent to motor driver, motor driver works
    HAL_UART_Transmit(&huart3, openRightSS,5,100);

我有一些来自 Dimension Engineering(用于 Sabertooth 2x32 数据包串行通信)网站的资源。有一些关于 CRC 和校验和的信息,但我也无法实现它们。

我发现的最后一件事是用不同的方式发送数据(?)。

void driveForwardMotor1(uint8_t address, uint8_t speed)
{
    HAL_UART_Transmit(&huart3, address, strlen(address), 1000);
    HAL_UART_Transmit(&huart3, 0, 1, 1000);
    HAL_UART_Transmit(&huart3, speed, strlen(speed), 1000);
    HAL_UART_Transmit(&huart3, ((address + 0 + speed) & (0b01111111)), strlen((address + 0 + speed) & (0b01111111)), 1000);

}
void driveBackwardMotor1(uint8_t address, uint8_t speed)
{
    HAL_UART_Transmit(&huart3, address, strlen(address), 1000);
    HAL_UART_Transmit(&huart3, 1, 1, 1000);
    HAL_UART_Transmit(&huart3, speed, strlen(speed), 1000);
    HAL_UART_Transmit(&huart3, ((address + 1 + speed) & (0b01111111)), strlen((address + 1 + speed) & (0b01111111)), 1000);
}
void driveForwardMotor2(uint8_t address, uint8_t speed)
{
    HAL_UART_Transmit(&huart3, address, strlen(address), 1000);
    HAL_UART_Transmit(&huart3, 4, 1, 1000);
    HAL_UART_Transmit(&huart3, speed, strlen(speed), 1000);
    HAL_UART_Transmit(&huart3, ((address + 4 + speed) & (0b01111111)), strlen((address + 4 + speed) & (0b01111111)), 1000);

}
void driveBackwardMotor2(uint8_t address, uint8_t speed)
{
    HAL_UART_Transmit(&huart3, address, strlen(address), 1000);
    HAL_UART_Transmit(&huart3, 5, 1, 1000);
    HAL_UART_Transmit(&huart3, speed, strlen(speed), 1000);
    HAL_UART_Transmit(&huart3, ((address + 5 + speed) & (0b01111111)), strlen((address + 5 + speed) & (0b01111111)), 1000);
}

【问题讨论】:

    标签: stm32 motordriver


    【解决方案1】:

    解决了这个问题。我从 hercules 收到的数据不起作用(我不知道为什么)。我试图查看 arduino 通过另一个 arduino 发送到剑齿虎板的内容。它们是不同的十六进制数据数组,我用这段代码试过了,它起作用了 while(counter<3){ HAL_UART_Transmit(&huart3, forward, strlen(forward), 100); counter++; }

    【讨论】:

      猜你喜欢
      • 2020-12-19
      • 1970-01-01
      • 2021-10-10
      • 2016-04-06
      • 2020-11-06
      • 2021-12-23
      • 1970-01-01
      • 2018-05-24
      • 1970-01-01
      相关资源
      最近更新 更多