【发布时间】: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