<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Re: Accelerometer Axis Misalignment Compensation in Sensors</title>
    <link>https://community.nxp.com/t5/Sensors/Accelerometer-Axis-Misalignment-Compensation/m-p/211592#M129</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Because like all mechanical devices there are tolerances and variations. If you start up the device and read the values you will usually see that there is some measured deflection on x and y and also that z is greater than or equal to 1g.&amp;nbsp; Assuming you are using this in a stationary position on earth then all three axes should add up to give a 1g vector. If you arrange the device so that the z-axis is perpendicular to the earths surface, you should see 1g on that axis.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;See App note,.AN3745&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;A href="http://www.freescale.com/files/sensors/doc/app_note/AN3745.pdf" rel="nofollow" target="_blank"&gt;http://www.freescale.com/files/sensors/doc/app_note/AN3745.pdf&lt;/A&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Peter&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Thu, 08 Jul 2010 21:14:19 GMT</pubDate>
    <dc:creator>PJH</dc:creator>
    <dc:date>2010-07-08T21:14:19Z</dc:date>
    <item>
      <title>Accelerometer Axis Misalignment Compensation</title>
      <link>https://community.nxp.com/t5/Sensors/Accelerometer-Axis-Misalignment-Compensation/m-p/211589#M126</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Does anyone know about three Axis Misalignment Compensation please?&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;How do you do it and does anyone have a little C/C++ to help or even VB that I could convert.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Many thanks&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 03 Feb 2026 22:21:23 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Sensors/Accelerometer-Axis-Misalignment-Compensation/m-p/211589#M126</guid>
      <dc:creator>PartOfTheSoluti</dc:creator>
      <dc:date>2026-02-03T22:21:23Z</dc:date>
    </item>
    <item>
      <title>Re: Accelerometer Axis Misalignment Compensation</title>
      <link>https://community.nxp.com/t5/Sensors/Accelerometer-Axis-Misalignment-Compensation/m-p/211590#M127</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Here's code I used.&amp;nbsp; Make sure that you have the Z-axis oriented so that it is vertical or experiencing 1G since the calibration works best this way.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;void CMMA7455::CalibrateSensor()&lt;BR /&gt;{&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;#define AVG_READS 64&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;int err;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;m_I2C.ModuleWriteByte(GSENSOR,MCTL_REGISTER,MCTL_MODE0+MCTL_GLVL0);&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;int x,y,z;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;long xAvg,yAvg,zAvg;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;xAvg=yAvg=zAvg=0;&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;int lastXOffset=0;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;int lastYOffset=0;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;int lastZOffset=0;&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;SetXAxisOffset(lastXOffset);&amp;nbsp; TRACE(_T("Last X Offset= %i\n"),lastXOffset);&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;SetYAxisOffset(lastYOffset);&amp;nbsp; TRACE(_T("Last Y Offset= %i\n"),lastYOffset);&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;SetZAxisOffset(lastZOffset);&amp;nbsp; TRACE(_T("Last Z Offset= %i\n"),lastZOffset);&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;int loop=0;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;do&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;{&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;xAvg=yAvg=zAvg=0;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;// Read the axes multiple times and average;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;for (int i=0; i&amp;lt;AVG_READS;i++)&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;{&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;signed int data;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;err=ReadXAxis(&amp;amp;data);xAvg+=data;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;err=ReadYAxis(&amp;amp;data);yAvg+=data;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;err=ReadZAxis(&amp;amp;data);zAvg+=data;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;x=int(xAvg&amp;gt;&amp;gt;6);&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;y=int(yAvg&amp;gt;&amp;gt;6);&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;z=int(zAvg&amp;gt;&amp;gt;6);&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;// Calculate the offset.&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;lastXOffset=lastXOffset+(x*-2);&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;lastYOffset=lastYOffset+(y*-2);&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;lastZOffset=lastZOffset+((64-z)*2);&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;//Set the offset.&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;SetXAxisOffset(lastXOffset);&amp;nbsp; TRACE(_T("Last X Offset= %i\n"),lastXOffset);&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;SetYAxisOffset(lastYOffset);&amp;nbsp; TRACE(_T("Last Y Offset= %i\n"),lastYOffset);&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;SetZAxisOffset(lastZOffset);&amp;nbsp; TRACE(_T("Last Z Offset= %i\n"),lastZOffset);&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;// Remeasure the values&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;xAvg=yAvg=zAvg=0;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;for (int i=0; i&amp;lt;=AVG_READS;i++)&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;{&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;signed int data;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;err=ReadXAxis(&amp;amp;data);xAvg+=data;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;err=ReadYAxis(&amp;amp;data);yAvg+=data;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;err=ReadZAxis(&amp;amp;data);zAvg+=data;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;x=int(xAvg&amp;gt;&amp;gt;6);&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;y=int(yAvg&amp;gt;&amp;gt;6);&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;z=int(zAvg&amp;gt;&amp;gt;6);&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;loop++;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;while( ((abs(x)&amp;gt;2) ||(abs(y)&amp;gt;2)||(abs(z-64)&amp;gt;2))&amp;amp;&amp;amp; (loop&amp;lt;10) ) ;&lt;BR /&gt;&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I'll leave the other functions as an exercise for the reader. I assume you can already read and write registers on the device.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 08 Jul 2010 19:32:31 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Sensors/Accelerometer-Axis-Misalignment-Compensation/m-p/211590#M127</guid>
      <dc:creator>PJH</dc:creator>
      <dc:date>2010-07-08T19:32:31Z</dc:date>
    </item>
    <item>
      <title>Re: Accelerometer Axis Misalignment Compensation</title>
      <link>https://community.nxp.com/t5/Sensors/Accelerometer-Axis-Misalignment-Compensation/m-p/211591#M128</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hello,&lt;/P&gt;&lt;P&gt;I understand the code but why are you doing it?&lt;/P&gt;&lt;P&gt;Many thanks&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 08 Jul 2010 21:04:18 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Sensors/Accelerometer-Axis-Misalignment-Compensation/m-p/211591#M128</guid>
      <dc:creator>PartOfTheSoluti</dc:creator>
      <dc:date>2010-07-08T21:04:18Z</dc:date>
    </item>
    <item>
      <title>Re: Accelerometer Axis Misalignment Compensation</title>
      <link>https://community.nxp.com/t5/Sensors/Accelerometer-Axis-Misalignment-Compensation/m-p/211592#M129</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Because like all mechanical devices there are tolerances and variations. If you start up the device and read the values you will usually see that there is some measured deflection on x and y and also that z is greater than or equal to 1g.&amp;nbsp; Assuming you are using this in a stationary position on earth then all three axes should add up to give a 1g vector. If you arrange the device so that the z-axis is perpendicular to the earths surface, you should see 1g on that axis.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;See App note,.AN3745&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;A href="http://www.freescale.com/files/sensors/doc/app_note/AN3745.pdf" rel="nofollow" target="_blank"&gt;http://www.freescale.com/files/sensors/doc/app_note/AN3745.pdf&lt;/A&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Peter&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 08 Jul 2010 21:14:19 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Sensors/Accelerometer-Axis-Misalignment-Compensation/m-p/211592#M129</guid>
      <dc:creator>PJH</dc:creator>
      <dc:date>2010-07-08T21:14:19Z</dc:date>
    </item>
    <item>
      <title>Re: Accelerometer Axis Misalignment Compensation</title>
      <link>https://community.nxp.com/t5/Sensors/Accelerometer-Axis-Misalignment-Compensation/m-p/211593#M130</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hello Peter and many thanks for the post.&lt;/P&gt;&lt;P&gt;Mmmm interesting way of doing this offset and scaling. I get the min &amp;amp; max values then use linear interpolation.&lt;/P&gt;&lt;P&gt;However the problem I am trying to find a solution to is compensating for axis alignment errors.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Have found this but math a bit heaving going for me.&lt;/P&gt;&lt;P&gt;&lt;A href="http://www.summitinstruments.com/knowledge_center/pdf/TN413.pdf" rel="nofollow" target="_blank"&gt;http://www.summitinstruments.com/knowledge_center/pdf/TN413.pdf&lt;/A&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sat, 10 Jul 2010 04:22:53 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Sensors/Accelerometer-Axis-Misalignment-Compensation/m-p/211593#M130</guid>
      <dc:creator>PartOfTheSoluti</dc:creator>
      <dc:date>2010-07-10T04:22:53Z</dc:date>
    </item>
  </channel>
</rss>

