重力傳感器方向

有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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章