项目源地址:https://github.com/bipropellant/bipropellant-hoverboard-firmware
翻译自诉:
双组元推进剂[ bahy-pruh-pel-uh nt ] - 大多数液体推进剂火箭使用双组元推进剂系统,即氧化剂和燃料分别储存并在燃烧室中混合的系统。
当这个存储库与协议存储库混合时,火箭推进您的悬浮滑板衍生项目,现在增加了正弦电机控制。
该固件是Niklas Fauth 悬浮滑板固件的大幅修改版本,它允许您:
使用悬浮滑板作为悬浮滑板
使用可靠的串行协议从外部控制悬浮滑板。
它是从 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 控制回路。目前单独的控制模式和参数需要更好的调整。
用于读取位置和速度数据。
实现可用于有效存储参数的闪存页面(当前未使用,但经过测试)。
应该与原始控制设置(在 config.h 中)一起使用,但未经测试...
可以轻松配置多种输入,例如操纵杆、速度油门和 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”



发表评论