如何增加 HID 轴的范围? (几度后方向盘达到极限)
Posted
技术标签:
【中文标题】如何增加 HID 轴的范围? (几度后方向盘达到极限)【英文标题】:How could I increase the range of an HID axis? (steering wheel hits limit after a few degrees) 【发布时间】:2021-04-08 12:12:58 【问题描述】:我有一个编码器,每转可提供 4300 个增量。我需要在任一方向上至少转 3 圈。 (方向盘用) 但是,当我稍微转动它时,它已经达到了极值。这是顺时针几度后:
这是我的描述:
我的代码:
while (1)
steer.direction = position - position_p;
position_p = position;
USBD_CUSTOM_HID_SendReport(&hUsbDeviceFS, &steer, sizeof(steer));
HAL_Delay(5);
我尝试过使用绝对值。对于 8 位,它只是在几度后溢出并返回到相反的极值。也许 16 位可以解决这个问题,但我无法让它以这种方式工作。
【问题讨论】:
只是关于物理单位的说明:它们旨在允许设备驱动程序将设备发送的“逻辑”(即无单位)数字转换为“物理”(现实世界)单位,如公斤,米,度等。如果您的应用程序不需要查看真实世界的单位,那么您只需编码 LOGICAL_MININIMUM -12900, LOGICAL_MAXIMUM 12900 并从描述符中删除 PHYSICAL_xxx 项。对于方向盘,我想您可能希望以度为单位查看转向角。 【参考方案1】:我设法使用了 16 位绝对位置。 我认为它不起作用,因为“发送”功能只采用 8 位值。 因此,我将 16 位变量拆分为 2x8 位数组。 (我使用 cubeIDE)
steer.direction[0] = position & 0x00FF;
steer.direction[1] = position >> 8;
【讨论】:
次要注意:65536 (0x10000) 不适合 16 位字段。您应该编码 LOGICAL_MAXIMUM (65535) 即 27 FF FF 00 00以上是关于如何增加 HID 轴的范围? (几度后方向盘达到极限)的主要内容,如果未能解决你的问题,请参考以下文章