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 :
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 :
Hier der komplette CooCox-Projektordner zum Download :