这个变体可以用于通过串行协议从另一块板子(如Arduino,ESP32,ESP8266,RASPBERRY PI)或计算机控制电路板。
示例Arduino草图将发送命令并处理反馈。


你也可以使用以下网络工具(https://candas1.github.io/Hoverboard-Web-Serial-Control/)来测试这个变体,它让你可以控制电路板并跟踪反馈值。
这个Python代码受到此问题中分享的代码的启发,也可以用来控制固件。

⚙️ 配置/参数

电压控制模式默认使用。
使用CONTROL_SERIAL_USART2和FEEDBACK_SERIAL_USART2用于左侧传感器电缆(默认)。
使用CONTROL_SERIAL_USART3和FEEDBACK_SERIAL_USART3用于右侧传感器电缆(5V容差)。

SIDEBOARD_SERIAL_USART2 或 SIDEBOARD_SERIAL_USART3 参数可以替代 CONTROL_SERIAL_USART2 或 CONTROL_SERIAL_USART3 以启用不同的协议 实现于sideboard 固件。它也可以与Web 工具一起使用以测试不同的控制模式/类型。
如果您需要不同的波特率,您可以调整 USART2_BAUD 或 USART3_BAUD 参数。

请同时检查所有变体共有的参数

🔌 线路:

  • 将蓝色电线连接到左传感器电缆(长电缆)上的Arduino的RX,将绿色电线连接到TX,将黑色电线连接到GND。

  • 只有USART3(右侧传感器电缆)是5V兼容的

⚠️在某些电路板上,黑色电线是15伏!!!用万用表检查,确保15伏和接地没有互换。
⚠️传感器电缆的红色电线提供15伏电压!!!

USART 配置:

默认情况下,USART 配置为 115200 波特(参数 USART2_BAUD 或 USART3_BAUD),8 数据位,无奇偶校验,一个停止位。
如果可能,请在Arduino上使用硬件串口。

🕹️ 输入命令结构:

命令以二进制帧的形式发送,结构如下:

  • 起始帧(unsigned int16) : 0xABCD

  • 转向(有符号的16位整数) : 转向输入或左输入与坦克转向[-1000 - 1000]

  • 速度(signed int16) : 速度输入或右输入与坦克转向[-1000 - 1000]

  • 校验和(unsigned int16) : 异或校验和

最低有效字节放在前面(小端)。

མully 错误拒绝

FOC固件将丢弃帧如果:

  • 命令长度不正确

  • 起始帧不正确

  • 校验和不正确

  • 在接收帧时RX线上有1个字符不活动 (空闲线路检测)

如果在config.h中指定的 time(默认为160毫秒)内没有收到正确的帧,将触发超时。

🌟 校准:

校准 在 USART 控制下不是必需的,但如果您在 Arduino 上使用输入设备(例如操纵杆或油门手柄)并且没有在那里处理校准中心值和最小/最大范围,则可以进行校准。

💬 反馈:

每10毫秒发送以下反馈:

  • 起始帧(unsigned int16) : 0xABCD

  • Cmd1( signed int16 ) : 标准化和混合后的转向或刹车( 个人飞行器 )

  • Cmd2( signed int16 ) : 速度或油门( 个人飞行器 ) 经过标准化和混合

  • SpeedR(signed int16) : 测量的右轮速度,单位是RPM

  • SpeedL(signed int16) : 测量的左轮速度,单位是RPM

  • 电池电压(有符号的16位整数):校准后的电池电压 *100

  • 温度( signed int16):温度(°C)*10

  • Led(unsigned int16) : 用于控制橱柜上的指示灯

  • 校验和(unsigned int16) : 异或校验和

最低有效字节放在前面(小端)。

这个 分叉也有霍尔传感器作为反馈,这个 有一个显示总电流。

🔧 故障排除:

如果电路板发出蜂鸣声

  • 确保波特率为115200

  • 确保您使用在config.h中选择的传感器电缆(左=CONTROL_SERIAL_USART2 或 右=CONTROL_SERIAL_USART3)。

  • 假设您的主板上的RX或/和TX可能有缺陷(MCU上的端口有缺陷,101个SMD电阻器缺失或电阻过高),您可以在config.h中切换到其他传感器电缆。

  • 在某些板子上,线的颜色可能会不同,尝试交换蓝色和绿色的线。

  • 您的Arduino TX/RX可能无法正常工作,您可以尝试使用FTDI和Web工具来确认主板/固件不是问题。

  • 如果你在Arduino上使用软件串口,你可能需要降低波特率。

  • 如果你已经添加了用于PWM/PPM的电容器,请将其移除。