TI论坛
直播中

贺服窍

8年用户 1078经验值
私信 关注
[问答]

dsp2812外接tlv5620DA参考电压与实际不符是怎么回事?


  • tlv5620的硬件接线如图,参考电压(2,3,4,5)和VDD接的是dsp的3.3V端,(6,7)接到dsp2812的SPISIMO口和SPICLK口,但实际测得参考电压只有2.2V,求教

    以下是程序:
    #define SetLOAD GpioDataRegs.GPADAT.bit.GPIOA15=1;   //将LOAD置高
    #define ClrLOAD GpioDataRegs.GPADAT.bit.GPIOA15=0;   //将LOAD置低
    int QQ=47,QA=0;
    void main(void)
    {
       InitSysCtrl();
       DINT;
       IER = 0x0000;
          IFR = 0x0000;
       InitPieCtrl();
       InitPieVectTable();
       InitGpio();
       spi_init();
       EINT;
       ERTM;
       SetLOAD;
            while(1)
            {

                  
                WriteDAC(0,QA,QQ);     //0.4V

                           WriteDAC(1,QA,QQ);   //0.8V

                           WriteDAC(2,QA,QQ);   //1.2V

                           WriteDAC(3,QA,QQ);   //1.6V
                     
            }   
    }

    //===========================================================================
    // No more.
    //===========================================================================
    void InitGpio(void)
    {

         EALLOW;
         GpioMuxRegs.GPAMUX.all=0x0000;
         GpioMuxRegs.GPADIR.all=0xFFFF;            // upper byte as output/low byte as input
         GpioMuxRegs.GPAQUAL.all=0x0000;        // Input qualifier disabled

    // Set GPIO B port pins, configured as EVB signals
    // Input Qualifier =0, none
    // Set bits to 1 to configure peripherals signals on the pins

         GpioMuxRegs.GPFMUX.bit.***=1;
         GpioMuxRegs.GPFMUX.bit.SPISIMOA_GPIOF0=1;

    }


    void WriteDAC(unsigned char add,unsigned char rng,unsigned char vol)
    {
        unsigned short int data;
        data=0x0000;
         data = ((add<<14) | (rng<<13) | (vol<<5));
         //注意这里的有效数据是11位,SPI初始化中也进行了定义

       while(SpiaRegs.SPISTS.bit.BUFFULL_FLAG ==1);            //判断SPI的发送缓冲区是否是空的,等于0可写数据

        SpiaRegs.SPITXBUF = data;  //把发送的数据写如SPI发送缓冲区

        while( SpiaRegs.SPISTS.bit.BUFFULL_FLAG==1);        //当发送缓冲区出现满标志位时,开始琐存数据

        delay(1500);//同通过一负跳变琐存要发送的数据,看TLV5620数据手册即可得知
        ClrLOAD;//给个下降沿更新DAC输出

        delay(150);
        SetLOAD;//LOAD置1重新输入数据

        delay(1500);
    }

    void delay(unsigned int t)
    {

        while(t>0)
            t--;
    }
    //初始化SPI函数
    void spi_init()
    {
        SpiaRegs.***.all =0x0a;///进入初始状态,数据在上升沿输出,自测禁止,11位数据模式

        SpiaRegs.***.all =0x0006; // 使能主机模式,正常相位,使能主机发送,禁止接收
                                    //溢出中断,禁止SPI中断;

        SpiaRegs.SPIBRR =0x0031;    //SPI波特率=37.5M/50   =0.75MHZ;
        SpiaRegs.***.all =0x8a; //退出初始状态;
        SpiaRegs.SPIPRI.bit.FREE = 1;  // 自由运行
    }

回帖(2)

蔡表胤

2024-12-14 11:34:31

  • tlv5620的硬件接线如图,参考电压(2,3,4,5)和VDD接的是dsp的3.3V端,(6,7)接到dsp2812的SPISIMO口和SPICLK口,但实际测得参考电压只有2.2V,求教

    以下是程序:
    #define SetLOAD GpioDataRegs.GPADAT.bit.GPIOA15=1;   //将LOAD置高
    #define ClrLOAD GpioDataRegs.GPADAT.bit.GPIOA15=0;   //将LOAD置低
    int QQ=47,QA=0;
    void main(void)
    {
       InitSysCtrl();
       DINT;
       IER = 0x0000;
          IFR = 0x0000;
       InitPieCtrl();
       InitPieVectTable();
       InitGpio();
       spi_init();
       EINT;
       ERTM;
       SetLOAD;
            while(1)
            {

                  
                WriteDAC(0,QA,QQ);     //0.4V

                           WriteDAC(1,QA,QQ);   //0.8V

                           WriteDAC(2,QA,QQ);   //1.2V

                           WriteDAC(3,QA,QQ);   //1.6V
                     
            }   
    }

    //===========================================================================
    // No more.
    //===========================================================================
    void InitGpio(void)
    {

         EALLOW;
         GpioMuxRegs.GPAMUX.all=0x0000;
         GpioMuxRegs.GPADIR.all=0xFFFF;            // upper byte as output/low byte as input
         GpioMuxRegs.GPAQUAL.all=0x0000;        // Input qualifier disabled

    // Set GPIO B port pins, configured as EVB signals
    // Input Qualifier =0, none
    // Set bits to 1 to configure peripherals signals on the pins

         GpioMuxRegs.GPFMUX.bit.***=1;
         GpioMuxRegs.GPFMUX.bit.SPISIMOA_GPIOF0=1;

    }


    void WriteDAC(unsigned char add,unsigned char rng,unsigned char vol)
    {
        unsigned short int data;
        data=0x0000;
         data = ((add<<14) | (rng<<13) | (vol<<5));
         //注意这里的有效数据是11位,SPI初始化中也进行了定义

       while(SpiaRegs.SPISTS.bit.BUFFULL_FLAG ==1);            //判断SPI的发送缓冲区是否是空的,等于0可写数据

        SpiaRegs.SPITXBUF = data;  //把发送的数据写如SPI发送缓冲区

        while( SpiaRegs.SPISTS.bit.BUFFULL_FLAG==1);        //当发送缓冲区出现满标志位时,开始琐存数据

        delay(1500);//同通过一负跳变琐存要发送的数据,看TLV5620数据手册即可得知
        ClrLOAD;//给个下降沿更新DAC输出

        delay(150);
        SetLOAD;//LOAD置1重新输入数据

        delay(1500);
    }

    void delay(unsigned int t)
    {

        while(t>0)
            t--;
    }
    //初始化SPI函数
    void spi_init()
    {
        SpiaRegs.***.all =0x0a;///进入初始状态,数据在上升沿输出,自测禁止,11位数据模式

        SpiaRegs.***.all =0x0006; // 使能主机模式,正常相位,使能主机发送,禁止接收
                                    //溢出中断,禁止SPI中断;

        SpiaRegs.SPIBRR =0x0031;    //SPI波特率=37.5M/50   =0.75MHZ;
        SpiaRegs.***.all =0x8a; //退出初始状态;
        SpiaRegs.SPIPRI.bit.FREE = 1;  // 自由运行
    }
举报

王丽

2024-12-14 17:23:52
根据您提供的信息,您在使用DSP2812外接TLV5620DA时遇到了参考电压与实际不符的问题。以下是一些可能的原因和解决方案:

1. 硬件接线问题:请检查TLV5620DA的硬件接线是否正确。确保参考电压(2,3,4,5)和VDD接的是DSP的3.3V端,(6,7)接到DSP2812的SPISIMO口和SPICLK口。如果接线错误,可能会导致参考电压与实际不符。

2. 电源问题:请检查您的电源是否稳定,以及是否有足够的电流供应给TLV5620DA。如果电源不稳定或电流不足,可能会导致参考电压与实际不符。

3. 程序问题:请检查您的程序是否正确配置了TLV5620DA的寄存器。错误的寄存器配置可能会导致参考电压与实际不符。您提供的程序片段中,SetLOAD和ClrLOAD宏定义用于控制LOAD引脚,但并未看到具体的TLV5620DA寄存器配置代码。请确保您已经正确配置了TLV5620DA的寄存器。

4. TLV5620DA芯片问题:如果以上原因都排除了,那么可能是TLV5620DA芯片本身存在问题。您可以尝试更换一个TLV5620DA芯片,看看问题是否得到解决。

5. 测量误差:请确保您使用的测量工具(如万用表)是准确的,并且测量方法正确。测量误差也可能导致参考电压与实际不符。

综上所述,您需要检查硬件接线、电源、程序配置以及TLV5620DA芯片本身,以确定导致参考电压与实际不符的原因,并采取相应的解决方案。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分