Q:
When my ADIS16209 starts up, STATUS = 0x0020, which indicates a self-test failure, but the rest of the operation seems to be fine. Is this real? What should I do?
----------------------------------------------------------------------------------------------------------------------------------
A:
At the time of this post, the ADIS16209 datasheet (Rev C) contains some errors in this description, which are being addressed in an upcoming revision. In advance of this, update let's use this discussion to describe the self-test function correctly, for those who are having similar experiences. The self-test function applies an electrostatic force to the MEMS structure, inside of the core sensor, which causes the structure to move in a manner that simulates its response to gravity or linear acceleration. This provides an observable response in the accelerometer outputs, that can serve as a validation of “functional operation” throughout the entire signal chain. The MSC_CTRL register provides two different options for using this function: manual (user-command) and automatic (during start-up/reset recovery).
The manual self-test control is an on/off control for the electrostatic force. Set MSC_CTRL[8] = 1 to turn it on and set MSC_CTRL[8] = 0 to turn it off. For normal operation, this will be in the "off" state but this control bit provides an opportunity to activate it at anytime, so that system processors can apply application-relevant pass/fail criteria to the responses. When MSC_CTRL[10] = 1, the automatic self-test process runs the ADIS16209 through on/off states, while observing the difference in accelerometer response, between "self-test on"and "self-test off." This process concludes with a comparison of the differential response in each accelerometer, with internal pass/fail limits and a report of the result to STATUS[5]. Once the ADIS16209 completes is its start-up process, STATUS is available for a SPI-driven read, using DIN = 0x3C00 as the SPI input command (STATUS at address 0x3C). Linear motion during the start-up process, VDD ramp rates/waveform and the tilt of the device can introduce uncertainty into the on/off levels and in some cases, cause a "false failure" report to STATUS[5] (0x0020). While the selection of the pass/fail limits incorporates most conditions, we have seen a few cases of false failures and the recent updates for improving ADIS16209 sensitivity to power supply configuration seem to have increased this sensitivity a small amount.
When presented with a self-test failure indication, where STATUS > 0x0020, use the following process to manually check for basic function in the ADIS16209:
- Starting assumptions:
- No linear motion
- Stable VDD
- Set AVG_CNT = 0x0000 and SMPL_PRD = 0x0008, in order to optimize the response times during the self-test transitions, while keeping the ADIS16209 in low power mode. In this configuration, the self-test response will be similar to a step response of a single-pole, low-pass filter that has a cutoff frequency of 50Hz.
- Read XACCL_OUT and YACCL_OUT
- Set MSC_CTRL[8] = 1
- Delay > 20ms, which provides the 50Hz filter (internal to ADIS16209) with at least ~ 6 time constants to settle.
- Read XACCL_OUT and YACCL_OUT
- Calculate difference in measurements:
- D-XACCL_OUT = XACCL_OUT (step 6) - XACCL_OUT (step 3)
- D-YACCL_OUT = YACCL_OUT (step 6) - YACCL_OUT (step 3)
- Set MSC_CTRL[8] = 0
- Restore SMPL_PRD and AVG_CNT registers to their operational values
- Determine "normal operation" by make sure that the D-XACCL_OUT and D-YACCL_OUT produced a change of at least 350LSB.
NOTE: 350 LSB is approximately one-half of the datasheet specification for the "minimum" response time but is well above the noise floor. Since this test is designed to find major issues, like "no response," this should be a safe approach for pass/fail criteria.
Let me know how this works and please feel free to post any questions you have.
Best regards,
NevadaMark