After soldering, during assembly, board-test or at a later stage, a forced recalibration (FRC) must be performed to ensure performance within specifications.
The STC31-C sensor does not have any non-volatile memory. Therfore the sensor config (state) needs to be stored by the micro-controller in non-volatile memory. On a soft reset or power cylce, those states need to be restored.
The post-soldering FRC procedure is documented in the paragraph 5 of the Desing guide
All used commands and formulas used in this example can be found in the Datasheet
The post soldering FRC process must be performed in a controlled environment with a known CO2 concentration in vol%. In this example we use 0.0 vol% which is what we measure for the atmospheric CO2 concentration. The atmospheric CO2 concentration is 0.04 vol% and as such below the STC31-C accuracy.
The FRC process is done in two loops. In the first loop, we apply the FRC value and in the second loop we verify that the FRC was successful.
For this example we use the STC31-C evaluation kit, with a STC31-C and SHT40 sensor on a flex PCB.
- Measurement frequency: 1Hz
- Weak filter enabled (note: the filter configuration is not stored in the state and therefore needs to be set separately after each soft-reset or power-cylce).
- automatic self-calibration (ASC) enabled.
- Reference CO2 concentration: 0.0 vol% (atmospheric CO2 concentration)
- Measurement duration for stabilization phase: 20s
- Binary gas mode: 0x13 (19). CO2 concentration between 0 to 40% in air.
The configuration can be changed, by changing the various #define
that can be found
at the beginning of the exampleUsageFrc.ino file.
Before the first loop is started, we send a I2C soft reset command to ensure that the sensor is in a clean state.
The first loop is implemented in the function fistFrcLoop()
. It consists of the
following steps.
- Enable automatic self-calibration (ASC)
- Set binary gas mode to 0x13
- Enable weak filter (implemented in the function
configureFilter
) - Measure for 20s at 1Hz to stabilize the readings (section 4.1.1 in the Desing Guide).
humidity and temperature compensation from SHT40 sensor are set before each measurement.
If you have a pressure sensor on the board, you should read out the absolute pressure value
and set it as well (commented out code in the
measureAndPrint
function) - Apply the FRC with a CO2 reference value of 0.0 vol% (raw value: 16384)
- Get the sensor state and store it in the memory of the Arduino. This value should be stored on non-volatile memory in your product.
- Trigger an I2C soft reset to initiate the 2nd loop (verify)
The second loop is implemented in the function secondFrcLoop()
.
- Write and apply the sensor state we previously stored. This will restore all configurations except for the filters.
- Enable weak filter (implemented in the function
configureFilter
) - Measure for 20s at 1Hz to stabilize the readings (See 1st loop step 4).
- Take one more measurement and verify that the CO2 concentration is within specification (0.0 vol%). In this example we allow a margin of +- 1.0 vol%.
If the CO2 concentration is within specification, the FRC was successful and we can use the saved state. If the value is out of specification, the FRC process must be repeated.