|
|
2 éve | |
|---|---|---|
| src | 2 éve | |
| .gitlab-ci.yml | 2 éve | |
| LICENSE | 2 éve | |
| apollo.json | 2 éve | |
| datasheet_ICM-20948-v1.3.pdf | 2 éve | |
| readme.md | 2 éve |
Basic driver for TDK InvenSense ICM-20948. It support 2 modes:
#include "icm20948.h"
int main(void)
{
// HAL_Init, etc...
SpiManager manager(&hspi2);
icm20948_Config config2;
config2.pinCS = &pinCS;
config2.gyro.low_pass_filter = GYRO_lpf_196_6Hz;
config2.gyro.sample_rate = GYRO_samplerate_281_3Hz;
config2.accel.low_pass_filter = ACCEL_lpf_246Hz;
config2.accel.sample_rate = ACCEL_samplerate_281_3Hz;
Icm20948 sensor2(&manager, &config2);
axises *my_gyro2 = NULL;
axises *my_accel2 = NULL;
while (1)
{
// read raw values
if(sensor2.GetDataStatus() == 1 ){
//read data
my_accel2 = sensor2.accSensor->Read();
my_gyro2 = sensor2.gyroSensor->Read();
my_mag2 = sensor2.magSensor->Read();
// or unit conversion
my_accel2 = sensor2.accSensor->ReadUnit();
my_gyro2 = sensor2.gyroSensor->ReadUnit();
my_mag2 = sensor2.magSensor->ReadUnit();
}
}
}
#include "icm20948.h"
Device_TypeDef *module;
volatile uint8_t icm_ready;
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
if(GPIO_Pin == ICM_INT_Pin){
icm_ready = 1;
}
}
int main(void)
{
// HAL_Init, etc...
axises *my_gyro1 = NULL;
axises *my_accel1 = NULL;
SpiManager manager(&hspi2);
icm20948_Config config1;
config1.pinCS = &pinCS;
config1.pinINT = &pinINT;
config1.gyro.low_pass_filter = GYRO_lpf_196_6Hz;
config1.gyro.sample_rate = GYRO_samplerate_281_3Hz;
config1.accel.low_pass_filter = ACCEL_lpf_246Hz;
config1.accel.sample_rate = ACCEL_samplerate_281_3Hz;
config1.mag.mode = mag_mode_cont_measurement_100hz;
config1.int_source = interrupt_RAW_DATA_0_RDY_EN;
while (1)
{
if(icm_ready1 == 1){
icm_ready1 = 0;
sensor1.Read(); // read data from sensors
my_accel1 = sensor1.accSensor->GetData(); // only return prepared data
my_gyro1 = sensor1.gyroSensor->GetData();
my_mag1 = sensor1.magSensor->GetData();
}
}
}