Browse Source

add public Reset CMD

Juraj Ďuďák 2 years ago
parent
commit
caf8a3d878
3 changed files with 11 additions and 8 deletions
  1. 8 7
      src/icm20948.cpp
  2. 1 1
      src/icm20948.h
  3. 2 0
      src/icm_datatypes.h

+ 8 - 7
src/icm20948.cpp

@@ -64,7 +64,7 @@ Icm20948::Icm20948(SpiManager *spi, icm20948_Config *config){
 	this->gyroSensor->data.type = ICM20948_GYRO + _activeDevice;
 	this->magSensor->data.type = ICM20948_MAG + _activeDevice;
 
-	this->icm20948_device_reset();
+	this->Reset();
 	this->Wakeup();
 
 	this->icm20948_clock_source(1);
@@ -85,8 +85,8 @@ Icm20948::Icm20948(SpiManager *spi, icm20948_Config *config){
 
 	this->Calibrate();
 
-	this->accSensor->SetRange(_16g);
-	this->gyroSensor->SetRange(_2000dps);
+	this->accSensor->SetRange(config->accel.full_scale);
+	this->gyroSensor->SetRange(config->gyro.full_scale);
 
 	this->ak09916_init(&config->mag);
 	_sensor_ready = true;
@@ -109,7 +109,7 @@ bool Icm20948::icm20948_who_am_i()
 		return false;
 }
 
-void Icm20948::icm20948_device_reset()
+void Icm20948::Reset()
 {
 	_spi->write_single_reg(_activeDevice, ub_0, B0_PWR_MGMT_1, 0x80 | 0x41); // reset, sleep, source PLL auto
 	HAL_Delay(100);
@@ -734,9 +734,9 @@ void SensorAccel::Calibrate()
 	accel_bias_reg[2] = (int32_t)(temp4[0] << 8 | temp4[1]);
 	mask_bit[2] = temp4[1] & 0x01;
 
-	accel_bias_reg[0] -= (accel_bias[0] / 8);
-	accel_bias_reg[1] -= (accel_bias[1] / 8);
-	accel_bias_reg[2] -= (accel_bias[2] / 8);
+	accel_bias_reg[0] -= (accel_bias[0]/8 );
+	accel_bias_reg[1] -= (accel_bias[1]/8 );
+	accel_bias_reg[2] -= (accel_bias[2]/8 );	// (accel_bias[2]/8)
 
 	accel_offset[0] = (accel_bias_reg[0] >> 8) & 0xFF;
   	accel_offset[1] = (accel_bias_reg[0])      & 0xFE;
@@ -750,6 +750,7 @@ void SensorAccel::Calibrate()
 	accel_offset[5] = (accel_bias_reg[2])      & 0xFE;
 	accel_offset[5] = accel_offset[5] | mask_bit[2];
 
+
 	_spi->write_multiple_reg(_activeDevice, ub_1, B1_XA_OFFS_H, &accel_offset[0], 2);
 	_spi->write_multiple_reg(_activeDevice, ub_1, B1_YA_OFFS_H, &accel_offset[2], 2);
 	_spi->write_multiple_reg(_activeDevice, ub_1, B1_ZA_OFFS_H, &accel_offset[4], 2);

+ 1 - 1
src/icm20948.h

@@ -106,7 +106,6 @@ private:
 	void icm20948_i2c_master_clk_frq(uint8_t config);
 	void icm20948_clock_source(uint8_t source);
 	void icm20948_odr_align_enable();
-    void icm20948_device_reset();
 
     void ak09916_init(Config_Mag_t *config);
     bool ak09916_who_am_i();
@@ -128,6 +127,7 @@ public:
 	bool IsReady(void);
 	uint8_t GetDataStatus(void);
 	uint8_t GetIndex(void);
+	void Reset();
 
 	void Stop(void);
 	void Start(void);

+ 2 - 0
src/icm_datatypes.h

@@ -172,12 +172,14 @@ typedef struct
 {
 	accel_dlp_cfg low_pass_filter = ACCEL_lpf_OFF;
 	accel_samplerate sample_rate = ACCEL_samplerate_562_5Hz;
+	accel_full_scale full_scale = _4g;
 }Config_Accel_t;
 
 typedef struct
 {
 	gyro_dlp_cfg low_pass_filter = GYRO_low_pass_OFF;
 	gyro_samplerate sample_rate = GYRO_samplerate_375_0Hz;
+	gyro_full_scale full_scale = _250dps;
 }Config_Gyro_t;
 
 typedef struct