<?xml version="1.0" encoding="utf-8"?><!DOCTYPE article  PUBLIC '-//OASIS//DTD DocBook XML V4.4//EN'  'http://www.docbook.org/xml/4.4/docbookx.dtd'><article><articleinfo><title>LabElectronica/ProyectoQuadricoptero/QA3Fase4EstSensYTecMedIner</title><revhistory><revision><revnumber>9</revnumber><date>2010-09-30 00:04:03</date><authorinitials>Jaarac</authorinitials></revision><revision><revnumber>8</revnumber><date>2010-09-06 14:34:20</date><authorinitials>Jaarac</authorinitials></revision><revision><revnumber>7</revnumber><date>2010-09-06 14:33:22</date><authorinitials>Jaarac</authorinitials></revision><revision><revnumber>6</revnumber><date>2010-09-06 14:33:02</date><authorinitials>Jaarac</authorinitials></revision><revision><revnumber>5</revnumber><date>2010-08-20 13:34:17</date><authorinitials>Jaarac</authorinitials></revision><revision><revnumber>4</revnumber><date>2010-08-12 13:20:58</date><authorinitials>Jaarac</authorinitials></revision><revision><revnumber>3</revnumber><date>2010-08-12 13:18:01</date><authorinitials>Jaarac</authorinitials></revision><revision><revnumber>2</revnumber><date>2010-08-10 20:06:16</date><authorinitials>Jaarac</authorinitials></revision><revision><revnumber>1</revnumber><date>2010-08-10 19:23:02</date><authorinitials>Jaarac</authorinitials></revision></revhistory></articleinfo><para>Después de una larga búsqueda de sensores, analizando las características y la disponibilidad de estos, se consiguieron los siguientes sensores. </para><section><title>Gyro</title><section><title>ITG-3200</title><para>Gyro de 3 ejes. </para><para><ulink url="http://www.sparkfun.com/datasheets/Sensors/Gyro/PS-ITG-3200-00-01.4.pdf">Hoja de datos</ulink> </para><para><ulink url="http://www.sparkfun.com/commerce/product_info.php?products_id=9801">Página de SparkFun</ulink> </para><para><ulink url="http://www.sparkfun.com/datasheets/Sensors/Gyro/IDG-3200-ATmega328-4-30-10.zip">Código de ejemplo</ulink> </para><para>Este gyro tiene interfaz I2C. </para><section><title>Explicación de los Registros</title><informaltable><tgroup cols="14"><colspec colname="col_0"/><colspec colname="col_1"/><colspec colname="col_2"/><colspec colname="col_3"/><colspec colname="col_4"/><colspec colname="col_5"/><colspec colname="col_6"/><colspec colname="col_7"/><colspec colname="col_8"/><colspec colname="col_9"/><colspec colname="col_10"/><colspec colname="col_11"/><colspec colname="col_12"/><colspec colname="col_13"/><tbody><row rowsep="1"><entry colsep="1" rowsep="1"><para><emphasis role="strong">Addr Hex</emphasis></para></entry><entry colsep="1" rowsep="1"><para><emphasis role="strong">Addr Decimal</emphasis></para></entry><entry colsep="1" rowsep="1"><para><emphasis role="strong">Register Name</emphasis></para></entry><entry colsep="1" rowsep="1"><para><emphasis role="strong">R/W</emphasis></para></entry><entry colsep="1" rowsep="1"><para><emphasis role="strong">Bit7</emphasis></para></entry><entry colsep="1" rowsep="1"><para><emphasis role="strong">Bit6</emphasis></para></entry><entry colsep="1" rowsep="1"><para><emphasis role="strong">Bit5</emphasis></para></entry><entry colsep="1" rowsep="1"><para><emphasis role="strong">Bit4</emphasis></para></entry><entry colsep="1" rowsep="1"><para><emphasis role="strong">Bit3</emphasis></para></entry><entry colsep="1" rowsep="1"><para><emphasis role="strong">Bit2</emphasis></para></entry><entry colsep="1" rowsep="1"><para><emphasis role="strong">Bit1</emphasis></para></entry><entry colsep="1" rowsep="1"><para><emphasis role="strong">Bit0</emphasis></para></entry></row><row rowsep="1"><entry colsep="1" rowsep="1"><para>  0       </para></entry><entry colsep="1" rowsep="1"><para>  0           </para></entry><entry colsep="1" rowsep="1"><para> WHO_AM_I      </para></entry><entry colsep="1" rowsep="1"><para> R/W </para></entry><entry colsep="1" rowsep="1"><para>  -   </para></entry><entry align="center" colsep="1" nameend="col_10" namest="col_5" rowsep="1"><para>  ID                                      </para></entry><entry colsep="1" rowsep="1"><para>  -   </para></entry></row><row rowsep="1"><entry colsep="1" rowsep="1"><para> 15       </para></entry><entry colsep="1" rowsep="1"><para> 21           </para></entry><entry colsep="1" rowsep="1"><para> SMPLRT_DIV    </para></entry><entry colsep="1" rowsep="1"><para> R/W </para></entry><entry align="center" colsep="1" nameend="col_11" namest="col_4" rowsep="1"><para>                          SMPLRT_DIV                     </para></entry></row><row rowsep="1"><entry colsep="1" rowsep="1"><para> 16       </para></entry><entry colsep="1" rowsep="1"><para> 22           </para></entry><entry colsep="1" rowsep="1"><para> DLPF_FS       </para></entry><entry colsep="1" rowsep="1"><para> R/W </para></entry><entry colsep="1" rowsep="1"><para>  -   </para></entry><entry colsep="1" rowsep="1"><para>  -   </para></entry><entry colsep="1" rowsep="1"><para>  -   </para></entry><entry align="center" colsep="1" nameend="col_9" namest="col_7" rowsep="1"><para>    FS_SEL</para></entry><entry align="center" colsep="1" nameend="col_13" namest="col_10" rowsep="1"><para>        DLPF_CFG </para></entry></row><row rowsep="1"><entry colsep="1" rowsep="1"><para> 17 </para></entry><entry colsep="1" rowsep="1"><para> 23 </para></entry><entry colsep="1" rowsep="1"><para> INT_CFG </para></entry><entry colsep="1" rowsep="1"><para> R/W </para></entry><entry colsep="1" rowsep="1"><para> ACTL </para></entry><entry colsep="1" rowsep="1"><para> OPEN </para></entry><entry colsep="1" rowsep="1"><para> LATCH_INT_EN </para></entry><entry colsep="1" rowsep="1"><para> INT_ANYRD_2CLEAR </para></entry><entry colsep="1" rowsep="1"><para> - </para></entry><entry colsep="1" rowsep="1"><para> INT_RDY_EN </para></entry><entry colsep="1" rowsep="1"><para> - </para></entry><entry colsep="1" rowsep="1"><para> RAW_RDY_EN </para></entry></row><row rowsep="1"><entry colsep="1" rowsep="1"><para> 1A       </para></entry><entry colsep="1" rowsep="1"><para> 26           </para></entry><entry colsep="1" rowsep="1"><para> INT_STATUS    </para></entry><entry colsep="1" rowsep="1"><para> R   </para></entry><entry colsep="1" rowsep="1"><para>  -   </para></entry><entry colsep="1" rowsep="1"><para> -    </para></entry><entry colsep="1" rowsep="1"><para> -    </para></entry><entry colsep="1" rowsep="1"><para> -    </para></entry><entry colsep="1" rowsep="1"><para> -    </para></entry><entry colsep="1" rowsep="1"><para> ITG_RDY </para></entry><entry colsep="1" rowsep="1"><para> - </para></entry><entry colsep="1" rowsep="1"><para> RAW_DATA_RDY </para></entry></row><row rowsep="1"><entry colsep="1" rowsep="1"><para> 1B       </para></entry><entry colsep="1" rowsep="1"><para> 27           </para></entry><entry colsep="1" rowsep="1"><para> TEMP_OUT_H    </para></entry><entry colsep="1" rowsep="1"><para> R   </para></entry><entry align="center" colsep="1" nameend="col_11" namest="col_4" rowsep="1"><para> TEMP_OUT_H </para></entry></row><row rowsep="1"><entry colsep="1" rowsep="1"><para> 1C       </para></entry><entry colsep="1" rowsep="1"><para> 28           </para></entry><entry colsep="1" rowsep="1"><para> TEMP_OUT_L    </para></entry><entry colsep="1" rowsep="1"><para> R   </para></entry><entry align="center" colsep="1" nameend="col_11" namest="col_4" rowsep="1"><para> TEMP_OUT_L </para></entry></row><row rowsep="1"><entry colsep="1" rowsep="1"><para> 1D       </para></entry><entry colsep="1" rowsep="1"><para> 29           </para></entry><entry colsep="1" rowsep="1"><para> GYRO_XOUT_H   </para></entry><entry colsep="1" rowsep="1"><para> R   </para></entry><entry align="center" colsep="1" nameend="col_11" namest="col_4" rowsep="1"><para> GYRO_XOUT_H </para></entry></row><row rowsep="1"><entry colsep="1" rowsep="1"><para> 1E       </para></entry><entry colsep="1" rowsep="1"><para> 30           </para></entry><entry colsep="1" rowsep="1"><para> GYRO_XOUT_L   </para></entry><entry colsep="1" rowsep="1"><para> R   </para></entry><entry align="center" colsep="1" nameend="col_11" namest="col_4" rowsep="1"><para> GYRO_XOUT_L </para></entry></row><row rowsep="1"><entry colsep="1" rowsep="1"><para> 1F       </para></entry><entry colsep="1" rowsep="1"><para> 31           </para></entry><entry colsep="1" rowsep="1"><para> GYRO_YOUT_H   </para></entry><entry colsep="1" rowsep="1"><para> R   </para></entry><entry align="center" colsep="1" nameend="col_11" namest="col_4" rowsep="1"><para> GYRO_YOUT_H </para></entry></row><row rowsep="1"><entry colsep="1" rowsep="1"><para> 20       </para></entry><entry colsep="1" rowsep="1"><para> 32           </para></entry><entry colsep="1" rowsep="1"><para> GYRO_YOUT_L   </para></entry><entry colsep="1" rowsep="1"><para> R   </para></entry><entry align="center" colsep="1" nameend="col_11" namest="col_4" rowsep="1"><para> GYRO_YOUT_L </para></entry></row><row rowsep="1"><entry colsep="1" rowsep="1"><para> 21       </para></entry><entry colsep="1" rowsep="1"><para> 33           </para></entry><entry colsep="1" rowsep="1"><para> GYRO_ZOUT_H   </para></entry><entry colsep="1" rowsep="1"><para> R   </para></entry><entry align="center" colsep="1" nameend="col_11" namest="col_4" rowsep="1"><para> GYRO_ZOUT_H </para></entry></row><row rowsep="1"><entry colsep="1" rowsep="1"><para> 22       </para></entry><entry colsep="1" rowsep="1"><para> 34           </para></entry><entry colsep="1" rowsep="1"><para> GYRO_ZOUT_L   </para></entry><entry colsep="1" rowsep="1"><para> R   </para></entry><entry align="center" colsep="1" nameend="col_11" namest="col_4" rowsep="1"><para> GYRO_ZOUT_L </para></entry></row><row rowsep="1"><entry colsep="1" rowsep="1"><para> 3E       </para></entry><entry colsep="1" rowsep="1"><para> 62           </para></entry><entry colsep="1" rowsep="1"><para> PWR_MGM       </para></entry><entry colsep="1" rowsep="1"><para> R/W </para></entry><entry colsep="1" rowsep="1"><para> H_RESET </para></entry><entry colsep="1" rowsep="1"><para> SLEEP </para></entry><entry colsep="1" rowsep="1"><para> STBY_XG </para></entry><entry colsep="1" rowsep="1"><para> STBY_YG </para></entry><entry colsep="1" rowsep="1"><para> STBY_ZG </para></entry><entry align="center" colsep="1" nameend="col_11" namest="col_9" rowsep="1"><para> CLK_SEL </para></entry></row></tbody></tgroup></informaltable><programlisting format="linespecific" language="highlight" linenumbering="numbered" startinglinenumber="1"><![CDATA[#define WHO     0x00]]>
<![CDATA[#define SMPL    0x15]]>
<![CDATA[#define DLPF    0x16]]>
<![CDATA[#define INT_C   0x17]]>
<![CDATA[#define INT_S   0x1A]]>
<![CDATA[#define TMP_H   0x1B]]>
<![CDATA[#define TMP_L   0x1C]]>
<![CDATA[#define GX_H    0x1D]]>
<![CDATA[#define GX_L    0x1E]]>
<![CDATA[#define GY_H    0x1F]]>
<![CDATA[#define GY_L    0x20]]>
<![CDATA[#define GZ_H    0x21]]>
<![CDATA[#define GZ_L    0x22]]>
<![CDATA[#define PWR_M   0x3E]]>

</programlisting></section><section><title>Configuración para nuestra aplicación</title><itemizedlist><listitem><para>WHO, 0x00, No usado </para></listitem><listitem><para>SMPL, 0x15, Sample rate register, valor = 0  </para></listitem><listitem><para>DLPF, 0x16, DLPF-Full Scale, valor = 00011000b </para><orderedlist numeration="loweralpha"><listitem><para>FS_SEL = 3 , (+-)2000 [º/s], Full scale selection for gyro sensor data </para></listitem><listitem><para>DLPF_CFG = 0 , LPF = 256Hz y <ulink url="https://ciii.frc.utn.edu.ar/wiki/LabElectronica/ProyectoQuadricoptero/QA3Fase4EstSensYTecMedIner/wiki/SampleRate#">SampleRate</ulink> = 8KHz, Digital low pass filter configuration and internal sampling rate configuration </para></listitem></orderedlist></listitem><listitem><para>INT_C, 0x17, Control de Interrupción, valor = 0 </para></listitem><listitem><para>PWR_M, 0x3E, Power management, valor = 00000001b </para><orderedlist numeration="loweralpha"><listitem><para>H_RESET = 0, dispositivo no reseteado </para></listitem><listitem><para>SLEEP = 0, desactivar modo de bajo consumo </para></listitem><listitem><para>STBY_XG = 0, gyro eje x en modo normal ( no standby ) </para></listitem><listitem><para>STBY_YG = 0, gyro eje y en modo normal ( no standby ) </para></listitem><listitem><para>STBY_ZG = 0, gyro eje z en modo normal ( no standby ) </para></listitem><listitem><para>CLK_SEL = 001b, clock de referencia eje x ( ver que en código de ejemplo pone 000b ) </para></listitem></orderedlist></listitem></itemizedlist><para>Los siguientes son de sólo lectura. </para><itemizedlist><listitem><para>INT_S, 0x1A, Estado de la Interrupción </para></listitem><listitem><para>TMP_H, 0x1B, Temperatura bit alto </para></listitem><listitem><para>TMP_L, 0x1C, Temperatura bit bajo </para></listitem><listitem><para>GX_H, 0x1D, Gyro eje x bit alto </para></listitem><listitem><para>GX_L, 0x1E, Gyro eje x bit bajo </para></listitem><listitem><para>GY_H, 0x1F, Gyro eje y bit alto </para></listitem><listitem><para>GY_L, 0x20, Gyro eje y bit bajo </para></listitem><listitem><para>GZ_H, 0x21, Gyro eje z bit alto </para></listitem><listitem><para>GZ_L, 0x22, Gyro eje z bit bajo </para></listitem></itemizedlist></section></section></section><section><title>Acelerómetro</title><section><title>ADXL345</title><para>Acelerómetro de 3 ejes. </para><para><ulink url="http://www.sparkfun.com/datasheets/Sensors/Accelerometer/ADXL345.pdf">Hoja de dato</ulink> </para><para><ulink url="http://www.sparkfun.com/commerce/product_info.php?products_id=9045">Página de SparkFun</ulink> </para></section><section><title>ADXL202</title><para>Acelerómetro de 2 ejes. </para><section><title>Cálculo del ancho de banda</title><para><inlinemediaobject><imageobject><imagedata fileref="https://ciii.frc.utn.edu.ar/wiki?action=cache&amp;do=get&amp;key=ecec2cee22b9f0c314097463ff9820f0591bfa91"/></imageobject><textobject><phrase>$$$ F = \frac{5uF}{C(x,y)} $$</phrase></textobject></inlinemediaobject></para><para>Donde C se expresa en uF y F en Hz. </para><para>Para un ancho de banda de 300Hz, el valor de C es de aproximadamente 16.7uF. </para></section><section><title>Cálculo del período del DCM</title><para><inlinemediaobject><imageobject><imagedata fileref="https://ciii.frc.utn.edu.ar/wiki?action=cache&amp;do=get&amp;key=08076ba0b50d79b5bda707e613d425bf76ed6cd3"/></imageobject><textobject><phrase>$$$ T_2=\frac{R_{SET}}{125M\Omega} $$</phrase></textobject></inlinemediaobject></para><para>Elegiremos como frecuencia del DCM una frecuencia 10 veces más grande que el ancho de banda, o sea unos 3kHz. Para esta frecuencia la R es igual a 42k. </para></section></section></section><section><title>Filtros para combinar las mediciones del acelerómetro y el giroscopio</title><section><title>Filtro Complementario</title></section><section><title>Filtro de Kalman</title></section><section><title>Direction Cosine Matrix</title><para><ulink url="http://vrhome.net/vassilis/2009/12/direction-cosine-matrix-implementation-for-the-chr-6d-imu/">Direction Cosine Matrix implementation for the CHR-6d IMU</ulink> </para></section></section></article>