TMS320F280049C 学习笔记15 DAC

(201) 2024-02-06 09:01:01

文章目录

  • 概述
  • 例程
  • 参考文献

前几天折腾的东西着实有点难,英文手册看得头昏脑涨。。。今天看一些简单的。

概述

280049C有两路DAC,一般用来接示波器,将程序的内部变量输出出来观察,极大的方便了调试。
每个缓冲DAC具有以下功能:

  1. 12位可编程内部DAC
  2. 可选参考电压源
  3. 使用内部VREFHI时可选x1和x2增益
  4. 能够与EPWMSYNCPER同步

DAC的框图如图所示:
TMS320F280049C 学习笔记15 DAC (https://mushiming.com/)  第1张
DAC的参考电压源DACREF可在VDAC和VREFHI之间选择。只有当VREFHI设置为DACREF且使用内部参考模式时,x2增益模式才可用。另外,即使DAC选择x2增益模式,其最大输出电压也不会大于VDDA。下表列出了DAC支持的增益模式组合。在这个表中,x=A或B,X=Don’t Care,VDAC/VREFHI=2.5v,VDDA=3.3v,DACVAL=4095。
TMS320F280049C 学习笔记15 DAC (https://mushiming.com/)  第2张
TMS320F280049C 学习笔记15 DAC (https://mushiming.com/)  第3张

例程

官方提供了2个例程,位置在C:\ti\c2000\C2000Ware_3_01_00_00\driverlib\f28004x\examples\dac
在例程中使用了外部参考,LaunchPad需要从3.3V外接一根线。感觉不太实用。

这里根据自己的习惯,使用内部电压参考,并将输出范围设置为码值0-4095对应0-3.3V。也就是按照上表的红色箭头配置。

#include "F28x_Project.h"
#include "device.h"
#include "math.h"

// DA输出值
int16_t dacVal = 2048;

void configureDAC(void);

void main(void)
{ 
   
    // 初始化时钟和外设 Initialize device clock and peripherals
    Device_init();
    // InitSysCtrl(); //本工程不能使用寄存器的InitSysCtrl();函数初始化。

    /*//库函数版配置 // 初始化GPIO并设置为推挽输出 Initialize GPIO and configure the GPIO pin as a push-pull output Device_initGPIO(); GPIO_setPadConfig(DEVICE_GPIO_PIN_LED1, GPIO_PIN_TYPE_STD); // Push-pull output or floating input GPIO_setDirectionMode(DEVICE_GPIO_PIN_LED1, GPIO_DIR_MODE_OUT); */
    InitGpio();  //寄存器指令配置
// GPIO_SetupPinMux(DEVICE_GPIO_PIN_LED1, GPIO_MUX_CPU1, 0);
// GPIO_SetupPinOptions(DEVICE_GPIO_PIN_LED1, GPIO_OUTPUT, GPIO_PUSHPULL);


    // 初始化PIE并清空PIE寄存器,关闭CPU中断
    // Initialize PIE and clear PIE registers. Disables CPU interrupts.
    Interrupt_initModule();

    // 初始化PIE向量表
    // Initialize the PIE vector table with pointers to the shell Interrupt
    // Service Routines (ISR).
    Interrupt_initVectorTable();

    configureDAC();

    // Enable Global Interrupt (INTM) and realtime interrupt (DBGM)
    EINT;
    ERTM;

    for(;;)
    { 
   
        dacVal=dacVal<0?0:dacVal;
        dacVal=dacVal>4095?4095:dacVal;
        DAC_setShadowValue(DACA_BASE, dacVal);
        DEVICE_DELAY_US(2);
    }
}

//
// 配置DACA,使用内部1.65V基准,设置输出范围为0-3.3V
//
void configureDAC(void)
{ 
   
    // 选择内部1.65V参考
    EALLOW;
    AnalogSubsysRegs.ANAREFCTL.bit.ANAREFA2P5SEL = 0;

    // 使能内部参考
    AnalogSubsysRegs.ANAREFCTL.bit.ANAREFASEL = 0;
    EDIS;
    DAC_setReferenceVoltage(DACA_BASE, DAC_REF_ADC_VREFHI);

    // DAC输出增益2倍
    DAC_setGainMode(DACA_BASE, DAC_GAIN_TWO);

    // 使能DAC输出
    DAC_enableOutput(DACA_BASE);

    // 设置DAC影子寄存器输出0
    DAC_setShadowValue(DACA_BASE, 0);

    // 延迟,等待DAC上电启动
    DEVICE_DELAY_US(10);
}

参考文献

  1. TMS320F28004x Microcontrollers Technical Reference Manual
  2. DSP TMS320F280049之数模转换器DAC(寄存器版)
THE END

发表回复