wtorek, 15 kwietnia 2014

Wprowadzenie do projektowania filtrów i Analysis Tool (FDATool)

      Konstrukcja filtra i Analysis Tool (FDATool) jest potężnym graficzny interfejs użytkownika (GUI) w Signal Processing Toolbox ™ do projektowania i analizy filtrów.
FDATool umożliwia szybkie projektowanie filtrów cyfrowych FIR lub IIR przez ustawienie właściwości filtra, import filtrów z MATLAB ® lub przez dodawanie, przenoszenie lub usuwanie biegunów i zer. FDATool dostarcza także narzędzi do analizy filtrów, takich jak wykresy odpowiedzi impulsowej i fazowej i biegun zera.
Można użyć FDATool jako wygodną alternatywę projektowania filtrów wobec wiersza poleceń.

1. Pierwsze kroki
2. Projektowanie filtru
3. Inne rodzaje analiz
4. Porównanie projektu w stosunku do specyfikacji
5. Zmiana jednostek na osi wykresu
6. Znakowanie punktów danych
7. Optymalizacja projektu
8. Korzystanie z odmiennej struktury filtra
9. Zmiana parametrów analizy
10. Ekspotrowanie filtra
11. Generowanie pliku Matlab(*.m)
12. Kwantyzacja współczynników(konwersja) Filtra
13. Zastosowanie
14. Dodatkowe funkcje

Ad. 1. Pierwsze kroki

Wpisz fdatool w wierszu poleceń MATLAB.
Porada dnia(Tip of the Day) wyświetla okno dialogowe z sugestiami dotyczących korzystania z FDATool. Następnie wyświetlone zostanie GUI z domyślnym filtrem.
https://drive.google.com/file/d/0B-LjooBGYreoNU5GMGlhdmdxVk0/edit?usp=sharing


GUI ma trzy główne obszary:
     -The Current Filter Information region()
     -The Filter Display region()
     -The Design panel()

Górna część GUI wyświetla informacje na temat specyfikacji i jego zachowanie w funkcji częstotliwości.
The Current Filter Information region w lewym górnym rogu  wyświetla właściwości filtra(jego strukturę), wskazuje stabilność oraz liczbę sekcji. Zapewniony jest również dostęp do menadżera Filtrów w przypadku pracy z wielma filtrami.
The Filter Display region, w prawym górnym rogu, wyświetla zachowanie amplitudy w funkji częstotliwości filtra.
Dolna połowa GUI jest interaktywna część FDATool. The Design Panel, w dolnej połowie jest miejscem gdzie definiujemy preferencje filtra i kontrolujemy co jest wyświetlane w gurnej częsci GUI. Pola w tej części mogą się różnić w zależności od wybranych preferencji.

Narzędzie zawiera pomoc kontekstowa. Możesz kliknąć prawym przyciskiem myszy lub kliknąć przycisk "Co to ​​jest?" (oznaczony jako kursor myszki ze znakiem zapytania, pierwszy z prawej strony),
aby uzyskać informacje na temat różnych części GUI.

Ad. 2. Projektowanie filtru

Dla przykładu zaprojektujemy filtr dolnoprzepustowy, przez które przejdą wszystkie częstotliwości mniejsze ok 20% częstotliwości Nyquista(połowa częstotliwości próbkowania) i tłumi większe bądź równe 50% częstotliwości Niquista. Użyjemy filtra FIR Equiripple z tymispecyfikacjami:
     - Tłumieie 1dB w paśmie przenoszenia
     - Tłumieie 80dB w paśmie tłumienia
     - Częstotliwość pasma przepustowego 0,2 [znormalizowana 0 do 1]
     - Częstotliwość pasma zaporowego 0,5  [znormalizowana 0 do 1]



1. Wybierz filtr dolnoprzepustowy(Lowpass) z menu rozwijanego w Response Type oraz Equiripple FIR Design Method
2. Wybierz Specify order w Filter Order i wpisz wartość 30.
3. Opcia FIR Equiripple ma możliwość zmiany Density Factor, daje nam to kontrolę nad gęstością siatki częstotliwości. Zwiększenie tej wartości powoduje lepsze odzwierciedlenie zachowania filtru, jednak wydłuża czas obliczeń, wartość 20 jest wystarczająca. 
4. Wybierz Normalized (0 to 1) w rozwijanym menu Unit(Frequency Specifications).
5. Wpisz 0,2 dla wpass i 0,5 dla wstop w Frequency Specifications.
6. Wpass i Wstop, w Magnitude Specifications zostaw te wartości na 1.
7. Po ustawieniu specyfikacji projektowych, kliknij przycisk Filter Analysis w dolnej części interfejsu graficznego. Wartości powinny być zgodne z wykresem powyżej.

Ad. 3. Inne rodzaje analiz




W kolejności od lewej do prawej, przyciski są
     - Charakterystyka amplitudowa
     - Charakterystyka fazowa
     - Charakterystyka amplitudowo-fazowa
     - Odpowiedź opóźnienie grupowe
     - Opóźnienia fazowe
     - Odpowiedzi impulsowej
     - Odpowiedź skokowa
     - Rozkład biegunów i zer
     - Współczynniki filtrów
     - Informacja o filtrze

Ad. 4. Porównanie projektu w stosunku do specyfikacji

FDATool pozwala zmierzyć, jak bardzo Twój projekt spełnia złożenia specyfikacji. W tym celu należy zmienić na osi y na Magnitude(patrz Ad. 5), następnie z menu -> View ->  Specification Mask, powinniśmy uzyskać widok jak poniżej.


Ad. 5. Zmiana jednostek na osi wykresu

Można zmienić jednostki X lub osi Y, klikając prawym przyciskiem myszy na etykiecie osi i wybierając żądane jednostki.


Ad. 6. Znakowanie punktów danych

Na wykresie możemy kliknąć w dowolnym miejscu, aby dodać znacznik danych, który wyświetla wartośc w danym miejscu. Kliknięcie prawym przyciskiem myszy na znaczniku danych, wyświetla menu, w którym można przenieść, usunąć lub dostosować wygląd wskaźników danych.



Ad. 7. Optymalizacja projektu

Aby zmniejszyć komplikację filtra i jego koszt implementacji w strukturze fizycznej, można zmniejszyć liczbę współczynników za pomocą opcji Minimum Order w panelu projektu(Filter Order w dolnej połowie GUI). 


Ad. 8. Korzystanie  z odmiennej struktury filtra

Powyższy filtr to Direct-form FIR. Taka jego postać słóży do realizacji sprzętowej. Można użyć Convert Structurez EDIT w menu do zmiany jego struktury. Filtry mogą być przekształcone w następujących reprezentacji:
     - Równań stanu(State-Space)
     - Formy bezpośredniej filtra FIR
     - Transponowanej formy bezposredniej filtra FIR
     - Formy bezpośredniej symetrycznego filtra FIR

Ad. 9. Zmiana parametrów analizy

Klikając prawym przyciskiem myszy na wykresie i wybierając Analysis Parameters, możemy wyświetlić okno dialogowe do zmiany parametrów analizy(można również wybrać Analysis Parameters, w menu Analysis).

Ad. 10. Ekspotrowanie filtru

Matlab uożliwia wyeksportowanie filtru do następujących miejsc:
     - MATLAB workspace
     - MAT-file
     - Text-file
Aby tego dokonać wybieramy z menu Plik, Export:
MATLAB umożliwia wybranie formy w jakiej zostaną zapisane rezultaty naszej pracy np. współczynniki(wykorzystywane w FPGA do filtracji).
Można użyć komend GET i SET z wiersza poleceń MATLAB, aby mieć dostęp, boądź zmieniać współczynniki filtra.


Ad. 11. Generowanie pliku Matlab(*.m)

FDATool pozwala generować kod MATLAB(pliki .m), aby ponownie utworzyć filtr. Dzięki temu można umieścić swój projekt w istniejącym kodzie lub zautomatyzować tworzenie swoich filtrów w skrypcie.
Wybierz z menu Plik Generate MATLAB code.
Poniższy kod został wygenerowany z filtra który zaprojektowaliśmy powyżej:



Ad. 12. Kwantyzacja współczynników(konwersja) Filtra

Jeśli jest zainstalowany DSP System Toolbox ™, ustawienia parametrów kwantyzacji współczynników filtra dostępne są na pasku bocznym.

Można użyć tego panelu do konwersji i analizy filtrów podwójnej precyzji. Z DSP System Toolbox można konwertować filtry zarówno z pojedyńczej do podwójnej precycji jak i w drugą stronę. Posiadacze Fixed Point Toolbox mogą też konwertować do fixed-point precision. Należy pamiętać, że nie można mieszać zmiennoprzecinkowych i stałoprzecinkowych operacji arytmetycznych w filtrze.

Ad. 13. Zastosowanie


FDATool umożliwia generowanie różnego rodzaju kodów reprezentujących filtr. Na przykład, można wygenerować pliki  nagłówkowe w jzyku C, współczynniki Xilinx pliki (COE) (z DSP System Toolbox) i VHDL, Verilog oraz stanowisk badawczych (z filtrem projekt HDL Coder ™).

Ad. 14. Dodatkowe funkcje

FDATool jest integralną częścią produktów MathWorks ™
     - DSP System Toolbox- dodaje zaawansowane techniki filtracji FIR i IIR(m. in. Filter Transformation, Multirate filters)
     - Embedded Coder™- Generuje, buduje i wdraża kod dla procesorów Texas Instruments C6000.
     - Filter Design HDL Coder- Generowanie współczynników do filtrów w VHDL i Verilog
     - Simulink®- Generuje filtry do bloków simulinka.

sobota, 15 marca 2014

Jak zapalić diode stm32F4 trochę teorii

Budowa i obsługa portów wejść/wyjść
Porty we/wyj mogą pracować w jednym z sześciu trybów
- jako wejście
    "pływające", bez wewnętrznego podciągnięcia,
    z podciągnięciem do napięcia zasilania(pull-up),
    z podciągnięciem do masy zasilania(pull-down),
-jako wyjście
    jako otwarty dren(open-dren)
    symetryczne(push-pull)

Opis rejestrów dotyczących wejść wyjść:
Lp. Nazwa Opis
1 GPIOx_CRL Konfiguracja młodszej części portu
2 GPIOx_CRH Konfiguracja starszej części portu
3 GPIOx_IDR Rejestr danych wejściowych, tylko do odczytu, przechowuje stan danego portu
4 GPIOx_ODR Rejestr danych wyjściowych 
5 GPIOx_BSRR Ustawienie dla zerowania określonych pinów w porcie
6 GPIOx_BRR Zerowanie określonego pinu
7 GPIOx_LCKR Rejestr blokujący porty wejść/wyjść
8 AFIO_EVCR Rejestr konfiguracji przerwań
9 AFIO_MAPR Konfiguracja wyprowadzeń debugera i przemapowania portów
10 AFIO_EXTICR1 Rejestr konfiguracji przerwań
11 AFIO_EXTICR2 Rejestr konfiguracji przerwań
12 AFIO_EXTICR3 Rejestr konfiguracji przerwań
13 AFIO_EXTICR4 Rejestr konfiguracji przerwań

Parametry portów wejść wyjść:
Prąd wyjściowy z pinu 8 mA
Prąd wejsciowy do pinu(typowy) 8 mA
Prąd wejściowy do pinu (maksymalny) 20 mA
Sumaryczny prąd wyjścowy z nóżek całego mikrokontrolera 150 mA
Sumaryczny prąd wejściowy do nóżek całego mikrokontrolera 150 mA




czwartek, 13 marca 2014

Jak zapalić diode stm32F4 Coocox COIDE

   Programy testuje na płytce STM3241G-EVAL, diody mam na pinach: PG6, PG8, PC7, PI9, korzystać będę z pierwszych dwóch.
    1. Tworze nowy projek dla STM32F417IG (opisałem w poprzednim artykule)
    2. Dodaje bibliotekę GPIO z repozytoriów(reszta niezbędnych bibliotek doda się sama).
    3. Do pliku main.c wklejamy:

#include "stm32f4xx_gpio.h"    //standardowa biblioteka wejsc/wyjsc
#include "stm32f4xx_rcc.h"      //Reset and Clock Control

GPIO_InitTypeDef  GPIO_InitStructure;   //inicjalizacja
void Delay(__IO uint32_t nCount);           //definicja funkcji opóźnienia programowego(nie sprzętowego)

int main(void)
{
    SystemInit();                                           //inicjalizacja

/* Włączenie zegara dla konkretnego portu, domyślnie jest wyłączony dla zaoszczędzenia energii */
     RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOG, ENABLE);
          /*tu wpisujemu jaki port chcemy zainicjalizowac, w moim przypadku G*/

     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_8;
         /* tutaj wpisujemy jakie piny na danym porcie chcemy włączyć jak wyżej pisałem u mnie to pin 6 i 8 */

     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
         /*wybierasz między IN(wejście) OUT(wyjście), AF(funkcja alternatywna/alternate function) oraz                   AN(tryb analogowy/analog mode)*/
     GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
         /*wybór między Push Pull(PP) a Open Dren(OD)*/
     GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
         /* 2, 25, 50, 100 MHz takie częstotliwości mamy do wyboru przy standardowej bibliotece, zmiany można nanieść w funkcjach zegara i do uzyskania jest chyba każda częstotliwość z zakresu 2-100 MHz */
     GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
/*
w tej części wybieramy czy będzie podciągnięcie do mazy, zasilania, czy też bez podciągnięcia, szarzej opisałem to w poprzednim artykule
*/
     GPIO_Init(GPIOG, &GPIO_InitStructure);

    while(1)  // pętla nieskończona
    {
       GPIO_SetBits(GPIOG, GPIO_Pin_6); // ustawienie pinu 6 w stan wysoki(logiczna jedynka)

       Delay(0x3FFFFF); // opóźnienie

       GPIO_SetBits(GPIOG, GPIO_Pin_8);  // ustawienie pinu 8 w stan wysoki

       Delay(0x3FFFFF);  //opóźnienie

       GPIO_ResetBits(GPIOG, GPIO_Pin_6|GPIO_Pin_8); //skasowanie bitu, czyli ustawienie w stan niski

       Delay(0xFFFFFF);  // opóźnienie
     }
}

void Delay(__IO uint32_t nCount) //funkcja opóźnienia
{
  while(nCount--)
  {
  }
}



środa, 12 marca 2014

Tolerancja rezystora

Tolerancja rezystora

Rezystancja nominalna/znamionowa - rezystancja podawana przez producenta na obudowie rezystora.
Tolerancja rezystora to odchylenie rezystancji, które może różnić wartość nominalną od zmierzonej w temperaturze 25 °C bez przyłożonego obciążenia.
Innymi słowy, tolerancja rezystora to wartość o którą, rezystancja opornika może zmieniać się od podanej wartości. Jak rezystor ma większą tolerancję to jego faktyczna wartość bardziej może się zmieiać, albo w górę lub w dół od jej wartości nominalnej. Mniejsza tolerancji Rezystor, mniejsze wahania od wartości nominalnej, a więc jest bardziej precyzyjny.
Najczęstszym sposobem określania tolerancji rezystora są procenty. Na przykład, rezystor, który ma tolerancję ± 10%, może zmieniać się o 10% w stosunku do wartości zadanej zarówno w górę jak i w dół(dla rezystoram 10KΩ i tolerancji 10%, wartością dopuszczalna może być zarówno 9K jak i 11K Ω).
Typowe tolerancje rezystorów są 1 procent, 2 procent, 5 procent, 10 procent, 20 procent. Wartość może być nawet niższa niż 1 procent z rezystorów precyzyjnych.
Innym sposobem określania tolerancji rezystora jest parts per milion(ppm). Na przykład, oporność, ppm określa o ile omów rezystancja może różnić się na milion omów rezystancji. Jeśli weźmiemy rezystor 1M, który ma wartość 20000 ppm, co oznacza, że oporność może zmieniać się 20000 Ω powyżej lub poniżej tej wartości rezystora 1M. Oznacza to, że opór może być między 980.000 Ω i 1020000 Ω. Powyższy parametr stosuje się w połączeniu ze stowniami kelvina(ppm/K) czyli o ile zmieni się oporność na jeden stopień kelvina.

PPM jest używany zazwyczaj dla wartości toleracji mniejszych niż procent.
Dla większości zastosowań ogólnych, rezystor, z tolerancją 5 procent jest wystarczające.