Skip to content

QMI8658 陀螺仪

严格说 QMI8658 是六轴 IMU(加速度计 + 陀螺仪)。游戏主要使用重力方向生成二维倾斜,但完整驱动初始化与轴向都按板级资料锁定。

轴向问题与修正

首版把 sensor X/Y 直接送给 screen X/Y,实际板上芯片相对圆屏旋转 90°。实机四向动作暴露了方向错误,最终映射:

cpp
screen_x = -(sensor_y - neutral_y);
screen_y = +(sensor_x - neutral_x);

这一层属于 BSP/设备适配,不写进通用游戏公式;网页虚拟倾斜仍直接使用屏幕坐标。

采样与归一化

  • 任务周期:33 ms。
  • I²C 地址:0x6B
  • 启动用稳定窗口求 neutral,不用单个样本。
  • 死区:0.025 g。
  • 0.55 g 映射到归一化 1.0。
  • 低通平滑,输出限制在 -1…1。
  • UI/渲染线程只读快照,不阻塞 I²C。

唤醒校准

ambient 期间持续保留最近 5 个真实样本均值。触摸 down 唤醒时立刻冻结这份“手指接触前”姿态作为新 neutral,然后完整吞掉本次触摸。实板一次性 QA 得到 fallback=0、约 160 ms 完成、最终 tilt=0,0

视觉响应

QMI8658 倾斜响应 GIF

整数像素分带

160×160 星种按横带重绘,LOW/MID/HIGH 分别限制到 3/2、6/4、10/7 px,shear 为 2/4/7。最近邻与整数位移保持 2×2 主像素。

自动验证

主机测试覆盖任意初始姿态、四向符号、轴隔离、死区、满量程、滤波、重校准、运动样本拒绝和即时快照;视觉 clearance 脚本覆盖 750 个 HIGH 核心姿态。主观的玻璃深度感和 HIGH 档偏好仍需操作者判断。