大家好、社区、
从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 的值应该是多少?
很抱歉、解释得太长。
此致、