20-SPI_L3GD20-Library (STM32F429)

Auf dem STM32F429 Discovery-Board ist ein 3Achs-Drehraten-Sensor eingebaut (L3GD20)
Mit diesem können die Winkelgeschwindigkeiten der X-, Y-, Z-Achse gemessen werden. Der Sensor hat eine Genauigkeit von 16bit und eine umschaltbare
Auflösung von +/-250dps , +/-500dps , +/-2000dps

Ich habe die Library so einfach wie möglich gehalten und die Interrupt Möglichkeiten z.B. gar nicht mit eingebaut.

Der Sensor hängt am SPI5 aus dem Grund wird die SPI5-Lib auch benötigt.

Beispielbild :

l3gd20

Benutzte Pins :

1
2
3
4
SCK an PF7
MOSI an PF9
MISO an PF8
ChipSelect an PC1

Enumerationen :

1
2
3
4
5
typedef enum {
  SCALE_250 = 0,  // 250
  SCALE_500,      // 500
  SCALE_2000      // 2000
}L3GD20_SCALE_t;

Struktur

1
2
3
4
5
6
typedef struct {
  int16_t x_achse; // Drehrate der X-Achse
  int16_t y_achse; // Drehrate der Y-Achse
  int16_t z_achse; // Drehrate der Z-Achse
}L3GD20_t;
L3GD20_t L3GD20;

Funktionen :

1
2
ErrorStatus UB_L3GD20_Init(L3GD20_SCALE_t scale);
void UB_L3GD20_Read(void);

Beispiel :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
//--------------------------------------------------------------
// File     : main.c
// Datum    : 07.11.2013
// Version  : 1.0
// Autor    : UB
// EMail    : mc-4u(@)t-online.de
// Web      : www.mikrocontroller-4u.de
// CPU      : STM32F429
// IDE      : CooCox CoIDE 1.7.4
// GCC      : 4.7 2012q4
// Module   : CMSIS_BOOT, M4_CMSIS_CORE
// Funktion : Demo der L3GD20-Library
// Hinweis  : Diese zwei Files muessen auf 8MHz stehen
//              "cmsis_boot/stm32f4xx.h"
//              "cmsis_boot/system_stm32f4xx.c"
// In Configuration diese Define hinzufügen :
// "STM32F429_439xx" , "__ASSEMBLY__" , "USE_STDPERIPH_DRIVER"
//--------------------------------------------------------------
 
#include "main.h"
#include "stm32_ub_lcd_ili9341.h"
#include "stm32_ub_font.h"
#include "stm32_ub_l3gd20.h"
#include <stdio.h>
 
int main(void)
{
  ErrorStatus check;
  int16_t x,y,z;
  char buf[30];
 
  SystemInit(); // Quarz Einstellungen aktivieren
 
  // Init vom LCD
  UB_LCD_Init();
  // Init der Layer
  UB_LCD_LayerInit_Fullscreen();
  // auf Hintergrund schalten
  UB_LCD_SetLayer_1();
  // Hintergrund komplett mit einer Farbe füllen
  UB_LCD_FillLayer(RGB_COL_WHITE);
  // auf Vordergrund schalten
  UB_LCD_SetLayer_2();
  // Vordergrund komplett mit einer Farbe füllen
  UB_LCD_FillLayer(RGB_COL_GREEN);
 
  UB_LCD_Rotate_180();
 
  // Ueberschrift
  UB_Font_DrawString(10,10,"Demo_20 :  ",&Arial_11x18,RGB_COL_WHITE,RGB_COL_RED);
  UB_Font_DrawString(10,30,"Gyro L3GD20",&Arial_11x18,RGB_COL_WHITE,RGB_COL_RED);
 
  // init vom Drehraten-Sensor
  check=UB_L3GD20_Init(SCALE_250);
  if(check==ERROR) {
    UB_Font_DrawString(10,70,"Error",&Arial_11x18,RGB_COL_WHITE,RGB_COL_RED);
    while(1);
  }
 
  while(1)
  {
    // Sensorwerte einlesen
    UB_L3GD20_Read();
    // X-Achse anzeigen
    x=L3GD20.x_achse;
    sprintf(buf,"X=%5d",x);
    UB_Font_DrawString(10,90,buf,&Arial_11x18,RGB_COL_BLACK,RGB_COL_GREEN);
    // Y-Achse anzeigen
    y=L3GD20.y_achse;
    sprintf(buf,"Y=%5d",y);
    UB_Font_DrawString(10,110,buf,&Arial_11x18,RGB_COL_BLACK,RGB_COL_GREEN);
    // Z-Achse anzeigen
    z=L3GD20.z_achse;
    sprintf(buf,"Z=%5d",z);
    UB_Font_DrawString(10,130,buf,&Arial_11x18,RGB_COL_BLACK,RGB_COL_GREEN);
 
  }
}

Hier die Library zum Download :

l3gd20_f429_v100

Hier der komplette CooCox-Projektordner zum Download :

Demo_F429_20


Wie hat Dir dieser Artikel gefallen?

1 Stern2 Sterne3 Sterne4 Sterne5 Sterne (Noch keine Bewertungen)
Loading...

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.