Dialogue DA14531 – ADC

(Gowtham TS)

An A nalog à D igital C transforme un signal analogique en une forme numérique qui peut être utilisée par nimporte quel élément informatique. Le signal analogique est échantillonné périodiquement pour le recréer numériquement.

Le DA14531 dispose dun ADC 10 bits avec 4 canaux dentrée asymétriques (ou 2 canaux différentiels). Les 4 canaux dentrée peuvent être choisis parmi 4 GPIO, un capteur de température, un rail VBAT_HIGH, un rail VBAT_LOW et un VDD. Il dispose également dun atténuateur configurable avec 4 options qui sont 1x, 2x, 3x et 4x. Avec latténuateur à 4x, il peut échantillonner une plage de tension maximale de -3,45V à + 3,45V.

Configuration du projet

Le projet avec le code de ce tutoriel est disponible sur Github à https : //github.com/vicara-hq/da14531-tutorials

Téléchargez le projet et copiez-le. Le projet doit être placé dans le dossier Dialog SDK6. Accédez à / projects / target_apps / template et collez-le dans ce dossier. Le projet est une version modifiée du projet empty_peripheral_template fourni par Dialog. Mais pour garder cette série de tutoriels aussi open source que possible, toutes les étapes suivantes utiliseront SmartSnippets Studio.

Présentation du matériel

Nous utiliserons une carte mère DA145xx Pro avec un module DA14531 Tiny carte fille, quelques cavaliers et une planche à pain. Vous aurez également besoin de 2 résistances de valeur égale ou vous pouvez également utiliser un potentiomètre (vous aurez besoin dun multimètre pour vérifier la sortie).

Jai utilisé 2 résistances de 4,7 kOhm et un rail 3V sur la carte mère DA14531 comme VCC.

Présentation du code

Le but de ce tutoriel est déchantillonner une tension et de montrer lutilisation de base de lADC dans le DA14531.

Tout dabord, nous devons configurer P0_7 comme une broche ADC. Cela se fait dans le fichier 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);
}

Le bloc de code ci-dessous configure 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);

Dans la structure de configuration, nous définissons le mode sur simple extrémité et latténuation sur 2x car la tension attendue est denviron 1,5V. La fonction permettant également de calibrer lADC est appelée avant de linitialiser.

Nous appelons la fonction pour échantillonner la tension dans le rappel personnalisé app_on_init . Pour plus de détails sur le rappel personnalisé, jetez un œil à mon tutoriel sur (GPIO, boutons et voyants).

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

Le moyen le plus simple de tester ceci est dexécuter le débogueur et dajouter la variable adc_sample à la fenêtre de surveillance Expressions. Pour ajouter une variable à la fenêtre de surveillance Expressions et vérifier sa valeur:

  • Sélectionnez la variable
  • Faites un clic droit dessus et choisissez « Ajouter une expression de surveillance ».
  • Cliquez sur «OK» dans la fenêtre qui souvre
  • Mettez le débogueur en pause après quelques secondes et vérifiez la valeur de la variable.

La valeur que jai obtenue était 0x3A0. La tension de référence de lADC est de 0,9 V et comme il sagit dun ADC 10 bits, la valeur correspond à:

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

La valeur que jai obtenue est un peu plus élevée que attendu. Cette erreur peut être réduite en utilisant des techniques telles que le suréchantillonnage, mais cest un sujet avancé pour un autre didacticiel.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *