Generator funkcyjny
Transkrypt
Generator funkcyjny
Projekt z przedmiotu MARM Generator funkcyjny Na układzie STM32F4DISCOVERY. Stanisław Hanasz Założenia projektowe: Generowane sygnały: sygnał trójkątny, prostokątny sinusoidalny Amplituda: 0…2.5V Częstotliwość 0…10MHz Wypełnienie sygnału prostokątnego 0…100% Obsługa za pomocą przycisków i przez USART Schemat funkcyjny: ZMIANA USTAWIEŃ – MENU -wyświetlanie menu i parametrów na wyświetlaczu -operacje na wartościach roboczych: amplituda, czestotliwosc, krztalt, ZMIANA USTAWIEŃ USART zmiana_ustawien==true odebrano_dane==true Wprowadzanie ustawień -przepisanie tablicy z której pobiera próbki DMA (krztałt, amplituda) -zmiana częstotliwości sygnału taktującego DMA (częstotliwość) Obsługa: Opisany poniżej generator zrealizowany został na płytce ewaluacyjnej STM32F4DISCOVERY. Jest wyposażony wyświetlane na wyświetlaczu 2x16 menu i obsługę przez USART. Menu jest obsługiwane przez 3 przyciski: góra/inkrementacja, dół/dekrementacja, menu/zatwierdź. Dłuższe przyciskanie przycisku powoduje szybką zmianę wartości (normalnie zmienia się o jednostkę co każde przyciśnięcie). Realizacja techniczna przycisków: po przyciśnięciu dowolnego przycisku (przerwanie z linii EXTI 0, 2 lub 3) uruchamiany jest TIM2. Akcja związana z przyciskiem wykonywana jest dopiero po odliczeniu czasu jeżeli przycisk jest nadal wciśnięty (redukcja drgań styków). Włączany jest również TIM3. Jeżeli po przepełnieniu TIM3 przycisk jest nadal wciśnięty, następuje szybka zmiana ustawianej wartości (1/100 SysTick), tak długo aż go nie puścimy. Realizacja techniczna menu: plik menu.c . Funkcja wyświetl() odpowiada za wyświetlanie ustawionych parametrów lub menu na wyświetlaczu. Menu pracuje jako maszyna stanów opisana zmiennymi bool: menu_on, ok, ustawianie, prawo, lewo, increment, decrement, zmiana_ust, oraz uint_8t: pozycja, krztalt_wybrany, jednostka_wybrana_rz, jednostka_wybrana_u. Na potrzeby menu wartości parametrów generowanego sygnału są zapisywane w zmiennych amplituda, częstotliwość, wypełnienie. Funkcje edycja_cz(), edycja_a(), edycja_w(), edycja_k() odpowiadają za funkcjonalność ustawiania parametrów. STRONA 1 Z 2 Projekt z przedmiotu MARM Ekran parametrów. menu Wybór edytowanego parametru. Edycja wartości liczbowej parametru. ok ok Ekran parametrów. Wartość wybranego parametru została zmieniona Rozkazy odbierane przez USART są zapisywane w 16-elementowej tablicy bufor_Rx. Następnie (po wystawieniu flagi odebrano_dane) są dekodowane za pomocą funkcji usart_ustawienia(): Akcja Rozkaz Zmiana kształtu na sinus s:si************ Zmiana kształtu na prostokąt s:sq************ Zmiana kształtu na trójkąt s:t************* Zmiana amplitudy na 95 (%) a:95************ Zmiana wypełnienia na 80 (%) w:80************ Zmiana czestotliwosci na 800 (HZ) f:99999********* Po zatwierdzeniu zmiany w danego parametru w menu lub odebraniu i rozkodowaniu rozkazu przez USART ustawiana jest flaga zmiana_ust. Wtedy (w pętli głównej): -Deinicjalizowane są DAC, DMA i timer taktujący DMA -zmienne krztalt_wybrany, amplituda, wypelnienie dopiowane są do zmiennych opisujących aktualnie generowany sygnał, liczony jest okres sygnału na potrzeby timera taktującego DAC, -tablica z próbkami prostokąta jest zapełniana próbkami sygnału o zadanym wypełnieniu -próbki sygnału który ma być generowany są kopiowane do tablicy Act_wav12bit, przeskalowane przez amplitudę -Inicjalizowane są DAC, DMA i timer taktujący DAC. Generacja: Próbki wczytane do tablicy Act_wav12bit, wysyłane są za pomocą DMA1_Stream6 channel7 i DMA1_Stream5 channel7 do kanałów 1 i 2 DAC. Oba DAC są taktowane przez TIM6. Załączniki: Do sprawozdania załączam projekt w środowisku keil wraz ze wszystkimi plikami źródłowymi. Bibliografia: [1] Galewski Marek, STM32 w praktyce, BTC 2009 [2] Materiały do przedmiotu MARM, strona przedmiotu. STRONA 2 Z 2