Hi. I am trying to use bme680 without BSEC library with stm32f103. I included bme api files. All things looks good but I found interesting moment that I cant understand. For some days I recieved gas resistence from 5000 ohms to 15000 ohms. At this moment my part of source code was: led_on;
// BME680 ---------------------------------------------------------------------//
bme680_port_init();
BME680_On;
I2C_Port_Init(100000); // инит I2C на скорость 100 кГц
delay_ms_tim(50);
led_off;
delay_ms_tim(450);
// BME680 Sensor Initialisation
gas_sensor.dev_id = 0xEC;
gas_sensor.intf = BME680_I2C_INTF;
gas_sensor.read = bus_read;
gas_sensor.write = bus_write;
gas_sensor.delay_ms = delay_ms_tim;
gas_sensor.amb_temp = 25;
#ifdef debug
UART1_Transmit_string("\n bme680_init...");
#endif
rslt = bme680_init(&gas_sensor);
if (rslt != BME680_OK){
bme680_is_present = false;
#ifdef debug
UART1_Transmit_string("\nBME680 not found");
#endif
}
else{
bme680_is_present = true;
#ifdef debug
sprintf(uart_buf,"\nBME680 Init OK -> Chip ID 0x%x", gas_sensor.chip_id);
UART1_Transmit_string(uart_buf);
#endif
// Set the temperature, pressure and humidity settings
gas_sensor.tph_sett.os_hum = BME680_OS_1X;
gas_sensor.tph_sett.os_pres = BME680_OS_16X;
gas_sensor.tph_sett.os_temp = BME680_OS_2X;
//gas_sensor.tph_sett.filter = BME680_FILTER_SIZE_3;
// Set the remaining gas sensor settings and link the heating profile
gas_sensor.gas_sett.run_gas = BME680_ENABLE_GAS_MEAS;
//gas_sensor.gas_sett.heatr_dur = 1000;
// Create a ramp heat waveform in 3 steps
gas_sensor.gas_sett.heatr_temp = 320; // degree Celsius
gas_sensor.gas_sett.heatr_dur = 150; // milliseconds
// Устанавливаем режим принудительного измерения
// Must be set before writing the sensor configuration
gas_sensor.power_mode = BME680_FORCED_MODE;
// Set the required sensor settings needed
set_required_settings = BME680_OST_SEL | BME680_OSP_SEL | BME680_OSH_SEL | BME680_FILTER_SEL | BME680_GAS_SENSOR_SEL;
// Set the profile duration
//bme680_set_profile_dur(2000, &gas_sensor); // in ms
// Get the profile duration of the sensor
bme680_get_profile_dur(&meas_period, &gas_sensor);
#ifdef debug
sprintf(uart_buf,"\nBME680 profile duration: %i ms", meas_period);
UART1_Transmit_string(uart_buf);
#endif
// Set the desired sensor configuration
rslt = bme680_set_sensor_settings(set_required_settings, &gas_sensor);
#ifdef debug
//sprintf(uart_buf,"\nBME680 set settings -> %s", rslt ? "Error" : "Ok");
//UART1_Transmit_string(uart_buf);
#endif
// Set the power mode
rslt = bme680_set_sensor_mode(&gas_sensor);
#ifdef debug
//sprintf(uart_buf,"\nBME680 set forced mode -> %s", rslt ? "Error" : "Ok");
//UART1_Transmit_string(uart_buf);
#endif
delay_ms_tim(meas_period); // Delay till BME680 measurement is ready
rslt = bme680_get_sensor_data(&data, &gas_sensor);
#ifdef debug
sprintf(uart_buf,"\n\nT: %.2f degC, P: %.2f mmHg, H %.2f %%rH ", data.temperature, data.pressure / 100.0f * 75 / 100, data.humidity );
UART1_Transmit_string(uart_buf);
#endif With this code I had temperature readout less than real for 1C, humidity less than real for 15%. I am using 10 sec pause with standby mode after end of measurement. Then I decided to check for what purpose function bme680_set_profile_dur(2000, &gas_sensor). After this changing now I have at start gas resistanse 35000 ohms and 1 hour later 25000 ohms. When I comment again bme680_set_profile_dur() function I still recieve gas resistance in 25000 - 35000 range and the same unreal T and H values. Can you tell me what is real range of resistance I must recieve in typical home room and why T and H values are wrong? How oversampling and filter settings affectc on measurements?
... View more