Professional Documents
Culture Documents
( )
Rys. 1
Obliczanie kta w programie sterujcym ukadem odbywa si analogicznie do powyszego wzoru z
t rnic, e wartoci aX i g s przeskalowane na wartoci odczytane z akcelerometru.
Warto kta nachylenia pytki na kierunkach X i Y jest zamieniana na warto w stopniach i
wywietlana na ekranie LCD w postaci komunikatu (np.) :
Pochylenie:
X:30 Y:25 (deg)
Dodatkowo program informuje uytkownika o pochyleniu w kierunku osi x i y poprzez zapalenie
si odpowiedniej diody LED (D1 - D4) z okrelon jasnoci wiecenia. Diody te s rozmieszczone
wok akcelerometru w sposb pokazany na poniszym schemacie:
Stopie pochylenia pytki sygnalizowany przez jasno wiecenia diod jest w tym przypadku
pochyleniem wzgldnym, mierzonym w zalenoci od wstpnej orientacji pytki. Jeeli podczas
uruchomienia programu (RESETU mikrokontrolera np. za pomoc przycisku microswitch) pytka
bya wstpnie pochylona wzgldem podoa, to pooenie to przyjmowane jest za pocztkowe i
diody informuj o stopniu odchylenia pytki od tego wanie pooenia.
taktowania odpowiednich wyj (50 Mhz), ustawienie typu wyjcia (Push-Pull/ Open Drain),
ustawienie wewntrznych rezystorw podcigajcych
-konfiguracja ukadu SPI poprzez ustawienie odpowiednich bitw w rejestrach SPI: ustawienie
szybkoci transmisji, ustawienie trybu pracy (master/slave), ustawienie polaryzacji sygnau
zegarowego oraz reakcji na odpowiednie zbocze.
Koleje funkcje do obsugi ukadu SPI i akcelerometru s napisane wedug dokumentacji technicznej
ukadu SPI w uC oraz wedug dokumentacji ukadu LIS302DL i realizuj odpowiednio:
- funkcja char SPI_Transmit(char Data) transmisja jednego bajtu do ukadu podrzdnego
(LIS302DL) oraz odbir 1 bajtu danych.
- void LIS35_ReadRegister(char addr,char * v) zczytanie danych z rejestru addr ukadu
podrzdnego
- void LIS35_WriteRegister(char addr, char v) - zapisanie danych z tablicy (v) do rejestru addr
akcelerometru
- void LIS35_RebootMemory() - zresetowanie pamici flash ukadu LIS302DL
- char LIS35_SPI_Init(void) konfiguracja akcelerometru do pracy ( zresetowanie pamici,
aktywowanie pomiarw na poszczeglnych osiach, wybr zakresu pomiaru itp.)
- void LIS35_GetPosition(signed char * x, signed char * y, signed char * z) funkcja
zwracajca do zmiennych x,y,z aktualne wartoci zmierzonego przyspieszenia na poszczeglnych
osiach
c) Obsuga wywietlacza LCD
Zastosowany wywietlacz LCD 1602 posiada 16 wej 5 do zasilania sterownika i wywietlacza i
11 sterujcych. Ze wzgldu na oszczdno pinw uC czsto stosuje si tylko 7 wej sterujcych
(tzw. tryb czterobitowy), tak te jest w tym przypadku. Linie danych DB0-DB3 pozostaj wolne,
reszta
wers,
uint8_t
kol)
"stm32f4xx.h"
"mems2_spi_lib.h"
"stm32f4xx_spi.h"
<stdio.h>
"lcd.h"
"math.h"
"funkcje.h"
/*
deklaracje zmiennych
*/
int
alfa = 0,
beta = 0;
float pom1 = 0,
pom2 = 0;
char wyswietl[16];
//deklaracja tablicy do wyswietlania znakw
extern volatile unsigned long int licznikms;
//***************** --- MAIN
int main(void)
{
RCC_Conf();
TIM_Config();
SPI_Config();
LIS35_SPI_Init();
LCD_Init();
LCD_Clear();
SysTick_Conf();
---
***************//
while(1)
{
LIS35_GetPosition(&ax,&ay,&az);
if (licznikms>500)
{
pom1 = (float)ax/55.25;
pom2 = (float)ay/55.25;
licznikms = 0;
if(ax<0)
{
ax*=-1;
TIM4->CCR2 = 18*ax;
TIM4->CCR4 = 0;
}
else
{
TIM4->CCR4 = 18*ax;
TIM4->CCR2 = 0;
}
if(ay<0)
{
ay*=-1;
TIM4->CCR1 = 18*ay;
TIM4->CCR3 = 0;
}
else
{
}
}
}
TIM4->CCR3 = 18*ay;
TIM4->CCR1 = 0;