Dialog DA14531 – ADC (Italiano)

(Gowtham TS)

An A nalog a D igital C onverter trasforma un segnale analogico in un formato digitale che può essere utilizzato da / gestito da qualsiasi elemento informatico. Il segnale analogico viene campionato periodicamente per ricrearlo digitalmente.

Il DA14531 ha un ADC a 10 bit con 4 canali single ended in ingresso (o 2 canali differenziali). I 4 canali di ingresso possono essere scelti tra 4 GPIO, un sensore di temperatura, guida VBAT_HIGH, guida VBAT_LOW e VDD. Ha anche un attenuatore configurabile con 4 opzioni che sono 1x, 2x, 3x e 4x. Con lattenuatore a 4x, può campionare un intervallo di tensione massimo compreso tra -3,45 V e + 3,45 V.

Configurazione del progetto

Il progetto con il codice per questo tutorial è disponibile su Github allindirizzo https : //github.com/vicara-hq/da14531-tutorials

Scarica il progetto e copialo. Il progetto deve essere inserito nella cartella Dialog SDK6. Vai a / projects / target_apps / template e incollalo in questa cartella. Il progetto è una versione modificata del progetto empty_peripheral_template fornito da Dialog. Ma per mantenere questa serie di tutorial il più possibile open source, tutti i passaggi seguenti utilizzeranno SmartSnippets Studio.

Panoramica hardware

Useremo una scheda madre DA145xx Pro con un modulo DA14531 Tiny scheda figlia, pochi ponticelli e una breadboard. Avrai anche bisogno di 2 resistori di uguale valore oppure puoi anche usare un potenziometro (avrai bisogno di un multimetro per verificare luscita).

Ho usato 2 resistenze da 4,7 kOhm e binario 3V sulla scheda madre DA14531 come VCC.

Panoramica del codice

Lo scopo di questo tutorial è campionare una tensione e mostrare lutilizzo di base dellADC nel DA14531.

Per prima cosa, dobbiamo configurare P0_7 come un pin ADC. Questa operazione viene eseguita nel file 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);
}

Il blocco di codice seguente configura lADC.

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

Nella struttura di configurazione, impostiamo la modalità a terminazione singola e lattenuazione a 2x poiché la tensione prevista è di circa 1,5 V. La funzione per calibrare anche lADC viene chiamata prima di inizializzarlo.

Chiamiamo la funzione per campionare la tensione nel callback app_on_init personalizzato. Per maggiori dettagli sulla richiamata personalizzata, dai unocchiata al mio tutorial su (GPIO, pulsanti e 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();
}

Test

Il modo più semplice per verificarlo è eseguire il debugger e aggiungere la variabile adc_sample alla finestra di controllo di Expressions. Per aggiungere una variabile alla finestra di controllo delle espressioni e per verificarne il valore:

  • Seleziona la variabile
  • Fai clic con il pulsante destro del mouse su di essa e scegli “Aggiungi espressione di controllo”.
  • Fai clic su “OK” nella finestra che si apre
  • Metti in pausa il debugger dopo pochi secondi e controlla il valore della variabile.

Il valore che ho ottenuto era 0x3A0. La tensione di riferimento dellADC è 0,9 V e poiché è un ADC a 10 bit, il valore corrisponde a:

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

Il valore che ho ottenuto è leggermente superiore a previsto. Questo errore può essere ridotto utilizzando tecniche come loversampling, ma questo è un argomento avanzato per un altro tutorial.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *