logo资料库

Embedded Motion Driver V5.1.1 教程.pdf

第1页 / 共12页
第2页 / 共12页
第3页 / 共12页
第4页 / 共12页
第5页 / 共12页
第6页 / 共12页
第7页 / 共12页
第8页 / 共12页
资料共12页,剩余部分请下载后查看
InvenSense Inc. 1197 Borregas Ave., Sunnyvale, CA 94089 U.S.A. Tel: +1 (408) 988-7339 Fax: +1 (408) 988-8104 Website: www.invensense.com Document Number: Revision: 1.0 Release Date: 12/19/2012 Embedded Motion Driver 5.1.1 Tutorial A printed copy of this document is NOT UNDER REVISION CONTROL unless it is dated and stamped in red ink as, “REVISION CONTROLLED COPY.” This information furnished by InvenSense is believed to be accurate and reliable. However, no responsibility is assumed by InvenSense for its use, or for any infringements of patents or other rights of third parties that may result from its use. Specifications are subject to change without notice. InvenSense reserves the right to make changes to this product, including its circuits and software, in order to improve its design and/or performance, without prior notice. InvenSense makes no warranties, neither expressed nor implied, regarding the information and specifications contained in this document. InvenSense assumes no responsibility for any claims or damages arising from information contained in this document, or from the use of products and services detailed therein. This includes, but is not limited to, claims or damages based on the infringement of patents, copyrights, mask work and/or other intellectual property rights. Certain intellectual property owned by InvenSense and described in this document is patent protected. No license is granted by implication or otherwise under any patent or patent rights of InvenSense. This publication supersedes and replaces all information previously supplied. Trademarks that are registered trademarks are the property of their respective companies. InvenSense sensors should not be used or sold in the development, storage, production or utilization of any conventional or mass-destructive weapons or for any other weapons or life threatening applications, as well as in any other life critical applications such as medical equipment, transportation, aerospace and nuclear instruments, undersea equipment, power plant equipment, disaster prevention and crime prevention equipment. Copyright ©2011 InvenSense Corporation.
Embedded Motion Driver 5.1.1 Tutorial Document Number: Revision: 1.0 Release Date: 12/19/2012 TABLE OF CONTENTS 1. REVISION HISTORY ................................................................................................................................... 3 2. PURPOSE .................................................................................................................................................... 3 3. REQUIREMENTS ........................................................................................................................................ 3 4. INTRODUCTION TO MOTION DRIVER...................................................................................................... 4 5. OPENING UP THE MOTION DRIVER PROJECT IN CODE COMPOSER STUDIO ................................. 5 6. EXPLAINING MOTION DRIVER AND THE FUNCTIONAL SPECIFICATION IN MORE DETAIL ............ 5 6.1 6.2 6.3 6.4 6.5 6.6 6.7 6.8 DMP ................................................................................................................................................... 5 I2C DRIVER TO INTERFACE WITH INVENSENSE IC .................................................................................. 6 GYROSCOPE AND ACCELEROMETER SELF-TEST FUNCTION CALLS ........................................................... 7 ACCELEROMETER CALIBRATION ............................................................................................................ 7 GYROSCOPE CALIBRATION ................................................................................................................... 8 LOW POWER ACCELEROMETER MOTION INTERRUPT ............................................................................... 8 ABILITY TO CHANGE SENSOR ODRS OF THE GYROSCOPE AND ACCELEROMETER ..................................... 8 ABILITY TO SELECT WHICH DATA TO POPULATE IN THE FIFO USING A FUNCTION CALL .............................. 8 7. TESTING THE MOTION DRIVER USING THE MOTIONFIT SDK AND PYTHON SCRIPT ...................... 8 8. GET COMPASS DATA VIA MOTION DRIVER ........................................................................................ 10 9. COMPASS INTEGRATION AND CALIBRATION .................................................................................... 10 10. SPI DRIVER IMPLEMENTATION ............................................................................................................. 10 11. APPENDIX ................................................................................................................................................. 11 11.1 APPENDIX A ................................................................................................................................... 11 11.2 APPENDIX B ................................................................................................................................... 12 12. REFERENCES ........................................................................................................................................... 12 CONFIDENTIAL & PROPRIETARY 2 of 12
1. Revision History Embedded Motion Driver 5.1.1 Tutorial Document Number: Revision: 1.0 Release Date: 12/19/2012 Revision Date Revision Description 12/19/2012 1.0 Document created 2. Purpose Motion Driver is a sensor driver layer that easily configures and leverages the on board Digital Motion Processor (DMP) capabilities of InvenSense’s Motion Tracking devices. Motion Driver is a subset of the Embedded MotionApps software that enables easier porting to multiple MCU architectures. This document illustrates the practical usage of the Motion Driver library. The included tutorial is written for compatibility with the MSP430 embedded microcontroller from TI, and as such, some knowledge of the MSP430 architecture is recommended. The MSP430 is used as an example platform only. Motion Driver can be ported easily to any MCU. 3. Requirements 3.1 Code Composer Studio (to compile the MSP430 example only) 3.2 Motion Driver source files 3.3 MotionFit™ development board or similar hardware (for example only) CONFIDENTIAL & PROPRIETARY 3 of 12
Embedded Motion Driver 5.1.1 Tutorial Document Number: Revision: 1.0 Release Date: 12/19/2012 4. Introduction to Motion Driver Motion Driver consists of a set of API’s written in ANSI compatible C to use and configure the different functions of InvenSense Motion Tracking devices, including DMP operation. This tutorial provides a sample project which sends out fused quaternion data from the accelerometer and gyroscope (6-axis Quaternion) onto the serial port of the PC which is processed by a client written in python to display and rotate a 3 dimensional cube on the screen. The 6 axis and 9 axis InvenSense devices are supported in this driver. The following is addressed in this Motion Driver tutorial: - How to load, configure, and leverage DMP functions. - I2C driver example for the MSP430. - Gyroscope and accelerometer self-test function calls based on the hardware self-test document. (Please refer to the product Register Map document for full self-test descriptions). - Accelerometer calibration and updating parameters within the hardware registers. - Gyroscope calibration - Configuring the low power accelerometer motion interrupt - Ability to change the sensor Output Data Rate (ODR) of the gyroscope and accelerometer. - Ability to select which data is populated in the FIFO. CONFIDENTIAL & PROPRIETARY 4 of 12
Embedded Motion Driver 5.1.1 Tutorial Document Number: Revision: 1.0 Release Date: 12/19/2012 5. Opening up the Motion Driver Project in Code Composer Studio 1. Select import under the file menu. 2. Choose existing CCS eclipse project. 3. Click the browse button to select the Motion Driver folder. 4. Open the Motion Driver project by clicking finish. Figure Shows steps 1 to 3 to open the motion driver project Figure showing the step 4 and the final IDE with Motion Driver 5. Open the file motion_driver_test.c under the simple_apps folder. This file will be referred to as the “main” file throughout this tutorial. The main file includes examples on how to configure the Motion Driver and has in-source documentation to help users read through each line of code. 6. Explaining Motion Driver and the Functional Specification in More Detail 6.1 DMP 1. DMP and DMP features: The DMP is a unique hardware feature of InvenSense MPU devices which is capable of computing quaternion data from sensor readings, performing device calibration, and also includes application specific features such as pedometer step-counting. The DMP image (firmware) is held in volatile memory on the MPU and needs to be updated to the CONFIDENTIAL & PROPRIETARY 5 of 12
Embedded Motion Driver 5.1.1 Tutorial Document Number: Revision: 1.0 Release Date: 12/19/2012 DMP every time the chip powers up to leverage this functionality. The features which the Motion Driver DMP image supports include: a) DMP_FEATURE_LP_QUAT: This is a low power (gyro angle) three axis quaternion which is calculated from the gyroscope data at 200HZ within the DMP. b) DMP_FEATURE_6X_LP_QUAT: This is a low power six axis sensor fusion output calculated from the gyroscope and accelerometer data at 200 Hz within the DMP. c) DMP_FEATURE_TAP: This is a “tap” gesture feature where one can detect a tap event and sense basic features such as single tap/double tap, or the direction of the tap. d) DMP_FEATURE_ANDROID_ORIENT: This feature is the implementation of the display orientation as compatible with Google Motion_driver devices. This feature includes a state machine which calculates display orientation. e) DMP_PEDOMETER: This is a step-counting feature that is always ON and running on the DMP while the MPU is powered. The Motion Driver library can reset pedometer step count value, query for the walk time, and return step count. There is a latency of 7 steps before updating the step count number and walk time to improve accuracy and minimize false-detection. This feature is always enabled as long as the DMP is enabled. f) DMP_FEATURE_GYRO_CAL: This feature when enabled will calibrate the gyroscope bias whenever the device is in the state of no-motion for more than 8 seconds. g) DMP_FEATURE_SEND_RAW_ACCEL: Adds raw accelerometer data to the FIFO and the accelerometer data is in chip coordinates h) DMP_FEATURE_SEND_RAW_GYRO: Add raw gyro data to the FIFO. The gyroscope coordinate is in the chip coordinates. i) DMP_FEATURE_SEND_CAL_GYRO: Add calibrated gyro data to the FIFO. Cannot be used in combination with DMP_FEATURE_SEND_RAW_GYRO. The output is in the device frame or the body frame instead of chip frame. 2. Steps to load and enable DMP features: The sequence of updating the image and initializing the DMP features is highlighted in the sample application provided within the Motion Driver library project. These steps include: the DMP the MPU memory: Helper a) Push image into function dmp_load_motion_driver_firmware is provided for this task. b) Push the Gyroscope and Accelerometer Orientation Matrix to the DMP: An orientation matrix can be sent to the DMP to transform the output orientation reference to the board or device coordinate system. dmp_set_orientation () function updates the orientation matrix. c) DMP Callbacks: Some DMP features register a call back to alert the main program. These call backs get triggered when the features on the DMP, like orientation ready or tap are detected. There are helper functions provided as an example in the Motion Driver like dmp_register_android_orient_cb(android_orient_cb); for the orientation change feature. Note that registering a call back does not enable a feature by default. d) Enable DMP features: Helper function dmp_enable_feature () is provided. e) Data Rate: The FIFO rate defines the output data rate of the DMP and can be updated with the helper function mpu_set_fifo_rate (input). 6.2 I2C driver to interface with InvenSense IC 1. An I2C driver is implemented here for the MSP430F5528 platform and is given in source so that it can be easily ported to any MCU platform. msp430_i2c_write and msp430_i2c_read functions provide the primary functionality for reading and writing data while msp430_i2c_enable and msp430_i2c_disable are the functions provided to enable and disable the I2C communication for the MSP430F5528. These functions require the slave address, register address, length and data to be read and written. Please check the file mps430_i2c.c for more details on the implementation. CONFIDENTIAL & PROPRIETARY 6 of 12
Embedded Motion Driver 5.1.1 Tutorial Document Number: Revision: 1.0 Release Date: 12/19/2012 6.3 Gyroscope and accelerometer self-test function calls The MPU’s gyroscope and accelerometer self-test feature permits users to test the mechanical and electrical portions of the gyroscope and accelerometer. When the self-test is activated, the on-board electronics will actuate the appropriate sensor. This actuation will move the gyroscope’s proof masses over a distance equivalent to a pre-defined Coriolis force, simulating an external force on the accelerometer. This results in a change in the sensor output, which is reflected in the output signal. The output signal is used to observe the self-test response in combination with the self-test registers. The self-test response (STR) is defined as follows: ݈݈݈݈݂݂݂݂ܵܵܵܵ݁݁݁݁ܶܶܶܶ݁݁݁݁ݏݏݏݏݐݐݐݐ ܴܴܴܴ݁݁݁݁ݏݏݏݏ݌݌݌݌݋݋݋݋݊݊݊݊ݏݏݏݏ݁݁݁݁ = Sensor ܱܱܱܱݑݑݑݑݐݐݐݐ݌݌݌݌ݑݑݑݑݐݐݐݐ ݓݓݓݓ݅݅݅݅ݐݐݐݐℎℎℎℎ ݈݈݈݈݂݂݂݂ܵܵܵܵ݁݁݁݁ܶܶܶܶ݁݁݁݁ݏݏݏݏݐݐݐݐ ܧܧܧܧܾܾܾܾ݈݈݈݈݊݊݊݊ܽܽܽܽ݁݁݁݁݀݀݀݀ − Sensor ܱܱܱܱݑݑݑݑݐݐݐݐ݌݌݌݌ݑݑݑݑݐݐݐݐ ݓݓݓݓ݅݅݅݅ݐݐݐݐℎℎℎℎ ݈݈݈݈݂݂݂݂ܵܵܵܵ݁݁݁݁ܶܶܶܶ݁݁݁݁ݏݏݏݏݐݐݐݐ ܦܦܦܦ݅݅݅݅ݏݏݏݏܾܾܾܾ݈݈݈݈ܽܽܽܽ݁݁݁݁݀݀݀݀ This self-test response is used to determine whether the part has passed or failed the self-test by finding the change from the factory trim of the self-test response: ܥܥܥܥℎℎℎℎܽܽܽܽ݊݊݊݊݃݃݃݃݁݁݁݁ ݂݂݂݂ݎݎݎݎ݋݋݋݋݉݉݉݉ ܨܨܨܨܽܽܽܽܿܿܿܿݐݐݐݐ݋݋݋݋ݎݎݎݎݕݕݕݕ ܶܶܶܶݎݎݎݎ݅݅݅݅݉݉݉݉ ݋݋݋݋݂݂݂݂ ݐݐݐݐℎℎℎℎ݁݁݁݁ ݈݈݈݈݂݂݂݂ܵܵܵܵ݁݁݁݁- ܶܶܶܶ݁݁݁݁ݏݏݏݏݐݐݐݐ ܴܴܴܴ݁݁݁݁ݏݏݏݏ݌݌݌݌݋݋݋݋݊݊݊݊ݏݏݏݏ݁݁݁݁(%) = (ܴܴܴܴܵܵܵܵܶܶܶܶ − ܨܨܨܨܶܶܶܶ) / ܨܨܨܨܶܶܶܶ The int mpu_run_self_test(long* gyro, long* accel) API is provided by Motion Driver to perform a self-test for the gyroscope and accelerometer. 0 will be returned if the self-test is executed successfully. Gyroscope values obtained from mpu_run_self_test should be scaled to the current gyroscope sensitivity settings. Gyroscope sensitivity parameters can be obtained by calling mpu_get_gyro_sens(float* sens). Scale back the Q16 formatted values of the gyroscope and accelerometer to store the newly obtained gyro bias values. is done with the in The accelerometer self-test is performed to ensure that the accelerometer is functioning correctly and function accel_self_test(accel, accel_st). The accel_st parameter refers to the standard accelerometer bias values which can be obtained from the MPU registers by calling get_st_biases. function mpu_run_self_test() which turn calls another Refer to the function run_self_test as an example in motion_driver_test.c for more details. Also refer to the following functions for more information: • mpu_run_self_test • • get_st_biases accel_self_test 6.4 Accelerometer calibration Accelerometer calibration updates bias values if necessary and can be done by comparing the current acceleration values during periods of zero motion by laying down the board on a flat surface. Accelerometer calibration is executed with the function accel_self_test(accel, accel_st), which is included in inv_mpu.c. This function retrieves the standard biases of the accelerometer from the MPU registers (function call get_st_biases returns the standard biases) and the current accelerometer reading and then calculates the shift variance of the two to compare it with the maximum and minimum g-values assigned to an instance of test_s struct i.e. in inv_mpu.c const struct test_s test = { .gyro_sens = 32768/250, .accel_sens = 32768/16, .reg_rate_div = 0, /* 1kHz. */ .reg_lpf = 1, /* 188Hz. */ .reg_mpu_fsr = 0, /* 250dps. */ .reg_accel_fsr = 0x18, /* 16g. */ .wait_ms = 50, .packet_thresh = 5, /* 5% */ .min_dps = 10.f, .max_dps = 105.f, .max_gyro_var = 0.14f, .min_g = 0.3f, .max_g = 0.95f, .max_accel_var = 0.14f}; CONFIDENTIAL & PROPRIETARY 7 of 12
Embedded Motion Driver 5.1.1 Tutorial Document Number: Revision: 1.0 Release Date: 12/19/2012 To update the accelerometer bias values stored in the MPU hardware registers, call mpu_set_accel_bias. Note that the gyro biases are updated in the DMP memory, while the accelerometer biases are stored in hardware registers. Please refer to the implementation mpu_set_accel_bias for more details. 6.5 Gyroscope calibration The DMP provides a way to calibrate the gyroscope bias based on a no motion state of the device. This feature can be enabled by selecting the DMP_FEATURE_GYRO_CAL in DMP features. Once this feature is enabled, and if the board is not moving for more than 8 seconds the gyroscope will automatically be calibrated. 6.6 Low power accelerometer motion interrupt This paragraph explains the section of the driver which helps implement the Low Power (LP) Accelerometer interrupt mode, which can be used to sleep the host processor during periods of no motion, until a motion is detected. The function int mpu_lp_motion_interrupt (unsigned short thresh, unsigned char time, unsigned char lpa_freq) configures the LP Accelerometer interrupt mode with three parameters (further described in the Embedded Motion Driver API Specification document), including threshold, time, and LPA frequency. In this mode, the device will continue to sample the accelerometer at a fixed frequency, until a signal above the threshold is measured for a period of time. If a time period is chosen which is shorter than the sample period value defined by lpa_freq, the LP Accelerometer interrupt will trigger on the first sample which is of greater value than the defined threshold. Check the individual product specification for more details on the low power accel interrupt. 6.7 Ability to change sensor ODRs of the gyroscope and accelerometer InvenSense MPUs provide a programmable range of output data rates for the gyroscope and accelerometer. It can be configured by writing a value to the SMPLRT_DIV, gyroscope output data rate can be given as: Sample Rate = Gyroscope Output Rate / (1 + SMPLRT_DIV) Motion Driver provides an easy way to configure the ODR of the gyroscope with the function mpu_set_sample_rate. However, when the DMP is turned on, the gyroscope is preset to a 200Hz sampling rate and mpu_set_sample_rate should not be used. When the DMP is turned off the maximum value can be configured up to 8khz, depending on the MPU device specification. When the DLPF is disabled (DLPF_CFG = 0 or 7) then the maximum gyroscope output rate is 8kHz and when the DLPF is enabled it is 1kHz. The maximum accelerometer output rate is 1kHz. For a sample rate greater than 1kHz, the same accelerometer sample may be output to the FIFO, DMP, and sensor registers more than once. 6.8 Ability to select which data to populate in the FIFO using a function call A FIFO buffer is provided inside the MPU to queue sensor register’s values and reduce the required read rate from the MCU. Only accelerometer and gyroscope sensor data can be pushed into the FIFO buffer. Each axis of gyroscope data can be stored in the FIFO independently if desired. Accelerometer output can only be used to save all three axis values simultaneously. Motion Driver provides the function int mpu_configure_fifo(unsigned char sensors) to configure the FIFO buffer. The value of sensors includes a combination of the following flags: INV_X_GYRO, INV_Y_GYRO, INV_Z_GYRO, INV_XYZ_GYRO, INV_XYZ_ACCEL. 7. Testing the Motion Driver Using the MotionFit SDK and Python script • Build the project and load it on the SDK. CONFIDENTIAL & PROPRIETARY 8 of 12
分享到:
收藏