This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] TMS320F28377D:TMS320F28377D-PTP 引脚

Guru**** 2348500 points
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/933912/tms320f28377d-tms320f28377d-ptp-pin

器件型号:TMS320F28377D

大家好、社区、  

从377D 的 DAC 输出获取数据时遇到问题。  在我的 DSP 板中、有三个运算放大器电路。 DACOUTA (ADCINA0)、DACOUTB 和 DACOUTC 连接到这些运算放大器电路的输入端。 ADC0是运算放大器电路的输出。  以下是其中一个电路原理图:  

在 CCS 项目中、调用 DAC 和 SetDAC 的代码如下:

void Calldac (int DACchannel、float val、float maxRange、int direction)
{
unsigned int res = 0;

if (direction = 0)
{
res =(unsigned int)((val/maxRange)* 4095.0);
}
else
{
val =(val + maxRange)/2;
res =(unsigned int)(val/maxRange)(val =


0)(res = 0);if 4095 (res = 0);res = 0);if val (val = 0)

DACsel[DACchannel]->DACVALS.bit.DACVALS =分辨率
;} 

void SetDAC (void)
{
EALLOW;
//基准电压设置与 ADC 基准电压(VREF)相同
DACsel[DACDACA]->DACCTL.bit.DACREFSEL = reference_VREF;
DACsel[DACB]->DACVACTL.bit.DACREFSEL = reference_DACDACCESS[DACDA.UTEN






= 0;DACVACOSELE.UTEN = DACDA.UTEN = 0;DACVACOREDA.REF_EN.ADC.DACC.0>DACREF_ADC.DACC.DACC.DACC.DDA.EN.ADC= DACEN.UTEN = DACEN.UTEN = DACEN.UTEN = DACEN.REF_REF_REF_REF_REF_REF_ADACC.0;DACEN.ADACC.DACC.DACC.0<bit.ADCCES.ADAC.ADACC.D0;DACEN.ADAC.ADCCES.ADC=REF_ADAC.ADAC.ADAC.ADAC.ADC=ADC=ADC.D0


DACSEL[DACC]->DACVALS.bit.DACVALS = 0;
//等待打开 DAC 模块
DELAY_US (10);
}

在标头函数中、DAC 通道定义如下。

extern volatile struct dac_regs * DACsel[4];

#define DACA 1.
#define DACB 2.
#define DACC 3.

#define reference_VDAC 0
#define reference_VREF 1

extern void SetADC (void);

extern void SetDAC (void);
extern void CALLDAC (int DACchannel、float val、float maxRange、int direction);

在 main 函数中、我将 SetDAC 放入 main (void)函数中、如下所示。 (我没有在这里列出所有代码以作明确解释)。

int main (void)
{

DINT;
InitSysCtrl();
InitGpio();
InitSWGpio();
InitEPwmGpio();
InitEQepGpio();
InitSCIgpio();
InitRelayGpio();
InitCANGpio(); 
SetADC();
SetDAC();
SetPWM();
SetRelay();
SetCAN();
InitPieCtrl(); 

…………

我将 CallDAC 函数放入 ePWM 接口函数中,如下所示:  

中断空 EPWM1_ISR (空)

CallDAC(daca,ind_val1.inverterVDi,3,1);

ind_val1.inverterVDi 是一个直流变量、典型值为30伏直流电压、使用三相电压测量值计算得出。 这些值取自 ADCBRESULT 寄存器。  

我将示波器+ PROB 连接到 DACA 输出(上图中的 ADC0)、并将 PROB 接地到直流接地 (上图中的接地)。 当我运行 DSP 板时、控制器和系统运行良好、但我在 示波器中看不到 ind_val1.inverterVDi 值。 我只看到零点偏移附近的噪声。

您是否有任何疑问? 
maxRange 的值应该是多少?

很抱歉、解释得太长。 

此致、
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    我知道您有两个问题:

    您看不到运算放大器输出端的预期输出电压。

    2.您不确定公式中的 maxRange 值应该是多少。

    关于 Q1、我首先要问您是否在 ADCINAx 引脚上看到电压? 看起来您使用 ADC 基准作为 DAC 基准。 但是、我在您的写操作中没有看到什么是 ADC 基准电压。 ADCINAx 引脚上的电压将由您写入 DACVALS 寄存器的值和 ADC 基准电压决定。

    关于 Q2、实际上、这正是您希望 DAC 输出的最大值表示的值。 话虽如此,如果 您说 invterVDi 通常为30,那么拨打 CallDAC(daca、ind_val1.inverterVDi、3、1)对我来说没有太大意义。 这将为您提供一个30/1*4095=122、850、这不是一个写入 DACVALS 寄存器的有效数字(该值应始终小于4095)。

    如果我正确理解了您的问题、如果您还有其他问题、请告诉我。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Gus Martinez:

    非常感谢您的回答。 我的同事解决了这个问题。 你是对的。  DSP 板中的 DAC 模块输出范围介于0-5伏之间。 因此、我的最大值将设置为5伏。 因此、我认为我需要一个电压放大器电路来查看示波器上的实际值。