重力传感器方向

    技术2023-07-12  90

    有8种贴片方式,正面四种,反面四种。

    因此在代码中就需要调整x轴y轴,或者x轴,y轴的正反方向。

    mtk下实现方法如下:

    首先在dts种设置方向,direction即为方向:

    /* sensor standardization */ cust_accel@0 { compatible = "mediatek,bma222e_new"; i2c_num = <2>; i2c_addr = <0x18 0 0 0>; direction = <6>; //0->6 power_id = <0xffff>; power_vol = <0>; firlen = <0>; is_batch_supported = <0>; };

    在driver代码中,根据dts中给定的direction可以获取cvt:

    err = hwmsen_get_convert(obj->hw.direction, &obj->cvt);

    cvt为如下数据:

    struct hwmsen_convert map[] = { { { 1, 1, 1}, {0, 1, 2} }, { {-1, 1, 1}, {1, 0, 2} }, { {-1, -1, 1}, {0, 1, 2} }, { { 1, -1, 1}, {1, 0, 2} }, { {-1, 1, -1}, {0, 1, 2} }, { { 1, 1, -1}, {1, 0, 2} }, { { 1, -1, -1}, {0, 1, 2} }, { {-1, -1, -1}, {1, 0, 2} }, };

    以此为例direction为6,cvt即为{1,-1,-1} 方向, {0,1,2} xyz3轴是否需要交换

    下列代码为最终进行数据重调整的代码

    /*remap coordinate*/ acc[obj->cvt.map[MPU6050_AXIS_X]] = obj->cvt.sign[MPU6050_AXIS_X]*obj>data[MPU6050_AXIS_X]; acc[obj->cvt.map[MPU6050_AXIS_Y]] = obj->cvt.sign[MPU6050_AXIS_Y]*obj>data[MPU6050_AXIS_Y]; acc[obj->cvt.map[MPU6050_AXIS_Z]] = obj->cvt.sign[MPU6050_AXIS_Z]*obj>data[MPU6050_AXIS_Z];

    参考文档:https://blog.csdn.net/qq_38750572/article/details/103807126

    Processed: 0.010, SQL: 9