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.

[参考译文] TMS320F28069:正弦波到 ADCinB1、但 AdcResutRegs.ADCRESULT9图不是正弦波?

Guru**** 2589300 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/666035/tms320f28069-sine-wave-to-adcinb1-but-adcresutregs-adcresult9-graph-is-not-sine-wave

器件型号:TMS320F28069

在我的电路板中、我将为 ADCINB1提供50Hz 3伏正弦波、但当我绘制 ADCRESULT9的图形时、图形中会显示。 问题是什么???? 我的 ISR 频率为50kHz。  

/*
=== main.c ======
*/

#include 

#include 
#include 

#include 

#include 

#include "DSP28x_Project.h"
#include "Solar_F.h"
#include "IQmathLib.h"


#pragma DATA_SECTION (sine_table、"IQmathTables");
_iq30 sine_table[512];

SPLL_13.14 note_F spll1;
SPLL_1ph_F_ISR_COFFE=#f_0*



void








=#fattrature=#f_void;#f_inu= 100_intradf_f_f_ine_ine_pru= 0;void =#fu=#f_inu=#f_fue_tog_0* void =#f_inuel_f_inue_prue_prue_prue_pru=#f_prue_


main ====
*/
int main()
{

//--------------------------------------

InitSysCtrl();

initadC();

IER = 0x0000;
IFR = 0x0000;


EALLOW;
GpioCtrlRegs.GPAMUX1.bit.GPIO0=1;
GpioCtrlRegs.GPAPUD.bit.GPIO0 = 0;
EDIS;

EPwm1Regs.TBPRD = 2250;//周期= 2´600 TBCLK 计数// 45MHz frekanslı 600 defa sayıyor
EPwm1Regs.CMPA.half.CMPA =1125;
// EPwm1Regs.CMPB = 7200;//比较 B = 500 TBCLK 计数
EPwm1Regs.TBPHS.Half.TBPHS = 0x0000;//将相位寄存器设置为零
EPwm1Regs.TBCTR = 0;//清除 TB 计数器
EPwm1Regs.TBCTL.bit.CTRMODE = TB_COUNT_UPDOWN;//对称
EPwm1Regs.TBCTL.bit.PHSEN = TB_DISABLE;//相位加载被禁用
EPwm1Regs.TBCTL.bit.PRDLD = TB_SHADOW;
EPwm1Regs.TBCTL.bit.SYNCOSEL = TB_SYNC_DISABLE;
EPwm1Regs.TBCTL.bit.HSPCLKDIV = TB_DIV1;// TBCLK = SYSCLKOUT
EPwm1Regs.TBCTL.bit.CLKDIV = TB_DIV1;
EPwm1Regs.CMPCTL.bit.SHDWAMODE = CC_SHADOW;
EPwm1Regs.CMPCTL.bit.SHDWBMODE = CC_SHADOW;
EPwm1Regs.CMPCTL.bit.LOADAMODE = CC_CTR_ZERO;// CTR 上的负载=零
EPwm1Regs.CMPCTL.bit.LOADBMODE = CC_CTR_ZERO;// CTR 上的负载=零
// EPwm1Regs.AQCTLA.bit.ZRO = AQ_SET;
EPwm1Regs.AQCTLA.bit.CAU = AQ_CLEAR;
EPwm1Regs.AQCTLA.bit.CAD = AQ_SET;
// EPwm1Regs.AQCTLB.bit.ZRO = AQ_SET;
// EPwm1Regs.AQCTLB.bit.CBU = AQ_CLEAR;
// EPwm1Regs.AQCTLB.bit.CBD = AQ_SET;

//EPwm1Regs.AQCTLA.bit.CAU = AQ_SET;
//EPwm1Regs.AQCTLA.bit.CAD = AQ_CLEAR;
// EPwm1Regs.AQCTLB.bit.CBU = AQ_SET;
// EPwm1Regs.AQCTLB.bit.CBD = AQ_CLEAR;


/*
EPwm1Regs.TBCTL.ALL = 0;
EPwm1Regs.TBCTL.bit.CLKDIV = 0;
EPwm1Regs.TBCTL.bit.HSPCLKDIV = 0;
EPwm1Regs.TBCTL.bit.CTRMODE = 2;
EPwm1Regs.AQCTLA.ALL = 0x0006;
EPwm1Regs.TBPRD = 7200;
EPwm1Regs.CMPA.half.CMPA = 3600;
EPwm1Regs.AQCTLA.ALL = 0x0060;
EPwm1Regs.ETSEL.ALL = 0;
EPwm1Regs.ETSEL.bit.INTEN = 1;
EPwm1Regs.ETSEL.bit.INTSEL = 5;
EPwm1Regs.ETPS.bit.INTPRD = 1;

*


SPLL_1ph_F_init (grid_FREQ、(float)(1.0/ISR_FREQUENCY))、&spll1);
SPLL_1ph_F_NOTCH_COEFF_UPDATE (((float)(1.0/ISR_FREQUENCY))、(float)(2*PI*GRIT_FREQ*2)、(float) 0.00001、(float) 0.1、&spll1);

//--------------------------------------


BIOS_start();/*不返回*/
return (0);
}


void adcTimerFxn (void)
{

AdcRegs.ADCSOCFRC1.bit.SOC9=1;
while (AdcRegs.ADCINTFlG.bit.ADCINT1 = 0){}
AdcRegs.ADCINTFLGCLR.bit.ADCINT1 = 1;

spll1.ac_input =((float32) AdcResult.ADCRESULT9-1862)/(float32) 1862;// SPLL 调用
SPLL_1ph_F_MACRO (spll1);
temp =(((spll1.sin [1])+1.0)/2)*EPwm1Regs.TBPRD;
EPwm1Regs.CMPA.half.CMPA =EPwm1Regs.TBPRD -_IQsat (temp、EPwm1Regs.TBPRD、0);

}


void initadC()
{

EALLOW;


SysCtrlRegs.PCLKCR0.bit.ADCENCLK = 1;
(*Device_cal)();

AdcRegs.ADCCTL1.bit.ADCBGPWD=1; //电源 ADC BG
AdcRegs.ADCCTL1.bit.ADCREFPWD=1; //电源基准
AdcRegs.ADCCTL1.bit.ADCPWDN = 1; //功率 ADC
AdcRegs.ADCCTL1.bit.ADCENABLE = 1; //启用 ADC
AdcRegs.ADCCTL1.bit.ADCREFSEL = 0; //选择内部 BG
AdcRegs.ADCCTL2.bit.CLKDIV2EN = 1;
AdcRegs.ADCCTL2.bit.ADCNONOVERLAP = 1;//启用非重叠模式
AdcRegs.ADCCTL1.bit.INTPULSEPOS = 1;// ADCINT1在 AdcResults 锁存后跳闸
AdcRegs.INTSEL1N2.bit.INT1E = 1;//启用 ADCINT1
AdcRegs.INTSEL1N2.bit.INT1CONT = 0;//禁用 ADCINT1连续模式
AdcRegs.INTSEL1N2.bit.INT1SEL = 9;//设置 EOC1以触发 ADCINT1触发
AdcRegs.SOCPRICTL.bit.OneShot = 1;


AdcRegs.ADCSOC0CTL.bit.CHSEL = 0x0;//将 SOC0通道选择设置为 ADCINA0
AdcRegs.ADCSOC1CTL.bit.CHSEL = 0x1;
AdcRegs.ADCSOC2CTL.bit.CHSEL = 0x2;
AdcRegs.ADCSOC3CTL.bit.CHSEL = 0x3;
AdcRegs.ADCSOC4CTL.bit.CHSEL = 0x4;
AdcRegs.ADCSOC5CTL.bit.CHSEL = 0x5;
AdcRegs.ADCSOC6CTL.bit.CHSEL = 0x6;
AdcRegs.ADCSOC7CTL.bit.CHSEL = 0x7;
AdcRegs.ADCSOC8CTL.bit.CHSEL = 0x8;
AdcRegs.ADCSOC9CTL.bit.CHSEL = 0x9;
AdcRegs.ADCSOC10CTL.bit.CHSEL = 0xA;
AdcRegs.ADCSOC11CTL.bit.CHSEL = 0xB;
AdcRegs.ADCSOC12CTL.bit.CHSEL = 0xC;
AdcRegs.ADCSOC13CTL.bit.CHSEL = 0xD;
AdcRegs.ADCSOC14CTL.bit.CHSEL = 0xE;
AdcRegs.ADCSOC15CTL.bit.CHSEL = 0xF;

AdcRegs.ADCSOC0CTL.bit.TRIGSEL = 0;//设置 SOC0在 EPWM1A 上启动触发器,因为轮询 SOC0首先转换 SOC
AdcRegs.ADCSOC1CTL.bit.TRIGSEL = 0;//设置 EPWM1A 上的 SOC1启动触发器,因为 SOC0先转换,然后 SOC1
AdcRegs.ADCSOC2CTL.bit.TRIGSEL = 0;//设置 SOC0在 EPWM1A 上启动触发器,因为轮询 SOC0首先转换 SOC
AdcRegs.ADCSOC3CTL.bit.TRIGSEL = 0;//设置 EPWM1A 上的 SOC1启动触发器,因为 SOC0先转换,然后 SOC1
AdcRegs.ADCSOC4CTL.bit.TRIGSEL = 0;//设置 SOC0在 EPWM1A 上启动触发器,因为轮询 SOC0首先转换 SOC
AdcRegs.ADCSOC5CTL.bit.TRIGSEL = 0;//设置 EPWM1A 上的 SOC1启动触发器,因为 SOC0先转换,然后 SOC1
AdcRegs.ADCSOC6CTL.bit.TRIGSEL = 0;//设置 SOC0在 EPWM1A 上启动触发器,因为轮询 SOC0首先转换 SOC
AdcRegs.ADCSOC7CTL.bit.TRIGSEL = 0;//设置 EPWM1A 上的 SOC1启动触发器,因为 SOC0先转换,然后 SOC1
AdcRegs.ADCSOC8CTL.bit.TRIGSEL = 0;//设置 SOC0在 EPWM1A 上启动触发器,因为轮询 SOC0首先转换 SOC
AdcRegs.ADCSOC9CTL.bit.TRIGSEL = 0;//设置 EPWM1A 上的 SOC1启动触发器,因为 SOC0先转换,然后 SOC1
AdcRegs.ADCSOC10CTL.bit.TRIGSEL = 0;//设置 SOC0在 EPWM1A 上启动触发器,因为轮询 SOC0首先转换 SOC
AdcRegs.ADCSOC11CTL.bit.TRIGSEL = 0;//设置 EPWM1A 上的 SOC1启动触发器,因为 SOC0先转换,然后 SOC1
AdcRegs.ADCSOC12CTL.bit.TRIGSEL = 0;//设置 SOC0在 EPWM1A 上启动触发器,因为轮询 SOC0首先转换 SOC
AdcRegs.ADCSOC13CTL.bit.TRIGSEL = 0;//设置 EPWM1A 上的 SOC1启动触发器,因为 SOC0先转换,然后 SOC1
AdcRegs.ADCSOC14CTL.bit.TRIGSEL = 0;//设置 SOC0在 EPWM1A 上启动触发器,因为轮询 SOC0首先转换 SOC
AdcRegs.ADCSOC15CTL.bit.TRIGSEL = 0;//设置 EPWM1A 上的 SOC1启动触发器,因为 SOC0先转换,然后 SOC1

AdcRegs.ADCSOC0CTL.bit.ACQPS = 6;//将 SOC0 S/H 窗口设置为7个 ADC 时钟周期(6个 ACQPS 加1)
AdcRegs.ADCSOC1CTL.bit.ACQPS = 6;//将 SOC1 S/H 窗口设置为7个 ADC 时钟周期(6个 ACQPS 加1)
AdcRegs.ADCSOC2CTL.bit.ACQPS = 6;//将 SOC0 S/H 窗口设置为7个 ADC 时钟周期(6个 ACQPS 加1)
AdcRegs.ADCSOC3CTL.bit.ACQPS = 6;//将 SOC1 S/H 窗口设置为7个 ADC 时钟周期(6个 ACQPS 加1)
AdcRegs.ADCSOC4CTL.bit.ACQPS = 6;//将 SOC0 S/H 窗口设置为7个 ADC 时钟周期(6个 ACQPS 加1)
AdcRegs.ADCSOC5CTL.bit.ACQPS = 6;//将 SOC1 S/H 窗口设置为7个 ADC 时钟周期(6个 ACQPS 加1)
AdcRegs.ADCSOC6CTL.bit.ACQPS = 6;//将 SOC0 S/H 窗口设置为7个 ADC 时钟周期(6个 ACQPS 加1)
AdcRegs.ADCSOC7CTL.bit.ACQPS = 6;//将 SOC1 S/H 窗口设置为7个 ADC 时钟周期(6个 ACQPS 加1)
AdcRegs.ADCSOC8CTL.bit.ACQPS = 6;//将 SOC0 S/H 窗口设置为7个 ADC 时钟周期(6个 ACQPS 加1)
AdcRegs.ADCSOC9CTL.bit.ACQPS = 6;//将 SOC1 S/H 窗口设置为7个 ADC 时钟周期(6个 ACQPS 加1)
AdcRegs.ADCSOC10CTL.bit.ACQPS = 6;//将 SOC0 S/H 窗口设置为7个 ADC 时钟周期(6个 ACQPS 加1)
AdcRegs.ADCSOC11CTL.bit.ACQPS = 6;//将 SOC1 S/H 窗口设置为7个 ADC 时钟周期(6个 ACQPS 加1)
AdcRegs.ADCSOC12CTL.bit.ACQPS = 6;//将 SOC0 S/H 窗口设置为7个 ADC 时钟周期(6个 ACQPS 加1)
AdcRegs.ADCSOC13CTL.bit.ACQPS = 6;//将 SOC1 S/H 窗口设置为7个 ADC 时钟周期(6个 ACQPS 加1)
AdcRegs.ADCSOC14CTL.bit.ACQPS = 6;//将 SOC0 S/H 窗口设置为7个 ADC 时钟周期(6个 ACQPS 加1)
AdcRegs.ADCSOC15CTL.bit.ACQPS = 6;//将 SOC1 S/H 窗口设置为7个 ADC 时钟周期(6个 ACQPS 加1)

IER |= M_INT1;//启用 CPU 中断1


EDIS;

}/*


void adcHwiISR()
{

spll1.ac_input =((float32) AdcResult.ADCRESULT9-1900)/(float32) 1900;// SPLL 调用
SPLL_1ph_F_FUNC (&spll1);
temp =(((spll1.sin [1])+1.0)/2)*EPwm1Regs.TBPRD;
EPwm1Regs.CMPA.half.CMPA =EPwm1Regs.TBPRD -_IQsat (temp、EPwm1Regs.TBPRD、0);

// AdcRegs.ADCINTFLGCLR.bit.ADCINT1 = 1;


//清除 INT SEQ1位

//静态无符号 int 索引= 0;
EPwm1Regs.CMPA.half.CMPA = EPwm1Regs.TBPRD -_IQsat ((((( float32) sine_table[索引]/1073741824.0+0.9999)/2)* EPwm1Regs.TBPRD)、EPwm1Regs.TBPRD、0);
如果(index++>511)索引=0;
AdcRegs.ADCINTFLGCLR.bit.ADCINT1 = 1; //清除 INT SEQ1位

*//*--------------------------------------------------------




ÇALIŞAN KOD


静态无符号 int 索引= 0;

spll1.ac_input =((float32)(sine_table[索引]/1073741824.0);// SPLL 调用
SPLL_1ph_F_FUNC (&spll1);
temp =(((spll1.sin [1])+1.0)/2)*EPwm1Regs.TBPRD;
EPwm1Regs.CMPA.half.CMPA =EPwm1Regs.TBPRD -_IQsat (temp、EPwm1Regs.TBPRD、0);

如果(index++>511)索引=0;

AdcRegs.ADCINTFLGCLR.bit.ADCINT1 = 1; //清除 INT SEQ1位


--------------------------------------------------
*/


*
spll1.ac_input =((float32) AdcResult.ADCRESULT9-1870)/(float32) 1870;// SPLL 调用
SPLL_1ph_F_FUNC (&spll1);
temp =(((spll1.sin [1])+1.0)/2)*EPwm1Regs.TBPRD;
EPwm1Regs.CMPA.half.CMPA =EPwm1Regs.TBPRD -_IQsat (temp、EPwm1Regs.TBPRD、0);



AdcRegs.ADCINTFLGCLR.bit.ADCINT1 = 1; //清除 INT SEQ1位
*//*



spll1.ac_input =((float32) AdcResult.ADCRESULT9-1870)/(float32) 1870;// SPLL 调用
SPLL_1ph_F_FUNC (&spll1);
temp =((spll1.sin [1]+0.9999)/2)*EPwm1Regs.TBPRD;
EPwm1Regs.CMPA.half.CMPA =EPwm1Regs.TBPRD -_IQsat (temp、EPwm1Regs.TBPRD、0);

AdcRegs.ADCINTFLGCLR.bit.ADCINT1 = 1; //清除 INT SEQ1位


*//

*
}
*/

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

    因此您无法直接绘制结果值。 您必须将一个线周期的结果值累加到缓冲区中、然后绘制该缓冲区。

    此致、
    Gautam