Dialog DA14531 – ADC

(Gowtham TS)

Ein A. nalog zu D igital C Onverter wandelt ein analoges Signal in eine digitale Form um, die von jedem Computerelement verwendet / bearbeitet werden kann. Das analoge Signal wird regelmäßig abgetastet, um es digital wiederherzustellen.

Der DA14531 verfügt über einen 10-Bit-ADC mit 4-Eingang-Single-Ended-Kanälen (oder 2 Differenzkanälen). Die 4 Eingangskanäle können aus 4 GPIOs, einem Temperatursensor, einer VBAT_HIGH-Schiene, einer VBAT_LOW-Schiene und einem VDD ausgewählt werden. Es hat auch ein konfigurierbares Dämpfungsglied mit 4 Optionen: 1x, 2x, 3x und 4x. Wenn das Dämpfungsglied auf 4x eingestellt ist, kann es einen maximalen Spannungsbereich von -3,45 V bis + 3,45 V abtasten.

Projekteinrichtung

Das Projekt mit dem Code für dieses Tutorial ist auf Github unter https verfügbar : //github.com/vicara-hq/da14531-tutorials

Laden Sie das Projekt herunter und kopieren Sie es. Das Projekt muss im Ordner Dialog SDK6 abgelegt werden. Navigieren Sie zu / projects / target_apps / template und fügen Sie es in diesen Ordner ein. Das Projekt ist eine modifizierte Version des von Dialog bereitgestellten Projekts empty_peripheral_template . Um diese Lernserie so offen wie möglich zu halten, wird in allen folgenden Schritten SmartSnippets Studio verwendet.

Hardwareübersicht

Wir verwenden ein DA145xx Pro-Motherboard mit einem DA14531 Tiny-Modul Tochterbrett, wenige Pullover und ein Steckbrett. Sie benötigen außerdem 2 gleichwertige Widerstände oder ein Potentiometer (zur Überprüfung der Ausgabe benötigen Sie ein Multimeter).

Ich habe 2 4,7-kOhm-Widerstände und eine 3-V-Schiene auf dem DA14531-Motherboard als VCC verwendet.

Codeübersicht

Ziel dieses Tutorials ist es, eine Spannung abzutasten und die grundlegende Verwendung des ADC im DA14531 zu zeigen.

Zuerst müssen wir P0_7 als ADC-Pin konfigurieren. Dies erfolgt in der Datei 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);
}

Der folgende Codeblock konfiguriert den 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 der Konfigurationsstruktur setzen wir den Modus auf Single-Ended und die Dämpfung auf 2x, da die erwartete Spannung etwa 1,5 V beträgt. Die Funktion zum Kalibrieren des ADC wird vor dem Initialisieren aufgerufen.

Wir rufen die Funktion auf, um die Spannung im benutzerdefinierten app_on_init -Rückruf abzutasten. Weitere Informationen zum benutzerdefinierten Rückruf finden Sie in meinem Tutorial zu (GPIOs, Schaltflächen und 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

Der einfachste Weg, dies zu testen, besteht darin, den Debugger auszuführen und die Variable adc_sample zum Expressions-Überwachungsfenster hinzuzufügen. So fügen Sie dem Expressions-Überwachungsfenster eine Variable hinzu und überprüfen ihren Wert:

  • Wählen Sie die Variable aus
  • Klicken Sie mit der rechten Maustaste darauf und wählen Sie „Überwachungsausdruck hinzufügen“.
  • Klicken Sie im folgenden Fenster auf „OK“.
  • Halten Sie den Debugger nach einigen Sekunden an und überprüfen Sie den Wert der Variablen.

Der Wert, den ich erhielt, war 0x3A0. Die Referenzspannung des ADC beträgt 0,9 V und da es sich um einen 10-Bit-ADC handelt, entspricht der Wert:

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

Der Wert, den ich erhalten habe, ist etwas höher als erwartet. Dieser Fehler kann mithilfe von Techniken wie Oversampling reduziert werden. Dies ist jedoch ein erweitertes Thema für ein anderes Lernprogramm.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.