Dialog DA14531 – ADC (Čeština)

(Gowtham TS)

An A nalog to D igital C onverter transformuje analogový signál do digitální podoby, kterou může použít / ovládat jakýkoli výpočetní prvek. Analogový signál je pravidelně vzorkován, aby se digitálně vytvořil.

DA14531 má 10bitový ADC se 4 vstupními kanály s jedním zakončením (nebo 2 diferenciálními kanály). 4 vstupní kanály lze vybrat ze 4 GPIO, teplotního senzoru, kolejnice VBAT_HIGH, kolejnice VBAT_LOW a VDD. Má také konfigurovatelný tlumič se 4 možnostmi, které jsou 1x, 2x, 3x a 4x. S atenuátorem na 4x dokáže měřit maximální rozsah napětí -3,45 V až + 3,45 V.

Nastavení projektu

Projekt s kódem pro tento výukový program je k dispozici na Githubu na adrese https : //github.com/vicara-hq/da14531-tutorials

Stáhněte si projekt a zkopírujte jej. Projekt musí být umístěn uvnitř složky Dialog SDK6. Přejděte na / projects / target_apps / template a vložte jej do této složky. Projekt je upravenou verzí projektu empty_peripheral_template , který poskytuje Dialog. Aby ale byla tato řada výukových programů co nejotevřenější, všechny následující kroky budou používat SmartSnippets Studio.

Přehled hardwaru

Použijeme základní desku DA145xx Pro s modulem DA14531 Tiny dcera, pár propojek a prkénko na prkénko. Budete také potřebovat 2 rezistory stejné hodnoty nebo můžete také použít potenciometr (k ověření výstupu budete potřebovat multimetr).

Na základní desce DA14531 jsem jako VCC použil 2 odpory 4,7 kOhm a 3V kolej.

Přehled kódu

Cílem tohoto tutoriálu je vyzkoušet napětí a ukázat základní použití ADC v DA14531.

Nejprve musíme nakonfigurovat P0_7 jako pin ADC. To se provádí v souboru user_periph_setup.c.

void GPIO_reservations(void) {
RESERVE_GPIO(BUTTON, GPIO_PORT_0, GPIO_PIN_7, PID_ADC);
}void set_pad_functions(void) {
GPIO_ConfigurePin(GPIO_PORT_0, GPIO_PIN_7, INPUT, PID_ADC, false);
}

Níže uvedený blok kódu konfiguruje ADC.

adc_config_t adc_cfg = {
.input_mode = ADC_INPUT_MODE_SINGLE_ENDED,
.input = ADC_INPUT_SE_P0_7,
.smpl_time_mult = 2,
.continuous = false,
.interval_mult = 0,
.input_attenuator = ADC_INPUT_ATTN_2X,
.chopping = false,
.oversampling = 0
};adc_offset_calibrate(ADC_INPUT_MODE_SINGLE_ENDED);adc_init( &adc_cfg);

V konfigurační struktuře jsme nastavili režim na jeden konec a útlum na 2x, protože očekávané napětí je kolem 1,5V. Funkce, která také kalibruje ADC, je volána před inicializací.

Voláme funkci pro vzorkování napětí ve vlastním zpětném volání app_on_init . Další podrobnosti o vlastním zpětném volání najdete v mém výukovém programu (GPIO, tlačítka a diody LED).

uint16_t adc_sample;void user_app_on_init(void) {
adc_sample = adc_get_sample();
adc_sample = adc_correct_sample(adc_sample); default_app_on_init();
}

Testování

Nejjednodušší způsob, jak to otestovat, je spustit ladicí program a přidat do sledovacího okna Expressions proměnnou adc_sample . Chcete-li přidat proměnnou do okna sledování výrazů a zkontrolovat její hodnotu:

  • Vyberte proměnnou
  • klikněte na ni pravým tlačítkem a vyberte možnost „Přidat výraz sledování“.
  • V okně, které se otevře, klikněte na „OK“
  • Po několika sekundách pozastavte debugger a zkontrolujte hodnotu proměnné.

Hodnota, kterou jsem dostal, byla 0x3A0. Referenční napětí ADC je 0,9 V a protože se jedná o 10bitový ADC, hodnota odpovídá:

0x3A0 = 928 (in decimal)2 * 928 * (0.9/1024) = 1.63V 

Hodnota, kterou jsem dostal, je o něco vyšší než očekávaný. Tuto chybu lze snížit pomocí technik, jako je převzorkování, ale toto je pokročilé téma pro další výukový program.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *