You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Movesense加速度传感器数据与Showcase App不符及打印异常咨询

解决Movesense加速度传感器数据匹配与打印问题

一、解决float类型打印为空/数值不匹配的问题

Movesense固件基于ARM GCC编译,默认printf为节省Flash空间未开启浮点数格式化支持,导致%f/%0.6f输出空值或乱码。此外,Movesense加速度原始数据是int16_t类型的ADC原始值,直接用%d打印的是未转换的整数,并非Showcase App显示的g单位物理值,自然不匹配。

解决步骤:

  1. 启用浮点数printf支持:在项目CMakeLists.txt中添加编译选项:
    target_compile_options(${PROJECT_NAME} PRIVATE -u_printf_float)
    target_link_options(${PROJECT_NAME} PRIVATE -u_printf_float)
    
  2. 将原始数据转换为g单位:根据传感器量程计算转换系数,公式为:
    // 量程2g时,转换系数为32767/2 ≈ 16384.0f
    float acc_x = (float)raw_acc.x / 16384.0f;
    float acc_y = (float)raw_acc.y / 16384.0f;
    float acc_z = (float)raw_acc.z / 16384.0f;
    
    若设置其他量程,转换系数对应为:4g→8192.0f、8g→4096.0f、16g→2048.0f。

二、让数据与Showcase App图表一致的关键检查点

  1. 匹配量程设置:Showcase App默认量程为2g,确保代码中设置一致:
    // 0=2g,1=4g,2=8g,3=16g
    const uint8_t accRange = 0;
    MovesenseSensorConfig config = {.accRange = accRange};
    Movesense_SetSensorConfig(&config);
    
  2. 匹配采样频率:Showcase默认采样频率多为50Hz,代码中同步设置:
    const uint16_t accSampleRate = 50;
    Movesense_SetAccSampleRate(accSampleRate);
    
  3. 确保读取最新数据:从传感器回调函数中获取实时采样数据,避免读取缓存旧数据:
    void OnAccDataReceived(const MovesenseAccData* pData) {
        float x = (float)pData->x / 16384.0f;
        float y = (float)pData->y / 16384.0f;
        float z = (float)pData->z / 16384.0f;
        printf("ACC: x=%.6f, y=%.6f, z=%.6f\n", x, y, z);
    }
    

三、验证步骤

  1. 重新编译固件并烧录到设备;
  2. 查看调试日志,确认打印数值与Showcase App图表一致;
  3. 若仍有差异,检查是否开启低通滤波(Showcase默认可能启用,代码需同步配置)。

内容的提问来源于stack exchange,提问作者Vadaliya

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 13:22:52