RSS

PENGUKURAN KEMIRINGAN MENGGUNAKAN ACCELEROMETER MMA7260 DENGAN CODEVISION AVR TERKALIBRASI

12 Apr

Sensor accelerometer mma7260 buatan Freescale Semiconductor ini mempunyai 6 buah fungsi yaitu untuk mengukur gerakan (movement), getaran (vibration), jatuh (fall), kemiringan (tilt), posisi (positioning) dan benturan (shock).

Saya akan jelaskan bagaimana cara mengakses sensor accelerometer mma7260 untuk mengukur kemiringan (tilt measurement) yang ditampilkan pada LCD 2×16 menggunakan compiler CodeVision AVR.

Berikut adalah schematic accelerometer mma7260.

Pada PD.0 dan PD.1 terdapat 2 buah push button yang digunakan untuk melakukan kalibrasi pada accelerometer, dikarenakan output mma7260 masih berupa tegangan analog yang tidak linear. Berikut adalah output sensor mma7260:

gambar ketidaklinearan output mma7260 sumbu X, Y, Z

Pada dasarnya model matematis persamaan garis diatas sudah diketahui dengan mengacu pada application note AN3107 Measuring Tilt with Low-g Accelerometers.pdf adalah sebagai berikut:

Vout=Voffset+((sensitivitas)*1g *sin θ)

Vout adalah tegangan output accelerometer
Voffset adalah VDD/2 atau saat percepatan=0g atau 1,65 Volt

dari persamaan diatas dapat dirubah menjadi:

Vout=Voffset+S*sin θ;         S=sensitivitas


Ada beberapa cara metode untuk melakukan pembacaan kemiringan, yaitu:

1. Measuring Tilt Using One Axis;
Ax=(Voutx-Voffset)/S;
Ax=percepatan sumbu X(gravitasi)
θ= arcsin (Ax);                     θ=kemiringan (sudut)

2. Measuring Tilt Using Two Axis Solution;
menggunakan sumbu X dan Z.
Ax=(Voutx-Voffset)/S;
Az=(Voutz-Voffset)/S;
θ=arctan (Ax/Az)

3. Measuring Tilt Using Three Axis Solution
Ax=(Voutx-Voffset)/S;
Az=(Voutz-Voffset)/S;
Ay=(Vouty-Voffset)/S;
ρ=arctan(Ax/√(Ay²+Az²));         →picth
Φ=arctan(Ay/√(Ax²+Az²));         →roll
ø=arctan(√(Ax²+Ay²)/Az);         →yaw

Dimana:
Ax = percepatan sumbu X
Ay = percepatan sumbu Y
Az = percepatan sumbu Z

Pada dasarnya jika kita mengacu pada persamaan garis diatas seharusnya kita sudah dapat menghasilkan pembacaan kemiringan dalam satuan derajat yang sudah presisi. Tapi dikarenakan adanya beberapa kelemahan, yang merujuk pada application note AN3447 yaitu:

Sources of offset errors can occur device to device based on offset variations from trim errors, mechanical stresses from the package and mounting, shifts due to temperature and due to aging. These variables can all change the offset. This can be very significant for many applications. The offset error alone can affect a tilt reading on a flat surface by as much as 12 degrees. That is an unacceptable error for this application.

Untuk menghilangkan ketidaklinearan sensor dan adanya kelemahan seperti yang diatas, maka perlu dilakukan kalibrasi (auto zero) yang mengacu pada application note AN3447 Implementing Auto-Zero Calibration Technique for Accelerometers.pdf. Pada AN3447 ada beberapa metode untuk melakukan kalibrasi diantaranya:

1. Manual 0g X, Y, Z Full Range Calibration
2. Simple 0g X, Y, Z Calibration
3. Freefall Calibration, dan
4. Simple 0g X, 0g Y, +1g Z Calibration

Disini saya akan menggunakan metode kedua yaitu “Simple 0g X, Y, Z Calibration” dengan alasan dapat dilakukan dengan mudah, dengan pengambilan data melalui penekanan tombol (push button). Dimana pada kalibrasi ini data setiap sumbu X, Y dan Z  diambil nilai saat 0g (zero gravitation), 1g (earth gravitation atau one gravitation) dan nilai selisih antara 1g dengan 0g (1g-0g atau dengan kata lain adalah Sensitivitas (S)).

Berikut adalah cuplikan program pengukuran kemiringan (tilt measurement) mma7260  (range pengukuran -180 sampai +180 derajat) dan cara kalibrasinya menggunakan dua buah axis X dan Z (Dual Axis XZ), dengan rata-rata error 0.4 derajat (dalam sudut) pada setiap pengukuran.

void kalibrasiZ()
{
if (PIND.0==0 && indeks==3)   // kalibrasi Z
{
g0X = VoutX;              // paralel to earth surface
g0Y = VoutY;            //Z_axis is vertical with Z label UP
g1Z = VoutZ;
indeks=2;
lcd_clear();
lcd_putsf(“proses cal. Z”);
delay_ms(3000);
}
}

void kalibrasiX()
{
if (PIND.0==0 && indeks==2)           // kalibrasi X
{                        //X_axis is vertical with X label UP
g1X = VoutX;
g0Z = VoutZ;
indeks=1;
lcd_clear();
lcd_putsf(“proses cal. X”);
delay_ms(3000);
}
}

void kalibrasiY()
{
if (PIND.0==0 && indeks==1)          //kalibrasi Y
{
g1Y = VoutY;    //Y_axis is vertical with Y label UP
indeks=3;
lcd_clear();
lcd_putsf(“proses cal. Y”);
delay_ms(3000);
}
}

void baca_adc()   //baca adc untuk sumbu X dan Z
{
VoutX = (float)read_adc(0); //0=sumbu X, 1=sumbu Y, 2=sumbu Z
VoutZ = (float)read_adc(2);
}

void hitung_accelerometer()
{
Ax = (float)(VoutX – g0X)/(g1X-g0X);  //persamaan menghitung percepatan X
Az = (float)(VoutZ – g0Z)/(g1Z-g0Z);
sudut = atan2(Ax,Az);     //persamaan menghitung sudut, masih dlm radian
sudut = (sudut*180)/3.14;    //ubah ke dlm sudut
}

void tampilkan_lcd()
{
lcd_putsf(“sudut =”);
ftoa(sudut,1,temp);   //nampilin nilai sudut
lcd_gotoxy(8,0);
lcd_puts(temp);
}

Untuk listing program lengkap yang sudah terkalibrasi dan schematic dapat didownload pada link dibawah ini.

DOWNLOAD PROGRAM DAN SCHEMATIC .

Beberapa application note tentang sensor accelerometer mma7260 yang wajib dijadikan panduan jika anda ingin mengakses sensor tersebut:

Datasheet MMA7260
AN1611 Impact Measurement Using Accelerometers.pdf
AN3107 Measuring Tilt with Low-g Accelerometers.pdf
AN3461 Tilt Sensing Using Linear Accelerometers.pdf
Solutions Based in Accelerometers AC317.pdf
AN3397 Implementing Positioning Algorithms Using Accelerometers.pdf
AN3109 Using the Multi-Axis g-Select Evaluation.pdf
AN3447 Implementing Auto-Zero Calibration Technique for Accelerometers.pdf
AN3151 Detecting Freefall with Low-G Accelerometers.pdf
AN3751 Frequency Analysis in the Industrial Market Using Accelerometer Sensors.pdf
AN3523 Advanced Applications for the Freescale USB_Lite by CMX.pdf

Semoga bermanfaat…

 
6 Comments

Posted by on April 12, 2011 in AVR Projects

 

Tags: , , , , , ,

6 responses to “PENGUKURAN KEMIRINGAN MENGGUNAKAN ACCELEROMETER MMA7260 DENGAN CODEVISION AVR TERKALIBRASI

  1. eko

    May 6, 2011 at 11:20

    mas, mo tanya log programnya accelero untuk yang membaca percepatan am kecepatan tahu tidak mas??
    klo tahu mhon bntuan d share mas programnya..
    thx..

     
  2. ElectrO-cOntrOl

    May 6, 2011 at 14:37

    klo untuk pengukuran percepatan berikut rumusnya:
    Ax=(Voutx-Voffset)/S;//percepatan sumbu X
    Ay=(Vouty-Voffset)/S;//percepatan sumbu Y
    Az=(Voutz-Voffset)/S;//percepatan sumbu Z

    sedangkan untuk mengukur kecepatan,
    kecepatan bisa didapat dari meng-integralkan percepatan. dikarenakan integral dalam kawasan kontinyu maka harus dilakukan diskretisasi terlebih dahulu. Menjadi:
    Velocity= Previous Velocity + Current Acceleration

    Untuk lebih jelasnya anda dapat membaca application note AN3397 dimana sudah terdapat contoh program untuk menghitung kecepatan. Dapat didownload dengan gratis di situs freescale.com

     
    • eko

      May 8, 2011 at 22:03

      bedanya yg rumus ini Ax = (float)(VoutX – g0X)/(g1X-g0X); //persamaan menghitung percepatan X
      Az = (float)(VoutZ – g0Z)/(g1Z-g0Z);
      sama yg ini
      Ax=(Voutx-Voffset)/S;//percepatan sumbu X
      apa mas??

      rencana saya, sensor accelerometer saya pngn bs baca kceptn dan sudut…
      log kcepatan kn dapatinnya dr integral percepatan…
      jd klo mnggunakan program yg ini,
      Ax = (float)(VoutX – g0X)/(g1X-g0X); //persamaan menghitung percepatan X
      Az = (float)(VoutZ – g0Z)/(g1Z-g0Z);
      sudut = atan2(Ax,Az); //persamaan menghitung sudut, masih dlm radian
      sudut = (sudut*180)/3.14; //ubah ke dlm sudut

      apakah dia sudah bisa baca nilai percepatan dan sudut mas???

      oh iya mas, mksih sudah sharing webx…
      tugas akhir saya terbantu mas…

       
  3. eko

    May 18, 2011 at 19:47

    bedanya yg rumus ini Ax = (float)(VoutX – g0X)/(g1X-g0X); //persamaan menghitung percepatan X
    Az = (float)(VoutZ – g0Z)/(g1Z-g0Z);
    sama yg ini
    Ax=(Voutx-Voffset)/S;//percepatan sumbu X
    apa mas??

    rencana saya, sensor accelerometer saya pngn bs baca kceptn dan sudut…
    log kcepatan kn dapatinnya dr integral percepatan…
    jd klo mnggunakan program yg ini,
    Ax = (float)(VoutX – g0X)/(g1X-g0X); //persamaan menghitung percepatan X
    Az = (float)(VoutZ – g0Z)/(g1Z-g0Z);
    sudut = atan2(Ax,Az); //persamaan menghitung sudut, masih dlm radian
    sudut = (sudut*180)/3.14; //ubah ke dlm sudut

    apakah dia sudah bisa baca nilai percepatan dan sudut mas???

    oh iya mas, mksih sudah sharing webx…
    tugas akhir saya terbantu mas…

     
  4. Mulki

    June 22, 2011 at 23:46

    Makasih banyak yo mas,,,,

     

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

 
%d bloggers like this: