Dialog DA14531 – ADC (Română)

(Gowtham TS)

Un A nalog către D igital C onverter transformă un semnal analog într-o formă digitală care poate fi utilizată de / acționată de orice element de calcul. Semnalul analogic este prelevat periodic pentru a fi recreat digital.

DA14531 are ADC de 10 biți cu 4 canale de intrare simplă (sau 2 canale diferențiale). Cele 4 canale de intrare pot fi alese dintre 4 GPIO-uri, un senzor de temperatură, șină VBAT_HIGH, șină VBAT_LOW și VDD. De asemenea, are un atenuator configurabil cu 4 opțiuni care sunt 1x, 2x, 3x și 4x. Cu atenuatorul la 4x, poate preleva un interval maxim de tensiune de -3.45V la + 3.45V.

Configurarea proiectului

Proiectul cu codul acestui tutorial este disponibil pe Github la https : //github.com/vicara-hq/da14531-tutorials

Descărcați proiectul și copiați-l. Proiectul trebuie plasat în folderul Dialog SDK6. Navigați la / projects / target_apps / template și lipiți-l în acest folder. Proiectul este o versiune modificată a proiectului empty_peripheral_template furnizat de Dialog. Dar pentru a menține această serie de tutoriale cât mai open source posibil, toți pașii următori vor folosi SmartSnippets Studio.

Prezentare hardware

Vom folosi o placă de bază DA145xx Pro cu un modul DA14531 Tiny filă, puțini săritori și o placă De asemenea, veți avea nevoie de 2 rezistoare de valoare egală sau puteți utiliza și un potențiometru (veți avea nevoie de un multimetru pentru a verifica ieșirea).

Am folosit 2 rezistențe de 4,7 kOhm și șină de 3V pe placa de bază DA14531 ca VCC.

Prezentare generală a codului

Scopul acestui tutorial este de a testa o tensiune și de a arăta utilizarea de bază a ADC în DA14531.

Mai întâi, trebuie să configurăm P0_7 ca pin ADC. Acest lucru se face în fișierul 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);
}

Blocul de cod de mai jos configurează 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);

În structura de configurare, setăm modul la un singur capăt și atenuarea la 2x, deoarece tensiunea așteptată este în jur de 1,5V. Funcția de calibrare a ADC este, de asemenea, apelată înainte de a o inițializa.

Apelăm la funcția de eșantionare a tensiunii în apelul de apel personalizat app_on_init . Pentru mai multe detalii despre apelul de apel personalizat, aruncați o privire la tutorialul meu (GPIO-uri, butoane și LED-uri).

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();
}

Testare

Cel mai simplu mod de a testa acest lucru este să rulați depanatorul și să adăugați variabila adc_sample la fereastra de vizionare Expressions. Pentru a adăuga o variabilă la fereastra de vizionare Expressions și pentru a verifica valoarea acesteia:

  • Selectați variabila
  • Faceți clic dreapta pe ea și alegeți „Adăugați expresie de vizionare”. >
  • Faceți clic pe „OK” în fereastra care se deschide
  • Întrerupeți depanatorul după câteva secunde și verificați valoarea variabilei.

Valoarea pe care am obținut-o a fost 0x3A0. Tensiunea de referință a ADC este de 0,9 V și, deoarece este un ADC de 10 biți, valoarea corespunde:

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

Valoarea pe care am obținut-o este puțin mai mare decât așteptat. Această eroare poate fi redusă utilizând tehnici precum eșantionarea, dar acesta este un subiect avansat pentru un alt tutorial.

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *