ARM: DAC

Como ya dije en los primeros capítulos de ARM, las liberías de terceros son muy importantes, y por éso para ésta utilidad voy a usar directamente unas librerías extraídas de aquí:

http://stm32f4-discovery.com/2014/04/library-07-da-converter-on-stm32f4xx/

Tendréis que descargaros las tres librerías:

  • TM STM32F4 DAC Library
  • TM STM32F4 GPIO Library
  • defines.h

Éste creador de librerías tiene cosas realmente interesantes y útiles.

Una vez descargadas las librerías, se colocan en distintas carpetas dentro de "terceros" y se incluyen tanto en las opciones de compilación (Project -> Options for Tarjet -> C/C++ -> Include Paths), como en la sección de la izquierda donde se encuentran los archivos .c que se van a usar (Manage project items -> Add Files, podéis crear subcarpetas nuevas para tenerlo más ordenado)

¿Qué es el DAC? Al contrario que en el caso del ADC, éste periférico es capaz de tomar un valor digital desde el microcontrolador y sacar por el pin una tensión. También depende de la tensión de referencia y de la palabra digital que le demos:

Vout = Vref*(Valor digital / 4096)

La librería descargada nos permite dar a la salida un valor cualquiera en un rango de 0 a Vref dependiendo de la palabra digital que introduzcamos en la función. Podréis medir en el pin correspondiente la tensión y veréis que, efectivamente, es  la que se ha introducido, o aproximada.

Para un uso simple, el ejemplo que se da en la web hace que en el pin PA4 se extraigan 1.2 voltios y por el pin PA5 unos 1.65 voltios. Sólo será necesario el main.c:

 

/* Incluir módulos del núcleo */
#include "stm32f4xx.h"
/* Incluir las librerías de terceros */
#include "defines.h"
#include "tm_stm32f4_dac.h"
 
int main(void) {
    /* Inicializar sistema */
    SystemInit();
    
    /*Inicializar canal 1 DAC, PA4 */
    TM_DAC_Init(TM_DAC1);
    /*Inicializar canal 2 DAC, PA5 */
    TM_DAC_Init(TM_DAC2);
    
    /* Poner en PA4 un valor de (1500/4096)*3.3V */
    TM_DAC_SetValue(TM_DAC1, 1500);
    /* Poner en PA5 un valor de (2047/4096)*3.3V */
    TM_DAC_SetValue(TM_DAC2, 2047);
    
    while (1) {
    
    }
}

Las utilidades del DAC van desde el control analógico de sistemas a la generación de señales como senoidales y triangulares.

Deja un comentario

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