Dialog DA14531 – ADC (Dansk)

(Gowtham TS)

En A nalog til D igital C omformer transformerer et analogt signal til en digital form, som kan bruges af / betjenes af et hvilket som helst beregningselement. Det analoge signal samples periodisk for at genskabe det digitalt.

DA14531 har 10 bit ADC med 4-input kanaler med en ende (eller 2 forskellige kanaler). De 4 indgangskanaler kan vælges blandt 4 GPIOer, en temperaturføler, VBAT_HIGH-skinne, VBAT_LOW-skinne og VDD. Den har også en konfigurerbar dæmper med 4 muligheder, der er 1x, 2x, 3x og 4x. Med dæmperen 4x kan den prøve et maksimalt spændingsområde på -3,45V til + 3,45V.

Projektopsætning

Projektet med koden til denne vejledning er tilgængelig på Github på https : //github.com/vicara-hq/da14531-tutorials

Download projektet og kopier det. Projektet skal placeres i mappen Dialog SDK6. Naviger til / projects / target_apps / template og indsæt den i denne mappe. Projektet er en ændret version af tom_perifer_formular -projektet, der leveres af Dialog. Men for at holde denne tutorial-serie så open source som muligt, bruger alle følgende trin SmartSnippets Studio.

Hardwareoversigt

Vi bruger et DA145xx Pro-bundkort med et DA14531 Tiny-modul datterbræt, få hoppere og et brødbræt. Du skal også bruge 2 modstande af samme værdi, eller du kan også bruge et potentiometer (du skal bruge et multimeter for at kontrollere output).

Jeg brugte 2 4,7 kOhm-modstande og 3V-skinne på bundkortet DA14531 som VCC.

Kodeoversigt

Målet med denne tutorial er at prøve en spænding og vise den grundlæggende brug af ADC i DA14531.

Først skal vi konfigurere P0_7 som en ADC-pin. Dette gøres i filen 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);
}

Nedenstående blok med kode konfigurerer 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);

I konfigurationsstrukturen indstiller vi tilstanden til single ended og dæmpningen til 2x, da den forventede spænding er omkring 1,5V. Funktionen til også at kalibrere ADC kaldes, før den initialiseres.

Vi kalder funktionen for at prøve spændingen i det brugerdefinerede app_on_init tilbagekald. For flere detaljer om den tilpassede tilbagekaldelse, se min vejledning om (GPIOer, knapper og lysdioder).

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

Testning

Den nemmeste måde at teste dette på er at køre fejlfindingsprogrammet og tilføje variablen adc_sample til Expressions-overvågningsvinduet. For at tilføje en variabel til Expressions-overvinduet og kontrollere dens værdi:

  • Vælg variablen
  • Højreklik på den, og vælg “Tilføj urudtryk”.
  • Klik på “OK” i det vindue, der åbnes
  • Sæt fejlretningen på pause efter få sekunder, og kontroller værdien af ​​variablen.

Den værdi, jeg fik, var 0x3A0. ADCens referencespænding er 0,9 V, og da det er en 10 bit ADC, svarer værdien til:

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

Den værdi, jeg fik, er lidt højere end forventet. Denne fejl kan reduceres ved hjælp af teknikker som oversampling, men det er et avanceret emne for en anden tutorial.

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *