Čeština / English
Login

Aplikace / Generátor signálů

Autor: Josef Strnadel ()

Abstrakt: Generátor signálů s nastavitelným kmitočtem a velikostí amplitudy napětí

Update: 20090417

1. Popis aplikace

Pomocí DA převodníku dostupného na mikrokontroléru aplikace demonstruje jednoduchý způsob generování základních průběhů signálů (konstantní, harmonický, pilovitý, obdélníkový) s možností nastavení kmitočtu a amplitudy zvoleného průběhu. Napětí je měřitelné mezi vyvodem 31 (konektoru JP9) a zemí FITkitu.

overview.png

Obrázek 1.1: Ukázka generovaných průběhů (snímek obrazovky osciloskopu)

2. Příkazová řádka aplikace

Požadovaný průběh je možno generovat po volbě jeho parametrů pomocí příkazů v terminálovém okně. Příkazy jsou následující:

SIG harm ..... harmonicky signal
SIG saw ...... pilovity signal
SIG square ... obdelnikovy signal
SIG const ... konstantni signal
SCALE x ... zmena amplitudy napeti na x = 0 ... 100 [%]
FREQ f ....... zmena frekvence [Hz]

DA převodník je nastaven do 8-bitového režimu a umožňuje generovat průběhy o napěťovém rozmezí 0 V až 1,5 V a frekvencích v rozsahu 1 Hz až 500 Hz v závislosti na tvaru zvoleného průběhu.

Jinou konfiguraci DA převodníku (12-bitový režim, referenční napětí 2,5 V) můžete nalézt v aplikaci Generátor napětí.

Napětí je generováno na 0. kanálu DA převodníku mikrokontroléru. Tento kanál je vyveden na pin č. 31 knektoru JP9 - tzn. generované napětí je možno měřit mezi tímto pinem a zemí.

Ilustrace k použití příkazů

(neuspořádanou) posloupností příkazů

SIG const
SCALE 100

zajistíme generování konstantního signálu o hodnotě napětí 1,5 V = 1500 mV (rovné 100 % referenčního napětí):

scope_1.png

(neuspořádanou) posloupností příkazů

SIG const
SCALE 50

zajistíme generování konstantního signálu o hodnotě napětí 0,775 V = 775 mV (rovné 50 % referenčního napětí):

scope_2.png

(neuspořádanou) posloupností příkazů

SIG HARM
SCALE 50
FREQ 100

zajistíme generování harmonického signálu o kmitočtu 100 Hz s rozkmitem napětí 0,775 V = 775 mV (rovno 50 % referenčního napětí):

scope_3.png

(neuspořádanou) posloupností příkazů

SIG HARM
SCALE 50
FREQ 50

zajistíme generování harmonického signálu o kmitočtu 50 Hz s rozkmitem napětí 0,775 V = 775 mV (rovno 50 % referenčního napětí):

scope_4.png

(neuspořádanou) posloupností příkazů

SIG HARM
SCALE 100
FREQ 510

zajistíme generování harmonického signálu o kmitočtu 510 Hz s rozkmitem napětí 1,5 V = 1500 mV (rovno 100 % referenčního napětí):

scope_5.png

(neuspořádanou) posloupností příkazů

SIG SAW
SCALE 100
FREQ 510

zajistíme generování pilovitého signálu o kmitočtu 510 Hz s rozkmitem napětí 1,5 V = 1500 mV (rovno 100 % referenčního napětí):

scope_6.png

(neuspořádanou) posloupností příkazů

SIG SQUARE
SCALE 100
FREQ 100

zajistíme generování obdélníkového signálu o kmitočtu 100 Hz, střídou 1:1 a rozkmitem napětí 1,5 V = 1500 mV (rovno 100 % referenčního napětí):

scope_7.png

3. Tvary signálů

Typy tvarů podporovaných signálů jsou umístěny ve výčtovém typu

enum SIG_ID {SIG_CONST, SIG_HARM, SIG_SAW, SIG_SQUARE} sig_type;

Tvary podporovaných signálů jsou umístěny v polích

unsigned char arr_sin[SIN_SAMPLES] = {
   128, 153, 177, 199, 219, 234, 246, 254, 255, 254, 246, 234, 219, 199, 177,
   153, 128, 103, 79, 57, 37, 22, 10, 2, 0, 2, 10, 22, 37, 57, 79, 103
};

unsigned char arr_saw[SAW_SAMPLES] = {
  0, 8, 16, 25, 33, 41, 49, 58, 66, 74, 82, 90, 99, 107, 115, 123, 132, 140,
  148, 156, 165, 173, 181, 189, 197, 206, 214, 222, 230, 239, 247, 255
};

unsigned char arr_square[SQUARE_SAMPLES] = {
  0, 255
};

unsigned char arr_const[CONST_SAMPLES] = {
  255
};

ve formě posloupnosti 8-bitových vzorků, jejichž hodnota je přímo (lineárně) úměrná hodnotě generovaného napětí. Délky posloupností je třeba (pro korektní pohyb v polích) nastavit na správné hodnoty, tj.:

#define SIN_SAMPLES 32    // pocet vzorku harmonickeho signalu (sinus)
#define SAW_SAMPLES 32    // pocet vzorku piloviteho signalu
#define SQUARE_SAMPLES 2  // pocet vzorku obdelnikoveho signalu
#define CONST_SAMPLES 1   // pocet vzorku konstantniho signalu

Modifikace a doplnění tvarů

Modifikací stávajících, popř. doplněním dalších polí lze generovat jiné signály - např. obdélníkový signál se střídou 1:4:

scope_8.png

4. Princip generování

Pro generování průběhů na základě hodnot v polích je využit časovač čítající na kmitočtu 32768 Hz. Ten je nastaven tak, aby po každých ticks ticích, kde

ticks = TICKS_PER_SECOND / frequency / samples;

bylo vyvoláno přerušení, ve kterém bude (pro daný typ průběhu) vybrán další byte z příslušného pole.

Pro detailnější seznámení se s časovačem viz aplikace Blikání LED pomocí časovače nebo Hodiny pomocí časovače.

V obsluze přerušení časovače

interrupt (TIMERA0_VECTOR) Timer_A (void)
{
  ...
  DAC12_0DAT = smpl;  // nahrani dalsiho vzorku pro prevod
  ...
}

je tento byte uložen do registru DAC12_0DAT, čímž je zahájena konverze bytu na napětí na výstupu AD převodníku.

5. Práce s DA převodníkem

Nastavení DA převodníku

DA převodník převádí n-bitový (tj. číslicový, v našem případě n=8) vzorek na napětí ve zvoleném rozsahu (tzv. referenčního napětí, v našem případě 0 V - 1,5 V). Tento převod je lineární, přičemž hodnotě 0x00 (0 na 8 bitech) odpovídá 0 V a hodnotě 0xff (samé 1 na 8 bitech) 1,5 V. Referenční napětí můžeme nechat násobit 1x (náš případ) nebo 3x.

Ve funkci main je DA převodník nastaven takto:

int main(void)
{
  ...
  ADC12CTL0 |= 0x0020;    // nastaveni referencniho napeti na 1,5 V
  DAC12_0CTL |= 0x1060;   // nastaveni kontrolniho registru DAC (8-bitovy rezim, medium speed)
  DAC12_0CTL |= 0x100;    // referencni napeti nasobit 1x
  ..
}

Kompletní zdrojové kódy je možné nalézt v souboru mcu/main.c.

6. Zprovoznění aplikace

  1. přeložte aplikaci

  2. naprogramujte MCU a FPGA a spusťte terminálový program.

  3. generovaný signál je měřitelný mezi vývodem 31 konektoru JP9 a zemí

Aplikace nevyžaduje ke své činnosti nastavit kromě propojek umožňujících programování další propojky.

Zobrazeno: 3246x Naposledy: 1.10.2023 09:51:26