Abstrakt: Generátor signálů s nastavitelným kmitočtem a velikostí amplitudy napětí
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.
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í):
(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í):
(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í):
(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í):
(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í):
(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í):
(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í):
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:
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.
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.
přeložte aplikaci
naprogramujte MCU a FPGA a spusťte terminálový program.
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.