Getting started with osxmotionmc magnetometer calibration library for X-CUBE-MEMS1 expansion for STM32Cube

Similar documents
Getting started with MotionMC magnetometer calibration library in X-CUBE-MEMS1 expansion for STM32Cube

UM2192. Getting started with MotionMC magnetometer calibration library in X-CUBE-MEMS1 expansion for STM32Cube. User manual.

Getting started with osxmotiongc gyroscope calibration library for X-CUBE-MEMS1 expansion for STM32Cube

Getting started with MotionPM real-time pedometer library in X CUBE-MEMS1 expansion for STM32Cube

Getting started with MotionPM real-time pedometer library in X-CUBE-MEMS1 expansion for STM32Cube

UM2350. Getting started with MotionPW real-time pedometer for wrist library in X-CUBE-MEMS1 expansion for STM32Cube. User manual.

UM2194. Getting started with MotionAW activity recognition for wrist library in X-CUBE-MEMS1 expansion for STM32Cube. User manual.

UM2216 User manual. Getting started with MotionFA fitness activity library in X CUBE MEMS1 expansion for STM32Cube. Introduction

Getting started with MotionAR activity recognition library in X-CUBE-MEMS1 expansion for STM32Cube

UM2276. Getting started with MotionSD standing vs sitting desk detection library in X-CUBE-MEMS1 expansion for STM32Cube. User manual.

Getting started with MotionAR activity recognition library in X-CUBE-MEMS1 expansion for STM32Cube

UM2220. Getting started with MotionFX sensor fusion library in X-CUBE-MEMS1 expansion for STM32Cube. User manual. Introduction

Getting started with the FP-SNS-ALLMEMS1 Bluetooth low energy and sensors software expansion for STM32Cube

Getting started with the X-CUBE-MEMS1 motion MEMS and environmental sensor software expansion for STM32Cube

Getting started with X-CUBE-LED channel LED driver software expansion based on LED1642GW for STM32Cube

Getting started with the X-CUBE-IKA02A1 multifunctional software expansion for STM32Cube

Getting started with the FP-NET-6LPBLE1 function pack for 6LoWPAN IoT node connection to a smartphone via BLE interface

Getting started with osxmotionar activity recognition library for X-CUBE-MEMS1 expansion for STM32Cube

IoT node with BLE connectivity, digital microphone, environmental and motion sensors, motion and audio middleware libraries.

Bluetooth low energy profiles for the X-CUBE-BLE1 expansion for STM32Cube. Description

Getting started with FP-SNS-6LPNODE1 software for IoT sensor node connection to 6LoWPAN networks using sub-1ghz RF

Getting started with the X-CUBE-NFC5 high performance HF reader / NFC initiator IC software expansion for STM32Cube

UM2045 User manual. Getting started with the X-CUBE-NFC3 near field communication transceiver software expansion for STM32Cube.

Getting started with the FP-IND-PLCWIFI1 function pack for PLC management via Wi-Fi

STSW-BLUENRG1-DK. BlueNRG-1, BlueNRG-2 DK SW package

AN4624 Application note

Getting started with the STSW-BCNKT01 software package for STEVAL-BCNKT01V1 based on STM32Cube

Running a simple 6LowPAN network consisting of one receiver node and one or more sensor nodes in a Sub-1GHz RF band

Getting started with STEVAL-IDB007V1 and STEVAL-IDB008V1 evaluation boards

Main components MEMS motion sensor: low power high g 3-axis digital accelerometer inemo inertial module: 3D accelerometer and 3D gyroscope

Getting started with osxacousticsl real-time sound source localization software expansion for STM32Cube

Getting started with the X-CUBE-53L1A1 Time-of-Flight long distance ranging sensor software expansion for STM32Cube

Getting started with the software package for STEVAL-STLKT01V1 based on STM32Cube

Getting started with the digital MEMS microphone expansion board based on MP34DT01-M for STM32 Nucleo

UM1853 User manual. STM32CubeF1 Nucleo demonstration firmware. Introduction

NUCLEO-L433RC-P NUCLEO-L452RE-P

Computing tilt measurement and tilt-compensated e-compass

Getting started with the FP-CLD-AWS1 software package for IoT node with Wi-Fi and sensors, connected to Amazon AWS IoT cloud

UM1727 User manual. Getting started with STM32 Nucleo board software development tools. Introduction

This design tip applies to all accelerometers, ecompass modules, and inemo inertial IMUs from STMicroelectronics.

P-NUCLEO-USB001. STM32 Nucleo pack for USB Type-C and Power Delivery. Features. Description

NUCLEO-L496ZG. STM32 Nucleo-144 board. Features. Description

Getting started with VL53L0X ranging and gesture detection sensor software expansion for STM32Cube

DT0095 Design tip. Datalogging the SensorTile through a PC. Purpose and benefits. Description

P-NUCLEO-IKA02A1. STM32 Nucleo pack: electrochemical toxic gas sensor expansion board with CO sensor. Description. Features

X-NUCLEO-53L1A1. Long distance ranging Time-of-Flight sensor expansion board based on VL53L1X for STM32 Nucleo. Description.

AN4515 Application note

P-NUCLEO-USB001. STM32 Nucleo pack for USB Type-C and Power Delivery Data brief. Features. Description

UM1641 User manual. Sampling rate conversion SRC236 library software expansion for STM32Cube. Introduction

STSW-BNRG-Mesh. Mesh over Bluetooth low energy. Features. Description. Applications

32L476GDISCOVERY. Discovery kit with STM32L476VG MCU. Features. Description

Quick Start Guide. Long distance ranging ToF sensor expansion board based on VL53L1X for STM32 Nucleo (X-NUCLEO-53L1A1) Version (February 20, 2018)

Getting started with the STM32 Nucleo pack for USB Type-C and Power Delivery with the Nucleo-F072RB board and the STUSB1602

Main components MEMS digital output motion sensor: high-performance ultra-low-power 3-axis "femto" accelerometer

USB Type-C and Power Delivery Nucleo pack with NUCLEO-F072RB expansion board based on STUSB1602. Description

Getting started with the software package for digital MEMS microphones in X-CUBE-MEMSMIC1 expansion for STM32Cube

X-NUCLEO-53L0A1. Ranging and gesture detection sensor expansion board based on VL53L0X for STM32 Nucleo. Description. Features

Quick Start Guide STM32 ODE Function Pack for IoT sensor node connection to 6LoWPAN networks through sub-1ghz RF communication (FP-SNS-6LPNODE1)

Using the GPIOs and interrupt controller to drive LEDs on STM8 Nucleo-64 boards

UM2361. Getting started with the ST BlueNRG-Mesh ios application. User manual. Introduction

Quick Start Guide. Bluetooth low energy, sensors and NFC tag software for STM32Cube (BLUEMICROSYSTEM3) Version (September 15, 2016)

AN4782 Application note

Software GUI user guide for STEVAL-ISV021V1, STEVAL- IDS002V1 and STEVAL-IDS003V1 evaluation boards

STEVAL-STLKT01V1. SensorTile development kit. Description. Features

Getting started with osxacousticbf real-time beam forming software expansion for STM32Cube

STSW-BNRGUI. BlueNRG GUI SW package. Data brief. Features. Description

Quick Start Guide. High power stepper motor driver expansion board based on powerstep01 for STM32 Nucleo (X-NUCLEO-IHM03A1)

STEVAL-STLKT01V1. SensorTile development kit. Description. Features

Motor control power board based on the SLLIMM-nano 2 nd series

AN3281 Application note

USB Type-C and Power Delivery Nucleo pack with NUCLEO-F072RB expansion board based on the STUSB1602

Getting started with the X-CUBE-SPN2 two-axis stepper motor driver software expansion for STM32Cube

UM2084 User manual. Getting started with the ultra-low-power STM32 and LoRa Nucleo pack. Introduction

UM2051 User manual. Getting started with the STM32 Nucleo pack for USB Type-C and Power Delivery. Introduction

How to upgrade the firmware on the STEVAL-USBC2DP USB Type-C to DisplayPort adapter

Getting started with the P-NUCLEO-IKA02A1 STM32 Nucleo pack for electrochemical toxic gas sensor expansion board with CO sensor

UM1862 User manual. Getting started with STM32F411E Discovery software Development Tools. Introduction

Quick Start Guide. STM32 ODE Function Pack for connecting 6LoWPAN IoT Nodes to smartphone through a BLE interface (FP-NET-6LPBLE1)

UM2092 User manual. Basic metrology firmware for the STM32F103RD and the STPM32 devices. Introduction

STEVAL-BCNKT01V1. BlueCoin Starter kit. Features. Description

Version (Apr 28, 2016)

Quick Start Guide. Bipolar stepper motor driver expansion board based on L6208 for STM32 Nucleo (X-NUCLEO-IHM05A1) Version 1.1.

32F412GDISCOVERY. Discovery kit with STM32F412ZG MCU. Features. Description

P-NUCLEO-53L0A1. VL53L0X Nucleo pack with ranging, gesture detection sensor expansion board and STM32F401RE. Description. Features

P-NUCLEO-53L1A1. VL53L1X nucleo pack with X-NUCLEO-53L1A1 expansion board and STM32F401RE nucleo board. Description. Features

AN4820 Application note

Getting started with the X-CUBE-SPN3 high power stepper motor driver software expansion for STM32Cube

How to configure the BlueNRG-1 and BlueNRG-2 devices in network coprocessor mode. Main components Bluetooth Low Energy wireless system-on-chip

STSW-STWBCFWDT. STWBC firmware downloader tool. Description. Features

Getting started with the ultra-low-power STM32 and LoRa Nucleo pack

UM2232. Getting started with the IO-Link demonstration kit firmware. User manual. Introduction

STM32H7x3I-EVAL. Evaluation board with STM32H7x3XI MCUs. Data brief. Features

UM2495. High performance HF reader / NFC initiator IC software expansion for NUCLEO-8S208RB. User manual. Introduction

TN1235 Technical note

X-NUCLEO-53L0A1 ranging and gesture detection sensor expansion board based on VL53L0X for STM32 Nucleo

Getting started with X-NUCLEO-53L1A1 long distance ranging ToF sensor expansion board based on VL53L1X for STM32 Nucleo

UM2167 User manual. OrCAD PSpice model usage instructions

Quick Start Guide. Stepper motor driver expansion board based on L6474 for STM32 Nucleo (X-NUCLEO-IHM01A1) Version 1.2.

Getting started with the software package for L6474 stepper motor driver X-CUBE-SPN1 expansion for STM32Cube

AN3980 Application note

Transcription:

User manual Getting started with osxmotionmc magnetometer calibration library for X-CUBE-MEMS1 expansion for STM32Cube Introduction The osxmotionmc add-on software package for X-CUBE-MEMS1 software runs on the STM32 and includes drivers that recognize the inertial sensors. It provides real-time magnetometer calibration using hard iron (HI) and scale factor (SF) coefficients to correct magnetometer data. The osxmotionmc magnetometer calibration algorithm is provided in static library format and is designed to be used in STM32 microcontrollers based on the ARM Cortex-M3 or ARM Cortex-M4 architecture. It is built on top of the STM32Cube software technology for portability across different STM32 microcontrollers. The software comes with sample implementations running on the X-NUCLEO-IKS01A1 (with optional STEVAL-MKI160V1) or X-NUCLEO-IKS01A2 expansion board on a NUCLEO-F401RE or NUCLEO- L476RG development board. November 2016 DocID030074 Rev 1 1/17 www.st.com

Contents Contents UM2146 1 osxmotionmc library add-on to X-CUBE-MEMS1 software expansion for STM32Cube... 4 1.1 osxmotionmc overview... 4 1.2 osxmotionmc architecture... 4 1.3 osxmotionmc folder structure... 5 1.4 osxmotionmc library... 6 1.4.1 osxmotionmc library description... 6 1.4.2 osxmotionmc APIs... 6 1.4.3 Storing and loading calibration parameters... 7 1.4.4 API flow chart... 8 1.4.5 Magnetometer calibration demo code... 8 1.4.6 Calibration process... 9 2 Sample application... 11 2.1 Unicleo-GUI utility... 11 3 References... 15 4 Revision history... 16 2/17 DocID030074 Rev 1

List of figures List of figures Figure 1: osxmotionmc plus X-CUBE-MEMS1 software architecture... 5 Figure 2: osxmotionmc package folder structure... 5 Figure 3: osxmotionmc API logic sequence... 8 Figure 4: Rotation of STM32 Nucleo board during calibration... 10 Figure 5: STM32 Nucleo development board plus X-NUCLEO-IKS01A1 and STEVAL-MKI160V1 boards... 11 Figure 6: Unicleo main window... 12 Figure 7: User Messages tab... 12 Figure 8: Activity recognition for Wrist window... 13 Figure 9: Datalog window... 14 DocID030074 Rev 1 3/17

osxmotionmc library add-on to X-CUBE-MEMS1 software expansion for STM32Cube UM2146 1 osxmotionmc library add-on to X-CUBE-MEMS1 software expansion for STM32Cube 1.1 osxmotionmc overview This software is based on the STM32CubeHAL hardware abstraction layer for the STM32 microcontroller. It extends STM32Cube with a board support package (BSP) for the sensor expansion board and middleware components for serial communication with a PC. The drivers abstract low-level details of the hardware and allow the middleware components and applications to access sensor data in a hardware independent fashion. The osxmotionmc real-time software acquires data from the magnetometer and counts the hard iron (HI) and scale factor (SF) (diagonal elements of soft iron matrix) coefficients together with the calibration quality value. The HI and SF coefficients are then used to compensate raw data from the magnetometer. The osxmotionmc package includes a sample application that developers can use to start experimenting with code that enables sensor data logging on a PC. The key package features include: Real-time magnetometer calibration algorithm (under Open.MEMS license) based exclusively on magnetometer data. Complete middleware to build applications on top of X-CUBE-MEMS1. Sample application to transmit real time sensor data to a PC. Easy portability across different MCU families, thanks to STM32Cube. PC-based Windows application to log sensor data. Free user-friendly license terms Sample implementations for X-NUCLEO-IKS01A2 and X-NUCLEO-IKS01A1 (with optional STEVAL-MKI160V1) expansion boards mounted on a NUCLEO-F401RE or NUCLEO-L476RG development board. 1.2 osxmotionmc architecture The following software layers are used by the application to access and use the sensor expansion board: STM32Cube HAL layer: consists of simple, generic and multi-instance APIs (application programming interfaces) which interact with the upper layer applications, libraries and stacks. These generic and extension APIs are based on a common framework so that overlying layers like middleware can function without requiring specific microcontroller unit (MCU) hardware information. This structure improves library code reusability and guarantees easy portability across other devices. Board support package (BSP) layer: provides software support for the STM32 Nucleo board peripherals, excluding the MCU. These specific APIs provide a programming interface for certain board specific peripherals like LEDs, user buttons, etc and can also be used to fetch individual board version information. It also provides support for initializing, configuring and reading data. 4/17 DocID030074 Rev 1

osxmotionmc library add-on to X-CUBE-MEMS1 software expansion for STM32Cube Figure 1: osxmotionmc plus X-CUBE-MEMS1 software architecture Sample Application Utilities Applications CMSIS osxmotionmc Middleware Hardware Abstraction Layer API Drivers Board Support Packages STM32 HTS221 LIS3MDL LSM6DS0 LSM303AGR LPS25HB LPS22HB LSM6DS3 LSM6DSL HW Components STM32 Nucleo Board X-NUCLEO-IKS01A1 Expansion board STEVAL-MKI160V1 Evaluation board (optional) X-NUCLEO-IKS01A2 Expansion board STEVAL-MET001V1 Evaluation board (optional) Development boards 1.3 osxmotionmc folder structure Figure 2: osxmotionmc package folder structure The following folders are included in the package: Documentation: contains a compiled HTML file detailing the software components and APIs. Middlewares: contains the osxmotionmc static library binary code, the library header file, documentation, license information plus header file for node-locked license validation. Projects: contains a sample application for the NUCLEO-F401RE or NUCLEO- L476RG development platforms to access sensor data and calibration coefficients in DocID030074 Rev 1 5/17

osxmotionmc library add-on to X-CUBE-MEMS1 UM2146 software expansion for STM32Cube the IAR Embedded Workbench for ARM, µvision (MDK-ARM) toolchain and System Workbench for STM32 integrated development environments. 1.4 osxmotionmc library Detailed technical information fully describing the functions and parameters of the osxmotionmc APIs can be found in the osxmotionmc_package.chm compiled HTML file the package Documentation folder. The osxmotionmc is provided as a node-locked library which allows derivative firmware images to run on a specific STM32 Nucleo device only. License activation codes must be requested from ST and included in the project (and become part of the build process) prior to usage. The resulting firmware binary image will therefore be node-locked. For complete information about the open.mems license agreement, please refer to the license file located in the Middlewares/ST/STM32_OSX_MotionMC_Library folder. 1.4.1 osxmotionmc library description The osxmotionmc magnetometer calibration library manages data acquired from a magnetometer; it features: update frequency up to 100 Hz hard iron compensation is theoretically unlimited (within sensor range) wide scale factor compensation range from 0.65 to 1.35 in every direction supports all ST magnetometer devices occupies 20 kb of code and 3 kb of data memory the library is available for ARM Cortex-M3 and Cortex-M4 architectures 1.4.2 osxmotionmc APIs The exposed APIs of the osxmotionmc library are listed below: uint8_t osx_motionmc_getlibversion(char *version) retrieves the version of the library *version is a pointer to an array of 35 characters returns number of characters in the version string int osx_motionmc_initialize(int sampletime_ms, unsigned short int onoff) performs osxmotionmc library initialization and setup of the internal mechanism used for node-locking (see Section 4: "References") and enables or disables library. This function must be called before using the magnetometer calibration library. parameter sampletime_ms is the 10 ms (100 Hz) to 60 ms (16.6 Hz) interval between update function calls, which should be greater than or equal to the magnetometer data rate.when the sample rate changes, this function should be called again for disable and enable. When sample rate is inside the recommended range it returns '1', otherwise it returns '0' and the calibration library will not run until a correct sample rate is set. parameter onoff is enable ('1') or disable ('0') library. returns 1 for correct initialization or 0 otherwise (e.g., 0 is returned for license errors) void osx_motionmc_update(int x_mg, int y_mg, int z_mg, int timestamp_ms) executes magnetometer calibration algorithm 6/17 DocID030074 Rev 1

osxmotionmc library add-on to X-CUBE-MEMS1 software expansion for STM32Cube this function must be called at the same frequency indicated in the initialization function parameters x_mg, y_mg, z_mg represent X, Y and Z axis magnetic field strength in 10-3 Gauss (mg) parameter timestamp_ms is the timestamp for magnetometer output values osx_mmc_calquality_t osx_motionmc_getcalparams(int *HI_bias, float SI_matrix[][3]) retrieves the magnetometer calibration coefficients for hard/soft iron compensation and calibration quality factor *HI_bias is the pointer to an array of 3 elements containing the hard iron offset for each axis, the unit is 10-3 G SI_matrix is the soft iron correction matrix (symmetric 3x3 matrix).only scale factor (diagonal elements of the soft iron matrix) applies, the skew (non-diagonal elements) are zero returns calibration quality factor: OSX_MMC_CALQSTATUSUNKNOWN = 0; accuracy of calibration parameters are unknown OSX_MMC_CALQSTATUSPOOR = 1; accuracy of calibration parameters are poor, cannot be trusted OSX_MMC_CALQSTATUSOK = 2; accuracy of calibration parameters are OK OSX_MMC_CALQSTATUSGOOD = 3; accuracy of calibration parameters are good. 1.4.3 Storing and loading calibration parameters The following functions have to be implemented specifically for each target platform: char MCalLoadFromNVM(unsigned short int datasize, unsigned int *data) the function is used to retrieve the magnetometer calibration parameters from storage datasize is the data size *data is the data location pointer returns 0 for correct loading, 1 otherwise if calibration data are not available or deleted, default calibration parameters are used char MCalSaveInNVM(unsigned short int datasize, unsigned int *data) the function is used to save the magnetometer calibration parameters in storage datasize is the data size *data is the data location pointer returns 0 for correct loading, 1 otherwise These functions need to be implemented but should not be called; the magnetometer calibration library decides when to call these functions. They may be implemented as empty (always return 1) if saving and loading calibration coefficients is not needed. DocID030074 Rev 1 7/17

osxmotionmc library add-on to X-CUBE-MEMS1 software expansion for STM32Cube 1.4.4 API flow chart Figure 3: osxmotionmc API logic sequence UM2146 Start GetLibVersion Initialize Wait Expiring Timer Data Read Interrupt Read Magnetometer Data Update GetCalParams Apply Correction Get Corrected Data 1.4.5 Magnetometer calibration demo code The following demonstration code reads data from magnetometer sensor in 10-3 Gauss (mg) (raw_x, raw_y, raw_z) and calculates compensated data in 10-3 Gauss (cal_x, cal_y, cal_z). [ ] #define VERSION_STR_LENG 35 #define SAMPLETIME 40 /* 40ms -> 25 Hz */ [ ] /*** Initialization ***/ volatile uint32_t timestamp = 0; volatile uint8_t islibrunning = 0; volatile int sampletime = SAMPLETIME; char strversion[version_str_leng]; 8/17 DocID030074 Rev 1

osxmotionmc library add-on to X-CUBE-MEMS1 software expansion for STM32Cube /* Magnetometer sensor setup (Output Data Rate, ) */ int magsensorrate; /* current Output Data Rate */ [ ] /* Optional: Get version */ osx_motionmc_getlibversion(strversion); /* Mandatory: Set update period and enable library */ islibrunning = osx_motionmc_initialize(sampletime, 1); /*** Using Magnetometer Calibration algorithm ***/ Timer_OR_DataRate_Interrupt_Handler() { int raw_x, raw_y, raw_z; int cal_x, cal_y, cal_z; int HI_bias[3]; /* Hard iron - offset */ float SI_matrix[3][3]; /* Soft iron - correction matrix */ osx_mmc_calquality_t goodness; /* Magnetometer sensor current Output Data Rate has meanwhile changed */ if (sampletime!= magsensorrate) { sampletime = magsensorrate /* Disable library*/ islibrunning = osx_motionmc_initialize(sampletime, 0); /* Re-enable library*/ islibrunning = osx_motionmc_initialize(sampletime, 1); } /* Get X/Y/Z in mg */ MEMS_Read_MagValue(&raw_x, &raw_y, &raw_z); /* Magnetometer calibration algorithm update*/ osx_motionmc_update(raw_x, raw_y, raw_z, timestamp * sampletime); /* Get correction */ goodness = osx_motionmc_getcalparams(hi_bias, SI_matrix); /* Apply correction */ cal_x = (int)((raw_x - HI_bias[0])* SI_matrix[0][0] + (raw_y - HI_bias[1])* SI_matrix[0][1] + (raw_z - HI_bias[2])* SI_matrix[0][2]); cal_y = (int)((raw_x - HI_bias[0])* SI_matrix[1][0] + (raw_y - HI_bias[1])* SI_matrix[1][1] + (raw_z - HI_bias[2])* SI_matrix[1][2]); cal_z = (int)((raw_x - HI_bias[0])* SI_matrix[2][0] + (raw_y - HI_bias[1])* SI_matrix[2][1] + (raw_z - HI_bias[2])* SI_matrix[2][2]); timestamp++;} 1.4.6 Calibration process This calibration algorithm uses the specific motion of the magnetometer sensor exposed to Earth s gravitation field. DocID030074 Rev 1 9/17

osxmotionmc library add-on to X-CUBE-MEMS1 software expansion for STM32Cube UM2146 1 Rotate the STM32 Nucleo board slowly in a figure eight pattern through 3D space. This is not a planar movement; you need to tilt and rotate the device to cover as many different 3D spatial positions as possible. Use the 3D Plot (see Section 2.1: "Unicleo-GUI utility") during calibration; the measured data points should cover as much of the 3D sphere as possible. While performing calibration pattern, keep the Nucleo board clear of other magnetic objects such as cell phones, computers and other steel objects. Figure 4: Rotation of STM32 Nucleo board during calibration 10/17 DocID030074 Rev 1

Sample application 2 Sample application The osxmotionmc middleware can be easily manipulated to build user applications. A sample application example in the Projects folder is designed to run on either: a NUCLEO-F401RE or NUCLEO-L476RG development board connected to an X- NUCLEO-IKS01A1 expansion board with optional STEVAL-MKI160V1 board a NUCLEO-F401RE or NUCLEO-L476RG development board connected to an X- NUCLEO-IKS01A2 expansion board. Figure 5: STM32 Nucleo development board plus X-NUCLEO-IKS01A1 and STEVAL-MKI160V1 boards Magnetometer algorithm output data may be displayed in real time through a specific GUI. 2.1 Unicleo-GUI utility The osxmotionmc software package for STM32Cube uses the Windows Unicleo-GUI utility, which can be downloaded from www.st.com (see 5). 1 Ensure that the necessary drivers are installed and the STM32 Nucleo board with appropriate expansion board is connected to the PC. DocID030074 Rev 1 11/17

Sample application UM2146 2 Launch the Unicleo-GUI application to open the main application window. If an STM32 Nucleo board with supported firmware is connected to the PC, it will automatically be detected and the appropriate COM port will be opened. Figure 6: Unicleo main window 3 Start and stop data streaming by using the appropriate buttons on the vertical tool bar. The data coming from the connected sensor can be viewed in the User Messages tab. Figure 7: User Messages tab 12/17 DocID030074 Rev 1

Sample application 4 Click on 2D Plot Uncalibrated and 2D Plot Calibrated icons in the vertical tool bar to open the corresponding windows. The uncalibrated data window shows the hard-iron distortion. The calibrated data window shows all the data centered on the origin (0,0,0) as the hard-iron distortion has been removed through calibration. red = X-Y plane green = X-Z plane blue = Y-Z plane Figure 8: Activity recognition for Wrist window DocID030074 Rev 1 13/17

Sample application UM2146 5 Click on 3D Plot Uncalibrated and 3D Plot Calibrated icons in the vertical tool bar to open the corresponding windows. The uncalibrated data window shows the hard-iron distortion, with the 3D sphere subject to offsets in the x,y and z directions. The calibrated data window shows the 3D sphere centered on the origin (0,0,0) as the hard-iron distortion has been removed through calibration. The Calibrated Magnetometer 3D Plot also shows the hard-iron and soft-iron coefficients and calibration quality (Goodness). in soft-iron matrix, only scale-factor (diagonal elements) applies, skew (nondiagonal) elements are always zero Figure 9: Datalog window 14/17 DocID030074 Rev 1

References 3 References 1. UM1859: Getting started with the X-CUBE-MEMS1 motion MEMS and environmental sensor software expansion for STM32Cube 2. DB3132: Real-time megnetometer calibration software expansion for STM32Cube 3. UM2012: osxmotionxx system setup 4. UM1724: STM32 Nucleo-64 boards 5. UM2128: Unicleo-GUI DocID030074 Rev 1 15/17

Revision history UM2146 4 Revision history Table 1: Document revision history Date Version Changes 18-Nov-2016 1 Initial release. 16/17 DocID030074 Rev 1

IMPORTANT NOTICE PLEASE READ CAREFULLY STMicroelectronics NV and its subsidiaries ( ST ) reserve the right to make changes, corrections, enhancements, modifications, and improvements to ST products and/or to this document at any time without notice. Purchasers should obtain the latest relevant information on ST products before placing orders. ST products are sold pursuant to ST s terms and conditions of sale in place at the time of order acknowledgement. Purchasers are solely responsible for the choice, selection, and use of ST products and ST assumes no liability for application assistance or the design of Purchasers products. No license, express or implied, to any intellectual property right is granted by ST herein. Resale of ST products with provisions different from the information set forth herein shall void any warranty granted by ST for such product. ST and the ST logo are trademarks of ST. All other product or service names are the property of their respective owners. Information in this document supersedes and replaces information previously supplied in any prior versions of this document. 2016 STMicroelectronics All rights reserved DocID030074 Rev 1 17/17