Dialoogvenster DA14531 – ADC

(Gowtham TS)

Een A nalog naar D igital C onverter transformeert een analoog signaal naar een digitale vorm die kan worden gebruikt door / bewerkt door elk computerelement. Het analoge signaal wordt periodiek bemonsterd om het digitaal opnieuw te maken.

De DA14531 heeft 10 bit ADC met 4 input single-ended kanalen (of 2 differentiële kanalen). De 4 ingangskanalen kunnen worden gekozen uit 4 GPIOs, een temperatuursensor, VBAT_HIGH rail, VBAT_LOW rail en VDD. Het heeft ook een configureerbare verzwakker met 4 opties die 1x, 2x, 3x en 4x zijn. Met de verzwakker op 4x kan deze een maximaal spanningsbereik van -3,45 V tot + 3,45 V meten.

Project setup

Het project met de code voor deze tutorial is beschikbaar op Github op https : //github.com/vicara-hq/da14531-tutorials

Download het project en kopieer het. Het project moet in de map Dialog SDK6 worden geplaatst. Navigeer naar / projects / target_apps / template en plak het in deze map. Het project is een aangepaste versie van het empty_peripheral_template -project geleverd door Dialog. Maar om deze tutorialserie zo open source mogelijk te houden, zullen alle volgende stappen de SmartSnippets Studio gebruiken.

Hardwareoverzicht

We zullen een DA145xx Pro-moederbord gebruiken met een DA14531 Tiny-module dochterbord, paar jumpers en een breadboard. Je hebt ook 2 weerstanden van gelijke waarde nodig of je kunt ook een potentiometer gebruiken (je hebt een multimeter nodig om de output te verifiëren).

Ik gebruikte 2 4.7 kOhm weerstanden en 3V rail op het DA14531 moederbord als VCC.

Code overzicht

Het doel van deze tutorial is om een ​​spanning te meten en het basisgebruik van de ADC in de DA14531 te tonen.

Eerst moeten we P0_7 configureren als een ADC-pin. Dit wordt gedaan in het user_periph_setup.c bestand.

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

Het onderstaande codeblok configureert de 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);

In de configuratiestructuur hebben we de modus ingesteld op single ended en de verzwakking op 2x aangezien de verwachte spanning ongeveer 1,5V is. De functie om ook de ADC te kalibreren, wordt aangeroepen voordat deze wordt geïnitialiseerd.

We roepen de functie aan om de spanning te bemonsteren in de aangepaste app_on_init callback. Voor meer details over de custom callback, bekijk mijn tutorial over (GPIOs, knoppen en LEDs).

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

Testen

De gemakkelijkste manier om dit te testen, is door de debugger uit te voeren en de variabele adc_sample toe te voegen aan het controlevenster van Expressions. Om een ​​variabele aan het controlevenster voor expressies toe te voegen en de waarde ervan te controleren:

  • Selecteer de variabele
  • Klik er met de rechtermuisknop op en kies “Controle-expressie toevoegen”.
  • Klik op “OK” in het geopende venster.
  • Pauzeer de debugger na enkele seconden en controleer de waarde van de variabele.

De waarde die ik kreeg was 0x3A0. De referentiespanning van de ADC is 0.9V en aangezien het een 10 bit ADC is, komt de waarde overeen met:

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

De waarde die ik heb is iets hoger dan verwacht. Deze fout kan worden verminderd door technieken zoals oversampling te gebruiken, maar dat is een geavanceerd onderwerp voor een andere zelfstudie.

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *