Diálogo DA14531 – ADC

(Gowtham TS)

Un A análogo a D igital C onverter transforma una señal analógica en una forma digital que puede ser utilizada por / operada por cualquier elemento informático. La señal analógica se muestrea periódicamente para recrearla digitalmente.

El DA14531 tiene ADC de 10 bits con 4 canales de entrada de un solo extremo (o 2 canales diferenciales). Los 4 canales de entrada se pueden elegir entre 4 GPIO, un sensor de temperatura, riel VBAT_HIGH, riel VBAT_LOW y VDD. También tiene un atenuador configurable con 4 opciones que son 1x, 2x, 3x y 4x. Con el atenuador a 4x, puede muestrear un rango de voltaje máximo de -3.45V a + 3.45V.

Configuración del proyecto

El proyecto con el código para este tutorial está disponible en Github en https : //github.com/vicara-hq/da14531-tutorials

Descarga el proyecto y cópialo. El proyecto debe colocarse dentro de la carpeta Dialog SDK6. Navegue a / projects / target_apps / template y péguelo en esta carpeta. El proyecto es una versión modificada del proyecto empty_peripheral_template proporcionado por Dialog. Pero para mantener esta serie de tutoriales lo más abierta posible, todos los pasos siguientes utilizarán SmartSnippets Studio.

Descripción general del hardware

Usaremos una placa base DA145xx Pro con un módulo Tiny DA14531 placa hija, algunos puentes y una placa de pruebas. También necesitará 2 resistencias de igual valor o también puede usar un potenciómetro (necesitará un multímetro para verificar la salida).

Usé 2 resistencias de 4.7 kOhm y un riel de 3V en la placa base DA14531 como VCC.

Descripción general del código

El objetivo de este tutorial es muestrear un voltaje y mostrar el uso básico del ADC en el DA14531.

Primero, necesitamos configurar P0_7 como un pin ADC. Esto se hace en el archivo 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);
}

El siguiente bloque de código configura el 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);

En la estructura de configuración, configuramos el modo en un solo extremo y la atenuación en 2x, ya que el voltaje esperado es de alrededor de 1.5V. La función para calibrar también el ADC se llama antes de inicializarlo.

Llamamos a la función para muestrear el voltaje en la devolución de llamada personalizada app_on_init . Para obtener más detalles sobre la devolución de llamada personalizada, echa un vistazo a mi tutorial sobre (GPIO, botones y LED).

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

Pruebas

La forma más fácil de probar esto es ejecutar el depurador y agregar la variable adc_sample a la ventana de inspección de Expressions. Para agregar una variable a la ventana de observación de Expresiones y verificar su valor:

  • Seleccione la variable
  • Haga clic derecho sobre ella y elija «Agregar expresión de observación».
  • Haga clic en «Aceptar» en la ventana que se abre
  • Pause el depurador después de unos segundos y verifique el valor de la variable.

El valor que obtuve fue 0x3A0. El voltaje de referencia del ADC es 0.9V y dado que es un ADC de 10 bits, el valor corresponde a:

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

El valor que obtuve es un poco más alto que esperado. Este error se puede reducir utilizando técnicas como el sobremuestreo, pero ese es un tema avanzado para otro tutorial.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *