Individální projekty MPOA

Mikroprocesory s architekturou ARM

Uživatelské nástroje

Nástroje pro tento web


2018:accel-roll-pitch

Toto je starší verze dokumentu!


Výpočet náklonu z akcelerometru

Zadanie

Na vývojové desce STM32F4DISCOVERY s akcelerometrem LIS302DL/LIS3DSH realizujte výpočet příčného a podélného náklonu (roll, pitch). Uvažujte libovolnou polohu akcelerometru vůči základně, t.j. implementujte derotaci vstupního datového vektoru dle postupu v DT0076.


Úvod

Cieľom tohto projektu je:

  • realizovať výpočet priečneho a pozdĺžneho náklonu(angl. roll a pitch)
  • kompenzovať náklon pomocou derotačnej matice pre ľubovoľnú polohu akcelerometru voči referenčnej rovine

Derotačná matica bude počítaná pomocou Matlabu, pretože obsahuje goniometrické funkcie. Program bude možno ovládať cez UART konzolu (vložiť derotačnú maticu, kompenzovať výpočet náklonu).

Hardware

K realizácii projektu bola použitá vývojová deska STM32F4DISCOVERY od firmy STMicroelectronics, súčasťou ktorej je 3-osový MEMS akcelerometer LIS302DL/LIS3DSH. Vývojová doska taktiež obsahuje ST-Link/V2 programátor/debugger. Je založená na jadre ARM Cortex-M4, ktorý je taktovaný 8MHz kryštálom, má 1MB Flash pamäť a 192kB RAM. K umožneniu ovládania programu z počítača cez konzolu pomocou sériovej linky bol použitý UART-USB prevodník s čipom CP2102.

Software

Ako vývojové prostredie bolo použitý EmBitz. Základné části programu s nastavením periférií boli vytvorené v programe STM32CubeMX, nastavené bolo sériové rozhranie UART s DMA kontrolérom a časovač Timer2. K ovládaniu akcelerometru bol použitý BSP (Board Support Package) knižnice vývojovej dosky.

Výpočet náklonu

Pre výpočet pozdĺžneho a priečneho náklonu roll a pitch bola vytvorená funkcia get_degree_tilt. Pri pomalom otáčaní pôsobí na akcelerometer hlavne gravitačná sila, zrýchlenie v jednotlivých osách akcelerometru je dané gravitačným zrýchlením. Skusmým otáčaním dosky s akcelerometrom boli zistené maximálne hodnoty zrýchlenia v jednotlivých osách, pre účely merania náklonu bolo urobené obmedzenie hodnôt zrýchlenia zhora a nasleduje prepočet na uhly 0° až 90° (-90° až 0° resp.).

float get_degree_tilt(float val, int16_t max_val)
{
    float deg_tilt;
    /* constrain values */
    if(val > max_val) {
      val = max_val;
    }
    else if(val < -max_val) {
      val = -max_val;
    }
 
   /*map values to range -90° - 90° */
   deg_tilt = (90*val) / max_val;
 
   return deg_tilt;
}

Na nasledujúcom obrázku je zobrazený pravotočivý súradnicový systém na vývojovej doske. Podľa hodnôt získaných z akcelerometru má ten orientáciu osí podľa ľavotočivého súradnicového systému, preto pri výpočte náklonu sa hodnotám zrýchlenia v ose x otáča znamienko (otáčame x-ovú os), keďže výpočet derotačnej matice podľa DT0076 aj podľa funkcií MATLABU prebieha v pravotočivom súradnicovom systéme.

Priečny náklon je definovaný ako rotácia okolo osi x a pozdĺžny náklon ako rotácia okolo osi y. Náklon v jednotlivých smeroch je indikovaný aj pomocou štyroch LED diód umiestených na vývojovej doske do kríža po stranách akceleremetru.

if ((HAL_GetTick() - tick) >= per_meas) { // period of measurement
  BSP_ACCELERO_GetXYZ(buffer);
  accX = buffer[0];
  accY = buffer[1];
  accZ = buffer[2];
 
  //printf("zrychlenie:\t%4.1f\t%4.1f\t%4.1f\n", accX, accY, accZ);
 
  tilt_light(accX, accY);
 
  pitch = get_degree_tilt(-accX, max_xval); //pitch- acceleration around axis y --> accX , -accX --turning around axis X to get right-rotated coordinate system
  roll = get_degree_tilt(accY, max_yval); // get roll- acceleration around axis x --> accY
 
  printf("roll,pitch:\t%2.1f%c\t%2.1f%c\n", roll, deg_sign, pitch, deg_sign);
 
  tick = HAL_GetTick();
}

Výpočet derotačnej matice a kompenzácia náklonu

Štruktúra programu


Záver

Zdroje

2018/accel-roll-pitch.1547499065.txt.gz · Poslední úprava: 2019/01/14 21:51 autor: Ondrej Vörös