Dialog DA14531 – ADC (Svenska)

(Gowtham TS)

En A nalog till D igital C omvandlare transformerar en analog signal till en digital form som kan användas av / drivs av vilket som helst beräkningselement. Den analoga signalen samplas periodiskt för att återskapa den digitalt.

DA14531 har 10 bitars ADC med 4-ingångskanaler (eller 2 olika kanaler). De fyra ingångskanalerna kan väljas från fyra GPIO: er, en temperatursensor, VBAT_HIGH-skena, VBAT_LOW-skena och VDD. Den har också en konfigurerbar dämpare med 4 alternativ som är 1x, 2x, 3x och 4x. Med dämparen 4x kan den prova ett maximalt spänningsområde på -3,45V till + 3,45V.

Projektinställning

Projektet med koden för den här självstudien finns på Github på https : //github.com/vicara-hq/da14531-handledning

Ladda ner projektet och kopiera det. Projektet måste placeras i mappen Dialog SDK6. Navigera till / projects / target_apps / template och klistra in den i den här mappen. Projektet är en modifierad version av projektet tom_peripheral_template som tillhandahålls av Dialog. Men för att hålla den här handledningsserien så öppen källkod som möjligt kommer alla följande steg att använda SmartSnippets Studio.

Maskinvaruöversikt

Vi kommer att använda ett moderkort DA145xx Pro med en liten modul DA14531 dotterbräda, få byglar och en brädbräda. Du behöver också två motstånd med lika värde eller så kan du också använda en potentiometer (du behöver en multimeter för att verifiera utgången).

Jag använde 2 4,7 kOhm-motstånd och 3V-skena på moderkortet DA14531 som VCC.

Kodöversikt

Syftet med denna handledning är att sampla en spänning och visa den grundläggande användningen av ADC i DA14531.

Först måste vi konfigurera P0_7 som en ADC-stift. Detta görs 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);
}

Nedanstående kodblock konfigurerar 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 ställer vi in ​​läget till singeländad och dämpningen till 2x eftersom den förväntade spänningen är cirka 1,5V. Funktionen för att också kalibrera ADC anropas innan den initialiseras.

Vi kallar funktionen för att sampla spänningen i den anpassade app_on_init återuppringningen. För mer information om den anpassade återuppringningen, ta en titt på min handledning om (GPIO, knappar och 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

Det enklaste sättet att testa detta är att köra felsökaren och lägga till variabeln adc_sample i Expressions klockfönster. För att lägga till en variabel i Expressions klockfönster och kontrollera dess värde:

  • Välj variabeln
  • Högerklicka på den och välj “Lägg till klockuttryck”.
  • Klicka på “OK” i fönstret som öppnas
  • Pausa felsökaren efter några sekunder och kontrollera värdet på variabeln.

Det värde jag fick var 0x3A0. ADC: s referensspänning är 0,9 V och eftersom det är en 10-bitars ADC motsvarar värdet:

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

Värdet jag fick är lite högre än förväntas. Det här felet kan minskas genom att använda tekniker som översampling, men det är ett avancerat ämne för en annan handledning.

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *