4.6.1. FFBeast Wheel – Volante Force Feedback DIY
🔗 Link da Documentação Oficial
Introdução
O FFBeast Wheel é um volante Force Feedback construído em sistema DIY, que se conecta ao PC via USB como um dispositivo dual HID: uma interface customizada (Vendor‑specific) e outra padrão de joystick com suporte a Force Feedback.
Componentes e BOM
Lista de itens necessários (BOM) para montagem:
- Controlador: ODrive v3.6 ou ODESC
- Motor: Motor de hoverboard (≈ 15 Nm)
- Encoder: MT6701 (absoluto incremental)
- Mount: SK16 coupler + suporte impresso 3D
- Breakout PCB: Adaptador entre ODrive e motor/encoder
- Enclosure: Caixa impresso 3D ou comprada
- Cabos e conectores: USB‑B, cabos de potência, jumper wires
1. Operação Básica
- Montagem mecânica dos componentes conforme instruções do repositório.
- Flash do firmware no controlador (ODrive/ODESC).
- Conexão USB: dispositivo aparece com
VID=0x0451
,PID=0xEEF8
(exemplo). - Leitura e escrita via HID:
hid_read
/hid_read_timeout
hid_get_feature_report
hid_write
- Uso de apps companion (Setup App / Commander App) para calibração, ajustes de gains e telemetria.
2. Fluxo de Execução
2.1 Montagem e Hardware
- Prepare chassis e fixações.
- Instale motor e encoder no suporte.
- Monte breakout PCB e conecte fiação.
- Prenda enclosure e organize cabos.
2.2 Firmware e Drivers
- Clone o repositório de firmware.
- Compile e faça o flash (ex:
odrivetool dfu firmware.bin
). - Instale
hidapi
e drivers no SO:- Windows: zadig + libusb
- Linux:
sudo apt install libhidapi-dev
2.3 Conexão USB e Enumeração
hid_device_info *devs = hid_enumerate(0x0451, 0xEEF8);
// Filtrar interface_number == 0
hid_open_path(devs->path);
2.4 Protocolo de Comunicação
- Pacotes HID: 65 bytes (1 byte ReportID + 64 bytes payload)
2.4.1 Leitura de Estado
uint8_t buf[65];
hid_read_timeout(handle, buf, sizeof(buf), 100);
memcpy(&state, &buf[1], sizeof(state));
2.4.2 Leitura de Feature Reports
uint8_t report[65];
hid_get_feature_report(handle, report, sizeof(report));
2.4.3 Envio de Comandos
uint8_t cmd[65] = { REPORT_GENERIC_INPUT_OUTPUT, /* ... payload */ };
hid_write(handle, cmd, sizeof(cmd));
3. Possibilidades de Uso
- Force Feedback: Spring, Constant, Periodic, Ramp, Soft Stop, Damping
- Customização de Efeitos: via Commander App ou protocolos de reporte
- Mapeamento de botões/ixos (até 3 eixos analógicos, invert/smoothing)
- Simulações HIL: integração com hardware externo
- Streaming de Telemetria: para dashboards ou ML pipelines
4. Limitações
- Taxa de leitura: ~10 Hz (100 ms timeout)
- Botões em pulso (ButtonModeEnum 3–4) não implementados
- Torque máximo: limitado ao motor usado
- Padding obrigatório: pacotes cifrados/excedentes são descartados no Windows
5. Dificuldades Encontradas
- Exemplos de tratamento de erros na comunicação HID insuficientes
- Parâmetros de damping e gains requerem calibração manual
- Manutenção do campo
ReleaseMajor
no firmware gera inconsistências
6. Limitações Reportadas
- Modo avançado (serial key) só disponível via doações
- Algumas instruções só estão documentadas em canais informais (Discord)
7. Métricas e Telemetria
Métrica | Descrição |
---|---|
Position (±10000) | Posição angular do volante |
Torque (±10000) | Torque aplicado pelo motor |
FirmwareVersion | Versão do firmware |
SpringForce , DampingForce | Valores de força configurados |
SamplingInterval (ms) | Intervalo de leitura dos relatórios |
- Taxa de atualização: até 10 Hz sem travamentos
- Formato de saída: relatórios binários via HID ou CSV
8. Funcionamento do Feedback
- Jogos enviam efeitos FFB via DirectInput/HID
- Firmware interpreta e converte em sinais PWM
- ODrive controla o motor para reproduzir o efeito
- Usuário sente forças: retorno, vibrações e resistências
9. Configuração via Serial
O FFBeast suporta ajuste dinâmico de parâmetros via interface serial após o flash do firmware, sem necessidade de recompilar o código.
- Force Feedback: já vem implementado; o dispositivo é reconhecido como Joystick HID com FFB habilitado.
- Parâmetros Dinâmicos: ganhos, filtros e PID podem ser configurados em tempo real.
Procedimento de uso:
- Conecte o FFBeast via USB e abra um terminal serial (baud 115200).
- Envie comandos, por exemplo:
set gain 70
get gain
save - Respostas típicas:
Gain ajustado para: 70
Current gain: 70
Configuração salva
Trecho de command_parser.c
:
if (strncmp(cmd, "set gain ", 9) == 0) {
ff_settings.gain = atoi(&cmd[9]);
printf("Gain ajustado para: %d
", ff_settings.gain);
}
if (strcmp(cmd, "get gain") == 0) {
printf("Current gain: %d
", ff_settings.gain);
}
if (strcmp(cmd, "save") == 0) {
saveConfig();
printf("Configuração salva
");
}
10. Requisitos
- Jogo com suporte a Force Feedback
- Drivers HID corretamente instalados
- Configuração de dispositivo como volante FFB em plataformas (Steam, Windows)
Histórico de Versões
Data | Editor | Descrição |
---|---|---|
24/04/2025 | Mateus de Almeida | Documento inicial |
25/04/2025 | Wengel Rodrigues | Atualização do doc |