项目源地址:https://github.com/bipropellant/bipropellant-hoverboard-firmware  

翻译自诉:

双组元推进剂

双组元推进剂[ bahy-pruh-pel-uh nt ] - 大多数液体推进剂火箭使用双组元推进剂系统,即氧化剂和燃料分别储存并在燃烧室中混合的系统。

当这个存储库与协议存储库混合时,火箭推进您的悬浮滑板衍生项目,现在增加了正弦电机控制。

构建状态

该固件是Niklas Fauth 悬浮滑板固件的大幅修改版本,它允许您:

  • 使用悬浮滑板作为悬浮滑板

  • 使用可靠的串行协议从外部控制悬浮滑板。

该项目由btsimonh发起

它是从 Niklas Fauth 的悬浮滑板固件分支出来的,提交时间:2018 年 8 月 24 日

添加:

软件序列号:

这允许您将任何 GPIO 引脚(经过修改)用作串行引脚。最好保持在 9600 波特,因为接收中断以 8 倍比特率提供服务。

传感器读数:

它从 USART2&3 的原始传感器板读取原始串行数据(9 位)。

传感器控制:

传感器数据可以控制 PWM 需求(车轮的动力)。双击打击垫即可启用。

串行诊断控制:

Protocol.c 实现了一个简单的 ASCII 串行协议,允许手动控制板。

串口机控制:

Protocol.c 实现了确认/校验和串行协议的骨架。尚未成熟,但旨在成为悬浮滑板的通用控制协议。

用于发送 pwm 和转向的示例 C++ 代码:

setHoverboardPWM(300,-300); // sends 300 (=30% duty cycle forward) to one wheel and -300 (=30% duty cycle backwards) to the other

typedef struct MsgToHoverboard_t{
  unsigned char SOM;  // Start of Message
  unsigned char CI;   // continuity counter
  unsigned char len;  // len is len of bytes to follow, NOT including CS
  unsigned char cmd;  // read or write
  unsigned char code; // code of value to write
  int32_t pwm1;           // absolute value ranging from -1000 to 1000 .. Duty Cycle *10 for first wheel
  int32_t pwm2;           // absolute value ranging from -1000 to 1000 .. Duty Cycle *10 for second wheel
  unsigned char CS;   // checksumm
};

typedef union UART_Packet_t{
  MsgToHoverboard_t msgToHover;
  byte UART_Packet[sizeof(MsgToHoverboard_t)];
};

char hoverboardCI = 0;  // Global variable which tracks CI

void setHoverboardPWM( int32_t pwm1, int32_t pwm2 )
{
  UART_Packet_t ups;

  ups.msgToHover.SOM = 4 ;    // Start of Message, 4 for No ACKs;
  ups.msgToHover.CI = ++hoverboardCI; // Message Continuity Indicator. Subsequent Messages with the same CI are discarded, need to be incremented.
  ups.msgToHover.len = 1 + 1 + 4 + 4 ; // cmd(1), code(1), pwm1(4) and pwm2(4)
  ups.msgToHover.cmd  = 'r';  // Pretend to send answer to read request. This way HB will not reply. Change to 'W' to get confirmation from board
  ups.msgToHover.code = 0x0E; // "simpler PWM"
  ups.msgToHover.pwm1 = pwm1;
  ups.msgToHover.pwm2 = pwm2;
  ups.msgToHover.CS = 0;

  for (int i = 0; i < (2 + ups.msgToHover.len); i++){  // Calculate checksum. 2 more for CI and len.
    ups.msgToHover.CS -= ups.UART_Packet[i+1];
  }

  Serial.write(ups.UART_Packet,sizeof(UART_Packet_t));
}

此代码只能将值写入板,无法解析回复。有关更多信息,请查看悬浮滑板协议 wiki示例。可以在bipropellant-hoverboard-api找到可以双向通信的 Arduino 兼容 C++ 模块

PID控制:

用于控制速度(以毫米/秒为单位)和位置(以毫米为单位)的 PID 控制回路。目前单独的控制模式和参数需要更好的调整。

大厅中断:

用于读取位置和速度数据。

闪光灯设置:

实现可用于有效存储参数的闪存页面(当前未使用,但经过测试)。

应该与原始控制设置(在 config.h 中)一起使用,但未经测试...

ADC 输入

可以轻松配置多种输入,例如操纵杆、速度油门和 Gametrak。查看维基百科

硬件

母板

原始硬件支持最初连接到两个传感器板的两根 4 针电缆。他们将Hoverboard主板的GND、12/15V和USART2&3引出。 USART2 & 3 均可用于 UART 和 I2C,PA2&3 可用作 12 位 ADC。

主板的逆向工程原理图可以在这里找到: http://vocke.tv/lib/exe/fetch.php ?media=20150722_hoverboard_sch.pdf

构建和闪烁

该存储库使用串行协议的子模块。使用子模块克隆:“git clone --recurse-submodules”或之后:“git submodule update --init --recursive”